Como encaminhar / redirecionar portas no Debian?

12

Eu tenho duas perguntas.

Pergunta 1: Minha máquina debian possui interface eth3 com ip 192.168.57.28. Se alguém tentar se conectar a 192.168.57.28:1234, como redireciono a solicitação para outra máquina: 192.168.57.25:80?

Pergunta 2: Se minha máquina debian tem duas interfaces: eth3 com 192.168.57.28 e ppp0 com algum IP dinâmico e alguém tenta se conectar via ppp0 na porta 1234, como redireciono a solicitação para 192.168.57.25:80?

Eu tentei isso:

$ iptables -t nat -A PREROUTING -p tcp --dport 1234 -j DNAT --to-destination 192.168.57.25:80
$ echo 1 > /proc/sys/net/ipv4/ip_forward

mas não funciona.

Dánjal Salberg Adlersson
fonte

Respostas:

12
iptables -A PREROUTING -t nat -i eth3 -p tcp --dport 1234 -j DNAT --to-destination 192.168.57.25:80
iptables -A FORWARD -p tcp -d 192.168.57.25 --dport 80 -j ACCEPT
iptables -A POSTROUTING -t nat -s 192.168.57.25 -o eth3 -j MASQUERADE

O primeiro especifica que todas as conexões TCP de entrada na porta 1234 devem ser enviadas para a porta 80 da máquina interna 192.168.57.25. Somente essa regra não conclui o trabalho porque o iptables nega todas as conexões de entrada. Em seguida, aceitamos a conexão de entrada à porta 1234 da eth3, que se conecta à Internet com o IP público pela segunda regra. Adicionamos a segunda regra na cadeia FORWARD para permitir o encaminhamento dos pacotes para a porta 80 de 192.168.57.25.

EDIT: POSTROUTING adicionado.

Para acompanhar a conexão. caso contrário, o host externo verá o IP interno 192.168.57.25, do qual ele não tem idéia.

EDIT2: Acabei de receber a dica de que deve ser --to-destination em vez de --to (sry)

Daywalker
fonte
Eu tentei sua sugestão, mas ela não funciona. Posso navegar até 192.168.57.25 e a página da web retorna, mas a navegação para 192.168.57.28:1234 não funciona.
Dánjal Salberg Adlersson
@ DánjalSalbergAdlersson Atualizou minha publicação (perdeu algo. Sry.) #
Daywalker
3
Eu tentei sua sugestão, mas não funcionou. Então eu mudo para o último para isso: iptables -A POSTROUTING -t nat -j MASQUERADE, então funcionou!
Dánjal Salberg Adlersson
8

Agradecimentos a Daywalker e Dánjal Salberg Adlersson. Após horas de juramento, o encaminhamento de porta com o iptables finalmente funciona. (testado no Debian)

bash-script

#!/bin/bash

IPTBL=/sbin/iptables

IF_IN=eth0
PORT_IN=40022

IP_OUT=172.16.93.128
PORT_OUT=22

echo "1" > /proc/sys/net/ipv4/ip_forward
$IPTBL -A PREROUTING -t nat -i $IF_IN -p tcp --dport $PORT_IN -j DNAT --to-destination ${IP_OUT}:${PORT_OUT}
$IPTBL -A FORWARD -p tcp -d $IP_OUT --dport $PORT_OUT -j ACCEPT
$IPTBL -A POSTROUTING -t nat -j MASQUERADE
scotty86
fonte
existe alguma razão pela qual "-s 192.168.57.25" foi omitido da linha POSTROUTING?
Edwardsmarkf
também "-o eth3" omitido
edwardsmarkf
Eu vejo o -s e -o na linha POSTROUTING parece ser opcional. algum pensamento sobre o uso de SSL? Eu fiz a pergunta aqui, referenciando o seu script: superuser.com/questions/1387902/…
edwardsmarkf