Soy nuevo en iptables y quiero entender cómo funciona iptables nat. Tengo una máquina linux con un contenedor lxc. La configuración de la red de la máquina es la siguiente: la interfaz eth0 que conecta la máquina a internet (su dirección IPv4 es 10.9.63.173) y una interfaz veth-1 (192.168.2.1) para el contenedor lxc. En el contenedor lxc hay una interfaz eth0 (192.168.2.2) conectada al veth-1.
En la máquina linux he añadido dos reglas de iptables:
1) iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 10.9.63.173
2) iptables -t nat -A PREROUTING -d 10.9.63.173 -j DNAT --to-destination 192.168.2.2
Si hago un ping 8.8.8.8 desde el contenedor lxc, todo funciona (la IP de origen se traduce a 10.9.63.173 al salir de la máquina Linux). Pero la segunda regla nunca coincide con las respuestas de eco de ping. He visto los paquetes entrantes en eth0 (10.9.63.173) usando tcpdump y la salida es la siguiente:
23:34:33.151565 IP google-public-dns-a.google.com > host.local: ICMP echo reply, id 536, seq 174, length 64
Por lo tanto, los paquetes con destino 10.9.63.173 llegan a la interfaz eth0.
Tengo tres preguntas:
1) ¿Por qué nunca se cumple la regla nat prerouting?
2) ¿Cómo sabe iptables cómo modificar las respuestas para que se envíen a 192.168.2.2?
3) ¿Puede el objetivo SNAT modificar el puerto de origen (sin indicar explícitamente que se traduzca a un puerto o puertos específicos)?
¡Gracias!