Estou usando este comando para estabelecer NAT no meu contêiner de VM:
iptables -t nat -A PREROUTING -d ${MAIN_IP} -p tcp --dport ${2} -j DNAT --to-destination ${SUBNET}${3}
com
- MAIN_IP sendo o IP global do servidor principal
- SUBNET sendo os três primeiros números da minha sub-rede VM, por exemplo, "192.168.1."
- $2 sendo a porta que quero encaminhar
- $3 sendo o último segmento da sub-rede, por exemplo, 20
Isso funciona bem para NAT direto.
Mas hoje eu queria declarar um DNAT para a porta SSH, então defini $2 como 5022 e $3 como 20:22, resultando na seguinte linha, para maior clareza:
iptables -t nat -A PREROUTING -d ${MAIN_IP} -p tcp --dport 5022 -j DNAT --to-destination 192.168.1.20:22
No entanto, este não funciona: as conexões atingem o tempo limite quando tento fazer ssh para a VM. Observe que eles não expiram quando eu não uso o nat, então funciona perfeitamente. Só não funciona através de NAT.ssh [email protected]
O UFW não está habilitado no servidor de contêiner. Ele não ouve praticamente nada, então não há necessidade de fechar nada - ou assim espero.
Presumo que a regra do DNAT esteja correta, então como posso determinar o que está me bloqueando?
Editar: saída da tabela 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
Edição 2: estou resolvendo temporariamente o problema de fazer com que o VM sshd escute várias portas. Dessa forma, o NAT funciona perfeitamente.