Я пытаюсь соединить две сети (AWS и Azure) вместе через OpenVPN. Я знаю о других реализациях (OpenSwan + Azure GW и т. Д.), Но мне нужна максимальная переносимость, так как я буду распространять это на других поставщиков облачных vps.
Шлюзы OpenVPN могут пинговать друг друга, и каждый шлюз может пинговать все IP-адреса в противоположной сети, но компьютеры в одной сети не могут пинговать компьютеры в другой сети (они также не могут пинговать противоположные шлюзы).
Что мне здесь не хватает? Кажется, эта проблема возникает у многих по разным причинам, но после 50+ попыток я сдался и решил спросить :)
Сеть 1:
dev tun порт 1194 ifconfig 10.8.223.40 10.8.223.41 route 10.22.1.0 255.255.255.0 vpn_gateway comp-lzo keepalive 10 60 persist-key persist-tun пользователь никто группа никто не секрет /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 route 10.0.0.0 255.254.0.0 vpn_gateway comp-lzo keepalive 10 60 persist-key persist-tun user nobody group nobody secret /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 FORWARD -i eth0 -o tun0 -m conntrack --ctstate NEW -j ACCEPT iptables -I FORWARD -i tun0 -o eth0 -m conntrack --ctstate NEW -j ACCEPT
Сеть 1: iptables -t nat -A POSTROUTING -s "10.0.0.0/15" -o "eth0" -j MASQUERADE iptables -A FORWARD -p tcp -s 10.0.0.0/15 -d 0.0.0.0/0 -j ACCEPT
iptables -t nat -A POSTROUTING -s "10.8.223.40/32" -o "eth0" -j MASQUERADE iptables -A FORWARD -p tcp -s 10.8.223.40/32 -d 0.0.0.0/0 -j ACCEPT
Сеть 2: iptables -t nat -A POSTROUTING -s "10.22.1.0/24" -o "eth0" -j MASQUERADE iptables -A FORWARD -p tcp -s 10.22.1.0/24 -d 0.0.0.0/0 -j ACCEPT
iptables -t nat -A POSTROUTING -s "10.8.223.41/32" -o "eth0" -j MASQUERADE iptables -A FORWARD -p tcp -s 10.8.223.41/32 -d 0.0.0.0/0 -j ACCEPT
Мое предположение было (поскольку у меня есть отдельные шлюзы для доступа в Интернет), что теперь мне нужно добавить маршруты к каждому компьютеру, не являющемуся шлюзом, в обеих сетях, которые будут маршрутизировать пакеты, предназначенные для противоположной сети, через локальный шлюз 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 kernel scope link src 10.0.1.7 10.22.1.0/24 через 10.0.1.9 dev eth0 172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.42.1
но traceroute до 10.22.1.9 (противостоящий шлюз) все равно никуда не денется ...
P.S. Большинство моих машин находятся в Docker, но я получаю те же результаты и от хост-машины.
Любая помощь будет высоко ценится!