Зачем BGP
Внутри одной организации работают IGP (interior gateway protocols) - ospf, IS-IS, RIP. Они быстрые, делятся всей топологией, но не масштабируются на размер интернета.
BGP - это EGP (exterior gateway protocol). Он:
- Работает между автономными системами (AS) - независимыми сетями с собственным номером (ASN, например 65001 для приватных или 13335 для Cloudflare)
- Не делится топологией - только достижимостью: «AS 65001 может достать prefix 10.0.0.0/24 через путь AS 65002 → AS 65003»
- Решает не «кратчайший путь по метрике», а политикой: предпочесть транзит подешевле, не отдавать prefix конкурентам, и т.д.
Интернет - это ~75000 AS которые между собой обмениваются BGP-апдейтами. Полная BGP-таблица интернета сейчас ~950000 IPv4 prefix'ов.
eBGP vs iBGP
| Тип | Между кем | Особенность |
|---|---|---|
| eBGP | разные AS | TTL=1 (соседи на одном link'е), AS-path увеличивается |
| iBGP | внутри одной AS | full-mesh обязателен, AS-path не меняется |
iBGP нужен когда у вас несколько BGP-роутеров в одной AS - они должны все знать друг про друга чтобы консистентно forward'ить транзит. Вместо full-mesh используют route reflector (один говорит со всеми, переотправляет апдейты).
Состояния сессии (FSM)
BGP-сессия - это TCP/179. После установления TCP идёт BGP handshake:
Idle → Connect → Active → OpenSent → OpenConfirm → Established
- Idle - стартовое, ждём триггера
- Connect - пытаемся открыть TCP
- Active - TCP не открылся, retry
- OpenSent / OpenConfirm - обменялись OPEN-сообщениями
- Established - всё, можем обмениваться prefix'ами
Если в show ip bgp summary сосед в Active - значит TCP не идёт
(firewall, IP не тот, AS не тот). См. cmd-vtysh.
BGP-атрибуты (как принимается решение)
Когда роутер получает один и тот же prefix несколькими путями, он выбирает best-path по порядку:
- Local Preference (выше = лучше) - внутри AS
- AS-path length (короче = лучше)
- Origin (IGP < EGP < incomplete)
- MED (Multi-Exit Discriminator, ниже = лучше)
- eBGP > iBGP
- IGP-метрика до next-hop
- Router ID (тie-breaker)
В скобках упрощено - реально шагов 13. Главное: путь короче (по AS) и Local-Pref выше - значит этот путь побеждает.
Минимальная конфигурация (FRR)
Сосед на p2p-линке 10.0.0.0/30, своя AS 65001, чужая 65002:
router bgp 65001
bgp router-id 1.1.1.1
no bgp default ipv4-unicast
neighbor 10.0.0.2 remote-as 65002
address-family ipv4 unicast
neighbor 10.0.0.2 activate
network 192.168.10.0/24
exit-address-family
Что тут:
network- анонсируем свой prefix соседу (он должен быть в RIB)no bgp default ipv4-unicast- современная best-practice: явно активировать address-family для каждого соседаbgp router-id- стабильный 32-битный ID (часто loopback IP)
Проверка: show ip bgp summary → должен быть Established и число
принятых prefix'ов.
Префикс-фильтры
Без фильтров iBGP/eBGP может сделать вас транзитом для половины интернета. Минимум:
ip prefix-list MY-PREFIXES seq 10 permit 192.168.10.0/24
router bgp 65001
neighbor 10.0.0.2 prefix-list MY-PREFIXES out
→ соседу 10.0.0.2 отправляем только наш prefix, ничего больше.
BGP в датацентре
В современных DC (Clos / spine-leaf) BGP вытеснил OSPF даже как IGP - это BGP-as-IGP или EVPN BGP. Причины:
- Простой policy control (route-map, prefix-list)
- Multipath с unequal AS-path
- Не нужно area-design как в ospf
- Легко отделить underlay от overlay (VXLAN/EVPN)
Кому интересно: Cumulus / NVIDIA "BGP in the Data Center" - фактический стандарт de-facto.