L3 BGP — визуализированный
BGP (Border Gateway Protocol) — клей всего интернета. Это единственный протокол, который связывает десятки тысяч автономных систем (провайдеров, облаков, корпораций) в одну сеть. В отличие от OSPF, BGP заботится не о «самом быстром пути», а о политике: с кем дружим, через кого пускаем трафик, кого предпочитаем. И всё чаще BGP приходит внутрь дата-центров и Kubernetes — поэтому учим глубоко, с пакетами и реальными сценариями.
Понедельник, 09:47. В мониторинге красное: «BGP-сессия с провайдером Beeline (AS 3216) упала
в 09:31, трафик ушёл через резервного провайдера, клиенты жалуются на задержки». Дежурный
старший бросает тебе в чат: «глянь show bgp summary на границе, что там с пирингом,
и почему префиксы с резерва идут кривым путём через Франкфурт».
В этой фразе — половина сегодняшнего модуля: сессия и её состояния, соседи (пиры), анонсы префиксов, выбор лучшего пути и управление им. К концу урока ты будешь разбирать такую заявку за десять минут — и понимать, что именно ответить старшему.
- Модуль 5: у каждого маршрута есть источник и administrative distance (AD) — «уровень доверия». Сегодня появятся два новых: eBGP (AD 20) и iBGP (AD 200).
- Модуль 6: OSPF ищет кратчайший путь по метрике внутри одной сети. BGP решает другую задачу: выбирает путь между организациями по политике, а не по скорости.
- Ступень 1, урок 4: BGP-сессия живёт поверх TCP 179, соседи прописываются руками, здоровое состояние — Established. Сегодня раскроем всё, что было «за кадром»: атрибуты, best-path, route reflector, политика, безопасность.
- Что такое автономная система (AS), path-vector, транзит и пиринг, IX
- eBGP против iBGP — в чём разница и зачем оба
- 4 типа сообщений BGP и как выглядит OPEN/UPDATE «на проводе»
- Как поднимается сессия (TCP 179), состояния FSM и по какому состоянию — какой диагноз
- Категории path-атрибутов и best-path selection «на зубок» + полный разбор на примере
- Инструменты политики: Local-Pref, AS-Path prepend, MED, communities, prefix-list и route-map
- Проблема iBGP full-mesh, next-hop-self и route reflector (с дизайном на два RR)
- Таймеры, BFD и скорость сходимости — почему сессия «висела 3 минуты»
- Реальный сценарий multihoming с двумя провайдерами — на Cisco, Juniper и Huawei
- Агрегация, multipath, безопасность: hijacking, RPKI/ROV, фильтры, max-prefix
- Плейбуки диагностики: сессия не поднимается / префикса нет / путь кривой
- Мини-лабы: настоящий BGP интернета из браузера и свой BGP-стенд в Docker за 15 минут
- Мост в DevOps: Calico и MetalLB с конфигами
- Задачи с ответами, вопросы с собеседований, словарик
1. Автономные системы и path-vector
Автономная система (AS) — это сеть под единым управлением с единой политикой маршрутизации (провайдер, крупная компания, облако). У каждой — свой номер ASN (например, 15169 — Google, 13335 — Cloudflare). Номера бывают 16-битные (до 65535) и 32-битные; диапазоны 64512–65534 и 4200000000+ — приватные (для внутреннего использования, как RFC1918 для IP). BGP работает между AS.
BGP — path-vector: вместе с префиксом он несёт AS-PATH — список AS, через которые маршрут прошёл. Это и защита от петель (видишь свой ASN в пути — отбрасываешь), и информация для выбора пути (короче AS-PATH — обычно лучше).
AS — государства, BGP — дипломатия
Внутри страны (AS) дороги строит сама страна и правила движения свои — это IGP (OSPF). А вот между странами всё решают договоры: с кем открыть границу, чей транзит пускать, кому дать скидку. BGP — язык этих договоров. Поэтому в BGP «лучший путь» — не самый быстрый, а самый выгодный по политике: деньги и договорённости важнее миллисекунд.
Номера AS: какие бывают и что можно занимать
| Диапазон ASN | Что это | Пример |
|---|---|---|
1 – 64495 | публичные 16-битные — выдаёт региональный регистратор (RIPE, ARIN…) | 15169 Google, 3216 Билайн, 13335 Cloudflare |
64512 – 65534 | приватные 16-битные — как RFC1918 для IP: внутри сети, в лабах, на стыках PE–CE | 65010 в наших примерах |
65536 – 4199999999 | публичные 32-битные (asplain) — новых 16-битных давно не хватает | 196608+ у новых операторов |
4200000000 – 4294967294 | приватные 32-битные — любимый диапазон дата-центров (по ASN на стойку) | 4200000001 в фабриках Clos |
23456 | AS_TRANS — «заглушка» для совместимости старых роутеров с 32-битными ASN | увидел 23456 в пути — где-то старое железо |
remove-private-as на выходе.
Транзит, пиринг и IX — экономика, на которой стоит BGP
Связи между AS бывают двух главных типов, и от типа связи зависит вся политика анонсов — это фундамент, без которого конфиги BGP выглядят магией:
💰 Транзит (customer → provider)
- Ты платишь провайдеру, он даёт тебе весь интернет
- Провайдер анонсирует тебе всё (или default), а твои префиксы — всему миру
- Трафик клиента для провайдера — доход, поэтому маршруты клиентов всегда в приоритете
🤝 Пиринг (peer ↔ peer)
- Две AS обмениваются трафиком бесплатно (или почти)
- Анонсируют друг другу только свои сети и сети своих клиентов — не весь интернет!
- Часто происходит на IX (Internet Exchange, точка обмена: MSK-IX, DE-CIX, AMS-IX) — один порт, сотни соседей
Отсюда золотое правило политики любого оператора (правило Gao–Rexford, его же спрашивают на собеседованиях уровнем повыше): маршруты от клиентов отдаём всем (нам платят за их трафик), маршруты от пиров и аплинков — только клиентам (иначе бесплатно повезём чужой транзит). Реализуется это через LOCAL_PREF: клиент ~ 300, пир ~ 200, аплинк ~ 100. Запомни эту тройку — она объяснит тебе половину чужих конфигов.
Настоящие AS и их связи видны публично — 3 минуты, только браузер:
- Открой
bgp.toolsи вбейAS13335(Cloudflare). Вкладка Connectivity — живые аплинки и пиры этой AS: вот они, транзит и пиринг из абзаца выше. - Там же вбей IP своего сайта — увидишь, какая AS его анонсирует и каким префиксом.
- Открой
lg.he.net(looking glass Hurricane Electric) → «BGP Route» для8.8.8.8— увидишь настоящий AS-PATH от магистрали до Google. Обрати внимание, какой он короткий: до крупных сетей обычно 1–3 хопа AS.
2. eBGP против iBGP
eBGP — между разными AS
- Сессия между соседями в разных ASN
- AD = 20 (высокое доверие)
- TTL=1 (обычно напрямую связаны)
- Меняет next-hop на себя, добавляет свой ASN в AS-PATH
iBGP — внутри одной AS
- Сессия между роутерами в одной ASN
- AD = 200 (ниже доверие, чем у IGP)
- Не меняет AS-PATH и (по умолч.) next-hop
- Правило split-horizon: маршрут из iBGP нельзя передать другому iBGP-соседу → нужен full-mesh или RR
3. Четыре сообщения BGP
| Сообщение | Зачем |
|---|---|
| OPEN | установить сессию: согласовать версию, ASN, hold-time, capabilities |
| UPDATE | анонс/отзыв маршрутов: NLRI (префиксы) + path-атрибуты |
| KEEPALIVE | «я жив» (по умолчанию каждые 60 с); держит сессию |
| NOTIFICATION | ошибка → закрыть сессию (с кодом причины) |
UPDATE «на проводе» (упрощённый разбор):
4. Сессия BGP: TCP 179 и состояния
В отличие от OSPF (свой транспорт поверх IP), BGP работает поверх TCP, порт 179 — надёжно и с потоковым контролем. Соседи (peers) задаются вручную: BGP не «находит» соседей автоматически. Сессия проходит конечный автомат:
Состояния FSM — не абстракция для экзамена, а готовый диагноз. По тому, где сессия «застряла», ты сразу знаешь, куда смотреть:
| Состояние | Что происходит | Если застряло — диагноз |
|---|---|---|
| Idle | сессия выключена / только что сброшена | сосед не сконфигурирован, интерфейс down, административный shutdown, сработал max-prefix (сессия ушла в Idle с пометкой) |
| Connect | пытаемся открыть TCP до соседа | обычно проскакивает мгновенно; если видишь часто — TCP то открывается, то рвётся |
| Active | TCP не открылся, пробуем снова (название обманчивое: «активно пытаюсь», а не «работаю») | ❗ самый частый залип: нет IP-связности до соседа, ACL/firewall режет TCP 179, ошибка в peer-IP, для iBGP — нет маршрута до loopback соседа |
| OpenSent | TCP есть, отправили OPEN, ждём OPEN в ответ | сосед отвечает не тем: несовпадение ASN («BGP: bad remote-as»), кривой router-id |
| OpenConfirm | OPEN-ы обменяны, ждём первый KEEPALIVE | почти не залипает; если да — смотри NOTIFICATION в логах |
| Established | ✅ сессия работает, идут UPDATE-ы | здоровое состояние; теперь вопросы только к префиксам и политике |
Так рождение здоровой сессии выглядит в логах роутера (Cisco, debug ip bgp приглажен до сути):
ping соседа,
telnet <peer-ip> 179 (открылся — значит, TCP проходит и дело в конфиге BGP).
5. Path-атрибуты — категории
Атрибуты маршрута делятся на категории — это любят спрашивать:
| Категория | Примеры | Смысл |
|---|---|---|
| Well-known mandatory | ORIGIN, AS_PATH, NEXT_HOP | обязаны быть, понимают все |
| Well-known discretionary | LOCAL_PREF, ATOMIC_AGGREGATE | понимают все, но не обязательны |
| Optional transitive | COMMUNITY, AGGREGATOR | можно не понимать, но передать дальше |
| Optional non-transitive | MED, ORIGINATOR_ID | не понял — не передавай дальше |
Главные атрибуты — что каждый значит на практике
| Атрибут | Кто ставит | Как далеко живёт | Зачем на практике |
|---|---|---|---|
| NEXT_HOP | eBGP-сосед меняет на себя; iBGP — не трогает | переносится | куда физически слать пакет; корень болезни «маршрут есть, а не ставится» (лечится next-hop-self) |
| AS_PATH | каждая AS дописывает свой ASN на eBGP-выходе | через весь интернет | защита от петель + выбор пути + фильтры по regex |
| LOCAL_PREF | ты сам на входе (route-map in) | только внутри твоей AS (iBGP) | главный руль исходящего трафика: выше — лучше, default 100 |
| MED | ты сам на выходе (route-map out) | только в соседнюю AS, дальше не идёт | вежливая просьба соседу «заходи ко мне через этот линк»: меньше — лучше |
| ORIGIN | роутер, породивший маршрут | через весь интернет | IGP (i, через network) < EGP (e, архаика) < incomplete (?, через redistribute) |
| COMMUNITY | кто угодно по пути (route-map) | пока не срежут (transitive) | стикеры на маршруте: «клиентский», «не отдавай в Европу», «блэкхоль это» |
| WEIGHT | только Cisco, только локально | не покидает роутер | грубый локальный форс: выше — лучше; в чужих конфигах почти не встретишь |
Читаем атрибуты вживую: show ip bgp «про один префикс»
Самая информативная команда при разборе «почему трафик идёт туда» — запрос по конкретному префиксу. Разберём вывод построчно, как ты будешь делать это на смене:
Вопрос «почему выбран путь №1» здесь отвечается за секунды: у него localpref 200 против
100 — алгоритм best-path дальше даже не пошёл (AS-PATH длиной 2 против 3 уже не важен).
Если бы LOCAL_PREF были равны — победил бы №1 по более короткому AS-PATH. Такой разбор — это
буквально вопрос №1 в собеседованиях и в реальных заявках «трафик идёт не туда».
6. Best-path selection — порядок «на зубок»
Если до одного префикса пришло несколько вариантов, BGP выбирает один лучший по строгому порядку атрибутов. Это самый частый вопрос на собеседовании по BGP. Порядок (Cisco):
Разбор руками: три пути — кто победит?
Роутер R1 (AS 65010) получил префикс 198.18.0.0/24 тремя путями. Пройди алгоритм
сам, прежде чем читать разбор:
| Путь A (от ISP-1, eBGP) | Путь B (от ISP-2, eBGP) | Путь C (от R2, iBGP) | |
|---|---|---|---|
| Weight | 0 | 0 | 0 |
| LOCAL_PREF | 100 | 100 | 100 |
| AS-PATH | 64500 64777 65099 | 64510 65099 | 64510 65099 |
| ORIGIN | IGP | IGP | IGP |
| MED | 10 | 50 | 50 |
Читаем таблицу BGP: что значат *, >, i
*— путь валиден (next-hop достижим). Нет звёздочки — маршрут «мёртв» и не участвует в выборе.>— best: именно он идёт в таблицу маршрутизации и анонсируется соседям. На префикс — ровно один>.iпосле*— путь пришёл по iBGP;iв конце строки — это ORIGIN=IGP (да, две разные буквыi, все путают).- Колонка
Metric— это MED,LocPrf— LOCAL_PREF,Path— AS-PATH.
show ip bgp маршрут без звёздочки — что делаешь?» Ответ: это невалидный путь,
почти всегда — недостижимый next-hop. Проверяю show ip route <next-hop>; если это
iBGP-маршрут с внешним next-hop — на пограничнике забыли next-hop-self.
7. Инструменты политики
- LOCAL_PREF — главный инструмент исходящего выбора. «Через провайдера A выходим в приоритете, B — резерв» → ставим A более высокий LOCAL_PREF. Действует внутри всей твоей AS.
- AS-PATH prepend — дописываешь свой ASN несколько раз, путь «удлиняется», чужие AS реже выбирают этот вход. Единственный мягкий способ влиять на входящий трафик.
- MED — «metric» для соседней AS: какой из нескольких твоих линков она должна предпочесть на вход. Соседняя AS может его игнорировать.
- Communities — теги-метки на маршрутах (например
65000:100). По ним строят политику оптом: провайдеры публикуют community вида «не анонсируй этот префикс в Европу» и т.п.
Well-known communities — знать наизусть
Четыре зарезервированных community понимают все вендоры — их часто спрашивают:
| Community | Эффект |
|---|---|
NO_EXPORT | не анонсировать за пределы своей AS (внутри — можно) |
NO_ADVERTISE | не анонсировать вообще никому (даже соседям) |
NO_EXPORT_SUBCONFED (LOCAL_AS) | не выходить за пределы суб-AS в конфедерации |
INTERNET | анонсировать всем (community по умолчанию) |
Чем политика пишется: prefix-list, as-path-list, route-map
Сами по себе LOCAL_PREF и prepend — «что сделать». А «к каким маршрутам применить» описывают три инструмента, из которых собирается вся BGP-политика на Cisco (у Juniper это policy-statement, у Huawei — route-policy, идеи те же):
permit 20 в конце — и всё, что не совпало с match, молча отброшено.
Клиент «внезапно» потерял половину интернета — а это твоя route-map съела маршруты.
Вторая классика: изменил политику, но забыл clear ip bgp <peer> soft —
политика применяется к новым UPDATE-ам, а старые маршруты лежат как лежали.
Мини-шпаргалка regex для AS-PATH (спрашивают удивительно часто):
| Regex | Что ловит |
|---|---|
| ^$ | пустой AS-PATH — маршруты, порождённые в моей AS |
| ^64500$ | маршруты, которые породил сосед 64500 (и только он в пути) |
| ^64500_ | всё, что пришло от соседа 64500 (его клиенты тоже) |
| _65099$ | маршруты, порождённые AS 65099 (она в конце пути) |
| _65099_ | путь проходит через 65099 где угодно |
| .* | всё (символ _ означает границу: пробел, начало, конец) |
Communities в бою: RTBH и «меню» провайдера
Community — это просто число-стикер ASN:значение, но на них построены целые сервисы.
Два примера, которые встретишь в реальной работе:
- RTBH (Remote-Triggered Black Hole) — защита от DDoS. Тебя заливают атакой на
192.0.2.77. Ты анонсируешь провайдеру этот /32 с communityASN:666— и провайдер дропает весь трафик к нему на своей стороне, до того как атака доехала до твоего канала. Жертвуешь одним адресом — спасаешь канал. Значение 666 — общепринятое (RFC 7999, communityBLACKHOLE). - Traffic engineering по «меню» — крупные операторы публикуют список community-команд,
которые клиент может вешать на свои анонсы:
3216:2000«не анонсируй в Европу»,3216:70«сделай prepend ×3 в сторону такого-то стыка». Ищется по запросу «<оператор> BGP communities» — загляни в такой документ ради интереса, это политика BGP во всей красе.
neighbor X send-community
(на Juniper и Huawei — отправляются сами). Проверь это первым делом.
8. iBGP full-mesh, next-hop-self и route reflector
Правило split-horizon: маршрут, полученный по iBGP, нельзя передавать другому iBGP-соседу (защита от петель, ведь AS-PATH внутри AS не меняется). Значит, все iBGP-роутеры должны быть соединены «каждый с каждым» — full-mesh. При N роутерах это N×(N−1)/2 сессий: 10 роутеров → 45 сессий, 50 → 1225. Не масштабируется.
Решение — Route Reflector (RR): один (или пара) роутеров получает право рефлектить iBGP-маршруты своим клиентам. Клиенты держат сессию только с RR. Петли контролируются атрибутами CLUSTER_LIST и ORIGINATOR_ID. Альтернатива — конфедерации (реже).
Настройка RR до смешного простая — одна команда на стороне рефлектора, клиенты вообще не в курсе:
Три правила рефлексии (частый вопрос на уровне CCNP):
- от клиента → отражается всем (клиентам и не-клиентам);
- от не-клиента → отражается только клиентам;
- от eBGP-соседа → всем, как обычно.
bgp cluster-id — по CLUSTER_LIST
дубликат распознаётся и отбрасывается. И важно: RR только переносит маршруты, next-hop
он не меняет — трафик через сам RR не потечёт (если это не он же и есть P-роутер).
203.0.113.1 (адрес чужого роутера). По iBGP он
разлетается внутри AS с тем же next-hop, но внутренние роутеры не знают, как до него дойти → маршрут не
ставится. Лечится командой neighbor X next-hop-self на пограничном роутере — он подменяет next-hop на себя.
Правило анонсирования: что BGP передаёт дальше
Главное правило распространения, которое объясняет половину «почему маршрут не дошёл»: в таблицу BGP-соседям анонсируется только лучший путь (best-path), и только если он установлен в RIB. Плюс два правила против петель:
- Маршрут, полученный от eBGP-соседа, передаётся и eBGP-, и iBGP-соседям.
- Маршрут, полученный от iBGP-соседа, передаётся только eBGP-соседям (НЕ другому iBGP) — это и есть split-horizon, ради которого нужен Route Reflector.
neighbor X ebgp-multihop 2, иначе сессия не поднимется.
9. Таймеры, BFD и сходимость — почему «висело три минуты»
Вернёмся к заявке из начала урока: сессия упала в 09:31, а мониторинг заметил падение линка в 09:28. Три минуты трафик улетал в никуда. Это не баг — это таймеры по умолчанию:
| Таймер | Default (Cisco) | Что делает |
|---|---|---|
| Keepalive | 60 с | как часто шлём «я жив» |
| Hold-time | 180 с | не слышали соседа столько — считаем мёртвым, рвём сессию (в OPEN побеждает меньший из двух предложенных) |
| ConnectRetry | ~30–120 с | как часто пытаемся открыть TCP заново |
| Advertisement-interval | 30 с (eBGP) / 0–5 с (iBGP) | минимальная пауза между UPDATE-ами одному соседу |
Как ускорить обнаружение падения — три уровня, от простого к правильному:
neighbor X timers 10 30
(keepalive 10, hold 30). Просто, работает везде, но 30 секунд — всё ещё вечность, а слишком
низкие значения (1/3) на нагруженном CPU дают ложные срабатывания.10. Реальный сценарий: multihoming через двух провайдеров
Цель: подключиться к двум ISP для отказоустойчивости. Хотим выходить в приоритете через ISP-A, а ISP-B держать резервом. Управляем исходящим трафиком через LOCAL_PREF, входящим — через prepend.
Агрегация и multipath
Тот же сценарий на Juniper и Huawei
Идеи BGP одинаковы у всех вендоров, различается только «грамматика». Умение узнавать конструкции в чужом синтаксисе — обязательный навык: в операторских сетях всегда зоопарк железа.
| Действие | Cisco IOS | Juniper Junos | Huawei VRP |
|---|---|---|---|
| соседи и состояние | show ip bgp summary | show bgp summary | display bgp peer |
| таблица BGP | show ip bgp | show route protocol bgp | display bgp routing-table |
| что прислал сосед | show ip bgp neighbors X received-routes | show route receive-protocol bgp X | display bgp routing-table peer X received-routes |
| что отдаём соседу | … advertised-routes | show route advertising-protocol bgp X | … advertised-routes |
| мягкий сброс политики | clear ip bgp X soft | — (политика применяется на commit) | refresh bgp X import/export |
Чек-лист сдачи multihoming в работу
show ip bgp summary — в колонке State/PfxRcd у обоих соседей числа, не слова.show ip bgp neighbors X advertised-routes — наш 192.0.2.0/24 в списке у обоих ISP. Пусто у одного — смотри route-map out.show ip bgp 8.8.8.0 — best-путь (>) с localpref 200 через 203.0.113.1; traceroute 8.8.8.8 первым хопом показывает ISP-A.neighbor X shutdown) в согласованное окно — трафик должен уехать на B за секунды (с BFD) и вернуться после no shutdown.11. Безопасность BGP
BGP исторически построен на доверии — и это его слабое место. Ключевые угрозы и защиты:
- BGP hijacking — чужая AS анонсирует не свой префикс (по ошибке или злонамеренно), и трафик утекает к ней. Так перехватывали трафик целых стран и крали криптовалюту.
- RPKI + ROV — криптографическая привязка «какая AS вправе анонсировать какой префикс» (ROA). Роутер с Route Origin Validation отбрасывает невалидные анонсы. Сегодня это базовая гигиена.
- Префикс-фильтры и max-prefix — на сессии с соседом принимай только ожидаемые префиксы и ограничь
их число (
maximum-prefix), чтобы «утечка полного стола» не положила роутер. - BGP TTL Security (GTSM) и MD5/TCP-AO — защита самой сессии от подделки.
12. show-команды и чтение вывода
Учись читать summary как кардиограмму — здесь всё, что нужно для первого диагноза:
- State/PfxRcd — число = Established, и это количество принятых префиксов. Слово (Idle, Active…) = сессия лежит, и слово говорит, на чём именно.
- Число подозрительно маленькое? Ждал полную таблицу (~1M), а пришло 12? Сосед
сменил политику или у тебя фильтр на in. Ровно
0при Established — сессия есть, маршруты все отфильтрованы. - Up/Down маленький (минуты) при большом аптайме роутера — сессия недавно
флапнула. Смотри
show logging | i BGP— там будет и причина (hold expired / peer closed / interface flap). - MsgRcvd/MsgSent растут? Если счётчики стоят — сессия «зомби»: числится, но трафика управления нет.
- (Idle) с пометкой PfxCt / «Admin» — сработал maximum-prefix или сосед administratively shutdown.
Второй эшелон — «всё про соседа» (сокращено до строк, на которые смотрят):
13. Плейбуки диагностики — алгоритмы на смену
Три сценария покрывают ~90% BGP-заявок. Прогони каждый мысленно несколько раз — на смене будешь идти по ним на автомате.
Плейбук №1: сессия не поднимается (не Established)
show ip bgp summary. Idle → шаг 2. Active/Connect → шаг 3. OpenSent/OpenConfirm → шаг 5.show run | s router bgp — нет ли neighbor X shutdown; show log | i BGP — нет ли «too many prefixes». После max-prefix сессию часто надо поднимать руками: clear ip bgp X.ping <peer> (для iBGP по loopback — ping <peer> source lo0). Не пингуется → это не BGP-проблема, а маршрутизация/линк: решай её. Пингуется → шаг 4.telnet <peer> 179. Отказ/тишина → ACL на интерфейсе, firewall по пути, или ошибка в update-source/ebgp-multihop (сосед ждёт сессию с другого адреса/TTL). Сравни настройки с двух сторон: peer-IP ↔ source-IP должны зеркалиться.show log | i BGP: «bad remote-as» — несовпадение ASN в конфигах сторон (самая частая опечатка); «connection collision» — обе стороны одновременно открывают TCP, пройдёт само; несовпадение пароля MD5 — «MD5 authentication failed».Плейбук №2: сессия есть, а маршрута нет
show ip bgp neighbors X received-routes (нужен soft-reconfiguration inbound, иначе смотри с его стороны advertised). Нет префикса → проблема у соседа: его политика out, отсутствие best-path, префикс не в его RIB. Есть → шаг 3.show ip bgp neighbors X routes (после). Разница → твой фильтр in: prefix-list, route-map, as-path list. Не забудь clear ip bgp X soft in после правки.show ip bgp <prefix>. «inaccessible» → next-hop недостижим (next-hop-self!). Best есть, но в RIB маршрут другой → его перебил протокол с меньшим AD (static 1, OSPF 110 против iBGP 200) — смотри show ip route <prefix>.Плейбук №3: маршрут есть, но трафик идёт «криво»
traceroute с source-адресом клиента. Помни про асимметрию: туда через A, обратно через B — это нормально для интернета, если не рвёт stateful-файрвол.show ip bgp <dst-prefix>: почему выбран этот путь? Идёшь по лесенке: weight → localpref → as-path… Чаще всего виноват LOCAL_PREF, который кто-то когда-то поставил и забыл.show ip bgp | i <твой блок> у себя и в looking glass.14. Мини-лабы: потрогать BGP руками
Лаба 1 (5 минут, браузер): интернет как на ладони
- Открой
stat.ripe.net, вбей свой домашний IP (узнай на 2ip.ru). Виджет Routing — каким префиксом и из какой AS ты анонсирован в мировой BGP прямо сейчас. - На
bgp.toolsнайди эту AS → вкладка Prefixes: сколько всего префиксов анонсирует твой провайдер. Вкладка Connectivity — его аплинки (транзит) и пиры. - Открой
bgpstream.crosswork.cisco.com— живая лента BGP-аварий мира: hijack-и и утечки маршрутов в реальном времени. То, от чего защищает RPKI из раздела 11.
Лаба 2 (15 минут, Docker): свой eBGP-стык на FRR
FRR (Free Range Routing) — открытый маршрутизатор, который живёт внутри Calico, Cumulus и половины SDN-решений. CLI почти неотличим от Cisco. Поднимем два «роутера» в двух AS и посмотрим на настоящую сессию:
Что поломать, чтобы понять глубже (каждый пункт — сценарий из плейбуков!):
- Поменяй на R2
remote-asна 65099 — увидишь «bad remote-as» и сессию в Active/Idle. - Сделай
neighbor 10.10.10.1 shutdown— состояние Idle (Admin). - Повесь prepend:
route-map PP permit 10+set as-path prepend 65001 65001, привяжи out — на R2 путь станет65001 65001 65001. - Добавь третий контейнер-AS и собери «мини-интернет» с транзитом.
15. Мост в DevOps — здесь BGP внезапно рядом
BGP — один из немногих «операторских» протоколов, который ты реально встретишь в DevOps:
- Calico (Kubernetes CNI) анонсирует маршруты до подов по BGP — буквально настраиваешь ASN и peer'ов.
- MetalLB в bare-metal-кластерах раздаёт LoadBalancer-IP через BGP к роутерам сети.
- Облака: VPN/Direct Connect/Cloud Router между твоей сетью и AWS/GCP поднимаются именно по BGP.
- Anycast сервисов (DNS, CDN) строится на BGP — один IP анонсируется из многих точек.
Когда DevOps-команда упрётся в «почему Calico не анонсирует маршрут» или «MetalLB не поднял BGP-сессию», ты —
человек, который читает show ip bgp summary и видит «застряло в Active → файрвол режет TCP 179». Редкий и дорогой навык.
16. Вопросы с собеседования
telnet peer 179 (не режет ли ACL/firewall),
совпадение адресов в конфигах двух сторон (peer у него = мой update-source), для eBGP через несколько
хопов — ebgp-multihop.show ip route <prefix>, кто реально стоит в RIB. Вторая причина — next-hop стал недостижим
между пересчётами.17. Частые ошибки джунов
next-hop-self на пограничном роутере.
18. Задачи — сначала реши, потом раскрывай
1. В show ip bgp summary у соседа в колонке State/PfxRcd стоит «Active». Хорошо это или плохо, и что проверишь первым?
Плохо: Active значит «не могу открыть TCP до соседа». Первым делом — ping <peer-ip>:
есть ли связность вообще. Дальше telnet <peer-ip> 179 и сверка peer-IP/source в конфигах сторон.
2. Префикс приходит двумя путями: LOCAL_PREF 100 / AS-PATH из 2 хопов и LOCAL_PREF 150 / AS-PATH из 5 хопов. Какой победит?
Второй. LOCAL_PREF сравнивается раньше AS-PATH, 150 > 100 — длина пути уже не рассматривается. Порядок лесенки строгий: проигравший на верхней ступеньке не реабилитируется на нижней.
3. Ты хочешь, чтобы входящий трафик шёл через ISP-A, а не ISP-B. Поможет ли повысить LOCAL_PREF для маршрутов от ISP-A?
Нет! LOCAL_PREF управляет исходящим трафиком и не покидает твою AS — чужие решения он не меняет. Для входящего: AS-PATH prepend в сторону ISP-B, MED, communities из «меню» провайдера или (жёстко) более специфичные анонсы через ISP-A.
4. Пограничник R1 получил префикс по eBGP. R5 в глубине AS видит его в show ip bgp с пометкой «inaccessible». Что случилось и как чинить?
Next-hop остался адресом внешнего соседа (eBGP-стык), до которого внутри AS нет маршрута. Лечение:
neighbor R5 next-hop-self на R1 (или отдать стык-сеть в IGP).
5. В AS восемь iBGP-роутеров без RR. Сколько нужно сессий? А с парой RR?
Full-mesh: 8×7/2 = 28 сессий. С двумя RR: каждый из 6 клиентов держит 2 сессии (к RR1 и RR2) плюс сессия между RR — 13. И главное — новые роутеры добавляются двумя сессиями, а не восемью.
6. После правки route-map соседу «ничего не изменилось». Назови две самые вероятные причины.
(1) Не сделан clear ip bgp X soft — политика применяется только к новым UPDATE-ам.
(2) Правило не совпало и сработал неявный deny в конце route-map — или наоборот, всё ушло в финальный
permit без set. Проверка: show route-map — счётчики совпадений по секциям.
7. Провайдер жалуется: «вы анонсируете нам 950k префиксов». Что произошло и какой командой ты бы это предотвратил у себя?
Ты стал «случайным транзитом» — переанонсировал полную таблицу от одного аплинка другому (нет фильтра out).
Предотвращение: исходящий prefix-list/route-map «только мои сети» на всех eBGP-сессиях (а у провайдера
сработал бы maximum-prefix).
8. BFD с параметрами interval 300 multiplier 3 — за какое время BGP узнает о смерти линка? А без BFD с таймерами по умолчанию?
BFD: 300 мс × 3 = ~0.9 секунды. Без BFD — до hold-time, то есть до 180 секунд (если интерфейс физически не упал и fast-fallover не сработал). Разница в 200 раз — вот зачем BFD.
19. Словарик урока
- BGP связывает автономные системы (AS), path-vector, несёт AS-PATH (защита от петель + выбор пути).
- eBGP — между AS (AD 20, меняет AS-PATH/next-hop); iBGP — внутри AS (AD 200, split-horizon → нужен RR/full-mesh).
- Сессия по TCP 179, соседи задаются вручную; здоровое состояние — Established. 4 сообщения: OPEN/UPDATE/KEEPALIVE/NOTIFICATION.
- Best-path: Weight → LOCAL_PREF → AS-PATH → ORIGIN → MED → eBGP>iBGP → IGP metric → Router-ID.
- Политика: LOCAL_PREF (исходящий), AS-PATH prepend (входящий), MED, communities.
- next-hop-self спасает iBGP; Route Reflector убирает full-mesh.
- Безопасность: RPKI/ROV против hijacking, префикс-фильтры, maximum-prefix, GTSM, пароль сессии.
- Экономика: транзит платный, пиринг бесплатный; политика оператора = LOCAL_PREF клиент > пир > аплинк.
- Скорость обнаружения аварии: hold-time 180 c по умолчанию → таймеры или (правильно) BFD < 1 c.
- Диагноз по состоянию: Active — нет TCP; Established + 0 префиксов — фильтры; «Last reset, due to…» — причина прошлого падения.
- В DevOps BGP встречается в Calico, MetalLB, облачных VPN/Direct Connect и anycast.
Ты уже знаешь, как оператор изолирует клиентов (VRF, ступень 1) и как AS обмениваются маршрутами (BGP). Следующий модуль соединяет это в главную технологию операторских услуг: MPLS и L3VPN — как по одной магистрали ездят тысячи изолированных клиентских сетей, и почему без BGP (точнее, MP-BGP с его route-target) это не работало бы вовсе. Всё, что ты выучил про атрибуты и RR, там выстрелит.