Reenviar tráfico con iptables sin exponer IP/puerto real

Reenviar tráfico con iptables sin exponer IP/puerto real

Quiero reenviar tráfico con iptables sin mostrar una IP/puerto diferente al host de envío.

Mi aplicación escucha en el host xx15.42, puerto 23555 usando TCP. El cliente se conectará a xx15.42:5555. Quiero que la conexión se reenvíe al puerto 23555 sin exponer ese puerto al cliente.

Ya intenté usar DNAT:

iptables -t nat -A PREROUTING -p tcp --dport 5555 -j DNAT --to-destination x.x.15.42:23555

Pero al cliente le mostrará que se está conectando al puerto 23555.

También intenté usar REDIRECT, pero por alguna razón no funciona en absoluto. El cliente no puede conectarse.

iptables -t nat -A PREROUTING -p tcp --dport 5555 -d x.x.15.42 -j REDIRECT --to-port 23555

¿Cómo reenvío este tráfico y al mismo tiempo hago que parezca que la aplicación está escuchando en el puerto 5555?

Respuesta1

Entonces, la primera regla de firewall que utilicé funciona:

iptables -t nat -A PREROUTING -p tcp --dport 5555 -j DNAT --to-destination x.x.15.42:23555

De hecho, el único problema era que el servidor le decía al cliente que se conectara al puerto 23555 en lugar del puerto 5555 como quería. Cambiar eso en la parte del servidor soluciona el problema.

Respuesta2

Sólo soy un aficionado a iptables, así que ¿podrías probar esto?

iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 5555 -j DNAT --to x.x.15.42:23555
iptables -A FORWARD -p tcp -d x.x.15.42 --dport 23555 -j ACCEPT

Ambas líneas son necesarias (creo que es la falta de la opción ADELANTE lo que está causando esto), aunque no estoy seguro si la opción de interfaz -i eth0es necesaria

Referencia fuente

información relacionada