Para que um NAT funcione corretamente, os pacotes de cliente para servidor e os pacotes de servidor para cliente devem passar pelo NAT.
Note que a tabela NAT no iptables é usada apenas para o primeiro pacote de uma conexão. Os pacotes posteriores relacionados à conexão são processados usando as tabelas de mapeamento internas estabelecidas quando o primeiro pacote foi traduzido.
iptables -t nat -A PREROUTING -i br-lan -s 192.168.1.0/24 -d 82.120.11.22/32 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.1.200
Com apenas esta regra, acontece o seguinte.
- O cliente cria o pacote inicial (tcp syn) e o endereça ao IP público. O cliente espera obter uma resposta para este pacote com o ip / port de origem e o ip / port de destino trocados.
- Como o cliente não possui entradas específicas em sua tabela de roteamento, ele o envia ao seu gateway padrão. O gateway padrão é a caixa NAT.
- A caixa NAT recebe o pacote inicial, modifica o IP de destino, estabelece uma entrada na tabela de mapeamento, pesquisa o novo destino em sua tabela de roteamento e envia os pacotes ao servidor. O endereço de origem permanece inalterado.
- O servidor recebe o pacote inicial e cria uma resposta (syn-ack). Na resposta, o IP / porta de origem é trocado pelo IP / porta de destino. Como o IP de origem do pacote de entrada não foi alterado, o IP de destino da resposta é o IP do cliente.
- O servidor pesquisa o IP em sua tabela de roteamento e envia o pacote de volta ao cliente.
- O cliente rejeita o pacote porque o endereço de origem não corresponde ao esperado.
iptables -t nat -A POSTROUTING -o br-lan -s 192.168.1.0/24 -d 192.168.1.200/32 -p tcp -m tcp --dport 80 -j SNAT --to-source 192.168.1.1
Depois de adicionarmos essa regra, a sequência de eventos muda.
- O cliente cria o pacote inicial (tcp syn) e o endereça ao IP público. O cliente espera obter uma resposta para este pacote com o ip / port de origem e o ip / port de destino trocados.
- Como o cliente não possui entradas específicas em suas tabelas de roteamento, ele o envia para seu gateway padrão. O gateway padrão é a caixa NAT.
- A caixa NAT recebe o pacote inicial, seguindo as entradas na tabela NAT modifica o IP de destino, IP de origem e possivel porta de origem (a porta de origem só é modificada se necessário para desambiguar), estabelece uma entrada na tabela de mapeamento o novo destino em sua tabela de roteamento e envia os pacotes para o servidor.
- O servidor recebe o pacote inicial e cria uma resposta (syn-ack). Na resposta, o IP / porta de origem é trocado pelo IP / porta de destino. Como o IP de origem do pacote de entrada foi modificado pela caixa NAT, o IP de destino do pacote é o IP da caixa NAT.
- O servidor procura o IP em sua tabela de roteamento e envia o pacote de volta para a caixa NAT.
- A caixa NAT procura os detalhes do pacote (IP de origem, porta de origem, IP de destino, porta de destino) em suas tabelas de mapeamento NAT e executa uma conversão reversa. Isso altera o IP de origem para o IP público, a porta de origem para 80, o IP de destino para o IP do cliente e a porta de destino de volta para a porta de origem usada pelo cliente.
- A caixa NAT procura o novo IP de destino em sua tabela de roteamento e envia o pacote de volta ao cliente.
- O cliente aceita o pacote.
- A comunicação continua com os pacotes de tradução NAT para frente e para trás.