Estoy intentando conectar dos redes (AWS y Azure) a través de OpenVPN. Conozco otras implementaciones (OpenSwan+Azure GW, etc.), pero necesito la máxima portabilidad, ya que también la expandiré a otros proveedores de vps en la nube.
Las puertas de enlace OpenVPN pueden hacer ping entre sí, y cada puerta de enlace puede hacer ping a todas las IP de la red opuesta, pero las computadoras de una red no pueden hacer ping a las computadoras de la otra red (tampoco pueden hacer ping a las puertas de enlace opuestas).
¿Que me estoy perdiendo aqui? Parece que muchos tienen este problema por varias razones, pero después de más de 50 intentos me di por vencido y decidí preguntar :)
Red 1:
dev tun puerto 1194 ifconfig 10.8.223.40 10.8.223.41 ruta 10.22.1.0 255.255.255.0 vpn_gateway comp-lzo keepalive 10 60 persist-key persist-tun usuario nadie grupo nadie secreto /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
Red 2
dev tun puerto 1194 remoto my_ext_ip 1194 ifconfig 10.8.223.41 10.8.223.40 ruta 10.0.0.0 255.254.0.0 vpn_gateway comp-lzo keepalive 10 60 persist-key persist-tun usuario nadie grupo nadie secreto /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
Esto es lo que tengo en cuanto a iptables:
Ambas redes:iptables -I ADELANTE -i eth0 -o tun0 -m conntrack --ctstate NUEVO -j ACEPTAR iptables -I ADELANTE -i tun0 -o eth0 -m conntrack --ctstate NUEVO -j ACEPTAR
Red 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 ACEPTAR
Red 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 ACEPTAR
Mi suposición fue (ya que tengo puertas de enlace separadas para el acceso a Internet) que ahora tengo que agregar rutas a cada computadora sin puerta de enlace en ambas redes que enrutarán los paquetes destinados a la red opuesta a través de la puerta de enlace OpenVPN local.
Hice eso para la máquina 10.0.1.7:
ruta ip agregar 10.22.1.0/24 a través de 10.0.1.9
Entonces ahora tengo:
predeterminado a través de 10.0.1.1 dev eth0 10.0.1.0/27 dev eth0 proto kernel alcance enlace src 10.0.1.7 10.22.1.0/24 a través de 10.0.1.9 dev eth0 172.17.0.0/16 dev docker0 proto kernel alcance enlace src 172.17.42.1
pero traceroute a 10.22.1.9 (puerta de enlace opuesta) todavía no llega a ninguna parte...
PD: La mayoría de mis máquinas están en Docker, pero también obtengo los mismos resultados en la máquina host.
¡Cualquier ayuda sería muy apreciada!