Я подключен к 2 узлам BGP; Они оба дают мне отфильтрованную таблицу, которая включает префиксы по умолчанию + около 30К каждая (а не полная таблица). Для префиксов, которые я получаю, я просто позволяю BGP использовать алгоритм длины префикса для выбора наилучшего маршрута. Для префиксов, которые я не получаю (т. Е. Применяется "по умолчанию"), я предпочитаю одноранговый узел BGP 1. Проблема в том, что для одного конкретного префикса, который я не получаю ни от одного узла BGP (т.е. применяется значение по умолчанию), Я бы предпочел одноранговый узел BGP 2, а не обычный узел 1. Я знаю, что могу без труда сделайте это, используя статический маршрут, но это звучит не совсем правильно, потому что если я добавлю статический маршрут к маршрутизатору однорангового узла 2, и маршрут будет отключен, статический маршрут будет «прилипать», и я не смогу направлять трафик на этот префикс. Если я смогу найти механизм BGP, который сделает то же самое, я могу предпочесть маршрут к одноранговому узлу BGP 2, но если этот маршрут недоступен, будет использоваться маршрут к одноранговому узлу BGP 1.
Чтобы управлять моими исходящими маршрутами, я использую карты маршрутов, которые устанавливают равные локальные предпочтения для исходящего трафика по отношению к полученным префиксам, поэтому используется алгоритм длины списка префиксов по умолчанию BGP, и я устанавливаю более высокое предпочтение для исходящего трафика. трафик, использующий маршрут «по умолчанию» для однорангового узла BGP 1.
К сожалению, я понятия не имею, как использовать карту маршрутов для этого для моего специального префикса, потому что в системе не существует объекта с таким префиксом: что касается обоих одноранговых узлов BGP, он обрабатывается маршрутом «по умолчанию».
я использую Quagga
для моей маршрутизации, поэтому BGP - не единственный доступный протокол. Решение в стиле Cisco тоже подойдет, так как я подозреваю, что мне не хватает базовых знаний, и любой толчок в правильном направлении поможет мне найти свой путь.
Вот мой файл bgpd.conf, отредактированный для удаления личной информации; Надеюсь, я не переборщил:
router bgp 12345
bgp router-id 10.0.0.1
network 10.0.0.0/24
redistribute connected
!
neighbor 10.0.1.1 remote-as 22222
neighbor 10.0.1.1 ebgp-multihop 3
neighbor 10.0.1.1 next-hop-self
neighbor 10.0.1.1 distribute-list distrib-out out
neighbor 10.0.1.1 route-map INBGP1 in
!
neighbor 10.0.2.1 remote-as 11111
neighbor 10.0.2.1 ebgp-multihop 10
neighbor 10.0.2.1 next-hop-self
neighbor 10.0.2.1 distribute-list distrib-out out
neighbor 10.0.2.1 route-map INBGP2 in
!
access-list distrib-out permit 10.0.0.0/24
!
access-list is-default permit 0.0.0.0/0 exact-match
!
route-map INBGP2 permit 10
set metric 2
set ip next-hop 89.121.231.73
on-match next
!
route-map INBGP2 permit 20
match ip address is-default
set local-preference 101
on-match goto 1000
!
route-map INRTC permit 30
set local-preference 110
set metric 1
!
route-map INBGP2 permit 10
set metric 1
on-match next
!
route-map INBGP1 permit 20
match ip address is-default
set local-preference 200
on-match goto 1000
!
route-map INBGP1 permit 30
set local-preference 110
set metric 1
Добавьте статический маршрут со следующим переходом, который идет к одноранговому узлу 2 только из-за маршрута к одноранговому узлу 2. Таким образом, пока вы получаете этот маршрут, статический маршрут будет указывать на одноранговый узел 2. Но как только вы потеряете этот маршрут , существующее аварийное переключение изменит его.
Выбирать любой маршрут, который идет к одноранговому узлу 2, но он исчезнет, если вы не сможете связаться с одноранговым узлом 2. Затем добавьте статический маршрут для трафика, который вы хотите охватить следующим переходом, охватываемым выбранным вами маршрутом. Это приведет к тому, что трафик, соответствующий второму маршруту, будет отслеживать первый маршрут.
Например, предположим, что префикс, к которому вы хотите контролировать трафик, это 216.152.32.0/24
. Вы создаете статический маршрут к 216.152.32.0/24
и вы выбираете его следующий прыжок. Поскольку это статический маршрут, трафик до 216.152.32.0/24
будет направлен к этому следующему прыжку (при условии, что не существует более конкретного маршрута, которого не будет). Таким образом, проблема сводится к выбору подходящего следующего шага.
Вы хотите, чтобы трафик шел в одну сторону, когда ссылка на одноранговый узел 2 активна, и в другую сторону, когда эта ссылка не работает. Итак, вам нужно выбрать следующий переход, у которого есть это свойство. В принципе, любой IP-адрес внутри маршрута, который вы динамически получаете от партнера 2, будет работать. Этот трафик будет идти к узлу 2, когда у вас есть этот маршрут, и будет следовать вашему узлу по умолчанию к узлу 1, когда у вас его нет. (Предполагая, что по умолчанию правильно настроено аварийное переключение.)
В идеале выбирайте «основной» маршрут к узлу 2, но не слишком близко к вашей точке подключения. Вы хотите, чтобы он был "основным" для узла 2, потому что вы не хотите, чтобы он когда-либо переключался на узел 1. Вы не хотите, чтобы он был слишком близко к вам, потому что, если ваш узел окажется изолированным, вы захотите переключиться на одноранговый узел 2. Если вы выполните трассировку для нескольких случайных сайтов, вы можете найти основной маршрутизатор в соседнем городе. , на их позвоночнике. Что будет делать.
Есть прямое решение вашей проблемы, которое не связано со статическими маршрутами. Прежде чем углубиться в это, я хочу коснуться одного смыслового аспекта в вашем описании. В правило совпадения самого длинного префикса не имеет ничего общего с BGP. Вы должны подумать об алгоритме выбора пути BGP. У каждого поставщика есть свои настройки этого алгоритма; однако большинство из них очень похожи на Cisco алгоритм.
У вас есть полный контроль над трафиком в направлении от вашего сайта к провайдеру. Вы можете использовать локальное предпочтение или множественные дискриминаторы выхода (MED), чтобы повлиять на маршрутизацию в этом направлении. Для простоты я рекомендую использовать один или другой. Реализуйте эту политику для префиксов, которые отправляет вам интернет-провайдер (т. Е. Для вашей входящей политики).
1) Локальное предпочтение - предпочтительнее наивысшее локальное предпочтение (локальное предпочтение по умолчанию - 100). Локальное предпочтение указано раньше в решении наилучшего пути BGP и оценивается до AS_LENGTH. Ваш провайдер не может отправлять вам префиксы с локальными предпочтениями; локальное предпочтение не пересекает границ AS.
2) MED - предпочтителен самый низкий MED. Ваш провайдер может отправлять MED на своих префиксах. На маршрутизаторах Cisco MED не рассматривается как MED = 0, если вы не включите bgp bestpath med отсутствует как наихудший. MED оцениваются после AS_LENGTH в алгоритме выбора пути BGP.
Вы можете прочитать Cisco Примеры использования BGP. Я также очень рекомендую книгу Архитектуры Интернет-маршрутизации Сэма Халаби для получения подробной информации о BGP и его использовании.