目前我有一个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)。