Por que o SNAT funciona definindo uma regra em tabelas sem as regras na cadeia PREROUTING?

Por que o SNAT funciona definindo uma regra em tabelas sem as regras na cadeia PREROUTING?

Tenho algumas dúvidas sobre SNAT com iptables. Suponha que haja um roteador que reproduza o servidor DHCP para atribuir IPs privados em minha LAN e NAT para que os hosts em minha LAN possam acessar a Internet pública.

O roteador possui duas interfaces, uma "eth0" com IP público dinâmico e outra "eth1" com IP privado 192.168.0.1 e a sub-rede é 192.168.0.0/24. Suponha que o encaminhamento de pacotes IPv4 esteja habilitado nesse roteador. Eu sei que preciso definir uma regra na tabela NAT para mascarar o IP de origem do pacote para a Internet pública dos hosts da minha LAN. Esta regra pode ser semelhante à abaixo.

iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE

Entendo por que preciso da regra, já que o pacote da minha LAN precisa de um IP público para roteamento da Internet.

Mas não entendo por que não preciso definir outra regra em PREROUTINGcadeia para os pacotes de resposta, a fim de modificar seus endereços IP de destino.

A modificação do endereço de destino desses pacotes de resposta é um comportamento padrão da regra MASQUERADE que acabei de definir?

E outra questão é como o iptable sabe quais pacotes devem ser modificados?

Obrigado.

Responder1

iptables NAT tem estado. Usar a tabela 'nat' carregará automaticamente oconexãosistema, que mantém uma lista de conexões ativas e reconhece qual pacote pertence a qual conexão. O sistema conntrack registra ganchos internos que funcionam separadamente das regras do iptables e transforma automaticamente os pacotes que reconhece.

(Você pode ver a tabela de estado conntrack usando conntrack -Lou via /proc/self/net/nf_conntrack.)

Com este sistema, as regras na tabela 'nat' correspondem apenas àsinicialpacote pertencente a cada conexão, não a cada pacote. Uma vez que o pacote inicial tenha sido correspondido, a entrada conntrack correspondente é marcada como necessitando de NAT (ou não) e pacotes adicionais são transformados automaticamente sem sequer passar pela tabela 'nat'.

informação relacionada