
Tengo una máquina virtual Debian 11 en una máquina con Windows. Tiene 3 adaptadores de red. Uno es externo (WAN), uno interno (LAN) y otro privado (experimental).
Estoy usando la caja como enrutador que a su vez usa mi enrutador DSL a través de la NIC WAN que en realidad está conectada a la caja Hyper-V. Todo funciona en cuanto a enrutamiento.
Lo que estoy tratando de lograr, y después de haber leído muchos artículos que han fallado hasta ahora, es intentar interceptar un solo puerto (4444), por ejemplo, a una única dirección IP pública de Internet, y redireccionarlo a una máquina en mi LAN. Suena simple y estoy seguro de que lo es, pero no logro hacerlo funcionar.
Para ser claro, esto esNOintentando exponer un puerto público y enrutarlo internamente. Esto es para interceptar un solo puerto (la aplicación en cuestión se conecta a múltiples puertos). Quiero que toda la comunicación vaya al servidor de destino normalmente, pero quiero que este puerto se dirija a mi máquina donde tengo un servidor de socket configurado para manejar la comunicación.
Sé que la respuesta involucra iptables pero no puedo ejecutar los comandos correctamente. cada vez que lo hago
iptables -t nat -A OUTPUT -p tcp --dport 4444 -j DNAT --to-destination 10.0.0.111:4444
Ni siquiera aparece en mi iptables -L
. El reenvío está habilitado. También he probado:
iptables -t nat -A PREROUTING -p tcp -i eth1 --dport 4444 -j DNAT --to-destination 10.0.0.111:4444
Incluso lo apliqué a eth0, que es la puerta de enlace predeterminada.
eth0 - WAN pública
eth1 - LAN
eth2: experimenté con la asignación de la IP pública en cuestión, pero esto arruina el enrutamiento para todos los puertos, por lo que abandoné eso.
Respuesta1
Culpa mía. Lo arreglé. Parece que si deja nuestro -d <destination address>
enrutamiento previo, será ignorado.
También agregué una regla SNAT para que parezca que los paquetes devueltos eran de la IP pública.
Trabajo hecho. Espero que esto ayude a alguien algún día.