Рассмотрим нетипичный случай bgp conditional advertisement при пропадании маршрута.
Задача :
Анонсировать определенные сети резервному аплинку только при пропадании дефолтного маршрута от основного аплинка.
Оба аплинка анонсируют Default route — 0/0.
Для реализации такой схемы, нам понадобится проверять наличие маршрута от основного аплинка. Для этого поместим его в отдельную таблицу с помощью RIB группы:
Настроим RIB группу и зададим политику импорта маршрута в новую таблицу:
set routing-options rib-groups inet.0_to_check-conditional export-rib inet.0
set routing-options rib-groups inet.0_to_check-conditional import-rib [inet.0 check-conditional.inet.0]
set routing-options rib-groups inet.0_to_check-conditional import-policy default-route-only-accept
Политика импорта:
set policy-options policy-statement default-route-only-accept term accept from route-filter 0.0.0.0/0 exact
set policy-options policy-statement default-route-only-accept term accept then accept
set policy-options policy-statement default-route-only-accept term deny then reject
Применим RIB группу к основному апстриму :
set protocols bgp group UPSTREAM type external
set protocols bgp group UPSTREAM local-as 64399
set protocols bgp group UPSTREAM family inet unicast rib-group inet.0_to_check-conditional
set protocols bgp group UPSTREAM neighbor 10.10.10.1 description upstream-main
set protocols bgp group UPSTREAM neighbor 10.10.10.1 peer-as 64500
После коммита у нас должен появиться маршрут от основного аплинка в таблице check-conditional.inet.0
>show route table check-conditional.inet.0
check-conditional.inet.0: 1 destinations, 1 routes (1 active, 0 holddown, 0 hidden)
= Active Route, - = Last Active, * = Both
0.0.0.0/0 *[BGP/170] 00:01:26, localpref 150
AS path: 64500 I, validation-state: unverified
> to 10.10.10.1 via ae10.10
Теперь мы можем настроить механизм проверки при анонсировании маршрутов бекапному апстриму.
Проверка основывается на встроенном в Junos механизме condition, в данном примере это работает таким образом:
Анонс наших сетей контролируется с помощью полиси upstream-backup-out.
В терме check проверятся наличие маршрута в таблице check-conditional.inet.0 . Если маршрут присутствует, наступает матч и исполняется action — reject.
Если маршрута в таблице check-conditional.inet.0 нет, то матча в терме check не будет и маршруты будут обработаны в терме announce.
Таким образом, при пропадании маршрута от основного аплинка наши сети будут проанонсированы в резерв.
Создадим полиси для проверки наличия маршрута :
set policy-options condition conditional_advertise if-route-exists 0.0.0.0/0
set policy-options condition conditional_advertise if-route-exists table check-conditional.inet.0
Добавим полиси для экспорта маршрутов резервному аплинку:
set policy-options policy-statement upstream-backup-out term check from prefix-list MY-NETWORKS
set policy-options policy-statement upstream-backup-out term check from condition conditional_advertise
set policy-options policy-statement upstream-backup-out term check then reject
set policy-options policy-statement upstream-backup-out term announce from prefix-list MY-NETWORKS
set policy-options policy-statement upstream-backup-out term announce then accept
set policy-options policy-statement upstream-backup-out term discard-all then reject
Применим полиси к пиру:
set protocols bgp group UPSTREAM-BACKUP neighbor 10.20.20.1 export upstream-backup-out