メッシュ VPN ネットワークを作成するために OpenVPN クラウド コネクタを使い始めました。コネクタを展開し、関連する 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クライアントマシン経由)でコネクタマシンのローカルIPを介してSSHで接続することができました。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
私の主な論点は、ルートがクライアントにプッシュされているので、IP にアクセスして ssh または traceroute などを100.96.0.0/11 via 100.96.1.1 dev tun0
実行できるはずだということです。100.96.1.18
PS OpenVPN サポートが回答できなかったため、ここで質問します。
答え1
同じ問題に遭遇した人がいる場合に備えて: この問題は、接続がクラウド側で切断されるため、ユーザー側のファイアウォールとは関係ありません。OpenVPN クラウドの考え方によると、クライアントとしてネットワークに接続するには「ネットワーク コネクタ」を使用し、クライアントがユーザーに接続できるようにするには「ホスト コネクタ」を使用します。したがって、OpenVPN クラウド経由でサーバーに接続する場合、そのサーバーは「ネットワーク コネクタ」ではなく「ホスト コネクタ」経由で VPN に接続する必要があります。クラウド側で着信接続用にファイアウォールが開かれるのは「ホスト コネクタ」のみだからです。
これが自分に当てはまるかどうかを確認するには、「netstat -pan | grep ssh」を使用して、OpenSSH サーバーがすべてのインターフェイス (IPv6 の場合は 0.0.0.0:22 または :::22) でリッスンしているか、少なくとも VPN インターフェイスでリッスンしていることを確認します。次に (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