Я пытаюсь соединить две сети (AWS и Azure) вместе через OpenVPN. Я знаю о других реализациях (OpenSwan+Azure GW и т. д.), но мне нужна максимальная переносимость, так как я буду расширять это и на других провайдеров облачных vps.
Шлюзы OpenVPN могут пинговать друг друга, и каждый шлюз может пинговать все IP-адреса в противостоящей сети, но компьютеры в одной сети не могут пинговать компьютеры в другой сети (и не могут пинговать противостоящие шлюзы).
Что я упускаю? Похоже, у многих по разным причинам возникает эта проблема, но после 50+ попыток я сдался и решил спросить :)
Сеть 1:
dev tun порт 1194 ifconfig 10.8.223.40 10.8.223.41 маршрут 10.22.1.0 255.255.255.0 vpn_gateway comp-lzo keepalive 10 60 persist-key persist-tun пользователь nobody группа nobody секрет /etc/openvpn/static.key
ip route
default via 10.0.1.1 dev eth0
10.0.1.0/27 dev eth0 proto kernel scope link src 10.0.1.9
10.22.1.0/24 via 10.8.223.41 dev tun0
10.33.0.0/24 via 10.33.0.2 dev tun2
10.33.0.2 dev tun2 proto kernel scope link src 10.33.0.1
10.8.223.41 dev tun0 proto kernel scope link src 10.8.223.40
Сеть 2
dev tun порт 1194 удаленный my_ext_ip 1194 ifconfig 10.8.223.41 10.8.223.40 маршрут 10.0.0.0 255.254.0.0 vpn_gateway comp-lzo keepalive 10 60 persist-key persist-tun пользователь nobody группа nobody секрет /etc/openvpn/static.key
ip route
default via 10.22.1.1 dev eth0
10.0.0.0/15 via 10.8.223.40 dev tun0
10.22.1.0/24 dev eth0 proto kernel scope link src 10.22.1.9
10.8.223.40 dev tun0 proto kernel scope link src 10.8.223.41
Вот что у меня есть с точки зрения iptables:
Обе сети:iptables -I ПЕРЕСЫЛКА -i eth0 -o tun0 -m conntrack --ctstate НОВЫЙ -j ПРИНЯТЬ iptables -I ПЕРЕСЫЛКА -i eth0 -o eth0 -m conntrack --ctstate НОВЫЙ -j ПРИНЯТЬ
Сеть 1:iptables -t nat -A POSTROUTING -s "10.0.0.0/15" -o "eth0" -j МАСКАРАД iptables -A ПЕРЕСЫЛКА -p tcp -s 10.0.0.0/15 -d 0.0.0.0/0 -j ПРИНЯТЬ
iptables -t nat -A POSTROUTING -s "10.8.223.40/32" -o "eth0" -j МАСКАРАД iptables -A ПЕРЕСЫЛКА -p tcp -s 10.8.223.40/32 -d 0.0.0.0/0 -j ПРИНЯТЬ
Сеть 2:iptables -t nat -A POSTROUTING -s "10.22.1.0/24" -o "eth0" -j МАСКАРАД iptables -A ПЕРЕСЫЛКА -p tcp -s 10.22.1.0/24 -d 0.0.0.0/0 -j ПРИНЯТЬ
iptables -t nat -A POSTROUTING -s "10.8.223.41/32" -o "eth0" -j МАСКАРАД iptables -A ПЕРЕСЫЛКА -p tcp -s 10.8.223.41/32 -d 0.0.0.0/0 -j ПРИНЯТЬ
Я предполагал (поскольку у меня есть отдельные шлюзы для доступа в Интернет), что теперь мне придется добавить маршруты к каждому компьютеру, не являющемуся шлюзом, в обеих сетях, которые будут маршрутизировать пакеты, предназначенные для противоположной сети, через локальный шлюз OpenVPN.
Я сделал это для машины 10.0.1.7:
добавить ip route 10.22.1.0/24 через 10.0.1.9
Итак, теперь у меня есть:
по умолчанию через 10.0.1.1 dev eth0 10.0.1.0/27 dev eth0 proto ядро область ссылка src 10.0.1.7 10.22.1.0/24 через 10.0.1.9 dev eth0 172.17.0.0/16 dev docker0 proto ядро область ссылка src 172.17.42.1
но traceroute до 10.22.1.9 (противоположный шлюз) по-прежнему никуда не ведет...
P.S. Большинство моих машин работают в Docker, но те же результаты я получаю и с хост-машины.
Любая помощь будет высоко оценен!