Протокол BFD, настройка на маршрутизаторах Juniper серии MX
Коротко о BFD.
Все более важной особенностью сетевого оборудования становится быстрое обнаружение неисправности связи между смежными системами, в целях более быстрого создания альтернативных путей. Есть ситуации, когда используемые протоколы маршрутизации не сразу обнаруживают нарушение смежности, в результате чего, при большой нагрузке на сеть, подобная «неторопливость» может сказаться на качестве сервиса. Bidirectional Forwarding Detection (BFD) – это протокол, работающий поверх других протоколов, позволяющий сократить время обнаружения проблемы до 50мс. BFD является двусторонним протоколом, т.е. требует настройки обоих маршрутизаторов (Оба генерируют BFD пакеты и отвечают друг-другу). Рассмотрим на примере, когда может возникнуть эта «неторопливость».
Допустим, у нас есть 2 маршрутизатора, соединенные прямым линком.
Обрыв линка приведет к падению интерфейса, в результате чего оба маршрутизатора быстро обнаружат проблему и удалят недействительные маршруты. Однако, роутеры не всегда соединены прямым линком. Очень часто, например, на интернет площадках (IX), соединение происходит через промежуточный коммутатор.
В данном случае, при падении линка между вторым роутером и коммутатором это не будет обнаружено первым роутером. Именно в таком случае удаление маршрута из таблицы маршутизации будет зависеть от настроек используемого протокола. Например, если взять протокол 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; }