我剛開始使用 OpenVPN 雲端連接器來建立網狀 VPN 網路。我部署了一個連接器並設定了相關的 IP 轉送和 NAT 協議,使我能夠存取運行 OpenVPN 雲端連接器的電腦後面的 LAN 網路。我能夠成功地做到這一點。 (我的信息主要來自這個鏈接https://openvpn.net/cloud-docs/connecting-networks-to-openvpn-cloud-using-connectors/)
現在的問題是,為什麼我無法透過 SSH 連接到透過其 VPN IP 運行雲端連接器的電腦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
令人驚訝的是,我可以透過其本機 IP 透過 SSH 遠端(透過 VPN 用戶端電腦)連接到連接器計算機192.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 或追蹤路由等。
PS 在這裡問這個問題是因為 OpenVPN 支援無法回答。
答案1
以防萬一有人遇到同樣的麻煩:這個問題與您這邊的防火牆無關,因為連線在雲端被中斷。根據 OpenVPN 雲端理念,您使用「網路連接器」作為用戶端連接到某個網絡,並使用「主機連接器」來允許客戶端連接到您。因此,如果您想透過OpenVPN 雲端連接到您的伺服器,則該伺服器必須透過「主機連接器」而不是透過「網路連接器」連接到VPN,因為只有「主機連接器」才會為雲端的傳入連接打開防火牆。
要檢查這是否適用於您,請確保您的openssh 伺服器正在使用「netstat -pan | grep ssh」或至少在您的VPN 介面上偵聽所有介面(對於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