terça-feira, 13 de abril de 2010

Network Address Translation - Protocolo NAT

NAT (network address translation) é um protocolo que, faz a tradução dos endereços Ip e portas TCP da rede local para a Internet.
Ou seja, o pacote a ser enviado ou recebido de sua estação de trabalho na sua rede local, vai até o servidor onde seu ip é trocado pelo ip do servidor a substituição do ip da rede local valida o envio do pacote na internet, no retorno do pacote acontece a mesma coisa porém ao contrário o que garante que o pacote chegue ao seu destino.

Um pouco de história

Com o surgimento das redes privadas com internet partilhada, surgiu o problema de como os computadores pertencentes à esta rede privada poderiam receber as respostas aos seus pedidos feitos para fora da rede.

Por se tratar de uma rede privada, os números de IP interno da rede não podiam ser passados para a internet pois não existem e o computador que recebesse um pedido com um desses números não saberia para onde enviar a resposta. então as requisições teriam de ser geradas com um IP global do router. Mas quando a resposta chegasse ao router, seria preciso saber a qual dos computadores da rede privada pertencia aquela resposta.

A solução foi fazer um mapeamento baseado no IP interno e na porta local do computador. Com esses dados o NAT gera um número de 16 bits este número é então escrito no campo da porta de origem.

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 eram alugados individualmente ou por classes/grupos).

Um exemplo:

A estação com IP 192.168.1.8 faz uma requisição para um endereço externo. O pacote sai da estação com o IP da estação e vai ate o gateway que é o intermediador entre ambiente interno e o externo. O gateway, através do protocolo NAT mascara o IP da estação com seu IP (200.158.112.130 – que é válido na internet) desta forma faz com que o pacote seja entregue no destino solicitado pela estação. No retorno do pacote, ele parte do endereço externo (200.158.112.130), chega a nossa rede no servidor NAT com o ip externo e então volta ater o IP da estação chegando à estação (192.168.1.8).

Entao entende-se que a aplicação prática do NAT em uma rede local é para distribuição do acesso à internet. Sendo assim NAT é um proxy?

Não, o proxy tem função de armazenamento em cachê. Ele armazena os sites no servidor e distribui para a rede, quando o site requisitado não é encontrado no servidor, este vai a busca do site e o armazena no servidor para que as estações possam acessa-lo.
O proxy não depende de DNS instalado no servidor porém o NAT depende.

Utilizar Nat e Proxy juntos seria a ideal quando se tem uma rede um pouco extensa para diminuição do consumo da banda de seu link com a internet. Habilitar um Proxy para conteúdo http e deixar o resto com o NAT diminuirá bastante o trafego do link.

Vantagens de usar NAT

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 da rede e que não tenha sido gerado em resposta a um pedido da rede, não encontrá nenhuma entrada no NAT e este pacote será automaticamente descartado e consequentemente não será entregue a nenhum computador da rede.
Isso impossibilita a entrada de conexões indesejadas e o NAT acaba funcionando como uma firewall.

Restrições
Como NAT conhece apenas os protocolos TCP e UDP, não é possível estabelecer uma conexão que não utilize um desses protocolos.

O número gerado pela tabela de hash tem apenas 16 bits, o que faz com que esta técnica permita até 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