DNAT con cambio de puerto no funciona

DNAT con cambio de puerto no funciona

Estoy usando este comando para establecer NAT en mi contenedor VM:

iptables -t nat -A PREROUTING -d ${MAIN_IP} -p tcp --dport ${2} -j DNAT --to-destination ${SUBNET}${3}

con

  • MAIN_IP es la IP global del servidor principal
  • SUBRED son los primeros tres números de mi subred de VM, por ejemplo, "192.168.1".
  • $2 siendo el puerto que quiero reenviar
  • $3 es el último segmento de subred, por ejemplo, 20

Esto funciona bien para NATing directo.

Pero hoy quería declarar un puerto DNAT a SSH, así que configuré $2 en 5022 y $3 en 20:22, lo que resultó en la siguiente línea, para mayor claridad:

iptables -t nat -A PREROUTING -d ${MAIN_IP} -p tcp --dport 5022 -j DNAT --to-destination 192.168.1.20:22

Sin embargo, este no funciona: las conexiones se agotan cuando intento conectarme por ssh a la VM. Tenga en cuenta que no expiran cuando no uso nat, por lo que funciona bien. Sólo que no funciona a través de NAT.ssh [email protected]

UFW no está habilitado en el servidor de contenedor. No escucha prácticamente nada, por lo que no es necesario cerrar nada, o eso espero.

Supongo que la regla DNAT es correcta, entonces, ¿cómo determino qué me está bloqueando?

Editar: salida de la tabla nat:

#iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination
DNAT       tcp  --  anywhere             my-server         tcp dpt:2113 to:192.168.1.35
DNAT       tcp  --  anywhere             my-server         tcp dpt:2115 to:192.168.1.35

Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination
MASQUERADE  all  --  anywhere             anywhere

Edición 2: estoy resolviendo temporalmente el problema de que VM sshd escuche varios puertos. De esta forma, NAT funciona bien.

información relacionada