Предистория:
Был 1 апстрим, в силу регулярных, хоть и не частых даунтаймов решили подключить второй апстрим как резерв с частичным использованием постоянно.
И вот тут началось. Full-view у обоих провайдеров примерно 420 тысяч префиксов, часть их аплинков-соседей совпадает, часть нет. В результате при падении основного канала и переключения на бэкап-канал, обратного возвращения не происходило (bgp-path по “длине” одинаковый, примерно 300 тыс. маршрутов остаются у “последнего” провайдер и оставшиеся у другого). После тщательного анализа маршрутов оказалось что один из провайдеров проставляет для каждого из префиксов коммьюнити указывающий с какого “направления” получен данный префикс (что очень удобно для построения в дальнейшем фильтров любыми из способов зная где что “лучше” взять).
Почему все-таки MED? MED- это наименее влиятельная характеристика маршрута, т.е. если as-path, local-preference,weight сравниваются у одинаковых префиксов в первую очередь, то MED в последнюю и дает возможность повлиять на выбор одного из нескольких одинаковых по характеристикам маршрутов в пользу какого-то одного.
включаем сравнение MED bgp always-compare-med – в противном случае префиксы с одинаковой длины as-path, где роутеры с меньшим ID автономки будут считаться “лучше”.
Основные аплинки у первого аплинка были маркированы по коммьюнити (пусть будут 65530:101 – 1й аплинк 65530:102 – 2й аплинк 65530:103 – 3й аплинк):
Создан префикс лист с перечислением основных аплинк-коммьюнити:
ip community-list standard UPSTREAM1 permit 65530:101 65530:102 65530:103
И собственно роут-мапы для входящий префиксов одного и второго провайдера
!1й провайдер запрет принимать свои собственные префиксы
route-map UPSTREAM1-IN deny 1
match ip address prefix-list SELF
!Принимаем помеченные нужными коммьюнити префиксы и проставляем метрику:
route-map UPSTREAM1-IN permit 5
match community UPSTREAM1
set metric 50
!Принимаем остальные префиксы и проставляем метрику меньшего приоритета:
route-map UPSTREAM1-IN permit 10
set metric 70
!2й провайдер запрет принимать свои собственные префиксы
route-map UPSTREAM2-IN deny 1
match ip address prefix-list SELF
!Принимаем все маршруты с меньше приоритетом метрики (этот список пусть маршрутизатор сам разбирается где лучше)
route-map UPSTREAM2-IN permit 5
set metric 70
!
В результате мы в данной схеме получаем что: основная масса маршрутов с одинаковым весом/local-preference получает меньшую метрику и как следствие best-path а все остальное уже разруливается на усмотрение bgp. Можно маркировать и по наличию нужной AS в списке так же – но для меня этот способ был менее преемлем, т.к. туда попадали все возможные направление, а не только “зарубежное”
Посмотрим при следующем падении как эта схема отработается (:
Повідомити про помилку
Текст, який буде надіслано нашим редакторам: