Não é possível obter o NAT funcionando via cadeia PREROUTING do iptables

5

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!

link

link

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.

    
por Andre Goree 02.03.2016 / 22:43

1 resposta

1

Sim, você deve colocar dnat em OUTUPT table porque os pacotes gerados localmente não passariam na tabela PREROUTING.

    
por 26.03.2016 / 12:45

Tags