В этой заметке я рассмотрю как выбирается BGP маршрут, на основе каких атрибутов. Это позволит нам понять, как мы можем повлиять на выборы.
1. Первое что проверяется, это достижимость NEXT_HOP, если он не достижим, маршрут сразу отбрасывается (помним о next_hop_self)
2. Смотрится атрибут weight (напомню что это Cisco атрибут), и используется для определения интерфейса, через который осуществляется выход из нашей AS
3. Далее смотрится атрибут LOCAL_PREF, выбирается наибольший
4. Роутер, который сам генерирует маршрут, имеет наибольший вес — 32768 и NEXT_HOP равен 0.0.0.0
5. Далее смотрим на атрибут AS-PATH, выбирается маршрут с наименьшей длиной.
6. Если AS-PATH имеет одинаковую длину, используется сравнение по ORIGIN_TYPE, таким образом:
IGP = 0, EGP = 1, INCOMPLEETE = 2 (маршрут пришедший через редистрибьюцию, имеет наименьшее значение, так как нет никакой уверенности в том, откуда этот маршрут пришел).
7. Если и на этом участке еще не удается выбрать лучший маршрут, то сравнивается MED, чем он меньше, тем выше приоритет (напоминаю, что по умолчанию MED работает только тогда, когда мы подключены несколькими линками к одной AS).
По умолчанию BGP маршрут выбирается один, но мы на это можем повлиять, используя:
— maximum-paths ibgp указав здесь количество маршрутов (для балансировки). Это для ibgp маршрутов,
— maximum-paths — тоже самое, только для ebgp маршрута.
Так же на этом этапе мы можем повлиять на процедуру выбора, а именно, сделать проверку по MED раньше, чем проверку по ORIGIN, делается это с помощью команды bgp deterministic-med, теперь сначала проверяется пункт 7, а затем 6.
Так же помним, из прошлой заметки, что есть команда, которая дает нам возможность использовать MED с разными AS: bgp always-compare-med
Так же здесь есть еще одна полезная команда, которая позволяет работать MED в конфедерациях ( о которых мы будем говорить еще не скоро 🙂 ). Если мы хотим чтоб MED сравнивался между пирами конфедерации, нам нужна команда bgp bestpath med confed
8. Если значение MED одинаковы, то далее смотрится административная дистанция, EBGP = 20, IBGP = 200, выбирается конечно же меньшая дистанция, то есть выигрывает EBGP маршрут.
9. Выбираем ближайший IBGP. Выбирается старейший EBGP маршрут
Здесь стоит сказать о такой фичи как Synchronization, сейчас она отключена по умолчанию во всех роутерах, но что она значит?
Когда синхронизация была включена, это нам говорила о том, что, роутер не может отсылать маршрут в EBGP до тех пор, пока этот маршрут не получен по IGP (например )
10. Если и здесь все одинаково, тогда ничего не остается как сделать выбор по наименьшему RID (мы его можем устанавливать с помощью bgp router-id {IP})
11. Если по 10-му пункту мы тоже не смогли выбрать лучший маршрут, тогда смотрим на длинну cluster list, с минимальной длиной маршрут выигрывает.
12. Если ни на одном из этапов не был выведен лучший маршрут, то смотрится на IP адрес соседа, от кого пришел данный маршрут,
у кого адрес меньше, тот и побеждает в выборах. Но думаю редко когда дойдет до этого пункта.
Дополнительная информация на сайте Cisco: Выбор BGP маршрута
Вот такой не хитрый алгоритм выбора BGP маршрута. Так же мы выяснили на каких этапах мы можем с Вами изменить алгоритм выбора.
Скоро будем рассматривать, как это делается на практике.
Спасибо за информацию пользователю tmp