Протокол BFD, настройка на маршрутизаторах Juniper серии MX

Коротко о BFD.

Все более важной особенностью сетевого оборудования становится быстрое обнаружение неисправности связи между смежными системами, в целях более быстрого создания альтернативных путей. Есть ситуации, когда используемые протоколы маршрутизации не сразу обнаруживают нарушение смежности, в результате чего, при большой нагрузке на сеть, подобная «неторопливость» может сказаться на качестве сервиса. Bidirectional Forwarding Detection (BFD) – это протокол, работающий поверх других протоколов, позволяющий сократить время обнаружения  проблемы до 50мс. BFD является двусторонним протоколом, т.е. требует настройки  обоих маршрутизаторов (Оба генерируют BFD пакеты и отвечают друг-другу). Рассмотрим на примере, когда может возникнуть эта «неторопливость».

Допустим, у нас есть 2 маршрутизатора, соединенные прямым линком.

Рис 1.

Обрыв линка приведет к падению интерфейса, в результате чего оба маршрутизатора быстро обнаружат проблему и удалят недействительные маршруты. Однако,  роутеры не всегда соединены прямым линком. Очень часто, например, на интернет площадках (IX), соединение происходит через промежуточный коммутатор.

Рис 2.

В данном случае, при падении линка между вторым роутером и коммутатором это  не будет обнаружено первым роутером. Именно в таком случае удаление маршрута из таблицы маршутизации будет зависеть от настроек используемого протокола. Например, если взять протокол BGP, то это время может достигать 2-х минут.

Как работает протокол BFD.

Каждый из смежных маршрутизаторов, на которых настроен протокол BFD, периодически посылает «Hello» сообщения своему соседу. Получение данного сообщения означает работоспособность канала в одном определенном направлении, неполучение «Hello» сообщения говорит о неработоспособности канала, что и фиксирует протокол BFD. По умолчанию, на неработоспособность канала указывают 3 подряд не полученных  пакета «Hello». Количество пакетов и их интервал отправки может быть изменен при конфигурации протокола.

 

Настройка BFD на Juniper MX

Наверное, это самое простое, что вам приходилось в жизни настраивать.

Т.к. потребность в BFD возникает в основном при использовании протокола BGP, настроим BFD поверх BGP.

Для того, чтобы включить его работу, надо вбить команду:

[edit protocols bgp group <Имя Группы>]

shamash@host:X# set bfd-liveness-detection minimum-interval 1000

 

Здесь мы устанавливаем минимальный интервал в милисекундах, при котором маршрутизатор передает «Hello» пакеты.

Для того, чтобы проверить, работает ли протокол:

shamash@host:X> show bgp neighbor | match bfd
Options: <BfdEnabled>
  BFD: enabled, up
  Trace file: /var/log/A/bgp-bfd size 131072 files 10
  Options: <BfdEnabled>
  BFD: enabled, up
  Trace file: /var/log/A/bgp-bfd size 131072 files 10

Чтобы протокол заработал, требуется, чтобы на смежных маршрутизаторах интервал отправки hello-пакетов совпадал.

Включение лога для диагностики:

[edit protocols bgp group <Имя Группы>]
shamash@host:X # set traceoptions file bgp-bfd
shamash@host:X # set traceoptions flag bfd detail

В итоге должно получиться что-то типа этого:

shamash@host:X# show protocols
    bgp {
         group <Имя Группы> {
               type internal/external;
               traceoptions {
                     file bgp-bfd;
                     flag bfd detail;
               }
               local-address <Ip-Adress>;
               export <Политика на экспорт>;
               import <Политика на Импорт>;
               bfd-liveness-detection {
                     minimum-interval 1000;
               }
               neighbor <Ip-Adress>;
               neighbor <Ip-Adress>;
        }
    }

Также следует отметить, что для работы bfd должны быть открыты порты 3785, 3784, 4784, соответственно, если у вас настроен firewall, то надо их открыть:

term BFD {
    from {
        protocol [ udp tcp ];
        port [4784 3785 3784  ];
    }
    then accept;
}