Протокол IP : IP-маршрутизация

Устранение неисправностей, связанных с ненужным переключением BGP-маршрутов (Ошибка рекурсивной маршрутизации)

9 февраля 2011 - Перевод, выполненный профессиональным переводчиком
Другие версии: PDF-версия:pdf | Машинный перевод (28 июля 2013) | Английский (10 августа 2005) | Отзыв

Содержание

Введение
Предварительные условия
      Требования
      Используемые компоненты
      Теоретические сведения
      Условные обозначения
Описание проблемы
      Внешние проявления
      Ошибка рекурсивной маршрутизации
      Причины ошибки рекурсивной маршрутизации
Решение
Временное отключение маршрутов
Связанные обсуждения сообщества поддержки Cisco
Дополнительные сведения

Введение

В данном документе описан порядок устранения неполадок при периодической потере соединения для маршрутов протокола пограничного шлюза (BGP), вызванной ошибкой рекурсивной маршрутизации.

Общие признаки ошибки рекурсивной маршрутизации в BGP:

  • непрекращающееся удаление и восстановление маршрутов BGP в таблице маршрутизации;

  • потеря связи с адресатами, запомненными посредством BGP.

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

Требования

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

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

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

Теоретические сведения

При использовании этого документа следует обратиться к данной схеме сети:

/image/gif/paws/19167/bgp-rec-routing-a.gif

Этот документ составлен исходя из следующих конфигураций:

Rtr-A
hostname RTR-A
!
interface Loopback0
 ip address 10.10.10.10 255.255.255.255
!
interface Serial8/0
 ip address 192.168.16.1 255.255.255.252
!
router bgp 1
 bgp log-neighbor-changes
 neighbor 20.20.20.20 remote-as 2
 neighbor 20.20.20.20 ebgp-multihop 2
 neighbor 20.20.20.20 update-source Loopback0
!
ip route 20.20.20.0 255.255.255.0 192.168.16.2

Rtr-B
hostname RTR-B

!
interface Loopback0
 ip address 20.20.20.20 255.255.255.255
!
interface Ethernet0/0
 ip address 172.16.1.1 255.255.255.0
!

interface Serial8/0
 ip address 192.168.16.2 255.255.255.252
!
router bgp 2
 no synchronization
 bgp log-neighbor-changes
 network 20.20.20.20 mask 255.255.255.255
 network 172.16.1.0 mask 255.255.255.0
 neighbor 10.10.10.10 remote-as 1
 neighbor 10.10.10.10 ebgp-multihop 2
 neighbor 10.10.10.10 update-source Loopback0
 no auto-summary
!
ip route 10.10.10.0 255.255.255.0 192.168.16.1
!

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

Подробные сведения об условных обозначениях см. в документе Условное обозначение технических терминов Cisco.

Описание проблемы

Внешние проявления

В случае ошибки рекурсивной маршрутизации наблюдаются два следующих признака:

  • Постоянная переброска маршрутов, обнаруженных BGP, в таблице IP-маршрутизации.

    Заметить переброску можно, непрерывно наблюдая за таблицей маршрутизации на протяжении нескольких минут.

    RTR-A#show ip route
    Codes: C - connected, S - static, I - IGRP, R - RIP, M - mobile, B - BGP
           D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area 
           N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
           E1 - OSPF external type 1, E2 - OSPF external type 2, E - EGP
           i - IS-IS, L1 - ISIS level-1, L2 - ISIS level-2, ia - ISIS inter are
           * - candidate default, U - per-user static route, o - ODR
           P - periodic downloaded static route
    
    Gateway of last resort is not set
    
         20.0.0.0/8 is variably subnetted, 2 subnets, 2 masks
    B       20.20.20.20/32 [20/0] via 20.20.20.20, 00:00:35
    S       20.20.20.0/24 [1/0] via 192.168.16.2
         172.16.0.0/24 is subnetted, 1 subnets
    B       172.16.1.0 [20/0] via 20.20.20.20, 00:00:35
         10.0.0.0/32 is subnetted, 1 subnets
    C       10.10.10.10 is directly connected, Loopback0
         192.168.16.0/30 is subnetted, 1 subnets
    C       192.168.16.0 is directly connected, Serial8/0

    Примечание. Для выявления переброски маршрутов при работе с крупными таблицами маршрутизации целесообразно применять команду show ip route | include , 00:00.

    Приблизительно по истечении минуты ожидания результат выполнения команды show ip route станет следующим:

    RTR-A#show ip route
    [..]
    
    Gateway of last resort is not set
    
         20.0.0.0/24 is subnetted, 1 subnets
    S       20.20.20.0 [1/0] via 192.168.16.2
         10.0.0.0/32 is subnetted, 1 subnets
    C       10.10.10.10 is directly connected, Loopback0
         192.168.16.0/30 is subnetted, 1 subnets
    C       192.168.16.0 is directly connected, Serial8/0

    Примечание. В приведенной выше таблице маршрутизации нет маршрутов BGP.

  • При наличии маршрутов BGP в таблице маршрутизации подключения к этим сетям не происходит.

    Это можно заметить по непрохождению эхозапроса к действующему хосту 172.16.1.1 в то время, когда в таблице маршрутизации маршрутизатора Rtr-A есть запомненный посредством BGP маршрут 172.16.1.0/24.

    RTR-A#show ip route 172.16.1.0
    Routing entry for 172.16.1.0/24
      Known via "bgp 1", distance 20, metric 0
      Tag 2, type external
      Last update from 20.20.20.20 00:00:16 ago
      Routing Descriptor Blocks:
      * 20.20.20.20, from 20.20.20.20, 00:00:16 ago
          Route metric is 0, traffic share count is 1
          AS Hops 1
    
    RTR-A#ping 172.16.1.1
    
    Type escape sequence to abort.
    Sending 5, 100-byte ICMP Echos to 172.16.1.1, timeout is 2 seconds:
    .....
    Success rate is 0 percent (0/5)
    RTR-A#

Ошибка рекурсивной маршрутизации

На маршрутизаторе Rtr-A следите за маршрутом к другой стороне BGP: 20.20.20.20. Этот маршрут последовательно перебрасывается между двумя следующими переходами примерно раз в минуту.

RTR-A#show ip route 20.20.20.20
Routing entry for 20.20.20.20/32
  Known via "bgp 1", distance 20, metric 0
  Tag 2, type external
  Last update from 20.20.20.20 00:00:35 ago
  Routing Descriptor Blocks:
  * 20.20.20.20, from 20.20.20.20, 00:00:35 ago
      Route metric is 0, traffic share count is 1
      AS Hops 1

Маршрут к IP-адресу другой стороны BGP запоминается непосредственно через BGP, что и ведет к ошибке рекурсивной маршрутизации.

По прошествии приблизительно одной минуты маршрут изменяется следующим образом:

RTR-A#show ip route 20.20.20.20
Routing entry for 20.20.20.0/24
  Known via "static", distance 1, metric 0
  Routing Descriptor Blocks:
  * 192.168.16.2
      Route metric is 0, traffic share count is 1

Причины ошибки рекурсивной маршрутизации

Данные шаги описывают причины ошибок рекурсивной маршрутизации:

  1. Рассмотрим конфигурацию маршрутизатора Rtr-A. В этой конфигурации настроен статический маршрут 20.20.20.0/24, указывающий на непосредственно подключенный следующий переход 192.168.16.2. На этом статическом маршруте установлен сеанс BGP с удаленным маршрутизатором Rtr-B 20.20.20.20.

  2. Rtr-B объявляет BGP маршруты 172.16.1.0/24 и 20.20.20.20/32 к Rtr-A с IP адресом кольцевого интерфейса 20.20.20.20 в качестве следующего перехода.

  3. Маршрутизатор Rtr-A получает маршруты BGP, объявленные маршрутизатором Rtr-B, и пробует установить маршрут 20.20.20.20/32. Это более узкий маршрут, чем 20.20.20.0/24, который уже настроен в Rtr-A как статический. Поскольку изо всех совпадений предпочтение отдается имеющему наибольшую длину, то маршрут 20.20.20.20/32 выбирается как предпочтительный вместо 20.20.20.0/24. Дополнительные сведения см. в документе Выбор маршрутов в маршрутизаторах Cisco. Для установленного маршрута 20.20.20.20/32 в таблице маршрутизации имеется адрес следующего перехода 20.20.20.20 (IP-адрес однорангового соединения маршрутизатора RtR-B). Это приводит к возникновению ошибки рекурсивной маршрутизации, так как в качестве адреса следующего перехода для маршрута к 20.20.20.20/32 указан сам этот адрес.

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

    В данной конкретной ситуации маршрутизатор Rtr-A запоминает маршрут к сети 20.20.20.20/32, не являющейся непосредственно подключенной, с адресом следующего перехода 20.20.20.20, который также не относится к непосредственно подключенным узлам (это адрес самого маршрутизатора). Алгоритм маршрутизации сталкивается с ошибкой рекурсивного цикла маршрутизации: он не может найти непосредственно подключенный интерфейс, на который мог бы переслать пакеты, адресованные 20.20.20.20/32.

  4. Маршрутизатор обнаруживает, что этот непрямой маршрут 20.20.20.20/32 содержит ошибку рекурсивной маршрутизации, и удаляет его из таблицы маршрутизации. Следовательно, все запомненные посредством BGP маршруты с IP-адресом следующего перехода 20.20.20.20 также удаляются из таблицы маршрутизации.

  5. Процесс полностью повторяется с шага 1. Можно в этом убедиться, выполнив команду debug ip routing.

    Примечание. Перед использованием любых команд debug выполните команду access-list, чтобы настроить список контроля доступа (ACL) для конкретной сети, ограничивающий действие режима отладки. В этом примере настройте список контроля доступа, ограничивающий состав выходных данных отладки.

    RTR-A(config)#access-list 1 permit 20.20.20.20
    RTR-A(config)#access-list 1 permit 172.16.1.0 
    RTR-A(config)#end
    
    
    RTR-A#debug ip routing 1 
    IP routing debugging is on for access list 1
     
    00:29:50: RT: add 20.20.20.20/32 via 20.20.20.20, bgp metric [20/0]
    00:29:50: RT: add 172.16.1.0/24 via 20.20.20.20, bgp metric [20/0]
    00:30:45: RT: recursion error routing 20.20.20.20 - probable routing loop
    00:30:45: RT: recursion error routing 20.20.20.20 - probable routing loop
    00:30:45: RT: recursion error routing 20.20.20.20 - probable routing loop
    00:30:46: RT: recursion error routing 20.20.20.20 - probable routing loop
    00:30:46: RT: recursion error routing 20.20.20.20 - probable routing loop
    00:30:48: RT: recursion error routing 20.20.20.20 - probable routing loop
    00:30:48: RT: recursion error routing 20.20.20.20 - probable routing loop
    00:30:50: RT: del 20.20.20.20/32 via 20.20.20.20, bgp metric [20/0]
    00:30:50: RT: delete subnet route to 20.20.20.20/32
    00:30:50: RT: del 172.16.1.0/24 via 20.20.20.20, bgp metric [20/0]
    00:30:50: RT: delete subnet route to 172.16.1.0/24
  6. При ошибке рекурсивного обхода маршрутов появляется следующее сообщение:

    %COMMON_FIB-SP-6-FIB_RECURSION: 10.71.124.25/32 has too many (8) levels of
    recursion during setting up switching info
    %COMMON_FIB-SP-STDBY-6-FIB_RECURSION: 10.71.124.25/32 has too many (8)
    levels of recursion during setting up switching info

    Это происходит из-за ретрансляции TCP в сети с поддержкой MPLS. Непрохождение одного сообщения поддержания активности (keepalive) к другой стороне BGP из-за разорванного транспортного соединения приводит к тому, что соседняя сторона BGP перестает принимать дальнейшие пакеты поддержания активности даже при том, что TCP ретранслирует непрошедшее сообщение через резервный путь. В конечном итоге удаленная сторона BGP отключается из-за истечения таймера удержания. Эта проблема наблюдается, только если на устройстве Catalyst6500 или Cisco7600 настроена коммутация MPLS. Она проанализирована в описании идентификатора ошибки Cisco CSCsj89544 (только для зарегистрированных пользователей).

Решение

Пути решения этой проблемы подробно описаны ниже.

Добавьте конкретный статический маршрут на маршрутизаторе Rtr-A для IP-адреса другой стороны BGP (в данном случае – 20.20.20.20).

RTR-A#configure terminal        
Enter configuration commands, one per line.  End with CNTL/Z.
RTR-A(config)#ip route 20.20.20.20 255.255.255.255 192.168.16.2

Настройка статического маршрута для префикса 20.20.20.20/32 предотвращает установку динамически запомненного маршрута BGP 20.20.20.20/32 в таблицу маршрутизации и, таким образом, исключает ситуацию с рекурсивными маршрутами. Дополнительную информацию см. в документе Выбор маршрута в маршрутизаторах Cisco.

Примечание. Когда стороны EBGP настроены для связи друг с другом помощи маршрутов по умолчанию, соседства в терминах BGP не возникает. Это делается во избежание переброски маршрутов и возникновения циклов в маршрутизации.

Решение можно проверить эхозапросом на адрес 172.16.1.1.

RTR-A#ping 172.16.1.1

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 172.16.1.1, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 20/24/40 ms

Временное отключение маршрутов

Временное отключение маршрутов – функция BGP, призванная свести к минимуму распространение эффекта переброски маршрутов в сетях. В системе Cisco IOS® по умолчанию действуют значения, рекомендованные поставщиками услуг Интернета, поэтому для включения этой функции достаточно лишь настроить ее следующей командой:

router bgp <AS number>
 bgp dampening

Команда bgp dampening задает значения по умолчанию для параметров временного отключения маршрутов. Например: Halftime (время уменьшения штрафных коэффициентов наполовину) = 15 минут, reuse (порог повторного использования) = 750, Suppress (порог отключения) = 2000 и Max Suppress Time (максимальная продолжительность отключения) = 60. Эти значения допускают настройку пользователем, но компания Cisco рекомендует оставить их без изменения.


Связанные обсуждения сообщества поддержки Cisco

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


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


Document ID: 19167