O encaminhamento de porta com DNAT não funciona

0

Eu quero encaminhar minha porta local 2221 para uma máquina remota (192.168.2.100), onde o ssh escuta na porta 2222.

A conexão com a máquina remota funciona:

ssh  -p 2222 192.168.2.100
[email protected]'s password:

A configuração do meu iptables é muito simples, com apenas uma regra:

sudo iptables -t nat -A PREROUTING -p tcp --dport 2221 -j DNAT --to-destination 192.168.2.100:2222

>sudo iptables -t raw -L
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination    

>sudo iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
DNAT       tcp  --  anywhere             anywhere             tcp     dpt:2221 to:192.168.2.100:2222

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       

>sudo iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination       

Quando tento conectar-me ao ssh na porta (presumivelmente) encaminhada, ele falha:

>ssh  -p 2221 127.0.0.1
ssh: connect to host 127.0.0.1 port 2221: Connection refused

Há provavelmente algo fundamental que perdi. Como faço para depurar isso?

Atualização: de acordo com link você precisa adicionar mascarando:

sudo iptables -t nat -A POSTROUTING -j MASQUERADE

E verifique se o encaminhamento de porta está ativado:

echo "1" > sudo /proc/sys/net/ipv4/ip_forward

No entanto, ainda não funciona para mim.

Se alguém puder explicar como obter mais informações de depuração, isso seria ótimo.

    
por DoRe 25.07.2016 / 11:59

1 resposta

1

Eu encontrei uma solução baseada em socat neste post:

link

então, isso faz o truque:

sudo socat TCP-LISTEN:2221,su=nobody,fork,reuseaddr TCP-CONNECT:192.168.2.100:2222

Ele conecta a porta 2221 no host local à porta 2222 na máquina remota 192.168.2.100

sudo precisava su para ninguém.

A opção fork significa que ela renegociará a porta de entrada, para que ela não seja bloqueada.

    
por DoRe 27.07.2016 / 17:46