我刚刚开始使用 OpenVPN 云连接器创建网状 VPN 网络。我部署了一个连接器并设置了相关的 IP 转发和 NAT 协议,使我能够访问运行 OpenVPN 云连接器的机器后面的 LAN 网络。我成功地做到了这一点。(我的信息主要来自此链接https://openvpn.net/cloud-docs/connecting-networks-to-openvpn-cloud-using-connectors/)
现在的问题是,为什么我无法通过 VPN IP SSH 进入运行云连接器的机器100.96.1.18
?奇怪的是,我可以 ping 它,没有问题。
~$ ssh [email protected]
ssh: connect to host 100.96.1.18 port 22: Network is unreachable
~$ ping 100.96.1.18 -c 4
PING 100.96.1.18 (100.96.1.18) 56(84) bytes of data.
64 bytes from 100.96.1.18: icmp_seq=1 ttl=62 time=209 ms
64 bytes from 100.96.1.18: icmp_seq=2 ttl=62 time=279 ms
64 bytes from 100.96.1.18: icmp_seq=3 ttl=62 time=208 ms
64 bytes from 100.96.1.18: icmp_seq=4 ttl=62 time=204 ms
--- 100.96.1.18 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 203.702/224.971/279.214/31.383 ms
令人惊讶的是,我可以通过 VPN 客户端计算机远程 SSH 到连接器计算机的本地 IP192.168.18.1
这是连接器机器上的 IP 路由。
~$ ip route
default via 192.168.18.1 dev eno1 proto dhcp metric 100
64.120.110.199 via 192.168.18.1 dev eno1
100.80.0.0/12 via 100.96.1.17 dev tun0
100.96.0.0/11 via 100.96.1.17 dev tun0
100.96.1.16/30 dev tun0 proto kernel scope link src 100.96.1.18
169.254.0.0/16 dev eno1 scope link metric 1000
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1
192.168.0.0/24 via 100.96.1.17 dev tun0
192.168.18.0/24 dev eno1 proto kernel scope link src 192.168.18.88 metric 100
~$ ifconfig tun0
tun0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> mtu 1500
inet 100.96.1.18 netmask 255.255.255.252 destination 100.96.1.18
inet6 fd:0:0:8101::2 prefixlen 126 scopeid 0x0<global>
inet6 fe80::5a84:3a5:f59b:d64f prefixlen 64 scopeid 0x20<link>
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 500 (UNSPEC)
RX packets 1682 bytes 451719 (451.7 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1755 bytes 637526 (637.5 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
此外,为了进行调试,这里是来自连接的客户端计算机的 IP 路由
~$ ip route
default via 192.168.31.1 dev wlp2s0 proto dhcp metric 600
25.0.0.0/8 dev ham0 proto kernel scope link src 25.56.7.62
100.80.0.0/12 via 100.96.1.1 dev tun0
100.96.0.0/11 via 100.96.1.1 dev tun0
100.96.1.0/28 dev tun0 proto kernel scope link src 100.96.1.2
169.254.0.0/16 dev wlp2s0 scope link metric 1000
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown
172.107.213.76 via 192.168.31.1 dev wlp2s0
192.168.0.0/24 via 100.96.1.1 dev tun0
192.168.18.0/24 via 100.96.1.1 dev tun0
192.168.31.0/24 dev wlp2s0 proto kernel scope link src 192.168.31.189 metric 600
~$ traceroute 100.96.1.18
traceroute to 100.96.1.18 (100.96.1.18), 64 hops max
1 100.96.1.18 265.200ms !N 109.653ms !N 105.821ms !N
我的主要争论点是,由于100.96.0.0/11 via 100.96.1.1 dev tun0
路由被推送到客户端,我应该能够访问100.96.1.18
IP 并通过 ssh 或 traceroute 等方式访问它。
PS 由于 OpenVPN 支持无法回答,因此在此询问。
答案1
以防万一有人遇到同样的麻烦:这个问题与您这边的防火墙无关,因为连接在云端断开。根据 OpenVPN 云理念,您使用“网络连接器”作为客户端连接到某个网络,使用“主机连接器”允许客户端连接到您。因此,如果您想通过 OpenVPN 云连接到您的服务器,该服务器必须通过“主机连接器”而不是“网络连接器”连接到 VPN,因为只有“主机连接器”才会打开防火墙以接收云端的传入连接。
要检查这是否适用于您,请使用“netstat -pan | grep ssh”或至少在您的 VPN 接口上确保您的 openssh 服务器正在监听所有接口(对于 ipv6,则为 0.0.0.0:22 或 :::22)。然后使用(假设 vpn 位于 tun0 接口)“tcpdump -pni tun0 tcp port 22”查看您是否收到来自 vpn 的任何 ssh 连接请求。您可以删除“端口 22”并尝试 ping 您的“服务器”以确保流量正常。通常使用“网络连接器”,您的 ping 将通过,但对于 ssh 请求,将看不到任何内容,因为云不允许 ssh 流量。如果您使用“主机连接器”通过云建立连接,它将起作用。
https://openvpn.net/cloud-docs/owner/servers/hosts/adding-a-host.html