четверг, 29 декабря 2011 г.

BGP и BFD на Cisco

Bidirectional Forwarding Detection (BFD) - протокол, позволяющий быстро обнаруживать проблемы связности маршрутизаторов на IP уровне и тем самым обеспечивающий быструю сходимость протоколов маршрутизации.
BFD - двусторонний протокол, оба  маршрутизатора генерируют BFD пакеты, а также отвечают на BFD пакеты посланные соседом. Протокол BFD практически не влияет на производительность CPU, поэтому интервал между BFD пакетами может быть сокращен до 50 мс, что обеспечивает быструю сходимость.
BFD пакеты инкапсулируются в unicast UDP. BFD payload control пакеты используют в качестве  destination port 3784 и в качестве  source port 49152.
BFD Echo пакеты используют destination port 3785 и source port 3785.

BFD может работать в 2-х режимах:
1.  BFD Async  - в этом режиме маршрутизаторы обмениваются только control пакетами.
2.  BFD Echo - в этом режиме маршрутизаторы обмениваются помимо control еще и  echo пакетами. Echo пакеты отличаются от control тем, что имеют адрес назначения равный адресу источника. Попадая на соседнюю систему они проходят весь обычный forwarding path, таким образом обеспечивая более полное тестирование работоспособности системы. По умолчанию на Cisco маршрутизаторах BFD Echo mode включен (отключается командой no bfd echo на интерфейсе). При использовании echo mode необходимо указывать no ip redirects на интерфейсе во избежание перегрузки CPU. Частота control пакетов может быть в этом режиме снижена (команда bfd slow-timers в режиме глобальной конфигурации позволяет настраивать интервал генерации control пакетов).



Рассмотрим на примере:


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

Однако, ситуация меняется, если между маршрутизаторами появляется коммутатор:


В этом случае падение интерфейса на маршрутизаторе ISP никак не будет обнаружено маршрутизатором CE1. Удаление недействительного маршрута полностью зависит от таймеров используемого протокола маршрутизации (до 3 минут у BGP).

В этой ситуации спасет использование BFD. Между маршрутизаторами устанавливаем двустороннюю BFD сессию:

 Настраивается на интерфейсах обоих маршрутизаторов :


interface FastEthernet0/1
 bfd interval N1 min_rx N2 multiplier  interval-multiplier
 no ip redirects  
N1 -  интервал генерации control пакетов (в миллисекундах), от 50 до 999
N2 - минимальный интервал между входящими control пакетами, от 50 до 999
 interval-multiplier - количество последовательно пакетов, которые BFD может пропустить прежде чем информировать Layer 3 о проблеме.

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


router bgp 200
 neighbor 3.3.3.2 fall-over bfd

Настройка должна быть выполнена на обоих маршрутизаторах, иначе эффективность предпринятых телодвижений стремится к нулю :)
Также возможна привязка статического маршрута к BFD сессии.


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

Пример 1. Работа без BFD

Роняем интерфейс F0/1 на ISP.

ISP1#sh logg
000068: Dec 29 18:36:52.068 Moscow: %LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/1, changed state to down

CE1#sh logg
*Dec 29 18:39:33.453 Moscow: %BGP-5-ADJCHANGE: neighbor 3.3.3.2 Down BGP Notification sent
*Dec 29 18:39:33.453 Moscow: %BGP-3-NOTIFICATION: sent to neighbor 3.3.3.2 4/0 (hold time expired) 0 bytes
*Dec 29 18:39:33.453 Moscow: %BGP_SESSION-5-ADJCHANGE: neighbor 3.3.3.2 IPv4 Unicast topology base removed from session  BGP Notification sent

Разница между падением интерфейса на ISP  и удалением недействительных маршрутов на CE1,  2 минуты 41 секунда

Пример 2. Работа c BFD

На обоих маршрутизаторах выполнены команды
interface FastEthernet0/1
 bfd interval 50 min_rx 50 multiplier 4


Роняем интерфейс F0/1 на ISP.

ISP1#sh logg
000064: Dec 29 18:25:45.295 Moscow: %BGP-5-ADJCHANGE: neighbor 3.3.3.1 Down BFD adjacency down
000065: Dec 29 18:25:52.123 Moscow: %LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/1, changed state to down

CE1#sh logg
*Dec 29 18:25:45.497 Moscow: %BGP-5-ADJCHANGE: neighbor 3.3.3.2 Down BFD adjacency down
*Dec 29 18:25:45.497 Moscow: %BGP_SESSION-5-ADJCHANGE: neighbor 3.3.3.2 IPv4 Unicast topology base removed from session  BFD adjacency down


Разница между падением интерфейса на ISP  и удалением недействительных маршрутов на CE1, как и должно быть согласно заданным параметрам, порядка 200 миллисекунд

Стандартная реализация ВFD в Cisco не позволяет поддерживать сессии с промежуточными IP узлами между соседями:


 Соответственно, не получится поднять BFD сессию для multihop eBGD или iBGP с использованием Loopback'ов.
Однако с версии 15.1(3)S появилась фича multihop BFD, позволяющая обойти это ограничение:



Troubleshooting:
show bfd neighbors
show bfd neighbors details

6 комментариев:

  1. Спасибо! Коротко и внятно.

    ОтветитьУдалить
  2. На последних двух рисунках на Router A на Fa0/0 ip addr 4.4.4.1/30 всё же? :)

    ОтветитьУдалить
  3. Спасибо большое. Все доходчиво и понятно описано.

    ОтветитьУдалить
  4. Подскажите, а если между роутерами нет активного оборудование (коммутатора). При падении линка, маршруты из таблицы маршрутизации (предоставленные БГП) должны будут сразу же удалиться?

    ОтветитьУдалить
    Ответы
    1. Да, если канал оптический, а не аренда или РРЛ например.

      Удалить

Примечание. Отправлять комментарии могут только участники этого блога.