21. BGP атрибуты
Выбор лучшего маршрута
BGP по умолчанию не использует балансировку
Его задача - найти лучшую точку выхода из автономной системы
Балансировать трафик одного приложения между разными AS - плохая идея
Если хочется, в пределах AS балансировку можно делать с помощью IGP
Выбор лучшего маршрута основан на атрибутах
Основные атрибуты BGP
Маршрутизаторы обмениваются векторами матрик для путей
Вектор метрик в анонсе складывается с вектором соседа
Атрибут | Описание |
Next Hop | IP-адрес Next Hop, меняется при отправке EBGP-соседу или политикой |
AS Path | Список номеров AS для пути, дополняется при отправке EBGP-соседу |
Local Preference | Приоритет маршрута в локальной AS, назначается политикой |
MED | Приоритет маршрута в соседней AS, назначается или наследуется |
Origin | Код происхождения маршрута, назначается или наследуется |
Community | Список дополнительных меток, назначается политикой |
Next Hop
Адрес, который устанавливается в RIB в качестве шлюза для сети
Обычно не меняется при передаче по IBGP
Обязан резолвится в RIB (хотя бы рекурсивно)
Может быть доступен с учетом балансировки
Устанавливается в собственный адрес для:
Анонсов локально импортированных маршрутов
EBGP-анонсов
AS Path
Список автономных систем, через которые проложен маршрут
Часто записывается в виде строки с номерами AS через пробел или запятую
Такая строка может содержать неожиданные знаки препинания
Чем меньше длина, тем лучше
На самом деле состоит из субкомпонентов
AS_SEQUENCE, AS_SET, AS_CONFED_SEQ, AS_CONFED_SET
При отправке маршрута EBGP-соседу AS_SEQUENCE дополняется номером собственной системы
Служит инструментом защиты от петель между AS
Маршрутизатор не примет от EBGP-маршрут, если в AS PATH указан номер его автономной системы
Local Preference
Приоритет маршрута в локальной автономной системе
Не отправляет соседям EBGP (маршруты получают LP по умолчанию)
Удобный инструмент выбора маршрута для исходящего трафика
32-битное число (больше - лучше)
MED
Multi Exit Discriminator
Инструмент указания предпочтения маршрута для соседней AS
Предназначен для контроля входящего в нашу AS трафика
32-битное число (меньше - лучше)
Часто наследуется от метрики IGP
Атрибут не очень удобен в использовании
Не передается EBGP-соседям, если изучен по IBGP
Обычно проставляется на пограничных роутерах
Распространяется только по соседней автономной системе
Сравнение имеет смысл у EBGP-маршрутов из одной AS
Основная польза - при DualHomed подключении
Часто для контроля входящего маршрута используют вместо MED
Атрибут Community
Технику AS Prepending (искусственное увеличение AS Path)
Community
Расширение функциональности BGP с помощью добавления меток
Неупорядоченный список меток, проставленных транзитными роутерами
На самом деле атрибутов три, каждый для разных форматов меток:
Communities (RFC 1997) - записывается как <ASN>:<Value>, 16 бит ASN, 16 бит Value
Extended Communities (RFC 4360) - 16 бит ASN, несколько типов меток по 6 байт
Large Communities (RFC 8092) - 32 бита ASN, записывается <ASN>:<Value1>:<Value2>
Метка может обозначать все, что угодно, нужны договоренности
Некоторые известные "стандартные" метки
NO_EXPORT (65535:65281, 0xFFFFFF01) - не анонсировать EBGP-соседям
NO_ADVERTISE (65535:65281, 0xFFFFFF02) - не анонсировать никому
BLACKHOLE (65535:666, 0xFFFF029A) - установить Next Hop в Null0
Origin
Код происхождения маршрута в BGP (меньше - лучше)
Когда-то Origin позволял сосуществовать в Интернете BGP и EGP
EGP давно устарел, практического смысла сейчас не имеет
Правила хорошего тона предписывают анонсировать NLRI с ORIGIN=IGP
Origin | Обозначение | Смысл |
0 | IGP | NLRI принадлежит исходной AS |
1 | EGP | NLRI в исходной AS получена по EGP |
2 | INCOMPLETE | NLRI в исходной AS появилась другим способом |
Свойства атрибутов
Well-known mandatory - атрибут обязан присутствовать в UPDATE
Well-known discretionary - атрибут может не передаваться в UPDATE, но обязан поддерживаться в любой реализации
Optional Transitive - атрибут может не поддерживаться в конкретной реализации, но в люом случае должен передаваться соседям
Optional Non-transitive - если атрибут не поддерживается в конкретной реализации, он игнорируется и соседям не передается
Атрибут | Свойства |
Next Hop | Well-known mandatory |
AS Path | Well-known mandatory |
Local Pref | Well-known discretionary (mandatory в IBGP, отсутствует в EBGP) |
MED | Optional Non-transitive (часто отсутствует, может быть удален) |
Origin | Well-known mandatory |
Community | Optional Transitive (часто присутствует, сохраняется при передаче) |
Best Path Selection
При выборе маршрута RFC 4271 предписывает следовать следующему алгоритму:
Выбираются только доступные маршруты
Next Hop доступен
AS Path не содержит номер свой системы
Маршруты с бОльшим Local Preference
Маршруты с меньшим количеством AS в AS Path
Маршруты с меньшим Origin (IGP<EGP<INCOMPLETE)
Маршруты с меньшим MED
MED сравнивается только для маршрутов, полученных из одной AS
Если MED отсутствует, полагать его значение наименьшим возможным
Маршруты, полученные по EBGP
Маршруты с меньшей IGP-метрикой до Next Hop
Маршруты, полученные от соседа с бОльшим Router-ID
Маршрут, полученные от соседа с бОльшим IP-адресом
Last updated