# Network address translation

Em redes de computadores, Network Address Translation (NAT), também conhecido como masquerading, é uma técnica que consiste em reescrever, utilizando-se de uma tabela hash, os endereços IP de origem de um pacote que passam por um router ou firewall de maneira que um computador de uma rede interna tenha acesso ao exterior ou Rede Mundial de Computadores.

## Explicação

Por se tratar de uma rede privada, os números de IP interno da rede (como 10.0.0.0/8, 172.16.0.0/12 e 192.168.0.0/16) nunca poderiam ser passados para a Internet pois não são roteados nela e o computador que recebesse um pedido com um desses números não saberia para onde enviar a resposta. Sendo assim, os pedidos teriam de ser gerados com um IP global do router. Mas quando a resposta chegasse ao router, seria preciso saber a qual dos computadores presentes na LAN pertencia aquela resposta.
A solução encontrada foi fazer um mapeamento baseado no IP interno e na porta local do computador. Com esses dois dados o NAT gera um número de 16 bits usando a tabela hash, este número é então escrito no campo da porta de origem.
O pacote enviado para fora leva o IP global do router e na porta de origem o número gerado pelo NAT. Desta forma o computador que receber o pedido sabe para onde tem de enviar a resposta. Quando o router recebe a resposta faz a operação inversa, procurando na sua tabela uma entrada que corresponda aos bits do campo da porta. Ao encontrar a entrada, é feito o direcionamento para o computador correto dentro da rede privada.
Esta foi uma medida de reação face à previsão da exaustão do espaço de endereçamento IP, e rapidamente adaptada para redes privadas também por questões econômicas (no início da Internet os endereços IP alugavam-se, quer individualmente quer por classes/grupos).
Um computador atrás de um router gateway NAT tem um endereço IP dentro de uma gama especial, própria para redes internas. Como tal, ao ascender ao exterior, o gateway seria capaz de encaminhar os seus pacotes para o destino, embora a resposta nunca chegasse, uma vez que os routers entre a comunicação não saberiam reencaminhar a resposta (imagine-se que um desses routers estava incluído em outra rede privada que, por ventura, usava o mesmo espaço de endereçamento). Duas situações poderiam ocorrer: ou o pacote seria indefinidamente¹ reencaminhado, ou seria encaminhado para uma rede errada e descartado.
Na verdade, existe um tempo de vida para os pacotes IP serem reencaminhados. (ver TTL)

## NAT um para muitos

A maioria dos NATs mapeiam vários hospedeiros privados para um endereço IP exposto publicamente. Em uma configuração típica, uma rede local usa uma das sub-redes de endereços IP "privados" (RFC 1918). Um roteador desta rede tem um endereço privado naquele espaço de endereços. O roteador também está conectado à Internet com um endereço "público" atribuído por um provedor de serviços de Internet. Quando o tráfego passa da rede local para a Internet, o endereço de origem em cada pacote é traduzido em tempo real de um endereço privado para o endereço público. O roteador rastreia dados básicos sobre cada conexão ativa (em particular o endereço de destino e porta). Quando uma resposta retorna ao roteador, ele usa os dados de rastreamento de conexões que armazenou durante a fase de saída para determinar o endereço privado na rede interna para encaminhar a resposta.

## Limitações

Os hosts por trás dos roteadores com o NAT habilitado não possuem conectividade fim-a-fim e não podem participar em alguns protocolos da Internet. Por reconhecer apenas os protocolos TCP e UDP, não é possível estabelecer uma conexão que não utilize um desses protocolos. Serviços que exigem o início de conexões TCP do lado externo da rede, ou protocolos stateless, como aqueles que utilizam o UDP, podem ser comprometidos. A menos que o roteador com NAT faça um esforço específico para suportar tais protocolos, os pacotes recebidos não podem alcançar seu destino. Alguns protocolos podem acomodar uma instância de NAT entre hosts participantes (o "modo passivo" do FTP, por exemplo), às vezes com a ajuda de um application-level gateway, mas falham quando ambos os sistemas estão separados da Internet pelo NAT. O uso de NAT também complica os protocolos de tunelamento, como o IPsec porque o NAT modifica valores nos cabeçalhos que interferem nas verificações de integridade feitas pelo IPsec e por outros protocolos de tunelamento.
A conectividade fim-a-fim tem sido um princípio fundamental da Internet, apoiado, por exemplo, pelo Internet Architecture Board. Os documentos arquiteturais atuais da Internet observam que o NAT é uma violação do princípio fim-a-fim, mas esse NAT tem um papel válido no design cuidadoso. Há consideravelmente mais preocupação com o uso do NAT no IPv6, e muitos arquitetos do IPv6 acreditam que o IPv6 foi projetado para remover a necessidade do NAT.
Uma implementação que apenas rastreia portas pode ser rapidamente esgotada por aplicativos internos que usam múltiplas conexões simultâneas (como uma solicitação HTTP para uma página da web com muitos objetos incorporados). O número gerado pela tabela de hash tem apenas 16 bits, o que faz com que esta técnica permita apenas 65535 conexões ativas. Dependendo das dimensões da rede e do número de pedidos feitos pelos computadores desta rede, o limite de 65535 pode ser facilmente atingido. Esse problema pode ser mitigado ao rastrear o endereço IP de destino além da porta (compartilhando assim uma única porta local com muitos hosts remotos), em troca de maior complexidade da implementação e dos recursos de CPU/memória do dispositivo de tradução.
Como os endereços internos estão todos disfarçados por trás de um endereço acessível ao público, é impossível que hosts externos iniciem uma conexão com um host interno específico sem configuração especial no firewall para encaminhar conexões para uma porta específica. Aplicativos como VOIP, videoconferência e outras aplicações peer-to-peer devem usar as técnicas de NAT transversal para funcionar.

## Vantagens

As entradas no NAT são geradas apenas por pedidos dos computadores de dentro da rede privada. Sendo assim, um pacote que chega ao router vindo de fora e que não tenha sido gerado em resposta a um pedido da rede, ele não encontrará nenhuma entrada no NAT e este pacote será automaticamente descartado, não sendo entregue a nenhum computador da rede. Isso impossibilita a entrada de conexões indesejadas e o NAT acaba funcionando como um firewall.