Há alguns anos, com o esgotamento dos endereços IPv4 cada vez mais próximo, foi necessário encontrar uma alternativa para diminuir a velocidade de alocação de endereços IPv4 e aproveitar ainda melhor aqueles que já haviam sido alocados para os provedores de serviço (RFC-1631). Uma dessas alternativas foi a utilização de muitos endereços privados (conforme definido no RFC-1918) que posteriormente deveriam ser traduzidos para um (ou mais) endereço público para assim haver conectividade entre endereços públicos da Internet e endereços privados. Essa estratégia ficou conhecida como NAT (Network Address Translation).
A Cisco, por sua vez, possui uma terminologia e uma maneira particular de implementar os três principais tipos de NAT (estático, dinâmico e tradução de portas), no entanto, existem algumas informações importantes sobre roteamento e NAT Virtual Interfaces que devem ser entendidas também, e é isso que vamos tratar neste post. Para começar, é necessário entender a terminologia local e global, assim como inside e outside.
- Inside local address: é o endereço atribuído a interface de rede de uma estação, por exemplo (escopo local).
- Inside global address: é o endereço público que representa um ou mais endereços inside local (escopo global ou a Internet).
- Outside local address: é a forma como um endereço IP público é visto na rede interna. Geralmente este endereço é roteado somente pelos roteadores internos (não é roteado na Internet e, portanto, possui um escopo local).
- Outside global address: é um endereço público da Internet (é roteado na Internet).
É claro, também, que esta terminologia existe para nos auxiliar a entender onde estas definições e posteriores configurações serão utilizadas, já que os roteadores não possuem a inteligência necessária para distinguir um endereço público de um endereço privado (no final, serão somente
zeros-e-uns). A figura abaixo (fornecida gentilmente pela Cisco) representa estas definições.
Essas definições serão importantes para escolher quais interfaces serão classificadas como
inside e
outside e como serão construídas as regras de tradução.
Seguindo o exemplo da figura abaixo, um host com endereço IP 192.168.0.1 (inside local) envia um pacote para o endereço 72.72.72.1 (DA - outside local e outside global). Ao passar (da interface INSIDE para OUTSIDE) por um roteador com NAT habilitado poderá ter traduzido o endereço de origem (SA) de 192.168.0.1 (inside local) para 200.200.200.1 (inside global). Esta tradução permite que o host 192.168.0.1 estabeleça uma comunicação com o host 72.72.72.1. O pacote com a resposta do host 72.72.72.1 terá como endereço de destino 200.200.200.1 (inside global) e novamente ao passar pelo roteador com NAT habilitado será traduzido - agora o endereço de destino - de 200.200.200.1 para 192.168.0.1 (inside local), fazendo com que os pacotes cheguem até o seu destino correto. Exemplo:
Com isso, podemos ver como fica a configuração para um ambiente com
NAT estático como é exemplificado na figura acima.
ip nat inside source static 192.168.0.1 200.200.200.1
! interface INSIDE
interface fast0/0
ip nat inside
! interface OUTSIDE
interface serial0/0
ip nat outside
A utilização de "inside source" ou "outside source" na regra de tradução (NAT) altera a forma como é traduzido o endereço dos pacotes de acordo com o sentido do tráfego:
-
ip nat inside source- Traduz o endereço de ORIGEM dos pacotes que trafegam da interface inside para outside.
- Traduz o endereço de DESTINO dos pacotes que trafegam da interface outside para inside.
-
ip nat outside source- Traduz o endereço de ORIGEM dos pacotes que trafegam da interface outside para intside.
- Traduz o endereço de DESTINO dos pacotes que trafegam da interface inside para outside.
Podemos agora verificar se está tudo funcionando conforme o planejado com o seguinte comando:
Router#show ip nat translations
Pro Inside global Inside local Outside local Outside global
--- 200.200.200.1 192.168.0.1 --- ---
Ainda temos dois tipos de NAT que não serão discutidos aqui, tal como o NAT dinâmico e a tradução de porta (também conhecido como PAT, ou
Port Address Translation). Estes outros tipos de NAT seguem o padrão apresentado acima.
Vamos analisar uma outra questão importante quando estamos trabalhando com NAT...
NAT Virtual InterfaceUm dos problemas que podemos enfrentar quando habilitamos NAT utilizando interfaces INSIDE e OUTSIDE é a necessidade de inserir rotas para os endereços traduzidos. Isso acontece pois a ordem de tradução e roteamento ocorre em momentos diferentes durante o processamento de um pacote dependendo do sentido do tráfego. No sentido
inside-to-outside a tradução é feita DEPOIS da decisão de roteamento. No sentido contrário (
outside-to-inside) a tradução acontece primeiro. A ordem completa pode ser encontrada
aqui.
A partir da versão 12.3T a Cisco introduziu o conceito de
NAT Virtual Interface (NVI)*. Dessa forma, a tradução dos endereços ocorre de forma simétrica e não é necessário inserir rotas para os endereços traduzidos. Quando uma interface está habilitada para fazer NAT utilizando NVI, o pacote que adentrar esta interface será roteado para a interface NVI (onde ocorre a tradução) e depois roteado mais uma vez utilizando a tabela de roteamento. A configuração utilizando NVI para o exemplo que citamos acima é a seguinte:
ip nat source static 192.168.0.1 200.200.200.1
interface fast0/0
ip nat enable
interface serial0/0
ip nat enable
Veja que dessa forma não é necessário declarar nenhuma interface como
inside ou
outside, ou mesmo declarar o sentido de tradução no comando de NAT estático. Esta nova funcionalidade resolve também o problema de tradução para endereços roteados para uma mesma interface de entrada (já que pode existir casos em que um pacote pode entrar por uma interface
outside e nunca alcançar a interface
inside correspondente, conforme descrito
neste artigo).
Para encerrar este
post, gostaria de reforçar que até aqui não foi apresentado nenhum mecanismo ou forma de segurança relacionada com a utilização (ou a não utilização) de NAT, apesar de, no passado, muitos profissionais acreditarem que a simples utilização de
tradução de endereços poderia aumentar a segurança de um ambiente...
Veja também:
(*) A interface NVI0 que está presente nos roteadores que possuem NAT habilitado (a partir da versão 12.3T) é a NAT Virtual Interface:
Router# show interfaces
(...)
NVI0 is up, line protocol is up
Hardware is NVI
Interface is unnumbered. Using address of NVI0 (0.0.0.0)
(...)