Атрибуты пути BGP являются важнейшими элементами, влияющими на процесс принятия решений маршрутизаторами BGP. Когда у вас есть маршрутизатор, говорящий на BGP, очень часто вы получаете тысячи маршрутов от различных одноранговых узлов и, довольно часто, один и тот же маршрут из нескольких источников. Итак, как маршрутизатор решает, какой путь выбрать, чтобы добраться до определенного пункта назначения? Именно здесь в игру вступают атрибуты пути BGP.
Атрибуты пути предоставляют маршрутизаторам BGP информацию, необходимую для выбора наилучшего пути. Это критерии, на основе которых BGP принимает решения о маршрутизации. Думайте о них как о факторах, которые влияют на «мнение» маршрутизатора о том, какой маршрут является предпочтительным.
Кроме того, этими атрибутами можно манипулировать для достижения определенных целей. Например, может потребоваться заблокировать маршруты, исходящие из определенной AS, или отдать предпочтение маршрутам, исходящим из другой AS.
Категории атрибутов пути BGP
Ниже приведен краткий обзор четырех основных категорий атрибутов пути BGP.
- Всем известный обязательный - Эти атрибуты должны быть поняты и присутствовать во всех обновлениях BGP. Примеры включают AS Path, Next Hop и Origin.
- Известный дискреционный - Эти атрибуты распознаются всеми реализациями BGP, но их не нужно включать в каждое обновление. Примеры включают Local Preference и Atomic Aggregate.
- Необязательный транзитивный - Эти атрибуты можно игнорировать, если они не поняты, но их следует передавать другим одноранговым узлам BGP. Маршрутизатор BGP, не поддерживающий этот атрибут, все равно может получать маршруты с этим атрибутом и объявлять их другим одноранговым узлам. Примеры: агрегатор и сообщество
- Необязательный нетранзитивный - Эти атрибуты могут быть отброшены, если их не понимают, и не передаются другим одноранговым узлам. В качестве примера можно привести атрибут MED (Multi Exit Discriminator).
💡
Все общеизвестные атрибуты должны быть переданы (после обновления, если это необходимо) другим узлам BGP.
Алгоритм наилучшего пути BGP
Когда маршрутизатор BGP получает один и тот же маршрут из нескольких источников, он должен решить, какой путь использовать, на основе систематического подхода, известного как алгоритм выбора наилучшего пути BGP. Этот процесс включает в себя оценку различных атрибутов в определенном порядке для определения наиболее предпочтительного маршрута. Ниже приведена разбивка этапов, связанных с алгоритмом выбора наилучшего пути BGP.
- Вес- Предпочтительным является маршрут с наибольшим атрибутом веса. Важно отметить, что вес является проприетарным атрибутом Cisco, поэтому он не может использоваться другими поставщиками.
- Местные предпочтения - Далее выбирается маршрут с наибольшим местным предпочтением. Значение по умолчанию для локальных предпочтений равно 100.
- Местное происхождение - Маршрут, который был локально создан либо с помощью команды 'network', либо перераспределен из IGP, является предпочтительным по сравнению с маршрутами, полученными из внешних источников.
- Путь AS - Предпочтительным является маршрут с кратчайшим путем AS
- Код происхождения - Маршруты предпочтительны в зависимости от исходного кода, при этом IGP (i) является наиболее предпочтительным, за ним следует EGP (e) и, наконец, Incomplete (?).
- MED (Дискриминатор с несколькими выходами) - Предпочтительным является маршрут с наименьшим значением MED. Этот атрибут помогает выбрать между несколькими выходами в одну и ту же внешнюю AS.
- eBGP через iBGP - Маршруты, изученные с помощью eBGP, предпочтительнее маршрутов, изученных с помощью iBGP.
- Кратчайшая метрика IGP для следующего перехода - Выбирается маршрут с наименьшей метрикой IGP для достижения следующего перехода.
- Самый старый маршрут - Среди одинаково желанных путей предпочтение отдается самому старому маршруту (тому, который дольше всех пролежал на столе).
- ID маршрутизатора - При прочих равных условиях предпочтительным является маршрут с наименьшим идентификатором маршрутизатора.
- Соседний IP-адрес - Наконец, предпочтительнее маршрут с наименьшим соседним адресом (на основе IP).
Я собираюсь использовать следующую схему для последующих примеров, чтобы продемонстрировать алгоритм наилучшего пути BGP. Лаборатория основана на изображениях Arista EOS, однако, если вы используете Cisco, вы должны быть в состоянии следить за ними. Синтаксис и выходные данные Cisco и Arisa практически идентичны.
Вес
Атрибут BGP Weight — это собственный атрибут пути Cisco (я все еще могу использовать его с Arista), используемый для выбора наилучшего пути, когда на одном и том же маршрутизаторе получено несколько маршрутов к одному и тому же пункту назначения. Он является локальным для маршрутизатора и не рекламируется для других маршрутизаторов. Чем выше вес, тем предпочтительнее маршрут.
Мы можем присваивать значения, начиная с 0 Кому 65535. В Cisco локально сгенерированные префиксы получают значение веса 32768 и каждый второй префикс получает значение по умолчанию 0
💡
Вес не передается другим одноранговым узлам BGP (iBGP или eBGP) и является только локально значимым
В нашей сети R6 получает маршрут к 1.1.1.0/24 как от R3, так и от R5. По умолчанию R6 предпочитает маршрут через R3 (обозначен как *>), потому что у него более короткий путь AS.
Однако, если мы хотим, чтобы R6 предпочел маршрут через R5, мы можем присвоить больший вес маршруту, полученному от R5 на R6. Эта корректировка переопределит учет длины пути AS (помните, что вес находится в верхней части списка для выбора пути), что сделает R5 предпочтительным путем для достижения 1.1.1.0/24 сеть.
Чтобы сделать путь через R5 предпочтительным для R6, нам нужно создать список префиксов на R6, который соответствует конкретному маршруту 1.1.1.0/24. Затем мы создадим карту маршрутов, которая ссылается на этот список префиксов.
В карте маршрута мы укажем условия. Если маршрут соответствует интересующему нас префиксу, вес будет установлен на значение, превышающее значение по умолчанию (которое равно 0). Наконец, эта карта маршрутов будет применена к входящим маршрутам BGP от R5. При более высоком весе маршруты, полученные от R5, будут иметь приоритет над маршрутами от R3, что делает R5 предпочтительным маршрутом.
#R6
ip prefix-list WEIGHT-1-1-1-0
seq 10 permit 1.1.1.0/24 eq 24
route-map WEIGHT permit 10
match ip address prefix-list WEIGHT-1-1-1-0
set weight 10
!
route-map WEIGHT permit 15
router bgp 6000
neighbor 12.12.36.1 remote-as 3000
neighbor 12.12.56.1 remote-as 5000
neighbor 12.12.56.1 route-map WEIGHT in
network 6.6.6.0/24
clear ip bgp * soft
Если вы еще раз проверите вывод, то увидите, что теперь предпочтительный путь лежит через R5, как показано ниже. Вы также можете увидеть вес 10, приложенный к маршруту 1.1.1.0/24
Если вы хотите применить вес ко всем маршрутам, которые идут от определенного соседа, вы можете опустить параметр match в списке префиксов, как показано ниже.
#R6
route-map WEIGHT permit 10
set weight 10
!
router bgp 6000
neighbor 12.12.36.1 remote-as 3000
neighbor 12.12.56.1 remote-as 5000
neighbor 12.12.56.1 route-map WEIGHT in
network 6.6.6.0/24
Как вы можете видеть здесь, вес 10 применяется ко всем префиксам, которые идут от соседнего R5.
Местные предпочтения
Локальные предпочтения — это второй атрибут пути BGP, который помогает задать предпочтительный путь для исходящего трафика в AS.
Когда маршрутизатор узнает о нескольких путях к определенной сети, локальный атрибут предпочтения используется для принятия решения о том, какой путь следует предпочесть. Более высокое значение локального предпочтения более предпочтительно по сравнению с более низким. Значение по умолчанию — 100.
Этот атрибут применим только в пределах вашей собственной сети (он не объявляется внешним одноранговым узлам BGP), что делает его предпочтительным выбором для управления потоками исходящего трафика. Если вам интересно, похоже ли это на вес, вы правы. Однако вес не передается другим узлам iBGP, а передается локальное предпочтение.
В нашем сценарии в рамках AS 1000 у нас есть маршрутизаторы R1 и R2, которые должны определить наилучший путь для подключения к сети 6.6.6.0/24 в R6. В то время как R1 получает префикс непосредственно от R3, R2 получает его двумя разными путями, один через R1, а другой через R4 и R5. R2, естественно, предпочитает более короткий путь через R1.
Однако, предположим, что наша внутренняя политика маршрутизации в AS 1000 предпочитает, чтобы трафик проходил по нижнему пути через R4, R5, а затем R6. Чтобы обеспечить это, мы можем использовать атрибут локального предпочтения BGP. Локальные предпочтения отправляются на все маршрутизаторы в пределах одной AS и влияют на путь исходящего трафика без необходимости индивидуальной настройки на каждом маршрутизаторе (например, веса)
Вот что мы делаем - На R2 мы настраиваем BGP на назначение более высокого локального предпочтения маршрутам в 6.6.6.0/24 получен от R4. Следовательно, R2 предпочтет маршрут через R4, а не маршрут из R1 из-за более высокого местного предпочтения. Поскольку локальные предпочтения распространяются по всей AS, R2 будет объявлять этот (теперь лучший путь) R1, влияя на R1, чтобы он также выбрал маршрут через R2, R4, R5 и R6 для достижения сети 6.6.6.0/24.
#R2
ip prefix-list LOCAL_PREF
seq 10 permit 6.6.6.0/24
!
route-map LOCAL_PREF permit 10
match ip address prefix-list LOCAL_PREF
set local-preference 110
!
route-map LOCAL_PREF permit 15
!
router bgp 1000
neighbor 12.12.12.1 remote-as 1000
neighbor 12.12.22.2 remote-as 4000
neighbor 12.12.22.2 route-map LOCAL_PREF in
network 2.2.2.0/24
Таким образом, установив более высокое локальное предпочтение на R2 для конкретного префикса, поступающего от R4, мы можем направить трафик по нашему предпочтительному пути в пределах AS 1000.
Originate (местное происхождение)
Я не собираюсь тратить много времени на примеры, потому что это очень просто.
В BGP термин «originate» относится к маршрутам, которые генерируются в локальном маршрутизаторе, а затем объявляются другим одноранговым узлам BGP. Эти локально исходящие маршруты могут быть сетями, которые напрямую подключены к маршрутизатору или перераспределены из других протоколов маршрутизации. BGP рассматривает эти маршруты из местных источников в качестве отправных точек для выбора пути BGP, и, таким образом, они имеют значительный уровень доверия, связанный с ними. Это связано с тем, что маршрут, созданный маршрутизатором, всегда будет предпочтительнее маршрута, полученного из другого источника.
В маршрутизаторах Cisco локально исходящие маршруты в BGP имеют атрибут next-hop, установленный в значение 0.0.0.0, что указывает на то, что маршрут исходит от локального маршрутизатора. С другой стороны, маршрутизаторы Arista обозначают локально созданные маршруты в своей таблице BGP дефисом (-). Это различие позволяет легко определить, что маршрут является локальным для маршрутизатора, на который вы в данный момент смотрите, а не получен от другого однорангового узла BGP.
AS_Path
Путь AS — это хорошо известный обязательный атрибут BGP, в котором перечислены автономные системы, через которые прошел маршрут. Он используется BGP для предотвращения циклов маршрутизации и выбора наилучшего пути к месту назначения на основе кратчайшей длины пути AS.
На нашей схеме R6 получает маршрут к 1.1.1.0/24 двумя разными путями: R1 > R3 > R6 и R2 > R4 > R5 > R6. Предполагая, что все остальное одинаково (одинаковый вес и локальное предпочтение, и, конечно, ни то, ни другое не является локально созданным маршрутом), алгоритм принятия решений BGP переходит к рассмотрению пути AS. Поскольку путь через R3 короче, R6 предпочтет этот маршрут тому, который проходит через R4 и R5. Чем короче длина пути AS, тем более он выбран для R6 для достижения 1.1.1.0/24 сеть.
Манипуляции с траекторией AS — это метод, обычно используемый для влияния на входящий трафик. Например, если AS1000 хочет побудить весь входящий трафик отдавать предпочтение пути через R4, он может искусственно удлинить путь AS для маршрута, проходящего через R3. Это делается путем многократного добавления собственного номера AS к атрибуту пути AS. В этом случае для внешних СА этот путь будет казаться длиннее и менее желательным. В результате, другие автономные системы будут видеть путь к AS1000 через R3 как 3000 1000 1000 1000, что делает маршрут через R4 более привлекательным вариантом из-за его более короткого видимого пути AS.
Давайте попробуем это, ладно? Как всегда, нам нужна карта маршрута, а затем применить ее к соседу.
#R1
route-map AS_PATH permit 10
set as-path prepend 1000 1000 1000
!
router bgp 1000
neighbor 12.12.12.2 remote-as 1000
neighbor 12.12.13.2 remote-as 3000
neighbor 12.12.13.2 route-map AS_PATH out
network 1.1.1.0/24
Как видно из вывода, ранее предпочитаемый маршрут теперь имеет дополнительные предпосылки пути AS, что делает его менее предпочтительным. Расширяя таким образом путь AS, AS1000 эффективно влияет на процесс выбора маршрутов других AS, направляя их на пути к сетям в пределах AS1000. В этом документе показано, как можно управлять путями входящего трафика к AS, используя предварительное добавление пути AS.
Код происхождения
Origin — это хорошо известный обязательный атрибут BGP Path, который определяет источник информации о маршрутизации, то есть о том, как маршрут стал маршрутом BGP.
Существует три типа кодов происхождения
- i (IGP) — имеет наивысший приоритет, и маршруты добавляются в таблицу маршрутизации BGP с помощью команды network команда
- e (EGP) - Это довольно редкое явление, но это означает, что маршрут пришел от EGP. Такое увидишь не часто.
- ? (неполные) - маршруты, которые перераспределяются из других протоколов маршрутизации в BGP (Static, OSPF, EIGRP)
Когда я говорю, что код IGP Origin имеет наивысший приоритет, я имел в виду, что, скажем, маршрутизатор узнает об одном и том же маршруте из двух разных мест, а все остальное (вес, локальные предпочтения AS_Path) эти маршруты одинаковы.
Что будет дальше? Ваш маршрутизатор посмотрит на исходный код, чтобы разорвать связь. Если один из маршрутов имеет исходный код i, что маршрут является победителем (предполагая, что у другого есть ? например, то есть маршрут стал маршрутом BGP через перераспределение)
Вот в наших примерах вы увидите i рядом с каждым маршрутом, потому что мы использовали метод network на каждом из них.
MED (дискриминатор с несколькими выходами)
Атрибут MED позволяет влиять на другую автономную систему для достижения определенного маршрута, когда для этой AS есть несколько точек входа.
Проще говоря, MED — это как указатель, который вы устанавливаете на маршрутах, которые рекламируете своим соседям, сообщая им, какой путь «дешевле» для подключения к вашей сети. Установив значение MED, вы можете указать своим соседям, по какой дороге следует ехать, когда они посетят вашу AS. Чем ниже значение MED, тем привлекательнее дорога.
Обратите внимание, что существуют и другие атрибуты, такие как вес, локальное предпочтение, начало координат и путь AS, которые принимаются во внимание перед рассмотрением атрибута MED.
💡
Когда все остальные факторы равны, предпочтительной является точка выхода с наименьшим MED.
Мы будем использовать немного измененную схему, чтобы продемонстрировать, как работает MED.
На этой схеме мы рассматриваем сеть с пятью маршрутизаторами, от R1 до R5. R1, R2 и R3 входят в состав AS 100, в то время как R4 входит в AS 200, а R5 — в AS 300. R1 — это реклама префикса 9.9.9.0/24 к R2 и R3, его одноранговые узлы iBGP в рамках AS 100. Затем и R2, и R3 распространяют этот префикс на R4 через eBGP.
Итак, столкнувшись с двумя потенциальными путями к 9.9.9.0/24, что выберет R4? Прокрутив в памяти критерии выбора пути BGP, мы получаем вес, локальное предпочтение, тип источника, длину AS_Path и код источника, которые по умолчанию совпадают. Мы еще не создавали никаких конкретных конфигураций для атрибута MED.
Здесь решающий фактор сводится к атрибуту «Самый старый маршрут». R4 узнал о маршруте от R2 о 00:05:43 ago и от R3 00:05:42 ago. Итак, маршрут от R2 выигрывает.
Вот почему, в отсутствие других дифференцирующих факторов, маршрут через R2 — это тот, который выбран в выходных данных, которые вы увидите на R4.
Чтобы направлять входящий трафик таким образом, чтобы при вводе AS 100 предпочтение отдавался пути через R3, мы будем использовать атрибут MED. MED — это отличный способ сообщить внешним AS, какой путь они используют для доступа к вашей AS.
В нашем случае, поскольку мы хотим, чтобы R4 предпочитал путь через R3, мы присвоим более высокое значение MED маршруту, объявленному от R2 до R4. Помните, что в BGP более низкий MED более привлекателен, поэтому, устанавливая более высокий MED на маршрутах из R2, мы, по сути, делаем их менее привлекательными.
Чтобы реализовать это, мы настроим карту маршрутов на R2, которая установит более высокий MED для префиксов, которые он объявляет R4. Затем эта карта маршрутов применяется к конфигурации соседей на R2 для R4. При наличии этой конфигурации, когда R4 сравнивает MED для маршрута в 9.9.9.0/24 из R2 и R3, он будет рассматривать маршрут от R3 как более привлекательный из-за более низкого MED и, таким образом, прямого входящего трафика в AS 100 через R3.
#R2
route-map MED permit 10
set metric 10
router bgp 100
neighbor 12.12.12.1 remote-as 100
neighbor 12.12.23.2 remote-as 100
neighbor 12.12.24.2 remote-as 200
neighbor 12.12.24.2 route-map MED out
Имейте в виду, что значение MED относится только к ближайшим автономным системам. Таким образом, стоимость MED, которую R2 рекламирует R4, предназначена исключительно для рассмотрения R4. R4 не будет передавать это значение MED в R5; он отбросит значение MED, установленное R2, перед отправкой каких-либо обновлений в R5. MED не является транзитивным атрибутом в BGP; он не продолжается вниз по пути BGP после первого прыжка.
Также важно понимать, что значения MED сравниваются только тогда, когда они поступают из одной и той же AS. Это означает, что если R4 получает один и тот же префикс от другой AS с другим значением MED, R4 не будет напрямую сравнивать значения MED из двух разных AS. Каждый MED оценивается в контексте маршрутов, полученных из одной и той же AS, а не через несколько AS.