Протокол IP : Протокол BGP

Устранение неполадок нестабильных маршрутов BGP (сбой рекурсивной маршрутизации)

21 октября 2016 - Машинный перевод
Другие версии: PDF-версия:pdf | Перевод, выполненный профессиональным переводчиком (9 февраля 2011) | Английский (22 августа 2015) | Отзыв


Содержание


Введение

В данном документе описан порядок устранения неполадок при периодической потере соединения для маршрутов протокола пограничного шлюза (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 |, включают, 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.

    Примечание: Перед выполнением любой команды отладки выполните команду отладки против списка контроля доступа (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 рекомендует оставить их без изменения.


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


Document ID: 19167