IP : Conversão de endereços de rede (NAT)

Como Evitar Loops de Roteamento ao Usar NAT Dinâmico

14 Outubro 2016 - Tradução por Computador
Outras Versões: Versão em PDFpdf | Inglês (22 Agosto 2015) | Feedback


Índice


Introdução

Este documento descreve uma encenação em que os pacotes dão laços entre o roteador NAT e o roteador vizinho na interface externa ao usar a tradução de endereço de rede dinâmica (NAT) devendo traficar destinado para um endereço IP de Um ou Mais Servidores Cisco ICM NT não utilizado em um conjunto NAT e a presença de uma rota padrão no roteador NAT que distribui estes pacotes de volta à parte externa.

Pré-requisitos

Requisitos

Não existem requisitos específicos para este documento.

Componentes Utilizados

Este documento não se restringe a versões de software e hardware específicas.

As informações neste documento foram criadas a partir de dispositivos em um ambiente de laboratório específico. Todos os dispositivos utilizados neste documento foram iniciados com uma configuração (padrão) inicial. Se você estiver trabalhando em uma rede ativa, certifique-se de que entende o impacto potencial de qualquer comando antes de utilizá-lo.

Diagrama de Rede

A seguinte topologia foi usada para criar o exemplo de cenário.

/image/gif/paws/13775/4a.jpg

Convenções

Para obter mais informações sobre convenções de documento, consulte as Convenções de dicas técnicas Cisco.

Cenário de exemplo

Na topologia acima, o Roteador-A é configurado com NAT de modo que traduza pacotes com origem da rede 171.68.200.0/24 a um intervalo de endereço definido pelo conjunto NAT “loop de teste”. A configuração do Roteador-a é como segue (todo Roteadores restante é configurado com rotas estáticas a fim obter a Conectividade):

hostname Router-A
!
!
ip nat pool test-loop 172.16.47.161 172.16.47.165 prefix-length 28
ip nat inside source list 7 pool test-loop
!
interface Loopback0
 ip address 1.1.1.1 255.0.0.0
!
interface Ethernet0
 ip address 135.135.1.2 255.255.255.0
 shutdown
!
interface Serial0
 ip address 171.68.200.49 255.255.255.0
 ip nat inside
 no ip mroute-cache
 no ip route-cache
 no fair-queue
!
interface Serial1
 ip address 172.16.47.146 255.255.255.240
 ip nat outside
 no ip mroute-cache
 no ip route-cache
!
ip classless
ip route 0.0.0.0 0.0.0.0 172.16.47.145
access-list 7 permit 171.68.200.0 0.0.0.255
!
!
line con 0
 exec-timeout 0 0
line aux 0
line vty 0 4
 login
!
end

Ao usar a depuração da conversão NAT e os comandos de depuração do pacote de IP, foi gerado um ping do roteador no dispositivo interno. O sibilo trabalhado, e uma entrada de tabela de tradução foram gerados. Na saída abaixo, vemos que a depuração do pacote de IP e a do NAT de IP estão ativas e que não há entradas na tabela de conversão nesse momento.

Nota: Os comandos debug gerenciem uma quantidade significativa de saída. Use-os apenas quando o tráfego na rede IP estiver baixo, de modo que outra atividade no sistema não seja afetada de forma desfavorável.

Router-A# show debug
Generic IP:
  IP packet debugging is on (detailed)
  IP NAT debugging is on
Router-A# show ip nat translations
Router-A#

O roteador interno (dispositivo interno) origina um pacote ICMP com um endereço de origem de 171.68.200.48 e um endereço de destino de 171.68.191.1 (o endereço do dispositivo externo). O seguinte resultado do debug mostra um pacote IP com um endereço IP de origem de 171.68.200.48 que está sendo traduzido a 172.16.47.161. O pacote chega na interface Serial0 e segue para a interface Serial1.

NAT: s=171.68.200.48->172.16.47.161, d=171.68.191.1 [401]
IP: s=172.16.47.161 (Serial0), d=171.68.191.1 (Serial1), g=172.16.47.145, len 100, forward
    ICMP type=8, code=0

A saída de depuração a seguir mostra o pacote IP de retorno com um endereço IP de destino de 172.16.47.161 sendo traduzido outra vez para 171.68.200.48. O pacote vem na relação de Serial1 e é destinado para fora a relação do serial0.

NAT*: s=171.68.191.1, d=172.16.47.161->171.68.200.48 [401]
IP: s=171.68.191.1 (Serial1), d=171.68.200.48 (Serial0), g=171.68.200.48, len 100, forward
    ICMP type=0, code=0

A saída debug exibe a troca de ping bem-sucedida entre o dispositivo interno e o dispositivo externo.

NAT: s=171.68.200.48->172.16.47.161, d=171.68.191.1 [402]
IP: s=172.16.47.161 (Serial0), d=171.68.191.1 (Serial1), g=172.16.47.145, len 100, forward
    ICMP type=8, code=0
NAT*: s=171.68.191.1, d=172.16.47.161->171.68.200.48 [402]
IP: s=171.68.191.1 (Serial1), d=171.68.200.48 (Serial0), g=171.68.200.48, len 100, forward
    ICMP type=0, code=0
NAT: s=171.68.200.48->172.16.47.161, d=171.68.191.1 [403]
IP: s=172.16.47.161 (Serial0), d=171.68.191.1 (Serial1), g=172.16.47.145, len 100, forward
    ICMP type=8, code=0
NAT*: s=171.68.191.1, d=172.16.47.161->171.68.200.48 [403]
IP: s=171.68.191.1 (Serial1), d=171.68.200.48 (Serial0), g=171.68.200.48, len 100, forward
    ICMP type=0, code=0
NAT: s=171.68.200.48->172.16.47.161, d=171.68.191.1 [404]
IP: s=172.16.47.161 (Serial0), d=171.68.191.1 (Serial1), g=172.16.47.145, len 100, forward
    ICMP type=8, code=0
NAT*: s=171.68.191.1, d=172.16.47.161->171.68.200.48 [404]
IP: s=171.68.191.1 (Serial1), d=171.68.200.48 (Serial0), g=171.68.200.48, len 100, forward
    ICMP type=0, code=0
NAT: s=171.68.200.48->172.16.47.161, d=171.68.191.1 [405]
IP: s=172.16.47.161 (Serial0), d=171.68.191.1 (Serial1), g=172.16.47.145, len 100, forward
    ICMP type=8, code=0
NAT*: s=171.68.191.1, d=172.16.47.161->171.68.200.48 [405]
IP: s=171.68.191.1 (Serial1), d=171.68.200.48 (Serial0), g=171.68.200.48, len 100, forward
    ICMP type=0, code=0

Usando o comando show ip nat translations, podemos ver uma entrada na tabela de conversão para o dispositivo interno.

Router-A# show ip nat translations
Pro Inside global      Inside local       Outside local      Outside global
--- 172.16.47.161      171.68.200.48      ---                ---

Agora que existe uma tradução para o dispositivo interno na tabela de tradução, é possível fazer o ping do dispositivo externo para o endereço global do dispositivo interno, conforme demonstrado na saída de debug gerada pelo Roteador A abaixo.

Nota: O pacote originado pelo dispositivo externo tem um endereço de origem de 171.68.191.1 e um endereço de destino de 172.16.47.161 (o endereço global interno na tabela de conversão).

Router-A#
NAT*: s=171.68.191.1, d=172.16.47.161->171.68.200.48 [108]
IP: s=171.68.191.1 (Serial1), d=171.68.200.48 (Serial0), g=171.68.200.48, len 100, forward
    ICMP type=8, code=0
NAT: s=171.68.200.48->172.16.47.161, d=171.68.191.1 [108]
IP: s=172.16.47.161 (Serial0), d=171.68.191.1 (Serial1), g=172.16.47.145, len 100, forward
    ICMP type=0, code=0
NAT*: s=171.68.191.1, d=172.16.47.161->171.68.200.48 [109]
IP: s=171.68.191.1 (Serial1), d=171.68.200.48 (Serial0), g=171.68.200.48, len 100, forward
    ICMP type=8, code=0
NAT: s=171.68.200.48->172.16.47.161, d=171.68.191.1 [109]
IP: s=172.16.47.161 (Serial0), d=171.68.191.1 (Serial1), g=172.16.47.145, len 100, forward
    ICMP type=0, code=0
NAT*: s=171.68.191.1, d=172.16.47.161->171.68.200.48 [110]
IP: s=171.68.191.1 (Serial1), d=171.68.200.48 (Serial0), g=171.68.200.48, len 100, forward
    ICMP type=8, code=0
NAT: s=171.68.200.48->172.16.47.161, d=171.68.191.1 [110]
IP: s=172.16.47.161 (Serial0), d=171.68.191.1 (Serial1), g=172.16.47.145, len 100, forward
    ICMP type=0, code=0
NAT*: s=171.68.191.1, d=172.16.47.161->171.68.200.48 [111]
IP: s=171.68.191.1 (Serial1), d=171.68.200.48 (Serial0), g=171.68.200.48, len 100, forward
    ICMP type=8, code=0
NAT: s=171.68.200.48->172.16.47.161, d=171.68.191.1 [111]
IP: s=172.16.47.161 (Serial0), d=171.68.191.1 (Serial1), g=172.16.47.145, len 100, forward
    ICMP type=0, code=0
NAT*: s=171.68.191.1, d=172.16.47.161->171.68.200.48 [112]
IP: s=171.68.191.1 (Serial1), d=171.68.200.48 (Serial0), g=171.68.200.48, len 100, forward
    ICMP type=8, code=0
NAT: s=171.68.200.48->172.16.47.161, d=171.68.191.1 [112]
IP: s=172.16.47.161 (Serial0), d=171.68.191.1 (Serial1), g=172.16.47.145, len 100, forward
    ICMP type=0, code=0

O seguinte resultado do debug demonstra o que pode acontecer quando um dispositivo exterior tenta iniciar uma comunicação com um endereço de destino que seja um endereço IP de Um ou Mais Servidores Cisco ICM NT não utilizado no pool de teste de loop. O comando clear ip nat translation foi usado cancelar a tabela de tradução e um sibilo foi enviado a um endereço IP de Um ou Mais Servidores Cisco ICM NT não utilizado dentro do pool de teste de loop.

O dispositivo externo envia um pacote ICMP com destino ao endereço global 172.16.47.161. Contudo, a interface de saída é a mesma que a interface de entrada para este pacote.

IP: s=171.68.191.1 (Serial1), d=172.16.47.161 (Serial1), g=172.16.47.145, len 100, forward
    ICMP type=8, code=0
IP: s=171.68.191.1 (Serial1), d=172.16.47.161 (Serial1), g=172.16.47.145, len 100, forward
    ICMP type=8, code=0
IP: s=171.68.191.1 (Serial1), d=172.16.47.161 (Serial1), g=172.16.47.145, len 100, forward
    ICMP type=8, code=0
IP: s=171.68.191.1 (Serial1), d=172.16.47.161 (Serial1), g=172.16.47.145, len 100, forward
    ICMP type=8, code=0
IP: s=171.68.191.1 (Serial1), d=172.16.47.161 (Serial1), g=172.16.47.145, len 100, forward
    ICMP type=8, code=0
IP: s=171.68.191.1 (Serial1), d=172.16.47.161 (Serial1), g=172.16.47.145, len 100, forward
    ICMP type=8, code=0
IP: s=171.68.191.1 (Serial1), d=172.16.47.161 (Serial1), g=172.16.47.145, len 100, forward
    ICMP type=8, code=0
IP: s=171.68.191.1 (Serial1), d=172.16.47.161 (Serial1), g=172.16.47.145, len 100, forward
    ICMP type=8, code=0
IP: s=171.68.191.1 (Serial1), d=172.16.47.161 (Serial1), g=172.16.47.145, len 100, forward
    ICMP type=8, code=0
IP: s=171.68.191.1 (Serial1), d=172.16.47.161 (Serial1), g=172.16.47.145, len 100, forward
    ICMP type=8, code=0
IP: s=171.68.191.1 (Serial1), d=172.16.47.161 (Serial1), g=172.16.47.145, len 100, forward
    ICMP type=8, code=0
IP: s=171.68.191.1 (Serial1), d=172.16.47.161 (Serial1), g=172.16.47.145, len 100, forward
    ICMP type=8, code=0
IP: s=171.68.191.1 (Serial1), d=172.16.47.161 (Serial1), g=172.16.47.145, len 100, forward
    ICMP type=8, code=0

O NAT converte pacotes que vão de fora para dentro antes de roteá-los. Neste caso, não há nenhuma entrada na tabela de tradução, assim que o Roteador-A pode somente distribuir o pacote. O Roteador-A confia em sua rota padrão para distribuir os pacotes, enviando aos pacotes para trás para fora a relação de Serial1, que causa um laço que poderia eventualmente derrubar a linha de série.

Para evitar esse tipo de circuito de roteamento, nunca origine pacotes de dispositivos externos aos endereços globais internos. Contudo,como isto é difícil de impor, você pode adicionar uma rota estática para os endereços globais internos com um Next Hop null0 no Router-A. Dessa forma, quando um dispositivo externo envia pacotes destinados a um endereço global interno e não há entrada na tabela de conversão, o Router-A encaminha o pacote para null0, evitando o loop. Usando o exemplo acima, a rota estática tem a seguinte aparência:

ip route 172.16.47.160 255.255.255.252 null0.

Informações Relacionadas


Document ID: 13775