segunda-feira, 24 de março de 2008

Entendendo NAT em Roteadores Cisco

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 Interface

Um 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)
(...)

10 comentários:

Danielr disse...

Muito boa a matéria!

Ótimo para quem está estudando para o ccna!

falows!

Anônimo disse...

Otimooo Material Gustavoo..

Vai ajudar todos que estao ao Rumo do sonhado CCNA..

Peço gentilmente que voce com o seu conhecimento, deveria postar algumas de suas informaçoes, experiencias e novidades no blog ccna do Marco Filippetti.

www.ccna.com.br

Abraços cara
Parabens

Fernando Bernardi

Rodrigo disse...

I ae cara, vc tem alguma info sobre DNAT em roteadores Cisco?
abs!

Anônimo disse...

http://rodrigocarran.wordpress.com/2009/05/09/entendendo-nat-em-roteadores-cisco/
by rodrigo carran?

Gustavo Rodrigues Ramos disse...

Pois é, né? Sem nenhuma referência... Muito triste. Mas, como diz o ditado: "Quem pode mais, chora menos!" :-).

Gustavo Rodrigues Ramos disse...

Ah! Aproveite para conferir como o Rodrigo Carran fez o blog dele:

http://rodrigocarran.wordpress.com/2009/05/04/teclas-de-atalho-para-windows/

Hilário!
:-D

Pell disse...

Sou recém CCNA e procurei alguns artigos que falasse de NAT. Realmente esse foi um dos melhores!!

Abraços!!

Pell

Jorginho disse...

Sou recém CCNA e procurei alguns artigos que falasse de NAT. Realmente esse foi um dos melhores!!

Abraços!!

Pell

Vinicius Ramos disse...

Gustavo, esse Rodrigo Carran é um grande ******...esse cara copia textos de vários blogs, e coloca como se fosse dele. O pior é que ele tem a cara de pau de editar os textos e imagens, tirando qualquer referência aos sites originais...


http://rodrigocarran.wordpress.com/

Bonanno disse...

posso usar 2 tipos de nat em um mesmo router cisco?

ip nat pool ISP-INTERNET 189.232.45.9 189.232.45.9 netmask 255.255.255.248
ip nat inside source list 2 pool ISP-INTERNET overload
!
access-list 2 permit 10.1.0.0 0.0.0.31
!
ip nat inside source static 10.1.0.0 189.232.45.9