22. BGP атрибуты в IOS
NWLLA OMNI
При выборе маршрута Cisco IOS использует алгоритм:
Код | Мнемоника | Описание |
N | Next Hop | Маршруты с доступным Next Hop |
W | Weight | Маршруты с бОльшим Weight |
L | Local Pref | Маршруты с бОльшим Local Preference |
L | Local Origin | Маршруты с нулевым Next Hop (маршрут вброшены локально) |
A | AS Path | Маршруты с меньшим количеством AS в AS Path |
O | Origin | Маршруты с меньшим Origin |
M | MED | Маршруты с меньшим MED |
N | Neighbor | Маршруты полученные от EBGP (Hot Potato Routing) |
I | IGP Metric | Маршруты с меньшей IGP метрикой до Next Hop |
non-ECMP | EBGP Age | Только для EBGP: маршруты, полученные первыми |
non-ECMP | Neigh ID | Маршруты от соседа с бОльшим Router ID |
non-ECMP | Neigh IP | Маршруты от соседа с бОльшим IP адресом |
В реализации Сisсo если маршруты по NWLLAOMNI полностью одинаковые, то будет выбран более старый маршрут, если и время одно, то тогда учитываются non-ECMP показатели
Использование атрибутов BGP в IOS
Для контроля исходящего трафика используются атрибуты:
Weight - проприетарный, локальный для роутера атрибут
Local Preference - стандартный атрибут, общий для всех роутеров в AS
Проставляя эти атрибуты, администратор влияет на роутеры в своей AS
Для контроля входящего трафика используются атрибуты:
MED - стандартный, но не особенно удобный атрибут
AS Path - используется техника AS Prepending, которую не любят провайдеры
Community - требуются договоренности с провайдерами и IXP
Проставляя эти атрибуты, администратор влияет на роутеры в других AS
Weight
Проприетарный атрибут Cisco
Локальный, назначается администратором, не передается в Update
16-битное число, больше=лучше
По умолчанию:
0 для маршрутов, изученных от соседей
32768 для маршрутов, импортированных в BGP локальным роутером
Настройка Weight
R2 проставляет вес 10 на все маршруты, полученные от R1
Настройка через Neighbor:
Настройка через Route Map
Local Preference
Стандартный атрибут, общий для всех роутеров в AS
Обязателен в IBGP Update, отсутствует в EBGP Update
32-битное число, больше=лучше
По умолчанию 100 для любых маршрутов
show ip bgp не отображает значение по умолчанию для EBGP-маршрутов
R1 проставляет LP 150 для EBGP и локальных маршрутов
Альтернатива: проставлять LP 150 на маршруты от ISP1
AS Path
Настройка требуется для техники AS Prepending
Настраивается через Route Map, обычно на EBGP-соседстве
Искусствено удлиняет AS Path добавлением номера собственной AS
Также номер своей AS добавляется при отправке EBGP Update отдельно от Prepending
R2 трехкратно добавляет номер своей AS в AS-Path
Плюс один раз за EBGP Update
MED
Инструмент указания предпочтения маршрута для соседней AS
По умолчанию MED маршрутов из разных AS не сравниваются
32-битное число, меньше-лучше
Часто наследуется от метрики IGP
По умолчанию предпочитаются маршруты с отсутствующим MED
В случае, если MED не установлен, он считается нулевым и соответственно выбирается данный маршрут
Можно изменить поведение командой bgp bestpath med missing-as-worst и маршруты получат максимальное значение, если MED указан фактически
Импорт маршрутов через Network
Импортировать явно указанный маршрут:
Команда network <netip> mask <netmask>
Требуется строгое совпадение в RIB
Origin - IGP
Редистрибуция
Процесс импорта маршрутов из RIB в таблицу топологии BGP
Параметры импортируемого маршрута
Origin - INCOMPLETE
MED - metric
MED и Next Hop для импорта
Импортируемые маршруты получают стартовые атрибуты
Next Hop
0.0.0.0/0 для connected/static attached
Наследуется для remote
MED
0 для network connected/static attached, redistribute connected
Default-metric для redistribute static и network static remote
Если default metric не задана, MED=0
Default-metric для redistribute IGP
Если default-metric не задана, MED=IGP Metric
Route-map при редистрибуции в BGP
С помощью Route-map можно отобрать префиксы для редистрибуции или назначить специальные атрибуты
Distribute-list в BGP
Позволяет фильтровать:
отправляемые и принимаемые префиксы (лучше делать не так)
импорт маршрутов других протоколов из RIB при редистрибуции
Инъекция маршрута по умолчанию
BGP может распространять маршрут по умолчанию из RIB
Редистрибуция статики и затем команду default-information originate
Отдать маршрут по умолчанию соседу
Манипуляции с AD
Можно задать AD префиксам BGP в RIB
По умолчанию:
20 для EBGP
170 для IBGP
200 для локальных маршрутов
Задание AD для отдельных маршрутов
distance <AD> <gatewayip> <gatewaywildcardmask> <acl>
Фильтрация входящих BGP Update
На все маршруты нужно принимать от EBGP-пиров:
Некоторые префиксы провайдер в принципе не должен анонсировать
Ваше устройство, как правило, ограничено по ресурсам
Что можно принять от провайдера, если вы - предприятие?
Только маршрут по умолчанию
Маршрут по умолчанию и отдельные specific routes
Маршруты клиентов, подключенных к тому же провайдеру
Маршруты крупных контент-провайдеров для балансировки трафика
Вообще все маршруты в Интернете (>700000 префиксов)
Прекрасный способ выстрелить себе в ногу и бездарно потратить деньги на железо
Фильтрация исходящих BGP Update
Не все маршруты нужно отправлять EBGP-пирам
По сути, вашему провайдеру не нужно отправлять ничего, кроме ваших PI IP
Особенно плохая идея - отправлять вообще все маршруты без разбора
Механизмы фильтрации в Cisco IOS
Cisco IOS позволяет фильтровать маршруты BGP-пира с помошью:
distribute-list - фильтрация на основе ACL
prefix-list - филтрация на основе prefix-list
filter-list - фильтрация на основе AS Path ACL
route map - фильтрация на основе чего угодно плюс изменение атрибутов
Фильтрация исходящих префиксов по ACL
Фильтрация входящих префиксов по Prefix-list
Фильтрация с помощью AS Path ACL
AS Path ACL используют фильтрацию на основе AS Path
Строковое представление AS Path анализируется регулярным выражением
AS Path ACL состоят из вердикта и шаблона регулярного выражения
Удобные сценарии использования AS Path
Компании: ограничить исходящие Update своими PI-префиксами
Провайдеру: ограничить входящие от клиента маршруты его PI-префиксами
Символы регулярного выражения
Символы | Что попадает |
Строка из цифр | Указанная подстрока |
строка 1\строка 2 | Любая из указанных подстрок |
[диапазон] | Любой символ из диапазона |
. | Любой символ, включая пробел |
^ | Начало строки |
$ | Конец строки |
_ | Любой разделитель, включая пробел, начало и конец строки |
(строка) | Группировка символов в выражение |
*?+ | "Ноль или более", "ноль или один", "один или более" |
\1 | Значение первого выражения |
Фильтрация исходящих префиксов:
Вероятный AS Path ACL со стороны провайдера
Last updated