
Я только что начал использовать облачные коннекторы OpenVPN для создания сетей VPN с ячеистой структурой. Я развернул коннектор и настроил соответствующие протоколы IP-пересылки и NAT, которые позволяют мне получать доступ к локальной сети за машиной, на которой запущен облачный коннектор OpenVPN. Мне удалось это успешно сделать. (моя информация в основном взята из этой ссылкиhttps://openvpn.net/cloud-docs/подключение-сетей-к-облаку-openvpn-использование-коннекторов/)
Теперь проблема в том, почему я не могу подключиться по SSH к машине, на которой запущен облачный коннектор, через ее VPN IP 100.96.1.18
? Странно, но я могу пинговать ее без проблем.
~$ 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 к машине-коннектору через ее локальный IP-адрес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 или traceroute и т. д. для подключения к нему.
P.S. Задаю этот вопрос здесь, так как поддержка OpenVPN не смогла ответить.
решение1
На всякий случай, если у кого-то возникнут такие же проблемы: эта проблема не имеет ничего общего с брандмауэром на вашей стороне, так как соединение сбрасывается на стороне облака. Согласно идее облака OpenVPN, вы используете "сетевые коннекторы" для подключения к некоторой сети в качестве клиента и "хост-коннекторы", чтобы позволить клиентам подключаться к вам. Так что если вы хотите подключиться к своему серверу через облако OpenVPN, этот сервер должен быть подключен к VPN через "хост-коннектор", а не через "сетевой коннектор", так как только "хост-коннектор" будет иметь открытый брандмауэр для входящих подключений на стороне облака.
Чтобы проверить, относится ли это к вам, убедитесь, что ваш сервер openssh прослушивает все интерфейсы (0.0.0.0:22 или :::22 для ipv6) с помощью "netstat -pan | grep ssh" или, по крайней мере, на вашем интерфейсе VPN. Затем используйте (предполагая, что vpn находится на интерфейсе tun0) "tcpdump -pni tun0 tcp port 22", чтобы проверить, получаете ли вы какие-либо запросы на подключение ssh от vpn. Вы можете удалить "port 22" и попробовать пинговать свой "server", чтобы убедиться, что трафик идет. Обычно с "network connector" вы получите проход ping, но для запросов ssh ничего не будет видно, так как облако не пропускает трафик ssh. Если вы устанавливаете соединение через облако с помощью "host connector", это будет работать.
https://openvpn.net/cloud-docs/owner/servers/hosts/adding-a-host.html