Sim, você deve colocar dnat
em OUTUPT
table porque os pacotes gerados localmente não passariam na tabela PREROUTING.
Então, não nos preocupamos com o WHY, e mais ainda com o HOW, eu gostaria de ver se alguém sabe onde estou errando aqui.
Basicamente, eu gostaria de encaminhar todos os pacotes para a porta 80 em um IP que eu aliasse para o dispositivo de loopback (169.254.169.254) ser encaminhado para a porta 8080 em outro IP, que é o canal público. IP da mesma caixa (usaremos 1.1.1.1 para o propósito desta questão). Ao fazê-lo, eu [ostensbily] seria capaz de executar
telnet 169.254.169.254 80
e alcance 1.1.1.1:8080, no entanto, isso não está acontecendo.
Aqui está minha tabela nat no iptables:
~# iptables -nvL -t nat
Chain PREROUTING (policy ACCEPT 66 packets, 3857 bytes)
pkts bytes target prot opt in out source destination
0 0 DNAT tcp -- * * 0.0.0.0/0 169.254.169.254 tcp dpt:80 to:1.1.1.1:8080
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Estou faltando alguma coisa? Eu segui a maioria das informações nas páginas de manual do iptables e também nos links abaixo, no entanto, ainda estou recebendo uma "conexão recusada" durante minhas tentativas de telnet. Eu tentei adicionar ~#iptables -t nat -A POSTROUTING -j MASQUERADE
ao meu iptables, mas sem sucesso: /
Se alguém pudesse me apontar na direção certa, seria fenomenal!
EDIT Eu queria adicionar que eu tenho o seguinte parâmetro sysctl habilitado ~# sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1
EDIT No. 2 Eu consegui resolver isso adicionando a regra à cadeia OUTPUT na tabela nat, v.s. a cadeia PREROUTING como eu tentei originalmente.
Sim, você deve colocar dnat
em OUTUPT
table porque os pacotes gerados localmente não passariam na tabela PREROUTING.