BGP: различия между версиями
м |
|||
Строка 180: | Строка 180: | ||
'''Пример использования''' | '''Пример использования''' | ||
{{note|text=AS1 подключена к AS2 двумя линками (multinoming). AS1 анонсирует '''172.17.0/16''' в AS2. Для оптимальной маршрутизации, AS1 хочет посылать некоторые более специфичные маршруты через один из этих линков, при этом остальному интернету вовсе не обязательно получать эти специфики. Для этой цели AS1 использует community no-export, и посылает '''172.17.0/17''' в один из стыков с AS2, и '''172.17.128/17''' во второй стык. AS2 видит эти маршруты и выбирает их как более специфичные. Кроме того, эти маршруты видят все iBGP-соседи в пределах AS2. Тем не менее, за пределы AS2 в Интернет анонсируется только '''172.17.0/16'''.}} | {{note|text=AS1 подключена к AS2 двумя линками (multinoming). AS1 анонсирует '''172.17.0/16''' в AS2. Для оптимальной маршрутизации, AS1 хочет посылать некоторые более специфичные маршруты через один из этих линков, при этом остальному интернету вовсе не обязательно получать эти специфики. Для этой цели AS1 использует community no-export, и посылает '''172.17.0/17''' в один из стыков с AS2, и '''172.17.128/17''' во второй стык. AS2 видит эти маршруты и выбирает их как более специфичные. Кроме того, эти маршруты видят все iBGP-соседи в пределах AS2. Тем не менее, за пределы AS2 в Интернет анонсируется только '''172.17.0/16'''.}} | ||
{{note|text= AS customer имеет 2 ISP (AS1, AS2). AS1 - основной. Если AS customer хочет получать выход в инет только через AS1, то в сторону AS2 можно просто посылать маршруты с no-export. Но при этом важно, что при падении AS1, AS customer будет доступна только локальным пользователям AS2, но не всему интернету.}} | {{note|text= AS customer имеет 2 ISP (AS1, AS2). AS1 - основной. Если AS customer хочет получать выход в инет только через AS1, то в сторону AS2 можно просто посылать маршруты с no-export. Но при этом важно, что при падении AS1, AS customer будет доступна только локальным пользователям AS2, но не всему интернету.}} | ||
===no-advertise (0xFFFFFF02)=== | ===no-advertise (0xFFFFFF02)=== |
Версия 13:03, 25 февраля 2017
BGP - протокол маршрутизации между AS. Path-vector protocol.
IBGP - соседство внутри AS. Соседство строится обычно на Lo адресах.
EBGP - соседство между разными AS. Соседство строится на p2p адресах.
Поддерживает аутентификацию: MD5. Можно настроить key-chain, с указанием когда какой ключ использовать. Аутентификация применяется на разных уровнях protocols bgp.
Состояния соседства
http://habrastorage.org/getpro/habr/post_images/442/780/549/442780549c2f45cdda10773121b2800d.png
Для установления соседства используется TCP 179 port.
- Idle: all incoming connections - refused. Инициализация BGP ресурсов и подготовка к установлению TCP. Если роутер завис в состоянии Idle - проверить наличие маршрута к соседу.
- Connect: процесс установления TCP сессии. Роутер слушает TCP 179. Если сессия установилась, то роутер отправляет Open message и переходит в OnepSent состояние. Если TCP не установилась, то роутер переходит в Active состояние и запускает заново ConnectRetryTimer.
- Active: BGP пытается сам установить TCP. В состоянии Active - когда ответил не прилетевший TCP. Если роутер завис в Active, проверяем: связность, прохождение по 179 порту, настройки BGP.
- OpenSent: Open отправлен локальным роутером и роутер ждет ответа (Open) от соседа.
- OpenConfirm: Open сообщение получено и роутер ждет Keepalive или Notification message. Если от соседа не приходит keepalive до истечения hold timer, то роутер генерирует Notification message, с инфо, что hold timer expired и переведет сессию в Idle. Если keepalive получен, то соседство переходит в Established state.
- Established: BGP сессия установлена, пиры начинают обмениваться информацией, используя: Update, Keepalive, Notification сообщений.
Hold timer может быть разным у пиров. При установлении сессии будет выбран наименьший.
Сообщения
- Open - отправляется только на стадии установления соседства. Содержит параметры BGP соседа: AS, hold timer и Router ID.
- Update - передает routing info между соседями (о добавлении или удалении маршрутов). Атрибуты и список префиксов, подходящий под данные атрибуты. В зависимости от policy, на локальном роутере, часть routing info может быть отброшена.
- Keepalive - для удостоверения, что с соседством все ок.
- Notification - в случае если что-то пошло не так: не прошел keepalive или update, пришла не поддерживаемая опция, ...
- Refresh - soft clearing BGP сессии.
BGP Operations
BGP хранит маршруты в трех местах:
- Adjacency-RIB-IN: все полученные маршруты от пиров
- RIB-Local: маршруты локального роутера, используемые для передачи трафика. Тут хранятся только активные маршруты.
- Adjacency-RIB-OUT: маршруты, которые будут отправляться пирам. Передаваться могут только активные маршруты. (advertise-inactive исправляет данную ситуацию).
Передача маршрутов производится по правилам (чтобы избежать routing loops):
- IBGP пиры передают маршруты, полученные от EBGP другим IBGP пирам.
- EBGP пиры передают маршруты, полученные от EBGP и IBGP другим EBGP пирам
- IBGP пиры не передают маршруты, полученные от других IBGP пиров. Поэтому для того, чтобы получить всю маршрутную информацию, требуется full-mesh связность. Либо использование RR.
По умолчанию IBGP пиры не меняют next-hop для маршрутов, полученных от EBGP.
Решается:
- настройкой next-hop self в рамках export policy.
- анонс p2p сети по IGP. Export policy для IGP.
- добавить p2p интерфейс с EBGP пиром в IGP как passive.
- настройки статического маршрута на каждом IBGP до удаленного EBGP пира.
- настроить IGP соседство с EBGP пиром.
Атрибуты (BGP attributes)
Включаются в Update сообщения и описывают BGP префиксы. Атрибуты используются для выбора активного пути.
Атрибуты пути разделены на 4 категории:
- Well-known mandatory — все маршрутизаторы, работающие по протоколу BGP, должны распознавать эти атрибуты. Должны присутствовать во всех обновлениях (update).
- Well-known discretionary — все маршрутизаторы, работающие по протоколу BGP, должны распознавать эти атрибуты. Могут присутствовать в обновлениях (update), но их присутствие не обязательно.
- Optional transitive — могут не распознаваться всеми реализациями BGP. Если маршрутизатор не распознал атрибут, он помечает обновление как частичное (partial) и отправляет его дальше соседям, сохраняя не распознанный атрибут.
- Optional non-transitive — могут не распознаваться всеми реализациями BGP. Если маршрутизатор не распознал атрибут, то атрибут игнорируется и при передаче соседям отбрасывается.
Local preference
✔️Well-known Discretionary
- Указывает маршрутизаторам внутри автономной системы как выйти за её пределы.
- Выбирается та точка выхода у которой значение атрибута больше.
- Этот атрибут передается только в пределах одной автономной системы.
- На маршрутизаторах Cisco и Juniper по умолчанию значение атрибута — 100.
- Работает только между IBGP.
- Если EBGP-сосед получает обновление с выставленным значением local preference, он игнорирует этот атрибут.
- В Junos lpf можно задать через policy и в protocol bgp. Если задан обоими способами, то будет назначен lpf из policy.
- Обычно используется на бордерах.
Когда в сети есть 2 бордера, которые получают один и тот же маршрут извне, и бордеры навешивают одинаковый повышенный lpf через export policy, в таком случае соседи IBGP получат маршрут с измененным lpf, но трафик не сможет по-правильному пути выйти из AS. Из-за того что бордеры тоже друг от друга будут получать маршрут с повышенным lpf. Решение: правильно менять lpf через import policy.
Autonomous system path
✔️Well-known Mandatory
- Описывает через какие автономные системы надо пройти, чтобы дойти до сети назначения.
- Номер AS добавляется при передаче обновления из одной AS eBGP-соседу в другой AS.
Используется для:
- обнаружения петель
- влияние на path selection с помощью prepending (делается через export policy)
[edit protocols bgp group int] export longer-as-path; [edit policy-options] policy-statement longer-as-path { term 1 { then as-path-prepend "1111 1111 1111";}}
show route advertising-protocol bgp 10.200.86.2 inet.0: 32 destinations, 32 routes (32 active, 0 holddown, 0 hidden) Prefix Nexthop MED Lclpref AS path * 172.17.0.0/24 Self 100 1111 1111 1111 [1111] I
Обозначение:
- [] - local AS
- {} - AS sets - группы AS, порядок не имеет значение. Возникает при агрегировании маршрутов.
- () - confederation
- ([]) - confederation sets
Каждый сегмент атрибута AS path представлен в виде поля TLV (path segment type, path segment length, path segment value):
- path segment type — поле размером 1 байт для которого определены такие значения:
- 1 — AS_SET: неупорядоченное множество автономных систем, через которые прошел маршрут в сообщении Update,
- 2 — AS_SEQUENCE: упорядоченное множество автономных систем, через которые прошел маршрут в сообщении Update
- path segment length — поле размером 1 байт. Указывает сколько автономных систем указано в поле path segment value
- path segment value — номера автономных систем, каждая представлена полем размером 2 байта.
Операторы регулярных выражений
{m,n} | От m до n |
{m} | m |
{m,} | m или более |
* | Все |
+ | 1 или более |
? | 0 или 1 |
| | Один из двух |
^ | Начало community |
$ | Конец community |
[] | Список или массив букв или цифр |
( ) | Группирует символы |
() | Ничего (null) |
Next-hop
✔️Well-known Mandatory
- Это IP-адрес eBGP-маршрутизатора, через который идет путь к сети назначения.
- Атрибут меняется при передаче префикса в другую AS (по-умолчанию подставляется ip-адрес bgp-соседа)
- Атрибут не меняется при передаче префикса в ту же AS
Next-hop resolution
- Next-hop self
- Export direct into IGP: проанонсировать p2p сеть с EBGP peer, который прислал префикс.
- IGP passive interface: интерфейс в сторону EBGP соседа.
- Static routes: тут возникает проблема с тем, что придется на всех IBGP роутерах прописывать этот маршрут. Лучше выбрать другой способ.
- IGP adjacency on inter-AS links to EBGP peers: тоже плохой вариант. Опсано и зачем тогде вообще разные AS. Лучше выбрать другой способ.
Можно изменить с помощью policy на выходе (в сторону своей AS):
[edit policy-options policy-statement nexthop-self] R1# show term localpref { then { next-hop self; }}
Или же на входе (в сторону EBGP peer):
[edit policy-options policy-statement nexthop-peer] R2# show term localpref { then { next-hop peer-address; }}
Origin
✔️Well-known Mandatory
Атрибут Origin — указывает на то, каким образом был получен маршрут в обновлении. Меняется с помощью policy.
0 | IGP | NLRI получена внутри исходной автономной системы |
1 | EGP | NLRI выучена по протоколу Exterior Gateway Protocol (EGP) - протокол уже давно не используется. |
2 | Incomplete | NLRI была выучена каким-то другим образом, скорей всего через redistribution. |
Atomic aggregate
✔️Well-known Discretionary
Aggregator
✔️Optional Transitive
Communities
✔️Optional Transitive
- Тегирование маршрутов
- Существуют предопределенные значения (well-known), которые не требуется определять локально на своем оборудовании
- По умолчанию не пересылаются соседям
- Одному маршруту может быть присвоено несколько communities
- Community могут быть критерием в policy для изменения других атрибутов BGP, например lpf.
- Один из вариантов применения: передается соседней AS для управления входящим трафиком
Значения от 0x00000000 до 0x0000FFFF и от 0xFFFF0000 до 0xFFFFFFFF зарезервированы.
Как правило community отображаются в формате ASN:VALUE. В таком формате, доступны для использования community от 1:0 до 65534:65535. В первой части указывается номер автономной системы, а во второй значение community, которое определяет политику маршрутизации трафика.
Некоторые значения communities предопределены. RFC1997 определяет три значения таких community. Эти значения должны одинаково распознаваться и обрабатываться всеми реализациями BGP, которые распознают атрибут community.
Если маршрутизатор получает маршрут, в котором указано предопределенное значение communities, то он выполняет специфическое, предопределенное действие основанное на значении атрибута.
Предопределенные значения communities (Well-known Communities):
no-export (0xFFFFFF01)
Все маршруты которые передаются с таким значением атрибута community не должны анонсироваться за пределы AS. То есть, маршруты не анонсируются EBGP-соседям, но анонсируются внешним соседям в конфедерации.
Пример использования
AS1 подключена к AS2 двумя линками (multinoming). AS1 анонсирует 172.17.0/16 в AS2. Для оптимальной маршрутизации, AS1 хочет посылать некоторые более специфичные маршруты через один из этих линков, при этом остальному интернету вовсе не обязательно получать эти специфики. Для этой цели AS1 использует community no-export, и посылает 172.17.0/17 в один из стыков с AS2, и 172.17.128/17 во второй стык. AS2 видит эти маршруты и выбирает их как более специфичные. Кроме того, эти маршруты видят все iBGP-соседи в пределах AS2. Тем не менее, за пределы AS2 в Интернет анонсируется только 172.17.0/16.
AS customer имеет 2 ISP (AS1, AS2). AS1 - основной. Если AS customer хочет получать выход в инет только через AS1, то в сторону AS2 можно просто посылать маршруты с no-export. Но при этом важно, что при падении AS1, AS customer будет доступна только локальным пользователям AS2, но не всему интернету.
no-advertise (0xFFFFFF02)
Все маршруты которые передаются с таким значением атрибута community не должны анонсироваться другим BGP-соседям.
no-export-subconfed (0xFFFFFF03)
Все маршруты которые передаются с таким значением атрибута community не должны анонсироваться внешним BGP-соседям (ни внешним для конфедерации, ни настоящим внешним соседям). В Cisco это значение встречается и под названием local-as.
Маршрутизаторы, которые не поддерживают атрибут community, будут передавать его далее, так как это transitive атрибут.
set policy-options policy-statement community test-community members [65510:555 65610:999] - [x and y] set policy-options policy-statement test term 1 then community (add|set|delete) test-community
set policy-options policy-statement community all-community members "*:*"
С communities широко используются регулярные выражения.
Примеры
100:* - all posible community values with AS 100.
11.1:666 - 1101:666, 1111:666, 1121:666, etc.
show route community *:20 show route community-name community-test detail
Список операторов регулярных выражений для Community
{m,n} | От m до n |
{m} | m |
{m,} | m или более |
* | Все |
+ | 1 или более |
? | 0 или 1 |
| | Один из двух |
^ | Начало community |
$ | Конец community |
[] | Список или массив букв или цифр |
( ) | Группирует символы |
() | Ничего (null) |
Действия с community
- add - добавляет к текущим community префикса указанное community
- delete - удаляет только указанное community
- set - заменяет существующие community на указанное
Multi exit discriminator (MED)
Атрибут MED:
- Используется для информирования eBGP-соседей о том, какой путь в автономную систему более предпочтительный.
- Атрибут передается между автономными системами, но в Junos передается только EBGP пиру и не распространяется дальше по AS.
- Маршрутизаторы внутри соседней автономной системы используют этот атрибут, но, как только обновление выходит за пределы AS, атрибут MED отбрасывается.
- Чем меньше значение атрибута, тем более предпочтительна точка входа в автономную систему.
- Исходя из названия - используется только в тех случаях, когда между AS есть несколько линков.
- Можно использовать для балансировки.
Сравнение MED (при прочих равных) происходит если один и тот же префикс приходит от одной AS.
Если будет анонс этого префикса с более низким MED, но из другой AS, то он не будет рассматриваться как вероятный вариант для использования.
Это дефолтное поведение, которое можно изменить с помощью:
- always-compare-med: при этом не будет иметь значение разные AS или одна, просто активным станет маршрут с самым низким MED.
- cisco-non-determenistic: выбор основан на том, когда маршрут пришел. Juniper не рекомендует использовать.
MED назначается с помощью policy.
Возможные операции с MED
Внутри policy metric - это обозначение MED атрибута.
Можно использовать как в from, так и в then. Then: назначение метки - metric 50, добавить к существующей метки - metric add 50, вычесть из metric subtract 50.
MED можно назначить внутри protocols bgp:
[edit protocols bgp group AS-100] type external local-as 200 neighbor 1.1.1.1 metric-out 50 <= определенное значение neighbor 2.2.2.2 metric-out igp <= текущаф IGP метрика neighbor 3.3.3.3 metric-out minimum-igp <= миимальная IGP мтерика, когда-либо изученная neighbor 4.4.4.4 metric-out igp 5 <= добавит или вычесть из IGP метрики
MED также можно назначить аналогичным образом через policy:
[edit policy-optinos policy-sttement new-metric] term IGP then metric igp offset term minimum-igp then metric minimum-igp offset
При использовании metric igp на префикс вешается MED, равный IGP метрики до роутера, который прислал этот префикс. При изменениях IGP metric, будет меняться и MED.
При использовании metric minimum-igp MED не будет меняться при изменениях IGP метрики.
При агрегировании маршрутов - MED становится = 0.
Если между роутерами передаются агрегированный маршрут и вложенный в него в MED, то вложенный будет передан с MED, а агрегированный - с MED = 0.
Это дефолтное поведение и альтернатив этому нет.
Weight (проприетарный атрибут Cisco)
Атрибут Weight:
- Позволяет назначить "вес" различным путям локально на маршрутизаторе.
- Используется в тех случаях, когда у одного маршрутизатора есть несколько выходов из автономной системы (сам маршрутизатор является точкой выхода).
- Имеет значение только локально, в пределах маршрутизатора.
- Не передается в обновлениях.
- Чем больше значение атрибута, тем более предпочтителен путь выхода.
Касательно всех атрибутов
Атрибуты, при выборе best, считаются лучшими с наименьшими значением. Это правило касается всех атрибутов, кроме Local Preference
Механизмы управления трафиком
Входящим
- AS path prepend
- Community (если поддерживает провайдер)
- MED (подключение к одной и той же AS)
- Анонс разных префиксов через разных ISP
Исходящим
- Проприетарный атрибут Cisco weight (локально на маршрутизаторе)
- Local Preference (локально в AS)
Выбор лучшего пути (BGP Active Route Selection)
- Juniper
- Prefer highest local preference value
- Prefer shortest AS-path length
- Prefer lowest Origin value
- Prefer lowest MED value
- Prefer routes learned from an EBGP peer over an IBGP peer
- If the remaining routes were learned through IBGP, use the path with the lowest IGP cost to the IBGP peer.
- For EBGP received routes, prefer the current active route; otherwise, prefer routes from the peer with the lowest RID
- Prefer paths with the shortest RR cluster length
- Prefer routes from the peer with the lowest router-ID
- Prefer routes with the lowest peer IP address
В Juniper можно посмотреть причину неактивности маршрута: Inactive reason в выводе sh route protocol bgp 8.8.8.8 extensive
Multipath
Один и тот же маршрут прилетает с двух пиров одной AS или несколько копий маршрута прилетает с одного пира. Активный маршрут будет вставлен в routing table с несколькими next-hop и трафик будет балансироваться между двумя пирами (в forwarding table все же будет вставляться один net-hop). Для inactive маршрутов будет указан один next-hop. Multipath не вставит маршруты с одинаковым MED-plus-IGP cost, при разных IGP метриках до пиров.
При включенном multipath, алгоритм выбора лучшего пути игнорирует router ID и peer ID.
До включения:
mortlach> show route protocol bgp terse inet.0: 30 destinations, 34 routes (30 active, 0 holddown, 0 hidden) + = Active Route, - = Last Active, * = Both A Destination P Prf Metric 1 Metric 2 Next hop AS path * 172.17.0.0/24 B 170 100 >192.168.86.21 I B 170 100 >192.168.86.42 I * 172.17.1.0/24 B 170 100 >192.168.86.21 I B 170 100 >192.168.86.42 I * 172.17.2.0/24 B 170 100 >192.168.86.21 I B 170 100 >192.168.86.42 I * 172.17.3.0/24 B 170 100 >192.168.86.21 I B 170 100 >192.168.86.42 I mortlach> show route forwarding-table destination 172.17.0.0/24 Routing table: default.inet Internet: Destination Type RtRef Next hop Type Index NhRef Netif 172.17.0.0/24 user 0 indr 262142 5 192.168.86.21 ucst 547 5 ge-0/0/0.90 - выбран активным, из-за меньшего router-ID (10.200.86.4 vs 10.200.86.8)
После:
mortlach> show route protocol bgp terse inet.0: 30 destinations, 34 routes (30 active, 0 holddown, 0 hidden) + = Active Route, - = Last Active, * = Both A Destination P Prf Metric 1 Metric 2 Next hop AS path * 172.17.0.0/24 B 170 100 192.168.86.21 I >192.168.86.42 B 170 100 >192.168.86.42 I * 172.17.1.0/24 B 170 100 192.168.86.21 I >192.168.86.42 B 170 100 >192.168.86.42 I * 172.17.2.0/24 B 170 100 192.168.86.21 I >192.168.86.42 B 170 100 >192.168.86.42 I * 172.17.3.0/24 B 170 100 192.168.86.21 I >192.168.86.42 B 170 100 >192.168.86.42 I mortlach> show route forwarding-table destination 172.17.0.0/24 Routing table: default.inet Internet: Destination Type RtRef Next hop Type Index NhRef Netif 172.17.0.0/24 user 0 indr 262143 5 192.168.86.42 ucst 588 7 ge-0/0/0.50 - изменился, т.к. router ID уже не влияет на выбор лучшего пути
Link Bandwidth Extended Community
При включенном multipath можно задать желаемую балансировку между линками через extended community. Это механизм описан в draft-ietf-idr-link-bandwidth-06, и не является стандартизированным, следовательно, возможно, он не будет работать с некоторыми вендорами. В JunOS поддерживается.
Позволяет делать балансировку пропорционально заданным в community скоростям.
Пример использования:
R1 и R2 соединены напрямую через ва сабинтерфейса, на каждом из которых висит своя /30 сеть
| | ge-0/0/0.10 ----- ge-0/0/0.10 R2 | | | R1 | | R2 | | | ge-0/0/0.20 ----- ge-0/0/0.20 R2 | |
Конфиг R1:
R1> show configuration protocols bgp group ebgp { multipath; neighbor 10.1.0.2 { description R2; export from-direct; peer-as 2222;} neighbor 10.2.0.2 { description R2; export from-direct; peer-as 2222;}}
Конфиг R2:
R2> show configuration interfaces lo0 unit 0 { family inet { address 2.2.2.2/32;} family mpls;} > show configuration policy-options policy-statement bw20 { then { community add bw20;}} policy-statement bw80 { then { community add bw80;}} policy-statement from-direct { term redistribute-direct { from protocol direct; then accept;} term default { then reject;}} community bw20 members bandwidth:2222:2500000; // 2500000 байт в секунду — это 20% от 100Мегабит community bw80 members bandwidth:2222:10000000; // 10000000 байт в секунду — это 80% от 100Мегабит R2> show configuration protocols bgp group ebgp { neighbor 10.1.0.1 { description R1; export [ bw20 from-direct ]; // На одно из соседств навешивается community, отображающее, что линк загружен на 20% peer-as 1111;} neighbor 10.2.0.1 { description R1; export [ bw80 from-direct ]; // На второе соседство навешивается community, отображающее, что линк загружен на 80% peer-as 1111;}}
Что получилось:
R1> show route 2.2.2.2 extensive inet.0: 11 destinations, 19 routes (11 active, 0 holddown, 0 hidden) 2.2.2.2/32 (2 entries, 1 announced) TSI: KRT in-kernel 2.2.2.2/32 -> {10.2.0.2, 10.1.0.2} *BGP Preference: 170/-101 Next hop type: Router, Next hop index: 262145 Address: 0x9404010 Next-hop reference count: 8 Source: 10.1.0.2 Next hop: 10.2.0.2 via ge-0/0/0.20 balance 80% Next hop: 10.1.0.2 via ge-0/0/0.10 balance 20%, selected State: <Active Ext> Local AS: 1111 Peer AS: 2222 Age: 1:20:49 Task: BGP_2222.10.1.0.2+179 Announcement bits (1): 0-KRT AS path: 2222 I Communities: bandwidth:2222:2500000 Accepted Multipath Localpref: 100 Router ID: 2.2.2.2
Multihop
Возможность поднять EBGP peering между роутерами, имеющими несколько физических соединений. Сессия устанавливается на lo интерфейсах.
Важно в конфиге задать multihop, в таблице маршрутизации должно быть несколько маршрутов до пира, при поднятии сессии на Lo интерфейсах используем либо local-address, либо system default-address-selection. TTL = 1 задаем, чтобы соседство установилось точно с одним ближайшим роутером.
blair> show route 10.200.86.4 10.200.86.4/32 *[IS-IS/18] 00:00:03, metric 10 to 192.168.86.49 via ge-0/0/0.80 > to 192.168.86.17 via ge-0/0/0.100
Config
blair> show configuration protocols bgp { group int { type internal; neighbor 10.200.86.4 { description talisker; multihop { ttl 1; }}}}
Т.к. между роутерами теперь 2 физических линка, то можно балансировать трафик между ними.
Modifying AS Path
Option 1: remove-private
Диапазон: 64512 - 65534
Роутер, на котором настроен remove-private перед передачей префиксов удаляет из AS path AS из указанного выше диапазона.
Можно настраивать на всех уровнях: protocols bgp, group, neighbor.
Option 2: local-as
[edit routing-options] R1# show autonomous-system 1111; [edit protocols bgp group ebgp] R1# show neighbor 10.1.0.2 { peer-as 2222; local-as 3333; }
При такой конфигурации R1, EBGP-сосед, который ожидает, что у R1 будет AS3333 сможет установить соседство с R1, хотя, по факту R1 принадлежит AS1111. Результат:
R1> show bgp neighbor Peer: 10.1.0.2+179 AS 2222 Local: 10.1.0.1+62745 AS 3333 Type: External State: Established Flags: <Sync> Last State: OpenConfirm Last Event: RecvKeepAlive ... Holdtime: 90 Preference: 170 Localpref: 110 Local AS: 3333 Local System AS: 1111 Number of flaps: 0 Peer ID: 2.2.2.2 Local ID: 1.1.1.1 Active Holdtime: 90 ...
Зачем это нужно
Предположим, оператор с AS1111 купил сеть оператора с AS3333. У AS3333 были свои клиенты, подключенные по BGP, которые не готовы или не хотят изменять конфигурацию на своих роутерах. В таком случае можно временно применить опцию local-as, чтобы выступить для них от лица предыдущей AS (в примере - 3333), но внутри сети перевести инфораструктуру на AS1111.
Если добавить ключевое слово private:
[edit protocols bgp group ebgp] R1# show neighbor 10.1.0.2 { peer-as 2222; local-as 3333 private; }
То R1 вообще не будет добавлять AS3333 при анонсе маршрутов, получаемых от 10.1.0.2 своим соседям.
as-override
Если на сети ISP есть 2 сессии с пирами из одной AS, то при передаче маршрутов, полученных от одного site этой AS второму site'у, второй site не примет такой префикс, потому что в AS path будет дважды указана его AS - это routing loop.
65500 1111 I - роутер с AS 65500 не примет префикс с таким AS path.
[edit protocols bgp group int neighbor 10.200.86.4] as-override;
Можно конфигурировать для группы или соседа.
Роутер ISP на полученном префиксе смотрит в AS path, AS пира заменяем на свою. При передаче префикса второму site ISP делает стандартный prepend своей AS. В итоге пиру в AS 65500 прилетит префикс с таким AS path:
1111 1111 I
loops
Еще один способ решения ситуации, описанной в примере выше - чтобы site AS 65500 получил маршрут своего удаленного site, подключенного через AS 1111: настроить на роутере AS 65500:
[edit routing-options autonomous-system 65500] loops 2;
Тогда на удаленный роутер прилетит префикс с AS path:
1111 65500 I
и роутер это сожрет.
Опции настройки для пиров
- passive - локальный роутер перестает слать open message. Чтобы сессия поднялась, open message теперь должно прийти от удаленного пира.
blair# top show | compare [edit protocols bgp group int neighbor 10.200.86.4] passive;
Feb 11 22:07:58.812668 BGP SEND message type 1 (Open) length 59 Feb 11 22:07:58.856999 BGP RECV message type 1 (Open) length 59
После задания passive для пира:
Feb 11 22:12:22.128876 BGP RECV message type 1 (Open) length 59
- allow - принимает open message только из указанной сети. Можно указать только для определенной группы:
[edit protocols bgp group int] allow 10.200.86.0/24;
- prefix-limit: ограничивает значение полученных префиксов от пира. Можно применять на разных уровнях иерархии.
[edit protocols bgp group int neighbor 10.200.86.4] family inet { unicast { prefix-limit { maximum 1500; teardown 100 (%) idle-timeout 10 (min);}}}
- hold-time: меняем hold timer. По дефолту 90 sec. Можно применять на разных уровнях иерархии.
[edit protocols bgp] hold-time 120;
- advertise-peer-as: позволяет EBGP маршруты передавать обратно EBGP пиру.
[edit protocols bgp group int] advertise-peer-as;
Route Reflection
Описан в RFC 4456
Концепция
Заменяем full-mesh на сети между PE.
- Позволяет iBGP-спикеру анонсировать другим iBGP-маршрутизаторам маршруты, полученные через iBGP
- RR только пересылает активные маршруты клиентам (это соседи RR, которые не являются RR. Для настройки таких роутеров не требуется изменений в конфигурации соседства.)
- RR по умолчанию не меняет IBGP атрибуты.
- Для предотвращения петель существуют два новых атрибута:
- Cluster List (1 или более cluster ID)
- Originator ID - ID роутера, который первым переслал маршрут в AS.
Cluster List
Список, включающий ID всех RR, которые обрабатывали данный префикс. Если RR получит маршрут, у которого в cluster list будет ID этого RR, то он его дропнет. Участвует при выборе активного маршрута (активным становится с наименьшим cluster list). Cluster ID добавляется к cluster list, когда маршрут отправляется. Cluster ID должен быть уникальным в рамках AS.
Configuration
Если на сети несколько RR, то соседство между ними может быть как в отдельной группе от RR-clients (IBGP), так и в той же группе что и клиенты. Между RR - full-mesh.
set protocols bgp group RR type internal set protocols bgp group RR peer-as 65513 set protocols bgp group RR neighbor 2.2.2.2 set protocols bgp group RR neighbor 3.3.3.3
RR-clients конфигурируются в отдельной группе, где должен быть включен: "cluster x.x.x.x"
set protocols bgp group RR-clients cluster 1.1.1.1
Со стороны клиентов конфигурация стандартная для IBGP - простое соседство с RR.
Распространение маршрутов при использовании RR.
- Клиент -> cluster RR
- RR -> all clients and non-clients(other RR)
- Other RR -> all cluster clients.
При этом: non-clients -> RR -> clients (only)
При использовании нескольких RR, можно для на всех использовать одинаковый cluster ID. +: в таблице будет меньше маршрутов и при такой схеме можно добиться хорошей отказоустойчивости в сети.
2 RR в кластере
Соседство между RR можно устанавливать как внутри отдельной группы для кластера, так и в отдельной группе. В обоих случаях при передаче маршрутов между RR петель не будет, т.к. cluster ID будет одинаковыми. Каждый из RR в кластере устанавливает IBGP с другими RR, не входящих в кластер. В подобных схемах все-таки тоже стараются использовать уникальные cluster ID.
Originator ID
Router ID первого роутера, который заслал маршрут в AS.
Hierarchical Route Reflection
Отличие от предыдущих: в схеме появляются не только RR и client, но еще и роутеры, выполняющие обе функции в рамках разных кластеров. Clients могут устанавливать IBPG между собой. Это удобно использовать, чтобы clients могли использовать маршруты от других clients нативно, без обработки RR. Чтобы RR не флудил копиями маршрутов, на нем можно включить no-client-reflect, это отключит пересылку маршрутов, полученных внутри кластера. Внешние маршруты при этом продолжают пересылаться.
Modifying Attributes on the RR
Все атрибуты BGP изменяются через policy. Если на RR есть EBGP, то с большой вероятностью будет активна ф-ия: next-hop-self. При этом, у маршрутов, полученных от client, также next-hop будет меняться. Что приведет к не оптимальному форвардингу трафика (должен идти напрямую к original роутеру, а будет идти через RR). Чтобы менять next-hope только у external: в policy матчим по interface ли neighbor.
set policy-option policy-statement nhs term EBGP from protocol bgp set policy-option policy-statement nhs term EBGP from neighbor 2.2.2.2 set policy-option policy-statement nhs term EBGP the next-hop self
Confederations
Описан в RFC 3065
Принципы
Цель: разбить global AS на sub-AS.
- sub-AS должна иметь уникальный номер (зачастую берут приватные AS).
- Внутри sub-AS между роутерами: full-mesh IBGP. Если внутри sub-AS будет слишком большая сеть, то в нее можно внедрить RR.
- Между sub-AS - EBGP = confederation BGP = CBGP. При прохождении маршрута через CBGP линк, роутер меняет AS path, включая туда AS sub-AS - этот метод - защита от петель. Другие атрибуты BGP не меняются.
Также в отличие от стандартного EBGP, в CBGP обычно соседство строится на loopback (добавляем multihop в настройки).
AS-path segment
- AS Confederation Sequence
При прохождение через CBGP линк, роутер добавляет sub-AS к AS-path в "()" в последовательности, как шел маршрут по сети.
AS Confederation Sequence не используется при выборе активного пути.
Этот атрибут имеет type code 3.
AS-path: (65000 65001 65002) 100 200
- AS Confederation Set
При агрегировании маршрутов внутри конфедерации, AS confederation sequence становится AS confederation set.
Этот атрибут имеет type code 4.
10.10.10.0/24 (65000 65001) 100 10.10.20.0/24 (65000 65002) 100 10.10.0.0/16 ({65000 65001 65002}) 100
Оба атрибута используются только для предотвращения петель внутри конфедерации.
При анонсировании маршрутов из конфедерации дальше по сети по EBGP, private AS (sub-AS) стираются, поэтому все конфедерации извне видны как одна большая глобальная AS. При этом не требуется отдельно включать (remove-private). В случае с конфедерациями, все приватные AS итак сотрутся.
Но все роутеры внутри конфедерации обязательно должны знать номер глобальной AS.
Configuration
Включение самой конфедерации на роутере - определяется в routing-options:
set routing-options autonomus-system 65000 set routing-options confederation 100 members [65000 65001 65002]
R1
внутри конфедерации: set protocols bgp group sub-AS-65001 type internal set protocols bgp group sub-AS-65001 local-address 192.168.1.3 set protocols bgp group sub-AS-65001 neighbor 192.168.1.1 set protocols bgp group sub-AS-65001 neighbor 192.168.1.2 set protocols bgp group sub-AS-65001 neighbor 192.168.1.4
CBGP-link 1:
set protocols bgp group sub-AS-65000 type external set protocols bgp group sub-AS-65000 multihop set protocols bgp group sub-AS-65000 local-address 192.168.1.3 set protocols bgp group sub-AS-65000 peer-as 65000 set protocols bgp group sub-AS-65000 neighbor 192.168.0.3
CBGP-link 2:
set protocols bgp group sub-AS-65002 type external set protocols bgp group sub-AS-65002 multihop set protocols bgp group sub-AS-65002 local-address 192.168.1.3 set protocols bgp group sub-AS-65002 peer-as 65002 set protocols bgp group sub-AS-65002 neighbor 192.168.2.4
Route damping (flapping)
При различных обстоятельствах на сети могут возникать флапы маршрутов, что приводит к загрузке CPU на роутерах.
Чтобы избежать подобного поведения есть некоторые механизмы защиты от флапов, например: BGP roаte lap damping.
Damping игнорируется IBGP и работает только с EBGP и CBGP (confederation BGP).
Damping уменьшает кол-во update message, путем обозначения флапающих маршрутов непригодными стать активными маршрутами. Принцип работы:
Когда маршрут прилетает на наш роутер (на котором настроен route damping), на префикс назначается значение merit = 0.
Как только роутер распознает некую нестабильность маршрута (префикс просто перестает долетать до роутера (или линк упал)):
- назначается merit = 1000, включается счетчик decay half-life. Если на роутер снова прилетит префикс, до того, как истечет таймер, то значение merit увеличится еще на 1000 ()+1000. И подобное поведение будет повторяться до превышения значения merit до supress (3000) - префикс в таком случае будет признан непригодным для использования.
После того, как префикс прорал и заново прилетел на роутер по BGP, его значение merit = 2000 (при дефолтных настройках)
Merit (last update/now): 1969/1938 Default damping parameters used Last update: 00:00:27 First update: 00:00:49 Flaps: 2
После этого при исчезновении маршрута с роутера, его не будет видно в inet.0, но инфо можно будет посмотреть в
blair> show route damping history detail
После того, как будет превышен supress threshold, инфо о маршруте можно будет посмотреть:
blair> show route damping suppressed detail
Либо в hidden, если маршрут приходит от пира.
- если префикс передается от роутера, то он передается со значением merit = 1000.
- если изменяется path attribute, то префиксу старится значение 500
- decay half-life - кол-во минут после которого значение merit уменьшается вдвое, при поведении маршрута более стабильно. default = 15 min.
- max-supress - максимальное кол-во минут, которое маршрут проводит в состоянии hold-down. default = 60 min.
- reuse threshold - произвольное значение, после которого маршрут снова можно использовать. default = 750.
- supress threshold- произвольное значение, после которого маршрут больше нельзя использовать. default = 3000.
Config
Как только включаем на роутере damping, без заданных параметрах, для работы будут использоваться дефолтные значения.
Параметры задаются через policy. Disable - для определенных префиксов удаляет merit, и убирает префикс из damping процесса (могут быть например public DNS).