BGP
Состояния соседства
http://habrastorage.org/getpro/habr/post_images/442/780/549/442780549c2f45cdda10773121b2800d.png
Сообщения
- Open - отправляется только на стадии установления соседства. Содержит параметры BGP соседа.
- Update - передает routing info между соседями. Атрибуты и список префиксов, подходящий под данные атрибуты.
- Keepalive - для удостоверения, что с соседством все ок.
- Notification - в случае если не прошел keepalive или update.
- Refresh - soft clearing BGP сессии.
Атрибуты пути (path attributes)
Атрибуты пути разделены на 4 категории:
- Well-known mandatory — все маршрутизаторы, работающие по протоколу BGP, должны распознавать эти атрибуты. Должны присутствовать во всех обновлениях (update).
- Well-known discretionary — все маршрутизаторы, работающие по протоколу BGP, должны распознавать эти атрибуты. Могут присутствовать в обновлениях (update), но их присутствие не обязательно.
- Optional transitive — могут не распознаваться всеми реализациями BGP. Если маршрутизатор не распознал атрибут, он помечает обновление как частичное (partial) и отправляет его дальше соседям, сохраняя не распознанный атрибут.
- Optional non-transitive — могут не распознаваться всеми реализациями BGP. Если маршрутизатор не распознал атрибут, то атрибут игнорируется и при передаче соседям отбрасывается.
Примеры атрибутов BGP:
- Well-known mandatory:
- Autonomous system path
- Next-hop
- Origin
- Well-known discretionary:
- Local preference
- Atomic aggregate
- Optional transitive:
- Aggregator
- Communities
- Optional non-transitive:
- Multi-exit discriminator (MED)
Autonomous system path
Атрибут Autonomous system path (AS Path):
- Описывает через какие автономные системы надо пройти, чтобы дойти до сети назначения.
- Номер AS добавляется при передаче обновления из одной AS eBGP-соседу в другой AS.
Используется для:
- обнаружения петель
- применения политик
Каждый сегмент атрибута 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 байта.
Next-hop
Атрибут Next-hop
- IP-адрес следующей AS для достижения сети назначения.
- Это IP-адрес eBGP-маршрутизатора, через который идет путь к сети назначения.
- Атрибут меняется при передаче префикса в другую AS
- Атрибут не меняется при передаче префикса в ту же AS
Third party next hop: 300px
Origin
Атрибут Origin — указывает на то, каким образом был получен маршрут в обновлении.
Возможные значения атрибута:
- 0 — IGP: NLRI получена внутри исходной автономной системы;
- 1 — EGP: NLRI выучена по протоколу Exterior Gateway Protocol (EGP). Предшественник BGP, не используется
- 2 — Incomplete: NLRI была выучена каким-то другим образом
Local preference
Атрибут Local preference:
- Указывает маршрутизаторам внутри автономной системы как выйти за её пределы.
- Этот атрибут передается только в пределах одной автономной системы.
- На маршрутизаторах Cisco и Juniper по умолчанию значение атрибута — 100.
- Выбирается та точка выхода у которой значение атрибута больше.
- Если eBGP-сосед получает обновление с выставленным значением local preference, он игнорирует этот атрибут.
- В Junos lpf можно задать через policy и в protocol bgp. Если задан обоими способами, то будет назначен lpf из policy.
Atomic aggregate
Aggregator
Communities
Атрибут community:
- Тегирование маршрутов
- Существуют предопределенные значения
- По умолчанию не пересылаются соседям
- Один из вариантов применения: передается соседней 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 не должны анонсироваться за пределы конфедерации (автономная система, которая не является частью конфедерации считается конфедерацией). То есть, маршруты не анонсируются EBGP-соседям, но анонсируются внешним соседям в конфедерации,
- no-advertise (0xFFFFFF02) — Все маршруты которые передаются с таким значением атрибута community не должны анонсироваться другим BGP-соседям,
- no-export-subconfed (0xFFFFFF03) — Все маршруты которые передаются с таким значением атрибута community не должны анонсироваться внешним BGP-соседям (ни внешним в конфедерации, ни настоящим внешним соседям). В Cisco это значение встречается и под названием local-as.
Маршрутизаторы, которые не поддерживают атрибут community, будут передавать его далее, так как это transitive атрибут.
Multi exit discriminator (MED)
Атрибут MED:
- Используется для информирования eBGP-соседей о том, какой путь в автономную систему более предпочтительный.
- Атрибут передается между автономными системами.
- Маршрутизаторы внутри соседней автономной системы используют этот атрибут, но, как только обновление выходит за пределы AS, атрибут MED отбрасывается.
- Чем меньше значение атрибута, тем более предпочтительна точка входа в автономную систему.
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 cluster length
- Prefer routes from the peer with the lowest peer ID
Multipath
Link Bandwidth Extended Community
При включенном multipath можно задать желаемую балансировку между линками через extended community. Это механизм описан в draft-ietf-idr-link-bandwidth-06, и не является стандартизированным, следовательно, возможно, он не будет работать с некоторыми вендорами. В JunOS поддерживается.
Пример использования:
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
Modifying AS Path
Option 1: remove-private
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.
© Наталия Бобкова 2014—2022