OpenVPN客户端无法连接到通过另一个OpenVPN B路由的地址

好吧,我有一个OpenVPN服务器A,它承载范围10.8.0.0/24和一个OpenVPN服务器B,主机10.7.0.0/24。 服务器A也是服务器B的客户端。

这是两台服务器的tun适配器的configuration。

OpenVPN服务器

inet 10.8.0.1 peer 10.8.0.2/32 scope global tun0 inet 10.7.0.6 peer 10.7.0.5/32 scope global tun1 

OpenVPN服务器B

 inet 10.7.0.1 peer 10.7.0.2/32 scope global tun0 

OpenVPN A的客户端通过服务器A获取所有的stream量,并通过其WAN接口输出。 但是,一个IP范围192.168.0.0/24只能通过服务器B的VPN到达。我已经build立了一条通过所有192.168.0.0/24通过连接服务器A到服务器B的tun接口的路由

 ip route add 192.168.0.0/24 dev tun1 

我可以在服务器A上ping 192.168.0.0/24, 但是当我在服务器A的OpenVPN客户端上时,我无法ping或达不到该范围。我可以ping通tun地址10.7.0.6的IP,但不能ping 192.168.0.0/ 24。 谁能解释一下为什么会发生这种情况?

如图所示,我构build了一个虚拟networking和一系列虚拟机,使这个问题更容易可视化。

虚拟网络serverfault问题720423

预期转发数据包的每个系统都必须启用ipv4转发:

 # sysctl net.ipv4.ip_forward=1 

我的testingnetworking中openvpn的configuration被简化了。 我使用的openvpn没有身份validation/encryption,从命令行运行,以提供一个简单的隧道“openvpn-a”和“openvpn-b”之间的机器。

OpenVPN的-A:

 root@openvpn-a# openvpn --remote openvpn-b --dev tun1 

OpenVPN的-B:

 root@openvpn-b# openvpn --remote openvpn-a --dev tun1 

我遇到了你描述的确切问题,试图从客户端-a(192.168.10.10)ping到openvpn-b(192.168.20.1)。

这是由openvpn-a转发的数据包产生的,并且使用openvpn-b没有路由的源地址到达openvpn-b。

这个问题的解决scheme可以通过几种方式来解决……一个是通过openvpn-a的隧道设备在openvpn-b上添加一个到anetworking的路由:

OpenVPN的-B:

 root@openvpn-b# ip route add 192.168.10.0/24 via 10.8.0.1 

另一种方法是将openvpn-b的默认路由configuration为通过openvpn-a的隧道设备:

openvpnb-B:

 root@openvpn-b# ip route add default via 10.8.0.1 

另一个是在openvpn-a上的隧道设备上configurationNAT:

OpenVPN的-A:

 root@openvpn-a# iptables -t nat -A POSTROUTING -o tun1 -j MASQUERADE 

在诊断这个问题时,Wireshark和/或tcpdump可以起到很好的作用。 从openvpn-b的隧道设备上可以看出,当一个数据包到达并且没有到源地址networking的路由时:

 root@openvpn-b# tcpdump -n -i tun1 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on tun1, link-type RAW (Raw IP), capture size 65535 bytes 15:45:10.973251 IP 192.168.10.10 > 192.168.20.1: ICMP echo request, id 2550, seq 1, length 64 ^C 1 packet captured 1 packet received by filter 0 packets dropped by kernel