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