对于子网中其余的主机,Openvpn服务器不会从tun0到eth0转发ping通信

目前我有一个openvpn服务器和客户端设置与rounting(不桥接)

当我尝试从我的客户端ping到服务器IP地址,它工作正常。 但是当我尝试ping openvpn服务器后面的其他子网主机时,它不起作用。 有人可以发现我的设置显然是错的东西。 (openvpn服务器是10.10.145.181,主机是10.10.146.8 ip地址,它们在两个独立的子网中,我可以直接从10.10.145.181 ping 10.10.146.8到sshing中,只有当我通过VPN去的时候,不行。)

据我所知,ping通信使它在tun0接口上的VPN服务器,但是然后VPN服务器不通过eth0转发到适当的主机,因此ping通的主机没有看到任何stream量和数据包被丢弃。 但是,这可能是什么原因呢? 在openvpn中是否有一个设置将通信从tun0转发到eth0?

这是我观察到的…

在openvpn客户端主机上:

> ping 10.10.146.8 PING 10.10.146.8 (10.10.146.8) 56(84) bytes of data. <no further output> 

在openvpn服务器主机上:

 > sudo tcpdump -i tun0 'icmp[icmptype] = icmp-echo or icmp[icmptype] = icmp-echoreply' 00:34:32.624639 IP 10.10.0.6 > 10.10.146.8: ICMP echo request, id 1644, seq 1863, length 64 00:34:33.634564 IP 10.10.0.6 > 10.10.146.8: ICMP echo request, id 1644, seq 1864, length 64 00:34:34.640753 IP 10.10.0.6 > 10.10.146.8: ICMP echo request, id 1644, seq 1865, length 64 00:34:35.648922 IP 10.10.0.6 > 10.10.146.8: ICMP echo request, id 1644, seq 1866, length 64 00:34:36.659062 IP 10.10.0.6 > 10.10.146.8: ICMP echo request, id 1644, seq 1867, length 64 00:34:37.665402 IP 10.10.0.6 > 10.10.146.8: ICMP echo request, id 1644, seq 1868, length 64 00:34:38.673295 IP 10.10.0.6 > 10.10.146.8: ICMP echo request, id 1644, seq 1869, length 64 00:34:39.685336 IP 10.10.0.6 > 10.10.146.8: ICMP echo request, id 1644, seq 1870, length 64 00:34:40.687703 IP 10.10.0.6 > 10.10.146.8: ICMP echo request, id 1644, seq 1871, length 64 00:34:41.695766 IP 10.10.0.6 > 10.10.146.8: ICMP echo request, id 1644, seq 1872, length 64 > sudo tcpdump -i eth0 'icmp[icmptype] = icmp-echo or icmp[icmptype] = icmp-echoreply' tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes 04:14:48.583673 IP 10.10.0.6 > 10.10.146.8: ICMP echo request, id 4807, seq 442, length 64 04:14:49.592908 IP 10.10.0.6 > 10.10.146.8: ICMP echo request, id 4807, seq 443, length 64 04:14:50.600010 IP 10.10.0.6 > 10.10.146.8: ICMP echo request, id 4807, seq 444, length 64 04:14:51.616401 IP 10.10.0.6 > 10.10.146.8: ICMP echo request, id 4807, seq 445, length 64 

在我尝试ping的子网上的主机(10.10.146.8):

 > sudo tcpdump -i eth0 'icmp[icmptype] = icmp-echo or icmp[icmptype] = icmp-echoreply' sudo: unable to resolve host ip-10-10-146-8 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes <no further output> 

系统日志(openvpn日志)说:

 Jul 8 00:36:25 ip-10-10-145-181 ovpn-server[1513]: xyz/<ip_address>:35315 UDPv4 READ [133] from [AF_INET]<ip_address>:35315: P_DATA_V1 kid=0 DATA len=132 Jul 8 00:36:25 ip-10-10-145-181 ovpn-server[1513]: xyz/<ip_address>:35315 TUN WRITE [84] 

在openvpn客户端上的netstat:

 10.10.0.1 10.10.0.5 255.255.255.255 UGH 0 0 0 tun0 10.10.0.5 0.0.0.0 255.255.255.255 UH 0 0 0 tun0 10.10.146.0 10.10.0.5 255.255.255.0 UG 0 0 0 tun0 

在openvpn服务器上的netstat:

 10.10.0.0 10.10.0.2 255.255.255.0 UG 0 0 0 tun0 10.10.0.2 0.0.0.0 255.255.255.255 UH 0 0 0 tun0 10.10.145.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 

我有一个openvpn服务器configuration中的语句来路由来自客户端的stream量,我看到这种情况发生。

 push "route 10.10.146.0 255.255.255.0" 

Andrew的问题的其他信息

 > echo "sysctl -a | grep 'forwarding = 1'" | sudo -s error: permission denied on key 'vm.compact_memory' error: permission denied on key 'net.ipv4.route.flush' net.ipv4.conf.all.forwarding = 1 net.ipv4.conf.default.forwarding = 1 net.ipv4.conf.lo.forwarding = 1 net.ipv4.conf.eth0.forwarding = 1 net.ipv4.conf.tun0.forwarding = 1 error: permission denied on key 'net.ipv6.route.flush' > sudo iptables -L INPUT Chain INPUT (policy ACCEPT) target prot opt source destination > sudo iptables -L FORWARD Chain FORWARD (policy ACCEPT) target prot opt source destination 

更新:实际上现在我在服务器上看到eth0的stream量,但是stream量没有到达networking并被另一个主机接收。 我认为这是亚马逊VPC的问题。

好的,经过几个小时的调查,我发现了这个问题。

问题是转发设置。 转发到eth0端口的数据包在networking中没有正确的主机IP地址。 IP地址来自VPN。

 05:07:43.991961 IP 10.8.0.6 > 10.10.146.8: ICMP echo request, id 3497, seq 499, length 64 

您可以通过在Linux操作系统中启用等效的NAT(在路由器上)来切换:

 iptables -t nat -A POSTROUTING -o <eth0 or whatever else> -j MASQUERADE 

这为我解决了这个问题。

当局域网上的主机的默认网关不是OpenVPN服务器时,可能会发生此问题。 在这种情况下,主机需要VPN地址的静态路由,以便回复到VPN服务器而不是默认网关。

在局域网主机上,检查路由( route print的Windows, route -n的Linux, ǹetstat -rn的Mac)。