Bastard Policy Routing from Hell

Aug 18, 2007 11:43

Бывает так, что людям надо делать BGP policy-routing по времени. Ну то есть например анонсировать днем префикс одному апстриму а ночью другому. На то у них есть причины (наверное).

Делается это вроде бы элементарно - например редистрибуция в BGP + выставление community на основе time-based ACLs. Но прогресс не стоит на месте: в "новых" версиях IOS (например 12.4) это уже не заработает. Кто виноват и что делать?


Так вот, виновата одна индусская мегафича. А именно: если раньше редистрибуцией занимался bgp scanner, с интервалом 1 минуты прокачивя RIB в LocRIB, и пригружая при этом дополнительно CPU, то теперь весь процесс стал event-driven. Поменялось что-то в RIB - срабатывает хук и закачивает в BGP, если надо. Появилось это суперновшество с 12.2(28)S и 12.3(17)T и, кстати, не отключается :) Очевидно что изменение time-range в ACL никак не тянет на IGP event. И как быть?

Первое что приходит в голову - сделать статик роуты с трекингом. Допустим, мы хотим чтобы префикс 150.1.1.0/24 был в BGP таблице с коммунити 1:100 днем, и с коммунити 1:200 ночью. Делаем примерно так:

!
! Time-range & access-list
!
time-range DAY
periodic daily 9:00 to 18:00
!
access-list 101 permit ip any any time-range DAY

!
! A Loopback is used so that we can "ping ourself"
!
interface Loopback0
ip address 150.1.1.1 255.255.255.255
ip access-group 101 in

!
! Ping ourself, and track the pinger state
!
ip sla monitor 1
type echo protocol ipIcmpEcho 150.1.1.1
timeout 100
frequency 1

!
! Trackers
!
track 1 rtr 1 reachability
!
track 2 list boolean and
object 1 not

!
! The same static route has different tag based on the tracker state
!
ip route 150.1.1.0 255.255.255.0 Loopback0 150.1.1.254 tag 100 track 1
ip route 150.1.1.0 255.255.255.0 Loopback0 150.1.1.253 tag 200 track 2

!
! Redistribute into BGP and set community based on tag value
!
router bgp 1
redistribute static route-map STATIC_TO_BGP
!
route-map STATIC_TO_BGP permit 10
match tag 100
set community 1:100
!
route-map STATIC_TO_BGP permit 20
match tag 200
set community 1:200

Выглядит стремно, но работает. Как всегда, бредовый конфиг saves the day :)

PS
История основана на реальных событиях :)
Previous post Next post
Up