NAT

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar

Autor: Douglas Amorim dos Santos e Lucas da Silva

Introdução

Com o surgimento das redes privadas com internet compartilhada, surgiu o problema de como os computadores pertencentes a 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 (como 10.0.0.0/8, 172.16.0.0/16 e 192.168.0.0/24) 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).
Como veremos no decorrer do texto, o NAT nem sempre é algo tão simples, dependendo o cenário onde é aplicado. Este trabalho tem como objetivo citar e explicar o funcionamento dos principais tipos de NAT, começaremos tratando dos primeiros conceitos elaborados sobre o tema para enfim chegar ao ponto principal.

PAT

NAT, PAT (NAT Overload) e Proxy são as formas de traduzir IPs privados (não roteáveis) em IPs válidos. Nesta página daremos foco total a NAT e PAT.

O NAT (Network Adress Translation) é definido na RFC 1918 e foi criado com a finalidade de economizar endereços IPv4 válidos, mas também é usado como método de segurança em alguns casos,segundo o blog “LabCisco”. O conceito principal é bastante simples, porém a aplicação da funcionalidade em cenários diversos gera derivações com nomes diferentes, chamados “tipos de NAT”.

Na Figura 1 é possível observar o funcionamento do NAT em um exemplo de rede doméstica.
NAT Imagem 1 Redes.png
Figura 1: Funcionamento básico do NAT

O NAT caracteriza-se por fazer a tradução do IP privado para IP válido quando a rede possui apenas um dispositivo (PC, smartphone, etc), praticamente como se aquele dispositivo tivesse um IP válido configurado em sua placa de rede, conforme foi observado na Figura 1. Hoje em dia, não é comum encontrar redes com o NAT funcionando igual o descrito acima. Em nossas redes domésticas costumamos usar o PAT (Port Adress Translation, também conhecido como NAT Overload), que é muito confundido com o NAT. O PAT nos permite acessar à internet a partir de vários dispositivos simultaneamente. Ele faz isso através do uso de portas TCP e UDP para identificar as conexões, temos um total de 2^16 portas disponíveis (muitas são pré alocadas para serviços de rede, portanto a quantidade 2^16 cairá). Na Figura 2 é possível observar como PAT funciona em redes como as de nossas casas.

NAT Imagem 2 Redes.png
Figura 2: Funcionamento do PAT

Tipos de NAT

Há várias maneiras de implementar o endereço de rede e a tradução de portas. Em alguns protocolos de aplicação que usam informações de endereço IP, o aplicativo em execução precisa determinar o endereço externo do NAT, ou seja, o endereço que seus pares de comunicação detectam e, além disso, muitas vezes precisa examinar e categorizar o tipo de mapeamento em uso.Geralmente isso é feito porque é desejado configurar um caminho de comunicação direta entre dois clientes, os quais estão por trás de NATs separados.

Para isso, foi desenvolvido o protocolo Simple traversal of UDP over NATs (STUN) (RFC 3489, março de 2003). Ele classificou a implementação de NAT como Full Cone NAT, Restricted Cone NAT, Port-Restricted Cone NAT, Symmetric NAT: e propôs uma metodologia para testar um dispositivo de acordo. Contudo, estes procedimentos foram desde então obsoletos do estado de normas, uma vez que os métodos são inadequados para avaliar corretamente muitos dispositivos. Novos métodos foram padronizados no RFC 5389 (outubro de 2008) e o acrônimo STUN agora representa o novo título da especificação: Session Traversal Utilities for NAT.

Full Cone NAT:

É o único tipo de NAT onde a porta estará permanentemente aberta, e permite conexão de host externo. O “Full cone NAT” mapeia um endereço IP público e uma porta para um IP da LAN, conhecido como redirecionamento de portas.

Exemplo: Um PC na LAN (IP: 192.168.0.2) tem um serviço rodando na porta 80, então é criado uma regra no roteador (IP WAN: 81.45.87.98), onde é direcionado qualquer acesso que venha pela porta 80* externa para o IP 192.168.0.2 com a porta 80 interna. Ou seja, qualquer host que envie dados para 81.45.87.98 pela porta 80, é direcionado para 192.168.0.2 pela porta 80. <br/.

  • Os valores de porta (externa e interna) não precisam ser iguais, por exemplo, o serviço pode estar rodando na porta 9090, e no mapeamento ser encaminhado a porta 5000 para 9090. Aparentemente para a Internet pública o serviço está rodando na porta 5000.Uma tentativa de conexão em qualquer outra porta é descartada.
Full Cone NAT .png
Figura 3: Descrição de Funcionamento do Full Cone NAT
Fonte: https://en.wikipedia.org/wiki/Network_address_translation

Restricted Cone NAT:

No Restricted Cone NAT, o cliente interno deve primeiro se conectar com um IP externo antes de passar a receber pacotes do mesmo. O único requisito seria que os pacotes entrem na porta mapeada na primeira conexão.
Exemplo: Um PC na LAN faz conexão de saída para um site (IP: 222.111.99.1), com IP de origem 10.0.0.1 e porta 12345. Pacotes que chegam do IP 222.111.99.1 com a porta 12345 serão redirecionados para o IP 10.0.0.1 e porta 21, conforme mostra a Figura 4. Se qualquer outro IP tentar utilizar a porta 12345 será bloqueado, da mesma forma se o IP 222.111.99.1 tentar utilizar qualquer outra porta tambem será bloqueada a conexão.

NAT restrito 11.png
Figura 4: Funcionamento do Restricted Cone NAT

Port-Restricted Cone NAT:

O Port-Restricted Cone NAT trabalha da mesma maneira que o Restricted Cone NAT, com a única diferença que também monitora a porta de destino, permitindo a comunicação apenas dela.
Exemplo: Um PC da LAN (IP local de origem: 192.168.1.2) faz conexão a um site (IP: 217.87.69.8) na porta 2000 (porta de destino). O NAT, por exemplo, mapeia o IP de origem para o IP da WAN 81.45.87.98 e a porta para 2000 (porta de origem). Quando o site enviar pacotes de volta, ele deverá ter seu IP de origem como 217.87.69.8, porta de destino como 2000 (Exatamente como um Restricted Cone NAT) e, além disso, a porta de origem terá que ser a 2000. Se qualquer uma destas três informações estiverem incorretas o Port-Restricted Cone NAT desativa a conexão.

Port restrito1.png
Figura 5 : Funcionamento do Port-Restricted Cone NAT
Fonte: http://slideplayer.com/slide/693136/

Symmetric NAT:

O Symmetric NAT aplica restrições exatamente como o Port Restricted Cone NAT, porém manipula a tradução NAT de forma diferente. Todos os tipos de NAT vistos até agora não manipulam o valor da porta de origem, por exemplo, quando um cliente acessa a internet usando o IP 192.168.0.2 e a porta de origem 56723 o NAT altera o IP de origem para 56.35.67.35 (IP publico), mas mantem a porta 56723. Por sua vez o Symmetric NAT gera novos valores aleatórios para as portas de origem, isso aplica-se a conexões de um mesmo cliente para destinos diferentes.

Exemplo: Um PC na LAN (IP local: 10.0.0.1) faz duas conexões de saida, uma para o IP: 222.111.99.1 e outra para o IP: 222.111.88.2. Até o momento, em todas as conexões NAT, seria alterado o valor do IP de origem para o IP público, porém iria ser mantido o valor da porta para as duas conexões (Ex: 21). No entando, no Symmetric NAT o valor da porta de origem é diferente para cada uma das conexões, por exemplo a conexão para 222.111.99.1 recebe a porta 12345 e para 222.111.88.2 recebe a porta 45678.

NAT simetrico1.png
Figura 6: Funcionamento do Symmetric NAT

O principal problema deste tipo de NAT é que, os equipamentos que rodam serviços na rede (Vídeo-games, Computadores , etc.) em alguns casos, precisam informar seu endereço IP e porta para que outros equipamentos possam conectar em seu serviço, porém o equipamento em questão não sabe que está sendo utilizado NAT e enviará o IP local (Ex.: 10.0.0.1) e porta (Ex.: 21) , para solucionar este problema de NAT existem vários protocolos distintos, será citado o protocolo STUN, comumente mais utilizado.
Muitas implementações NAT combinam esses tipos e, portanto, é melhor referir-se a comportamentos NAT individuais específicos em vez de usar a terminologia Cone / Symmetric. Especialmente, a maioria dos NAT combina NAT simétrico para conexões de saída com mapeamento de porta estática, onde os pacotes de entrada endereçados ao endereço externo e à porta são redirecionados para um endereço e uma porta internos específicos.

STUN (Session Traversal Utilities for NAT):

Session Traversal Utilities para NAT (STUN) é um conjunto padronizado de métodos e um protocolo de rede para permitir que um host final descubra seu endereço IP público se estiver localizado atrás de um dispositivo de tradução de endereços de rede (NAT). É usado para permitir o percurso de NAT para aplicações de voz, vídeo, mensagens e outras comunicações interativas em tempo real.
O protocolo STUN permite que aplicativos operando atrás de um dispositivo NAT descubram a presença do conversor de endereços de rede e obtenham o endereço IP (endereço NAT) mapeado e o número de porta que o NAT alocou. O protocolo requer assistência de um servidor de rede de terceiros (servidor STUN) localizado no lado oposto (público) do NAT, geralmente a Internet pública.
O STUN funciona com três tipos de NAT: Full Cone NAT, Restricted Cone NAT, Port-Restricted Cone NAT. O STUN não funciona com Symmetric NAT, que é freqüentemente encontrado nas redes de grandes empresas.

CGNAT (Carrier Grade NAT)

Pejorativamente chamado de “NAT do NAT” e definido na RFC 6264, é uma técnica de tradução de grande porte que vem sendo praticada por algumas operadoras de telecomunicações que não possuem mais endereços IPv4 disponíveis e, portanto, se encontram em situação crítica. Essa prática consiste em aplicar o NAT na própria rede da operadora, antes mesmo de chegar ao usuário, entregando para seu cliente um endereço privado. Os IPs “válidos” que chegam na interface WAN do cliente possuem o prefixo 100.64.0.0/10, a RFC do CGNAT tornou esse endereço não roteável e de uso exclusivo das operadoras.
A principal desvantagem do uso do CGNAT por parte de uma operadora de internet, além de comprometer a segurança da rede, é a retirada da possibilidade do cliente efetuar um redirecionamento de portas sozinho. Esta ação passa a ter a necessidade de um trabalho conjunto entre operadora e cliente.

DNAT

Tradução de endereços de rede de destino (DNAT) é uma técnica para alterar transparentemente o endereço IP de destino de um pacote de rota de fim e executar a função inversa para quaisquer respostas. Qualquer roteador situado entre dois pontos de extremidade pode executar esta transformação do pacote.
O DNAT é comumente usado para publicar um serviço localizado em uma rede privada em um endereço IP publicamente acessível. Este uso de DNAT também é chamado de encaminhamento de porta, ou DMZ quando usado em um servidor inteiro, que fica exposto à WAN.

NAT Loopback

NAT Loopback permite acessar um serviço que está hospedado em sua rede local pelo endereço de acesso externo.
Para entendermos melhor, suponha que esteja configurada uma Câmera IP em uma rede, e que seja possível acessá-la de qualquer lugar através da internet, seja por IP externo, ou domínio DDNS.
Porém, quando tentado acessar a câmera pelo seu acesso externo (IP externo ou DDNS) estando na mesma rede interna o acesso não funciona. Isso indica que seu roteador não trabalha com NAT Loopback. O NAT Loopback "percebe" que o destino é seu próprio IP WAN e redireciona o "pacote" ao IP do host na rede local.

NAT no IPV6

A tradução de endereços de rede não é comumente usada no IPv6, pois um dos objetivos do IPV6 é restaurar a conectividade de rede de ponta a ponta. O NAT Loopback não é necessário. Embora ainda possível, o grande espaço de endereçamento do IPv6 evita a necessidade de conservar endereços e cada dispositivo pode receber um endereço globalmente roteável.

Conclusão

O NAT surgiu como uma solução de curto prazo para evitar um problema iminente de saturação de endereços IPV4. Conseguiu executar sua principal função com perfeição: dar sobrevida ao IPV4 que há décadas vem se extinguindo.
Por outro lado, o NAT fere um dos principais princípios da internet: a comunicação fim a fim. Pois, em sua implementação, como visto neste trabalho, ele altera diversas vezes o cabeçalho de comunicação (alterando o IP e porta de origem), sendo assim bastante criticado.
Citado como funcional no quesito segurança por algumas bibliografias, as vantagens e desvantagens do NAT ficam em função do cenário onde está aplicado, ou seja, variam de tipo para tipo de NAT. Sem muitos concorrentes para compará-lo e nenhum à altura em nível de utilização, o NAT tende a deixar de ser usado dentro de alguns anos devido a implementação do IPv6, onde sua funcionalidade é inexistente.

Referencias