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