Reenvío de puertos de iptables para conexiones UDP activas

Reenvío de puertos de iptables para conexiones UDP activas

Estoy intentando configurar el reenvío de puertos en UDP port 12345usando port 54321lo siguiente:

iptables -t nat -A PREROUTING -p udp -i eth0 -d 192.168.0.1  --dport 12345 -j DNAT --to 192.168.0.1:54321

iptables -A FORWARD -p udp -i eth0 -d 192.168.0.1 --dport 54321 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

Esto funciona bien para conexiones nuevas, sin embargo, no funcionaría para conexiones actualmente activas.

Para aclarar lo que quiero decir, digamos que antes de agregar las reglas, hay una conexión activa desde 192.168.0.2:55555<---> 192.168.0.1:12345y estoy intentando redirigir todas las conexiones entrantes 192.168.0.1:12345a 192.168.0.1:54321.

Después de agregar las dos reglas anteriores, todos los demás paquetes destinados a 192.168.0.1:12345se reciben en 192.168.0.1:54321excepto los de 192.168.0.2:55555.

Supongo que el estado de la conexión influye en esto. ¿Cómo puedo resolver esto y obtener los paquetes 192.168.0.1:55555destinados a port 12345ser entregados port 54321?

Respuesta1

¡Descubrí cómo hacerlo!

¡Necesitas usar REDIRECT en NAT! ¡Sin embargo, antes de eso tienes que borrar la entrada correspondiente a esta conexión de conntrack! Algo como lo siguiente

conntrack -D -p udp -d  192.168.0.1 --dport=55555 

información relacionada