Использование протокола BFD для уменьшения времени реакции#
Введение#
Стандартные таймеры протоколов маршрутизации слишком велики и не подходят для современных сетей. Уменьшить время реакции протокола на какое-либо событие (непрямое падение, indirect failure) можно двумя способами: за счет уменьшения значения таймеров, либо путем использования специализированного протокола — BFD.
BFD (Bidirectional Forwarding Detection) — это легковесный протокол, используемый для быстрого обнаружения отказов сетевых каналов между двумя устройствами. Он работает независимо и комплементарно к протоколам маршрутизации и помогает быстро определить, что связь между узлами нарушена. Если в инфраструктуре важна быстрая реакция на сбои, BFD значительно уменьшает время сходимости сети, так как позволяет получить субсекундное время реакции.
Как работает BFD?
Установление сессии: два сетевых устройства обмениваются контрольными пакетами BFD для установления связи.
Мониторинг: оба узла отправляют друг другу небольшие пакеты с фиксированным интервалом.
Обнаружение отказа: если один из узлов перестает получать пакеты от соседа в течение заданного времени, соединение объявляется “down”.
Реакция: протоколы маршрутизации отслеживают состояние BFD-сессий и разрывают свои соединения, что позволяет переключиться на резервный канал менее, чем за секунду после сбоя.
Настройка с OSPF#
Для протокола OSPF поддержка BFD активируется на интерфейсе с помощью команды ip ospf bfd
.
Пример конфигурации интерфейса:
interface ens33
ip address 192.168.0.2/24
ip ospf 1 area 0
ip ospf bfd
ip ospf bfd profile test
Если параметры работы протокола BFD на каком-либо интерфейсе должны отличаться от стандартных, то новые параметры можно указать путем привязки профиля.
Протокол OSPF осуществляет динамическое обнаружение соседей на интерфейсе, а затем протокол BFD пытается установить с ними соседство:
angie-va# sho bfd peers
BFD Peers:
peer 192.168.0.3 vrf default interface ens33
ID: 192599120
Remote ID: 626157519
Active mode
Status: up
Uptime: 4 second(s)
Diagnostics: ok
Remote diagnostics: ok
Peer Type: dynamic
RTT min/avg/max: 0/0/0 usec
Local timers:
Detect-multiplier: 3
Receive interval: 300ms
Transmission interval: 300ms
Echo receive interval: 50ms
Echo transmission interval: disabled
Remote timers:
Detect-multiplier: 3
Receive interval: 300ms
Transmission interval: 300ms
Echo receive interval: 50ms
Протокол BFD может установить сессию с каким-либо соседом через определенный интерфейс и одновременно с этим не установить сессию с другим соседом. Это ожидаемое поведение для соседей, не обладающих поддержкой BFD. OSPF-соединение при этом не разрывается.
Если протокол BFD смог установить сессию с каким-либо из OSPF-соседей, то доступность этого соседа будет определяться с помощью протокола BFD.
Если протокол BFD не смог установить сессию с каким-либо из OSPF-соседей, то доступность этого соседа
будет определяться с помощью встроенных механизмов OSPF (протокол Hello).
При этом команда sho bfd peers
будет отображать такого соседа в статусе down
:
angie-va# sho bfd peers
BFD Peers:
peer 192.168.0.3 vrf default interface ens33
ID: 192599120
Remote ID: 0
Active mode
Status: down
Downtime: 4 minute(s), 0 second(s)
Diagnostics: ok
Remote diagnostics: ok
Peer Type: dynamic
RTT min/avg/max: 0/0/0 usec
Local timers:
Detect-multiplier: 3
Receive interval: 300ms
Transmission interval: 300ms
Echo receive interval: 50ms
Echo transmission interval: disabled
Remote timers:
Detect-multiplier: 3
Receive interval: 1000ms
Transmission interval: 1000ms
Echo receive interval: disabled
Настройка с BGP#
По умолчанию при указании BGP-соседа BFD-сессия между маршрутизаторами не устанавливается.
Пример такой конфигурации:
angie-va# sho run
! Часть конфига, не относящаяся к BGP/BFD, удалена для краткости.
router bgp 3
no bgp ebgp-requires-policy
neighbor 192.168.0.2 remote-as 2
exit
!
angie-va# sho ip bg su
IPv4 Unicast Summary:
BGP router identifier 3.3.3.3, local AS number 3 VRF default vrf-id 0
BGP table version 0
RIB entries 0, using 0 bytes of memory
Peers 1, using 24 KiB of memory
Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd PfxSnt Desc
192.168.0.2 4 2 8 9 0 0 0 00:05:35 0 0 N/A
! BGP сессия успешно установлена, хотя никаких BFD-соседей у системы нет.
Total number of neighbors 1
angie-va# sho bfd pe
BFD Peers:
angie-va#
Чтобы активировать установление BFD-сессии с BGP-соседом, установите в секции настройки
маршрутизатора BGP опцию bfd
для соседа:
router bgp 2
no bgp ebgp-requires-policy
neighbor 192.168.0.3 remote-as 3
neighbor 192.168.0.3 bfd
exit
Чтобы BFD-сессия поднялась, необходимо включить поддержку BFD в настройках процесса маршрутизации BGP с обеих сторон. Еще одним способом является создание BFD-соседа вручную.
BGP-сессия успешно устанавливается и обновления передаются даже в ситуации, когда BFD-сессия не была установлена. Однако, если BFD-сессия была установлена, а затем разорвана, то автоматически будет разорвана и соответствующая BGP-сессия (после чего будут предприняты попытки переустановить BGP-сессию).
angie-va# sho bfd peers
BFD Peers:
peer 192.168.0.3 local-address 192.168.0.2 vrf default interface ens33
ID: 2213541843
Remote ID: 0
Active mode
Status: down
Downtime: 5 second(s)
Diagnostics: neighbor signaled session down
Remote diagnostics: neighbor signaled session down
Peer Type: dynamic
RTT min/avg/max: 0/0/0 usec
Local timers:
Detect-multiplier: 3
Receive interval: 300ms
Transmission interval: 300ms
Echo receive interval: 50ms
Echo transmission interval: disabled
Remote timers:
Detect-multiplier: 3
Receive interval: 300ms
Transmission interval: 300ms
Echo receive interval: 50ms
angie-va# sho ip bg su
IPv4 Unicast Summary:
BGP router identifier 2.2.2.2, local AS number 2 VRF default vrf-id 0
BGP table version 0
RIB entries 0, using 0 bytes of memory
Peers 1, using 24 KiB of memory
Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd PfxSnt Desc
192.168.0.3 4 3 27 30 0 0 0 00:00:06 0 0 N/A
Total number of neighbors 1
Настройка с VRRP#
На данный момент нет интеграции с BFD.
Настройка со статическими маршрутами#
Angie ADC поддерживает условное добавление статического маршрута (в зависимости от BFD-статуса соседа,
который указан в качестве next-hop). То есть, если BFD-сессия до устройства, адрес которого указан как next-hop,
поднимается, то статический маршрут добавляется в таблицу маршрутизации.
Если сессия остается в статусе down
(или падает в процессе эксплуатакции позднее),
маршрут не добавляется (удаляется) из таблицы маршрутизации.
Добавить статический маршрут с проверкой доступности next-hop по BFD можно, например, с помощью следующей команды:
ip route 3.3.3.3/32 192.168.0.3 bfd
Сразу после создания такого статического маршрута соответствующая BFD-сессия находится в статусе down
:
angie-va# sho bfd pee
BFD Peers:
peer 192.168.0.3 vrf default
ID: 1753656330
Remote ID: 0
Active mode
Status: down
Downtime: 6 second(s)
Diagnostics: ok
Remote diagnostics: ok
Peer Type: dynamic
RTT min/avg/max: 0/0/0 usec
Local timers:
Detect-multiplier: 3
Receive interval: 300ms
Transmission interval: 300ms
Echo receive interval: 50ms
Echo transmission interval: disabled
Remote timers:
Detect-multiplier: 3
Receive interval: 1000ms
Transmission interval: 1000ms
Echo receive interval: disabled
Чтобы сессия поднялась, на соседе нужно либо настроить собственный статический маршрут с указанием адреса исходящего интерфейса в качестве next-hop, либо вручную создать статический пир, соответствующий системе балансировки (см. ниже).
Настройка независимого пира#
Во всех приведенных выше случаях пир создавался динамически по требованию протокола динамической маршрутизации или в момент создания соответствующего статического маршрута. Ручное создание BFD-пира может потребоваться, например, в ситуации, когда необходимо поменять параметры работы какого-то одного соседа из группы автоматически обнаруженных.
Переход к созданию и настройке отдельного пира из режима конфигурирования протокола BFD:
angie-va# conf t
angie-va(config)# bfd
angie-va(config-bfd)# peer
A.B.C.D IPv4 peer address
X:X::X:X IPv6 peer address
angie-va(config-bfd)# peer
Некоторые настройки необходимо задать в момент создания пира (интерфейс, локальный адрес, multihop и vrf), остальные параметры можно будет изменить потом.
angie-va(config-bfd)# peer 192.168.0.3
<cr>
interface Interface information
local-address Configure local address
multihop Configure multihop
vrf Configure VRF
angie-va(config-bfd)# peer 192.168.0.3
angie-va(config-bfd-peer)#
detect-multiplier Configure peer detection multiplier
echo Configure peer echo intervals
echo-interval Configure peer echo intervals
echo-mode Configure echo mode
end End current mode and change to enable mode
exit Exit current mode and down to previous mode
find Find CLI command matching a regular expression
list Print command list
minimum-ttl Expect packets with at least this TTL
no Negate a command or set its defaults
output Direct vtysh output to file
passive-mode Don't attempt to start sessions
profile Use BFD profile settings
quit Exit current mode and down to previous mode
receive-interval Configure peer receive interval
shutdown Disable BFD peer
transmit-interval Configure peer transmit interval
После того, как с одной из сторон такой пир сконфигурирован, он будет находиться в статусе down
,
пока не будет создан симметричный пир с "противоположной" стороны.
Профиль#
Чтобы создать новый профиль, отредактировать или удалить существующий профиль, необходимо перейти из режима глобальной конфигурации в режим настройки протокола BFD, а дальше уже либо удалять профиль, либо переходить в режим создания или настройки конкретного профиля.
angie-va(config)# bfd
angie-va(config-bfd)#
end End current mode and change to enable mode
exit Exit current mode and down to previous mode
find Find CLI command matching a regular expression
list Print command list
no Negate a command or set its defaults
output Direct vtysh output to file
peer Configure peer
profile BFD profile.
quit Exit current mode and down to previous mode
angie-va(config-bfd)# profile
BFDPROF BFD profile name.
test
angie-va(config-bfd)# no profile test
angie-va(config-bfd)# profile test_new
angie-va(config-bfd-profile)#
detect-multiplier Configure peer detection multiplier
echo Configure peer echo intervals
echo-interval Configure peer echo interval
echo-mode Configure echo mode
end End current mode and change to enable mode
exit Exit current mode and down to previous mode
find Find CLI command matching a regular expression
list Print command list
minimum-ttl Expect packets with at least this TTL
no Negate a command or set its defaults
output Direct vtysh output to file
passive-mode Don't attempt to start sessions
quit Exit current mode and down to previous mode
receive-interval Configure peer receive interval
shutdown Disable BFD peer
transmit-interval Configure peer transmit interval
angie-va(config-bfd-profile)#