Протокол IP : Технология NAT

Предотвращение петель маршрутизации при использовании динамического преобразования сетевых адресов NAT

20 октября 2016 - Машинный перевод
Другие версии: PDF-версия:pdf | Английский (22 августа 2015) | Отзыв


Содержание


Введение

Этот документ описывает сценарий в который пакетная петля между маршрутизатором NAT и соседним маршрутизатором на внешнем интерфейсе при использовании динамической трансляции сетевых адресов (NAT) из-за трафика, предназначенного для неиспользованного IP-адреса в пуле NAT и присутствии маршрута по умолчанию на маршрутизаторе NAT, направляющем эти пакеты назад к внешней стороне.

Предварительные условия

Требования

Для этого документа отсутствуют особые требования.

Используемые компоненты

Настоящий документ не имеет жесткой привязки к каким-либо конкретным версиям программного обеспечения и оборудования.

Сведения, содержащиеся в данном документе, были получены с устройств в специальной лабораторной среде. Все устройства, описанные в данном документе, были запущены с конфигурацией по умолчанию. При работе с реальной сетью необходимо полностью осознавать возможные результаты использования всех команд.

Схема сети

Следующая топология использовалась для создания примера сценария.

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

Условные обозначения

Дополнительные сведения об условных обозначениях в документах см. Cisco Technical Tips Conventions.

Пример сценария

В вышеупомянутой топологии Маршрутизатор A настроен с NAT так, чтобы это преобразовало пакеты из источника от сети 171.68.200.0/24 к диапазону адресов, определенных пулом NAT "test-loop". Конфигурация маршрутизатора A следующим образом (все другие маршрутизаторы настроены со статическими маршрутами для получения подключения):

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

При помощи команд NAT translation debugging и IP packet debugging была сгенерирована команда ping от маршрутизатора на стороннее устройство. Эхо-запрос работал, и запись в таблице трансляции генерировалась. Приведенные ниже выходные данные показывают, что отладка IP-пакетов и IP NAT включены, и в таблице трансляции нет записей.

Примечание: Команды отладки генерируют значительный объем выходных данных. Используйте их только тогда, когда трафик в IP-сети низкий, чтобы не снизить быстродействие других процессов системы.

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#

Внутренний маршрутизатор (внутреннее устройство) создает ICMP-пакеты с исходным адресом 171.68.200.48 и конечным адресом 171.68.191.1 (адрес внешнего устройства). Следующие выходные данные отладки показывают пакет IP с IP - адресом источника 171.68.200.48 преобразовываемый в 172.16.47.161. Пакеты приходят на интерфейс Serial0, который перенаправляет их на интерфейс 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

В следующих выходных данных отображается, что возвращаемый IP-пакет с IP-адресом назначения 172.16.47.161 транслируется обратно на 171.68.200.48. Пакет прибывает в интерфейс Serial1 и предназначен интерфейс 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

Результаты отладки отображают успешный обмен пакетами между внутренним и внешним устройством:

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

Используя команду show ip nat translations, можно найти запись в таблице преобразований для внутреннего устройства.

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

Теперь, при наличии преобразования для внутреннего устройства в таблице преобразований можно успешно выполнить эхо-тест с внешнего устройства до глобального адреса внутреннего устройства, что показано в отладочном выводе, сгенерированном маршрутизатором Router-A ниже.

Примечание: Исходным адресом пакета, исходящего от внешнего устройства, является 171.68.191.1, а адрес назначения 172.16.47.161 (внутренний глобальный адрес в таблице преобразования).

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

Следующие выходные данные отладки демонстрируют то, что может произойти, когда внешнее устройство пытается инициировать связь с адресом назначения (DA), это - неиспользованный IP-адрес в пуле тестовой петли. Команда clear ip nat translation использовалась для очистки таблицы преобразования, и эхо-запрос передавался неиспользованному IP-адресу в пуле тестовой петли.

Внешнее устройство посылает ICMP-пакет на внутренний глобальный адрес 172.16.47.161. Однако выходной интерфейс совпадает с входным интерфейсом для этого пакета.

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

Прежде чем передать пакет, NAT транслирует входящие пакеты. В этом случае в таблице преобразования нет никакой записи, таким образом, Маршрутизатор A может только направить пакет. Маршрутизатор A полагается на свой маршрут по умолчанию для маршрутизации пакетов, передавая пакеты обратно интерфейс Serial1, который вызывает петлю, которая могла в конечном счете перевести последовательную линию в нерабочее состояние.

Чтобы избежать зацикливание при маршрутизации этого типа, никогда не направляйте пакеты от внешних устройств на внутренние глобальные адреса. Однако, поскольку обеспечить это сложно, можно добавить статический маршрут для внутренних глобальных адресов со следующим переходом null0 на маршрутизаторе А. Таким образом, если внешнее устройство отправляет пакеты на внутренний глобальный адрес, а в таблице перевода отсутствует запись, маршрутизатор A пересылает пакет на null0 во избежание создания петли. С использованием вышеуказанного примера статический маршрут выглядит таким образом:

ip route 172.16.47.160 255.255.255.252 null0.

Дополнительные сведения


Document ID: 13775