我已经阅读并尝试过很多指南,包括关于这方面的官方指南 ,但是我仍然无法得到这个工作。 这是设置:
(client1 LAN: 192.168.10.0/24 (OpenVPN client: client1, 192.168.10.101) | | v (NAT router, *dynamic* internet IP: 178.1.2.3) | | (...internet...) | | v (OpenVPN server, *static* IP: 1.2.3.4) <--- (...internet...) <--- (OpenVPN client, *dynamic* internet IP: client2, 88.1.2.3)
我想要的是client2能够访问所有client1的networking。 正如我在下面的EDIT#2中所说的,只有通过在局域网中的所有机器上设置静态路由才能正常工作(出于某种原因,NAT路由器上的静态路由不起作用,请参阅下面的编辑#2 )。
所有机器运行Ubuntu 16.04 OpenVPN 2.3.10。 NAT路由器是一个TP-Link MR200如果重要,client1运行一个KVM虚拟机服务器,OpenVPN服务器运行一个docker容器。
隧道在服务器client1和client2之间正常工作。 客户端2也可以ping 192.168.10.101,但不能ping 192.168.10.211,例如。 我有专门的证书,为每个客户端工作正常,我启用IP在OpenVpn服务器和客户端1转发。
这是服务器的configuration:
# cat /etc/openvpn/graphyc.conf server 10.8.0.0 255.255.255.0 verb 3 key server-key.pem ca ca.pem cert server-cert.pem dh dh.pem keepalive 10 120 persist-key persist-tun comp-lzo user nobody group nogroup # dir "clients" is chown'ed to nobody:nogroup client-config-dir clients client-to-client push "route 192.168.10.0 255.255.255.0" route 192.168.10.0 255.255.255.0 proto udp port 1194 dev tun
服务器上的/etc/openvpn/client1的内容(静态vpn租约)
# cat /etc/openvpn/clients/client1 ifconfig-push 10.8.0.101 10.8.0.5 iroute 192.168.10.0 255.255.255.0
client1configuration的内容
# cat /etc/openvpn/client1.conf client remote 1.2.3.4 1194 udp nobind dev tun comp-lzo yes verb 3 explicit-exit-notify 5 key /etc/openvpn/client1-key.pem cert /etc/openvpn/client1-cert.pem ca /etc/openvpn/ca.pem
client2configuration的内容
# cat /etc/openvpn/client2.conf client remote 1.2.3.4 1194 udp nobind dev tun comp-lzo yes verb 3 explicit-exit-notify 5 key /etc/openvpn/client2-key.pem cert /etc/openvpn/client2-cert.pem ca /etc/openvpn/ca.pem
我可以ping从客户端192.168.10.101,但不能ping 192.168.10.211例如。 当尝试后者时,服务器看到ping并将其路由到客户端路由器178.1.2.3的互联网IP:
Sat Nov 18 11:48:29 2017 client2/88.1.2.3:48069 MULTI: Learn: 192.168.10.211 -> client1/178.1.2.3:52928
官方指南说,我还应该在NAT路由器上添加一个路由。 具体来说它说:“ 如果运行OpenVPN的客户端机器不是客户端LAN的网关,则客户端LAN的网关必须有一个路由,将通过VPN可达的所有子网指向OpenVPN客户端机器 。
但是,我现在无法做到这一点,因为我无法访问路由器的Web界面,但我也不确定在NAT路由器上添加什么路由(我不知道这是必要的,因为我不'不需要访问服务器后面的局域网)。
我会很感激一些具体的步骤,我仍然需要做(或纠正)。
以下是连接到OpenVPN服务器后,服务器client1和client2的路由表。
服务器:
# route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface default 1.1.1.1 0.0.0.0 UG 0 0 0 eth0 10.8.0.0 10.8.0.2 255.255.255.0 UG 0 0 0 tun 10.8.0.2 * 255.255.255.255 UH 0 0 0 tun localnet * 255.255.255.0 U 0 0 0 eth0 link-local * 255.255.0.0 U 1000 0 0 eth0 172.17.0.0 * 255.255.0.0 U 0 0 0 docker0 192.168.10.0 10.8.0.2 255.255.255.0 UG 0 0 0 tun
客户端1:
# route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface default 192.168.10.1 0.0.0.0 UG 0 0 0 eno1 10.8.0.0 10.8.0.5 255.255.255.0 UG 0 0 0 tun 10.8.0.5 * 255.255.255.255 UH 0 0 0 tun link-local * 255.255.0.0 U 1000 0 0 eno1 192.168.10.0 * 255.255.255.0 U 0 0 0 eno1 192.168.122.0 * 255.255.255.0 U 0 0 0 virbr0
客户机程序:
# route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface default 178.1.1.1 0.0.0.0 UG 0 0 0 eth0 10.8.0.0 10.8.0.5 255.255.255.0 UG 0 0 0 tun 10.8.0.5 * 255.255.255.255 UH 0 0 0 tun 88.1.2.0 * 255.255.255.0 U 0 0 0 eth0 192.168.10.0 10.8.0.5 255.255.255.0 UG 0 0 0 tun
好的,对我来说这很奇怪:我在NAT路由器上添加了一条静态路由,通过192.168.10.101路由所有发往10.8.0.0/24的数据包。 然后我试图从客户端2 ping 192.168.10.211,它没有工作。 然后我login到192.168.10.211,在10.8.0.6上Ping了client2,它说:
# ping 10.8.0.6 PING 10.8.0.6 (10.8.0.6) 56(84) bytes of data. 64 bytes from 10.8.0.6: icmp_seq=1 ttl=63 time=83.5 ms From 192.168.10.1: icmp_seq=2 Redirect Host(New nexthop: 192.168.10.101) 64 bytes from 10.8.0.6: icmp_seq=2 ttl=63 time=75.4 ms 64 bytes from 10.8.0.6: icmp_seq=3 ttl=63 time=79.9 ms
哇! 坚持…然后当我回到客户端2并ping了192.168.10.211,它现在工作:
# ping 192.168.10.201 PING 192.168.10.201 (192.168.10.201) 56(84) bytes of data. 64 bytes from 192.168.10.201: icmp_seq=1 ttl=63 time=78.6 ms 64 bytes from 192.168.10.201: icmp_seq=2 ttl=63 time=77.5 ms 64 bytes from 192.168.10.201: icmp_seq=3 ttl=63 time=75.1 ms
它看起来像NAT路由器没有路由只是ping的答复,可能是因为它从来没有看到转发ping数据包 – 我试图看看它是否有一个状态的防火墙,可以被禁用,但事实并非如此。
然后,我去了另一台机器192.168.10.207,并通过192.168.10.101(覆盖NAT路由器)为其自己创build了一个专门用于10.8.0.0/24的静态路由:
route add -net 10.8.0.0 netmask 255.255.255.0 gw 192.168.10.101
然后ping从客户端192.168.10.207工作正常。
是不是有办法避免在客户端1局域网中的每台本地机器上创build静态规则? NAT路由器上的规则是否正常工作,但由于某种原因,它不?
不要忘记将客户端1configuration为网关(数据包转发器)。 你可以用来validation
# sysctl net.ipv4.ip_forward
它的值应该是1.如果没有,请configuration它
# sysctl -w net.ipv4.ip_forward=1
你也可以访问这个值来检查/更改/ proc / sys / net / ipv4 / ip_forward