
Tentei encaminhar um ip:port específico para um ip:port específico em uma máquina Linux. Usei iptables com o seguinte comando:
iptables -t nat -A OUTPUT -p tcp -d 10.0.2.5 --dport 80 -j DNAT --to-destination 69.31.21.42:80
10.0.2.5 é um endereço arbitrário que escolhi para ver se o comando funciona, e 69.31.21.42 é o endereço de um site público. Verifiquei então que o encaminhamento funcionou: corri nmap -p 80 10.0.2.5
e obtive resultado positivo. Muito bom até agora. No entanto, tentei correr nmap -p 81 10.0.2.5
e também obtive um resultado positivo. Não era isso que eu esperava, pois queria que apenas a porta 80 fosse encaminhada. Corri iptables -t nat -L
e percebi que, de fato, todo o host 10.0.2.5 está mapeado para 69.31.21.42:80:
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
DNAT tcp -- anywhere ip-10-0-2-5.ec2.internal tcp dpt:http to:69.31.21.42:80
O que está faltando no meu comando iptables? Por que não está --dport
funcionando?
Responder1
Você precisa usar POSTROUTING
corrente para fazer o que deseja.
iptables -t nat -A POSTROUTING -p tcp -d 10.0.2.5 --dport 80 -j SNAT --to 69.31.21.42:80
homem iptables
and POSTROUTING (for altering packets as they are about to go
out)
Responder2
Primeiramente saiba que não é possível encaminhar TCP IP:Port para outro IP:Port. Isso só é possível com UDP e há um script Perl separado para isso.
Sim, você pode encaminhar um IP diretamente para outra máquina, não para uma porta específica.