Tengo un servidor en la nube ejecutándose en Ubuntu 14.04 que está conectado con un túnel IPsec.
El servidor tiene una interfaz real con una IP pública xxxx y una interfaz virtual 172.16.100.1. Todo el tráfico a la red remota debe enrutarse a través de la interfaz virtual con IP 172.16.100.1. Por lo tanto, he configurado una ruta de entrada. Esto funciona correctamente para todo el tráfico que se genera en ese servidor.
route add -net 172.17.1.2/21 gw 172.16.100.1 dev eth0:1
Pero otro requisito es que si el servidor de la nube recibe tráfico en su IP pública con un puerto específico, ese tráfico también debe reenviarse a la red remota. Lo intenté agregando una entrada de tabla IP:
iptables -t nat -A PREROUTING -p tcp --dport 45678 -j DNAT --to-destination 172.17.1.2:29871
pero el problema es que de alguna manera ignora la configuración de enrutamiento y solo reenvía la solicitud con su IP de origen en lugar de usar 172.16.xx
¿Es esa configuración incluso el enfoque correcto o estoy completamente equivocado? ¿Qué más tengo que configurar para reenviar el tráfico correctamente?
Respuestas:
agregar la siguiente entrada POSTROUTING ha resuelto el problema:
fuente