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:
R2(config)#router bgp 65000
R2(config-router)#neighbor 192.168.1.1 weight 10
Настройка через Route Map
R2(config)#ip prefix-list ISP1_ROUTES permit 198.51.100.0/24
R2(config)#ip prefix-list ISP1_ROUTES permit 203.0.113.0/24
R2(config)#route-map RM_SET_WEIGHT permit 10
R2(config-route-map)#match ip address prefix-list ISP1_ROUTES
R2(config-route-map)#set weight 10
R2(config-route-map)#route-map RM_SET_WEIGHT permit 50
R2(config-route-map)#router bgp 65000
R2(config-router)#neighbor 192.168.1.1 route-map RM_SET_WEIGHT in
Local Preference
Стандартный атрибут, общий для всех роутеров в AS
Обязателен в IBGP Update, отсутствует в EBGP Update
32-битное число, больше=лучше
По умолчанию 100 для любых маршрутов
show ip bgp не отображает значение по умолчанию для EBGP-маршрутов
R1 проставляет LP 150 для EBGP и локальных маршрутов
R1(config-router)#bgp default local-preference 150
Альтернатива: проставлять LP 150 на маршруты от ISP1
R1(config)#route-map RM_SET_LP permit 10
R1(config-route-map)#set local-preference 150
R1(config-route-map)#router bgp 65000
R1(config-router)#neighbor 10.1.1.1 route-map RM_SET_LP in
AS Path
Настройка требуется для техники AS Prepending
Настраивается через Route Map, обычно на EBGP-соседстве
Искусствено удлиняет AS Path добавлением номера собственной AS
Также номер своей AS добавляется при отправке EBGP Update отдельно от Prepending
R2 трехкратно добавляет номер своей AS в AS-Path
Плюс один раз за EBGP Update
R2(config)#route-map SET_ASPATH permit 10
R2(config-route-map)#set as-path prepend 65500 65500 65500
R2(config-route-map)#router bgp 65500
R2(config-router)#neighbor 10.2.2.2 route-map SET_ASPATH out
MED
Инструмент указания предпочтения маршрута для соседней AS
По умолчанию MED маршрутов из разных AS не сравниваются
32-битное число, меньше-лучше
Часто наследуется от метрики IGP
По умолчанию предпочитаются маршруты с отсутствующим MED
В случае, если MED не установлен, он считается нулевым и соответственно выбирается данный маршрут
Можно изменить поведение командой bgp bestpath med missing-as-worst и маршруты получат максимальное значение, если MED указан фактически
Импорт маршрутов через Network
Импортировать явно указанный маршрут:
Команда network <netip> mask <netmask>
Требуется строгое совпадение в RIB
Origin - IGP
R1(config)#router bgp 64501
R1(config-router)#network 203.0.113.0 mask 255.255.255.0
Редистрибуция
Процесс импорта маршрутов из RIB в таблицу топологии BGP
Параметры импортируемого маршрута
Origin - INCOMPLETE
MED - metric
Router(config)#router bgp 65001
Router(config-router)#redistribute connected
Router(config-router)#redistribute static metric 300
Router(config-router)#redistribute ospf 1 route-map OSPF_TO_BGP
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
Router(config)#router bgp 65001
Router(config-router)#default-metric 300
Route-map при редистрибуции в BGP
С помощью Route-map можно отобрать префиксы для редистрибуции или назначить специальные атрибуты
R1(config)#ip route 10.0.1.1 255.255.255.255 10.0.0.1 tag 1
R1(config)#ip route 10.0.2.2 255.255.255.255 10.0.0.1 tag 2
R1(config)#ip route 10.0.3.3 255.255.255.255 10.0.0.1 tag 3
R1(config)#route-map STATIC_TO_BGP permit 10
R1(config-route-map)#match tag 1
R1(config-route-map)#set metric 300
R1(config-route-map)#route-map STATIC_TO_BGP permit 20
R1(config-route-map)#match tag 2
R1(config-route-map)#set local-preference 500
R1(config)#router bgp 65001
R1(config-router)#redistribute static route-map STATIC_TO_BGP
Distribute-list в BGP
Позволяет фильтровать:
отправляемые и принимаемые префиксы (лучше делать не так)
импорт маршрутов других протоколов из RIB при редистрибуции
Router(config-router)#distribute-list ACL_BGP_INCOMING in
Router(config-router)#distribute-list prefix PREF_BGP_INCOMING gatewat PREF_NEIGHBORS in gi0/0
Router(config-router)#distribute-list route-map RM_BGP_INCOMING
Router(config-router)#distribute-list ACL_BGP_OUTGOING out
Router(config-router)#distribute-list prefix PREF_BGP_OUTGOING out gi0/0
Router(config-router)#distribute-list prefix PREF_OSPF_TO_BGP out ospf 1
Инъекция маршрута по умолчанию
BGP может распространять маршрут по умолчанию из RIB
Редистрибуция статики и затем команду default-information originate
Отдать маршрут по умолчанию соседу
Router(config-router)#default-information originate
Router(config-router)#neighbor 8.8.3.1 default-information
Манипуляции с AD
Можно задать AD префиксам BGP в RIB
По умолчанию:
20 для EBGP
170 для IBGP
200 для локальных маршрутов
R1(config-router)#distance bgp 25 175 205
Задание AD для отдельных маршрутов
distance <AD> <gatewayip> <gatewaywildcardmask> <acl>
Router(config-router)#distance 180 0.0.0.0 255.255.255.255 ACL_DISTANCE_180
Фильтрация входящих 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
R1(config)#ip access-list standard ACL_PI_ADDRESSES
R1(config-std-nacl)#permit 203.0.113.0 0.0.0.255
R1(config-std-nacl)#router bgp 65000
R1(config-router)#neighbor 10.1.1.1 distrubute-list ACL_PI_ADDRESSES out
Фильтрация входящих префиксов по Prefix-list
R1(config)#ip prefix-list PI_DEFAULT_AND_8_24 permit 0.0.0.0/0
R1(config)#ip prefix-list PI_DEFAULT_AND_8_24 permit 0.0.0.0/0 ge 8 le 24
R1(config)#router bgp 65001
R1(config-router)#neighbor 10.1.1.1 prefix-list PI_DEFAULT_AND_8_24 in
Фильтрация с помощью AS Path ACL
AS Path ACL используют фильтрацию на основе AS Path
Строковое представление AS Path анализируется регулярным выражением
AS Path ACL состоят из вердикта и шаблона регулярного выражения
Удобные сценарии использования AS Path
Компании: ограничить исходящие Update своими PI-префиксами
Провайдеру: ограничить входящие от клиента маршруты его PI-префиксами
Символы регулярного выражения
Символы
Что попадает
Строка из цифр
Указанная подстрока
строка 1\строка 2
Любая из указанных подстрок
[диапазон]
Любой символ из диапазона
.
Любой символ, включая пробел
^
Начало строки
$
Конец строки
_
Любой разделитель, включая пробел, начало и конец строки
(строка)
Группировка символов в выражение
*?+
"Ноль или более", "ноль или один", "один или более"
\1
Значение первого выражения
Фильтрация исходящих префиксов:
R1(config)#ip as-path access-list 1 permit $^
R1(config)#router bgp 65001
R1(config-router)#neighbor 10.1.1.1 filter-list 1 out
Вероятный AS Path ACL со стороны провайдера
ISP(config)#ip as-path access-list 1 permit $65001^
ISP(config)#router bgp 65000
ISP(config-router)#neighbor 10.1.1.2 filter-list in
Last updated