NAT - Network Address Translation

Adriano Reis da Cunha

 

Introdução

NAT - Network Address Translation

NAT - clássico

NAT - moderno

Masquerading (NAPT)

Problemas

NAT e o futuro

Referências/bibliografia

Transparências utilizadas na apresentação
 

 
Perguntas
 

 

 

Universidade Federal do Rio de Janeiro
Escola de Engenharia
Departamento de Eletrônica

 

Network Address Translation - NAT

 

Prof.: Otto Duarte
Aluno: Adriano Reis da Cunha - 931313980

 
 
 
"Computers are useless.
They can only give you answers."
-- Pablo Picasso (1881-1973)
 

 

 

 

 

 

Introdução
 

Internet é uma palavra utilizada para descrever uma grande rede de computadores. Literalmente, significa "rede de redes". Ela é composta por milhares de redes menores espalhadas por todo o mundo. A World-Wide Web é o serviço mais utilizado na Internet atualmente. Ela mescla textos, dados e imagens - é um espaço abstrato de conhecimento. Enquanto isso, a Internet se refere a parte física propriamente dita - computadores, cabos e fios - e suas interconexões.

O crescimento da Rede nos últimos anos tem sido surpreendente. Estima-se que a cada dia alguns milhares de máquinas se conectem a ela. Tal crescimento, gerou alguns problemas, pois a sua infra-estrutura foi proposta já se passa algumas décadas. Não havia como prever o surgimento de tanta demanda por conectividade em uma época em que apenas um número mensurável de máquinas estava ligado a Rede. A versão original do protocolo IP, que utiliza-se de quatro octetos (bytes) para identificar uma maquina, apesar de oferecer uma quantidade de números (IPs) suficiente para atender àqueles que hoje existem, por limitações dos protocolos de roteamento, não será capaz de atender a todos. Há de se ressaltar, também, que a capacidade atual do hardware de fazer a recuperação de informações das entradas em uma tabela de roteamento limita a banda em pouco mais de 1 GB/s.

Um novo protocolo de transporte foi proposto: o IPv6. Espera-se que ele seja capaz de suprir a demanda por números IP nas próximas décadas, pois ele aumenta consideravelmente o espaço de endereçamento. O desenvolvimento de um protocolo de tal importância, sua primeira implementação e testes demandam algum tempo. A quantidade de esforço envolvida na migração para a nova tecnologia levará outro tanto de tempo. Teremos que conviver e contornar as limitações do IPv4 por alguns anos. Tem-se que achar soluções a curto prazo para o problema, pois o número de IPs a se distribuir é escasso.

Uma possível solução é o uso de números IPs que só sejam visíveis dentro de uma organização - IPs locais. Todos os recursos de uma rede de computadores passam a ser utilizados sem que se gaste sequer um dos IPs globais. Um proxy pode fazer o interfaceamento entre a rede da organização e a Internet. Neste caso, tem-se o acesso a Internet com o gasto de um IP global apenas para um sem-número de IPs locais.

Uma solução mais genérica é a conversão de IPs locais em alguns IPs globais alocados para a organização quando uma máquina da rede interna troca dados com a Inet. Normalmente, a cada instante de tempo, o número de máquinas falando com o mundo exterior é demasiado menor que o total instalado em uma empresa. Neste contexto, os IPs globais podem ser dinamicamente distribuídos de acordo com a necessidade. Tais máquinas estarão ligadas a um NAT-router que lhes atribuirá o IP global. A maior parte das aplicações é totalmente insensível a tal política, pois a tradução ocorre na camada IP. Em um modelo ideal, nenhum programa tomaria conhecimento de tal tradução.
 

NAT - Network Address Translation

 
No início, o NAT (Network Address Translation) era um recurso imaginado apenas para contornar o problema de falta de números IP. Neste meio tempo, provou-se que ele pode ter utilidade em uma série de outros campos de aplicação. Algumas novas aplicações, certamente, estão por vir. O IPv6 é uma solução muito boa, tecnicamente falando, mas sua adoção traz a necessidade de recompilação de uma série de aplicativos. As projeções indicam que o IPv4 estará sendo utilizado por alguns anos - talvez vários - até a total migração.

Define-se NAT estático (static NAT) aquele no qual as traduções são sempre as mesmas. Um dado IP global é sempre o resultado da tradução de um determinado IP local - todo o tempo. Nenhum outro IP local é traduzido naquele IP global. No NAT dinâmico (dynamic NAT), a tradução de um IP local em um IP global depende de uma série de fatores definidos em tempo de execução. A cada nova tradução é possível que um IP local obtenha um novo endereço global.

Técnicas clássicas de NAT:

Static NAT

Neste tipo de tradução, encontramos redes que têm o mesmo tamanho (elas contém o mesmo numero de IPs). Um caso especial acontece quando as duas contém apenas um IP (netmask 255.255.255.255). É claro que esta tradução pode ser feita através de lógica booleana apenas.

Não é necessario que qualquer informação sobre a manutenção do estado das conexões seja mantida. Somente se precisa que se olhe cada um dos pacotes IP. Não há, neste caso, qualquer tipo de problema para se acessar um computador da rede interna vindo da rede externa, pois o que se vê é sempre o mesmo endereço com o qual se fala no mundo exterior.

Este tipo de NAT é quase completamente transparente.

 
Dynamic NAT

Neste caso a tradução é feita entre um número de IPs locais maior ou igual que o número de IPs globais.

Quando o número de IPs não é igual entre as redes que se procura mapear ou, por algum motivo especial, não é interessante que se faça sempre a mesma tradução, o static NAT não é mais a solução procurada.

O número de máquinas que poderão falar com a rede externa simultaneamente está limitado ao número de NAT IPs disponíveis. Quando todos os NAT IPs já foram utilizados nenhuma outra conexão pode ser feita e a conexão deve ser recusada pelo NAT router - uma mensagem como "host unreachable" deve ser devolvida.

O NAT dinâmico é mais complexo que o NAT estático, pois tem que se manter a informação do estado da comunicação e, em alguns casos, examinar o interior do pacote a procura de informações TCP.

O NAT dinâmico pode ser utilizado por motivos de segurança. Tem-se, neste caso, um número suficiente de IPs globais, mas não se deseja que por inspeção de pacotes se consiga, da rede externa, descobrir o IP que dá acesso a uma determinada máquina da rede interna. O NAT router vai estar fazendo traduções a todo instante e, com boa probabilidade, o IP global será dado a outra máquina quando da próxima conexão entre a rede interna e externa. Este é o único caso em que ter mais NAT IPs do que IPs a serem traduzidos pode ter sentido.

As conexões de fora são somente possíveis quando uma máquina ainda estiver utilizando o NAT IP designado - neste caso, a tabela de tradução, que é dinâmica, ainda tem a informação de qual IP interno é mapeado naquele externo. É o caso de conexões FTP, por exemplo.

Nos outros caso, quando de fora se tenta acessar uma máquina da rede interna ou se descobre que ela não está mais na tabela de roteamento NAT ou a nova máquina é desconhecida. No último caso, há, ainda, a certeza de que o IP local não virá a ser conhecido externamente e, após o "aging", tal entrada na tabela de routeamento NAT estará desocupada.
 
 

Masquerading (NAPT)

É um caso especial de NAT dinâmico. Neste temos o mapeamento de diversos IPs locais em apenas um IP global.

O nome masquerading se popularizou com sua implementação em máquinas Linux. Esta é a técnica mais utilizada nos dias de hoje. Neste caso, toda a rede interna é mapeada em um IP externo. Uma diferença entre o NAT dinâmico em sua forma natural é que, neste caso, não há a limitação de uma conexão a cada instante, ou seja, não há a correspondência entre uma máquina trocando dados com a Internet e um NAT IP ocupado.

No masquerading, um número muito grande de conexões é possível através da multiplexação que se utiliza das informações de portas TCP (TCP ports). O número está limitado pelo numero de TCP ports disponível.

Um problema especial, neste caso de NAT, é que em alguns servidores, algumas conexões podem vir, apenas, de portas privilegiadas. Esta idéia surgiu do fato de que, em máquinas Unix, as portas de número inferior a 1024 só podem ser utilizadas quando se tem um nível de privilégio de super-usuário - o que limita o acesso do usuário comum. Hoje em dia, com a popularização de máquinas DOS e Windows na Internet, essa acertiva não é mais verdadeira, pois qualquer usuário pode usá-las nestes sistemas operacionais.

No masquerading, não é possivel se conectar em uma determinada máquina de fora da rede. A entrada na tabela NAT é válida somente enquanto a conexão está ativa.

Algumas extensões possíveis ao masquerading: é possível se contornar a limitação de acesso a máquinas na rede interna através da inclusão de novo código - que não é parte do masquerading. Pode-se, por exemplo, ligar uma porta a um determinado IP local. Uma máquina, por exemplo, poderia ser responsável pelo serviço de telnet, outra pelo atendimento a web (http), etc. Há outro problema a ser contornado, ainda, pois os aplicativos que oferecem os serviços mais comuns esperam a conexão em uma determinada porta e o masquerading - na rede interna - utiliza portas de número alto.
 
 

Outras técnicas de NAT:
 

As técnicas clássicas dão sua valiosa contribuição para a resolução de problemas do limite de números IPs. Há outros usos de NAT que são independentes da solução destes problemas. Isso fará com que o NAT não venha a se tornar obsoleto com a adoção de uma solução efetiva de longo prazo - o IPv6 entre elas.

Há aqui algumas e sempre se está criando uma nova aplicação para o NAT:
 

Balanceamento de carga (load balancing)

Com a expansão da idéia de "virtual servers" se espalhando, é possivel que se tenha um IP global representando o "virtual server" e várias máquinas com IPs locais para os que se possa traduzir o endereço de destino dentro do domínio (local) de uma conexão.

O algoritmo de distribuição pode levar em conta o fluxo de pacotes que são trocados por um determinado servidor e escolher um IP local com uma carga mais leve. Vários algoritmos podem ser propostos, por exemplo, utilizando a informação disponível no NAT router ou um em que a máquina destino troque informações sobre sua carga atual como o NAT router.
 

Backup Systems
 

Se levarmos em consideração a resposta a falhas, a idéia de servidores virtuais pode ser responsável pela alta disponibilidade de um serviço. Enquanto um dos servidores locais estiver no ar, o serviço será mantido.

O algoritmo de distribuição deve considerar, também, a retirada imediata de uma entrada com um IP local que não esteja mais disponível.
 

Diversas rotas para um dado endereço de destino

O princípio aplicado acima pode ser extendido para redes de computadores. Acima, uma máquina virtual representava uma série de máquinas reais. Pode-se imaginar que duas faixas de IPs possam ser levadas a uma faixa de endereços de uma rede.

Em um cenário possível, uma empresa tem acesso a Internet através de dois provedores. Cada provedor entrega a empresa uma determinada faixa de IPs. Com a tradução dos pacotes, obtém-se uma alta disponibilidade de acesso a Rede sem que seja necessário reconfigurar suas máquinas a cada necessidade de troca de provedor de acesso, pois tal serviço é realizado pelo NAT router
 
 

Problemas

 
Uma conexão entre duas máquinas na Internet é definida pelo quinteto protocolo, IP origem, porta de origem, IP destino e porta de destino. Quando, entre tais máquinas se interpõe um tradutor, este é o único a ter conhecimento do que se passa realmente. Para que isso seja possível, os NAT routers são responsáveis por manter uma série de informações. A maior parte delas desnecessárias a um router convencional.

Excetuando o caso do NAT estático, é necessário que se saiba quais clientes estão utilizando o NAT router e que conexões foram realizadas por eles. As informações relativas ao estado da conexão devem levar em conta os períodos de timeout ligados às aplicações - uma conexão http e telnet devem ter seus valores de tempo de desconexão automática diferentes.

O exame dos pacotes que transitam entre a rede interna e externa é essencial para que o algoritmo de tomada de decisão possa escolher entre encerrar uma conexão que esteja inativa por um longo tempo e outra que esteja há pouco.

Alguns protocolos carregam números IP e/ou de porta na área de dados de seus pacotes, por exemplo, o FTP e o ICMP. Em alguns casos, é necessário fazer a tradução desta informação também.

Um problema interessante é como oferecer o serviço de DNS para que os computadores de uma rede externa acesse algumas máquinas na rede interna. Uma possível solução é colocar dois serviços de DNS - um deles em uma máquina interna a rede e outro em uma outra externa a rede. Alguns IPs globais devem ser separados para as máquinas que se manterão em contato com o mundo exterior.

 

NAT e o futuro

 
Quando levamos em consideração a evolução dos microcomputadores, cada novo hardware tinha seus recursos acessados diretamente. Cada programador desenvolvia sua biblioteca de funções que acessava a memória diretamente, os dispositivos de entrada e saida (I/O - Input/Output) ou qualquer outra parte do sistema computacional. Era obra do programador se preocupar com a temporização na comunicação entre computador e disco ou terminal de texto, por exemplo. A escolha das chamadas de função e de seus respectivos parâmetros era feita de modo empírico. Ela visava atender aos critérios estabelecidos pelas necessidades do programador. Houve essa época.

Entre os PCs, não faz tanto tempo, os processadores e os programas tinham acesso direto a memória. Sabia-se onde estavam o código e os dados de cada um dos programas que rodava em uma determinada máquina. Partições de código e dados eram tratadas igualmente. Com o passar do tempo, viu-se que o acesso direto tinha uma série de desvantagens. Não se desejava mais tal "recurso", não se queria mais saber em que posição de memória um programa rodava - nem pelos programadores responsáveis pelos sistemas e, muito menos, pelos programadores que geravam os aplicativos. A solução encontrada foi introduzir uma nova camada que separaria e esconderia a memória física do software. Foram criadas as unidade de gerênciamento de memória de um computador (MMU - Memory Management Unit). A divisão entre área de código e área de dados ficou mais clara. Os programas passaram a utilizar porções de memória com o mesmo endereço lógico. Passou a ser responsabilidade da MMU fazer a tradução do endereço lógico em físico, ainda que o físico nao existisse como memória, mas sendo uma porção da unidade de disco rígido. Ela passou a ser a responsável pela troca de páginas de RAM entre a memória física e a virtual.

Com as redes acontece algo semelhante a essa evoluçao. As redes começaram pequenas e era possível ao administrador conhecer cada um dos nós. Costumava-se mapear um nome a um ou mais IPs - como sabia-se onde estava uma determindada sub-rotina. Mesmo que hoje em dia ainda usemos ponteiros, o fazemos com uma ídeia norteadora totalmente diferente de tempos idos. Eles são "endereços virtuais" e não se toma conhecimento em que posição a informação está armazenada.

É possivel que, no futuro, tais idéias sejam aplicadas às redes de computadores. É possivel que um novo tipo de endereço surja e ele seja utilizado para mapear um serviço sem que haja a necessidade de se saber qual IP é utilizado. O DNS é um passo neste sentido, pois cada vez menos, sabe-se o endereço IP de uma máquina. Apesar de oferecer uma pequena gama de serviços, já se pode ter uma idéia do potencial a ser explorado. Hoje em dia, somente os programadores de sistemas utilizam - de vez em quando - a informação da posição física de uma informação - e eles criam mecanismos para que nunca seja necessário que saibamos.

O NAT surgiu como uma solução de curto prazo - algo para evitar um problema iminente -, mas tem a capacidade de permitir que se imagine um novo tipo de virtualização de serviços dado a sua capacidade de se implementar e fazer experimentos utilizando-se de tais práticas em pequena escala.

 

Referências/bibliografia:

 
RFC 1631 - NAT: K. Egevang, P. Francis, RFC 1631 ``The IP Network Address Translator (NAT)'' (1994);

RFC 1519 - CIDR: Fuller, V., Li, T., and J. Yu, RFC 1519, "Classless Inter-Domain Routing (CIDR) an Address Assignment and Aggregation Strategy" (September 1993);

RFC 1918 - Alocação de endereços: IETF Network Working Group, RFC 1918, "Address Allocation for Private Internets" (1996)

khg: Linux Kernel Hacker Guide (http://sunsite.unc.edu/LDP)

Comer: Comer, Internetworking with TCP/IP (xxx)

ICMP: J. Postel, RFC 792 ``INTERNET CONTROL MESSAGE PROTOCOL'' (1981)

FTP: J. Postel, J. Reynolds, RFC 959 ``FILE TRANSFER PROTOCOL'' (1985)

Guide: Hughes, Kevin, "Guide to cyberspace"
 
 
 
 

Perguntas
 

1) O que  NAT e como suas tecnicas sao divididas?
   NAT eh a traducao dos numeros IPs em um pacote para permitir sua utilizacao por uma outra maquina. Tal troca eh feita por um NAT router. Suas tecnicas sao divididas entre as tecnicas classicas e as modernas.

2) Que tipo de aplicacao pode justificar a existencia de um maior  número de IPs globais do que IPs locais?
   Aplicacoes em que se queira aumentar a seguranca de uma determinada maquina, pois, apos a retirada da entrada de uma maquina da tabela do NAT router, a chance de que esta maquina obtenha o mesmo IP global torna-se ainda menor.

3) O que  "load balancing" (balanceamento de carga)?
   "Load balance" eh a distribuicao do fluxo de dados entre duas ou mais maquinas de um determinado sistema computacional com o objetivo de aumentar sua capacidade de responder as solicitacoes de troca de dados com o meio externo.

4) Como o NAT pode participar da soluo de problemas de "high-availability"  (alta disponibilidade)?
   Facilitando na integracao de redundancia as redes de computadores. Por exemplo, uma empresa que tem dois links para o mundo exterior. Quando acontece a queda de um link, temos sua troca sem que seja necessario modificar a configuracao em quaisquer das maquinas. Rapida e automaticamente.

5) O que masquerading? Em que caso ele indicado?
   O masquerading eh um caso especial de NAT onde temos o mapeamento de diversos IPs locais em apenas um IP global. Ele indicado quando se tem apenas um IP global para varias maquinas locais - como acontece em pequenos escritorios.