
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 eth0
es necesaria