O NAT não é um protocolo nem um padrão. O NAT é apenas uma série de
tarefas que um roteador (ou equipamento equivalente) deve realizar
para converter endereços IPs entre redes distintas.
Um equipamento que tenha o recurso de NAT (sigla em inglês: "Network
Address Translation" ou Tradução de Endereço de Rede) deve ser capaz
de analisar todos os pacotes de dados que passam por ele e trocar os
endereços desses pacotes de maneira adequada. Para facilitar o
entendimento do NAT vamos ver dois exemplos:
Exemplo 1
Suponha que nós queremos conectar uma rede de três computadores na
Internet através de uma única linha telefônica, um modem e apenas uma
conta de acesso ao provedor.
Temos então os computadores com endereços IPs de 10.0.0.2 a 10.0.0.4
(note que esses endereços IPs não são válidos na Internet, assim os
pacotes de dados enviados por essas máquinas não podem ser roteados
na Internet), um roteador com 2 endereços IPs: 10.0.0.1 na rede local
e 200.231.107.41 que ele recebeu ao se conectar ao provedor. Repare
que o endereço que o roteador recebeu pode mudar a cada conexão.
Vamos agora entender como essa conexão funciona: o roteador deve ter
o recurso de NAT. Esses roteadores tem uma porta Ethernet conectada
ao hub da rede local e uma porta serial conectada a um modem ou linha
ISDN.
Enquanto ninguém esta acessando a Internet a conexão com o provedor
não esta ativa e a linha telefônica esta disponível.Quando alguma
máquina da rede acessa a Internet ela manda o pacote de dados para o
roteador (que é o default gateway da rede),este então envia os
comandos de discagem para o modem, que se conecta com o modem do provedor;
após a conexão dos modens o roteador passa um nome de usuário e uma
senha para o servidor de comunicações do provedor e recebe um endereço IP.
Se os computadores da rede tivessem endereços IPs válidos estaria
tudo pronto e o roteador só passaria o pacote de dados para o provedor,
porém, como vimos acima,os endereços IPs são escassos e por isso não
podemos nos dar ao luxo de utilizarmos endereços IPs válidos na rede
local. Assim, o roteador deve, antes de enviar o pacote de dados para
o provedor, trocar o endereço de origem do pacote de dados para o
endereço que ele recebeu do provedor e só depois jogar o pacote para o
provedor; quando o pacote voltar o roteador deve trocar o endereço de
destino do pacote novamente para o endereço não válido da máquina na
rede local e só depois jogar o pacote para essa máquina.Esse processo
de troca de endereços IPs é o chamado NAT.
Porem nem tudo e tão simples assim. Esse processo funcionaria muito
bem se apenas um computador acessasse a Internet a cada instante,
porém nós queremos que todas as máquinas possam acessar a Internet ao
mesmo tempo. Assim é possível que em um determinado instante pacotes
de dados de duas máquinas distintas cheguem ao roteador, ele deve
então trocar o endereço de origem dos pacotes e enviar para a Internet
e, ao receber a resposta, trocar os endereços IP de destino dos pacotes
adequadamente para os respectivos computadores.
Para que o roteador possa encaminhar a resposta corretamente a cada
um dos computadores de destino o roteador tem que "lembrar" para onde
cada máquina enviou os pacotes,de forma que quando os pacotes de
resposta chegarem ele possa identifica-los corretamente. Assim, o
roteador deve armazenar em sua memória os pacotes que passaram por ele até
que as respostas cheguem.
Devido ao fato de que os pacotes de dados só entram se houve um pacote
correspondente que saiu a segurança da rede fica muito forte. Um
pacote enviado por alguém na Internet tentando invadir a rede irá
chegar até o roteador,porém como ele não vai encontrar em sua memória
um endereço da rede local para enviar esse pacote o roteador irá
simplesmente jogar o pacote fora.
Exemplo 2
No exemplo anterior vimos como ligar a Internet a uma pequena rede
utilizando um roteador com NAT, uma linha telefônica, um modem e uma
conta de acesso no provedor.Naquele exemplo a rede local acessa a
Internet, porem a Internet não consegue acessar nenhum serviços da rede
local.
Neste exemplo vamos analisar um outro caso: uma rede que deseja que
suas máquinas locais acessem a Internet, porém também que a Internet
seja capaz de enxergar um servidor WWW e um servidor de DNS na rede
local.
Assim, temos dois computadores na rede local: o 10.0.0.2 e 10.0.0.3,
dois servidores: o 10.0.0.4 que é servidor de WWW e o 10.0.0.5 que é
servidor de DNS e por último o roteador do exemplo anterior.
Algumas diferenças básicas entre este exemplo e o anterior:
- Neste exemplo a Internet deve ser capaz de endereçar o roteador, ou
seja, o endereço do lado válido do roteador deve ser fixo. Para que
os computadores na Internet acessem essa rede eles devem conhecer o
endereço IP dela,e isso fica muito difícil se o endereço muda a cada
instante. Isso implica que um acordo deve ser firmado entre o
provedor e o administrador da rede de forma que o provedor configure
os seus servidores de comunicação para passarem para o roteador
dessa rede sempre o mesmo endereço IP.
- O roteador deve ser capaz de identificar cada pacote de dados que
chega e definir se ele deve ser encaminhado para os servidores ou
para os outros computadores da rede (neste último caso, os pacotes
seriam respostas às requisições desses computadores).
- Para que a Internet enxergue os servidores é necessário que a
conexão entre a rede e o provedor esteja estabelecida.Assim, é recomendável
neste exemplo 2 que a ligação entre a rede local e o provedor
seja feita através de uma linha privativa dedicada.Utilizar uma conexão
discada para este caso seria possível, porém nenhuma máquina
na Internet conseguirá acessar esta rede quando a roteador não estiver
conectado ao provedor.
Para que este exemplo funcione o roteador tem que fazer mais do que
NAT, ele deve ser capaz de implementar o conceito de servidor virtual
Vamos relembrar: o roteador com NAT joga os pacotes de dados para a
Internet trocando o endereço IP de origem pelo endereço que ele ganhou
do provedor e pega as respostas que chegam da Internet e joga de
volta para a rede local trocando o endereço de destino (que é o seu
endereço válido) pelo endereço apropriado da rede local.
Muito bem, agora vamos pensar no caso de um computador na Internet
tentando acessar o servidor de WWW: o computador da Internet manda o
pacote de dados para o endereço que o roteador recebeu do provedor
(200.231.107.42), esse pacote chega para o roteador e o roteador deve
então trocar o endereço IP de destino do pacote para 10.0.0.4
(endereço do servidor WWW da rede local) e pegar o pacote com a resposta
gerada pelo servidor e trocar o endereço de destino desse pacote pelo
endereço válido e jogar para a Internet. Para isso,o roteador tem que
ser informado sobre quais computadores da rede local atendem a quais
serviços; esse trabalho é feito pelo administrador da rede local.
Essa capacidade de rotear adequadamente os pacotes de acordo com o
serviço é chamada de Servidor Virtual, pois permite que o roteador se
comporte,do ponto da vista da Internet, como um servidor;porém o
servidor real esta na rede local atrás do roteador. Repare que o recurso
de servidor virtual traz uma segurança muito grande para a rede, pois
apenas os serviços configurados no roteador são passados para a rede,
qualquer tentativa de acessar a rede local ou servidores locais em
qualquer outro serviço não irá obter sucesso.