Теория: BGP: маршрутизация между автономными системами
Протокол, на котором держится связность всего интернета: автономные системы, eBGP и iBGP, три таблицы, атрибуты маршрута и порядок выбора лучшего пути. Прочитайте материал, а затем пройдите тест — следующий пункт курса откроется после верных ответов.
Зачем нужен BGP и чем он отличается от OSPF
OSPF отлично работает внутри одной организации — это протокол внутренней маршрутизации (IGP). Но интернет состоит из десятков тысяч разных организаций (провайдеров, дата-центров, компаний), и каждая управляет своей сетью самостоятельно, никому не доверяя полный контроль. Для обмена маршрутами между такими организациями используется BGP — протокол внешней маршрутизации (EGP). Именно на BGP держится вся межоператорская связность современного интернета.
Автономные системы, eBGP и iBGP
Каждая организация в интернете — это автономная система (AS) со своим уникальным номером, выданным региональным регистратором (RIPE, ARIN и т.п.). Когда две разные AS напрямую обмениваются маршрутами — это eBGP (external BGP), именно с ним мы работаем в этой лабе. Если же несколько роутеров внутри одной AS обмениваются маршрутами между собой — это iBGP (internal BGP): так делают, когда у организации несколько граничных роутеров и маршруты, узнанные через один из них, нужно донести до остальных.
У iBGP есть особенность: маршрут, полученный по iBGP, по умолчанию не передаётся другому iBGP-соседу (правило защиты от петель), поэтому большим сетям с десятками внутренних роутеров приходится либо строить полный mesh iBGP-сессий между всеми, либо использовать Route Reflector — отдельная большая тема за рамками этой лабы.
У iBGP есть особенность: маршрут, полученный по iBGP, по умолчанию не передаётся другому iBGP-соседу (правило защиты от петель), поэтому большим сетям с десятками внутренних роутеров приходится либо строить полный mesh iBGP-сессий между всеми, либо использовать Route Reflector — отдельная большая тема за рамками этой лабы.
Таблица BGP: Adj-RIB-In, Loc-RIB, Adj-RIB-Out
У BGP, в отличие от OSPF, нет единой «карты сети» — вместо этого каждый роутер хранит несколько таблиц маршрутов:
• Adj-RIB-In — что нам прислал каждый конкретный сосед (входящие анонсы, ещё не отфильтрованные).
• Loc-RIB — итоговая локальная таблица после применения входящих политик и алгоритма выбора лучшего пути — именно она и видна в
• Adj-RIB-Out — что мы решили отправить каждому соседу (исходящие анонсы, после исходящих политик).
Это разделение даёт гибкость: можно по-разному фильтровать и модифицировать маршруты для каждого отдельного соседа.
• Adj-RIB-In — что нам прислал каждый конкретный сосед (входящие анонсы, ещё не отфильтрованные).
• Loc-RIB — итоговая локальная таблица после применения входящих политик и алгоритма выбора лучшего пути — именно она и видна в
show ip bgp.• Adj-RIB-Out — что мы решили отправить каждому соседу (исходящие анонсы, после исходящих политик).
Это разделение даёт гибкость: можно по-разному фильтровать и модифицировать маршруты для каждого отдельного соседа.
Атрибуты маршрута BGP
Каждый маршрут в BGP несёт набор атрибутов — это и есть главное отличие BGP от OSPF, где есть только метрика (cost). В конфигурации Cisco-style чаще всего встречаются:
• AS_PATH — список AS, через которые прошёл маршрут (растёт при каждом транзите).
• NEXT_HOP — куда слать пакеты для этой сети. При eBGP-анонсе роутер обязан подставить в NEXT_HOP свой собственный адрес — поэтому транзит через цепочку AS работает «само собой», без ручной настройки next-hop-self (которая нужна только для iBGP).
• ORIGIN — как маршрут попал в BGP впервые (i — через network statement, e — через старый EGP, ? — через redistribute).
• LOCAL_PREF — «насколько мы сами предпочитаем этот маршрут» (используется внутри своей AS, не передаётся через eBGP).
• MED — подсказка соседней AS, через какой из нескольких входов к нам лучше заходить.
• AS_PATH — список AS, через которые прошёл маршрут (растёт при каждом транзите).
• NEXT_HOP — куда слать пакеты для этой сети. При eBGP-анонсе роутер обязан подставить в NEXT_HOP свой собственный адрес — поэтому транзит через цепочку AS работает «само собой», без ручной настройки next-hop-self (которая нужна только для iBGP).
• ORIGIN — как маршрут попал в BGP впервые (i — через network statement, e — через старый EGP, ? — через redistribute).
• LOCAL_PREF — «насколько мы сами предпочитаем этот маршрут» (используется внутри своей AS, не передаётся через eBGP).
• MED — подсказка соседней AS, через какой из нескольких входов к нам лучше заходить.
Как BGP выбирает лучший маршрут
Если до одной и той же подсети есть несколько путей, BGP проходит по ним цепочку критериев по порядку, пока не останется один победитель (упрощённо, самые частые шаги):
1. Выше LOCAL_PREF — лучше.
2. Короче AS_PATH — лучше (поэтому транзит через 1 AS обычно предпочтительнее, чем через 3).
3. Меньше ORIGIN (i лучше e, e лучше ?).
4. Меньше MED — лучше.
5. eBGP-маршрут предпочитается над iBGP-маршрутом.
6. Меньше IGP-метрика до NEXT_HOP.
7. Если всё равно — меньший router-id выигрывает (чтобы был детерминированный результат).
В нашей лабе по одному пути до каждой сети, поэтому этот алгоритм не «включается» в полную силу — но важно знать, что он есть, потому что в реальных сетях именно эти атрибуты используют для управления трафиком (например, AS-PATH prepend, чтобы искусственно сделать путь менее привлекательным).
1. Выше LOCAL_PREF — лучше.
2. Короче AS_PATH — лучше (поэтому транзит через 1 AS обычно предпочтительнее, чем через 3).
3. Меньше ORIGIN (i лучше e, e лучше ?).
4. Меньше MED — лучше.
5. eBGP-маршрут предпочитается над iBGP-маршрутом.
6. Меньше IGP-метрика до NEXT_HOP.
7. Если всё равно — меньший router-id выигрывает (чтобы был детерминированный результат).
В нашей лабе по одному пути до каждой сети, поэтому этот алгоритм не «включается» в полную силу — но важно знать, что он есть, потому что в реальных сетях именно эти атрибуты используют для управления трафиком (например, AS-PATH prepend, чтобы искусственно сделать путь менее привлекательным).
Как растёт AS_PATH на практике
Когда маршрут передаётся от одной AS к другой, в его атрибут AS_PATH добавляется номер AS, через которую он прошёл. Например, если r1 узнаёт о подсети r4 через r2 и r3, в выводе
show ip bgp вы увидите путь вида 65002 65003 65004 — это буквально маршрут путешествия анонса через автономные системы, как штампы в паспорте на границах. AS_PATH одновременно служит и метрикой (чем короче, тем предпочтительнее), и защитой от петель: если роутер видит в AS_PATH номер своей собственной AS, он молча отбрасывает такой анонс.
что видно в
show ip bgp на этом роутере
Номера в AS_PATH читаются справа налево: крайний правый — та AS,
откуда анонс родом, крайний левый — предыдущий сосед. Проверка на петлю поэтому
простая: увидел свой номер в списке — выбросил.
Минимальный набор команд для eBGP-сессии
# 1. с кем поднимать сессию
neighbor <IP> remote-as <номер>
# адрес соседа и номер ЕГО автономной системы.
# Номер отличается от своего — сессия eBGP,
# совпадает — iBGP, и правила обработки маршрутов
# будут разными
# 2. что анонсировать
address-family ipv4 unicast
network <подсеть> # сеть с маской. Важно: она должна УЖЕ быть в
# локальной таблице маршрутизации — в BGP команда
# network не создаёт маршрут из ничего, в отличие
# от OSPF, где хватает совпадения с адресом порта
# 3. включить обмен именно в этом семействе
neighbor <IP> activate # адрес того же соседа. У BGP несколько семейств
# адресов, каждое активируется отдельно: без этой
# строки сессия поднимется, но маршруты не пойдутКоманды настройки — полная шпаргалка
Полный набор команд для настройки eBGP-соседства от начала до конца:
# процесс и его опознавательные знаки
router bgp 65001 # номер СВОЕЙ автономной системы; он же попадёт
# в AS-PATH каждого анонса
bgp router-id 10.20.20.1 # идентификатор роутера, 32 бита в виде адреса.
# Задают руками, чтобы он не менялся при
# изменении адресации портов
no bgp ebgp-requires-policy # no отменяет поведение по умолчанию, при котором
# eBGP-соседу без явной политики не уйдёт ни один
# маршрут. В лабе так проще; в бою политику пишут
# объявить соседа
neighbor 10.1.12.2 remote-as 65002
# адрес соседа и номер его AS
# что и кому отдавать в этом семействе адресов
address-family ipv4 unicast # дальше всё относится только к IPv4-маршрутам
network 192.168.11.0/24 # своя подсеть с маской в анонс
neighbor 10.1.12.2 activate # включить обмен маршрутами с соседом
# пригодится при iBGP
neighbor 10.1.12.2 next-hop-self
# подставлять СВОЙ адрес как NEXT_HOP при передаче
# маршрута. Для eBGP в этой лабе не нужно, но иначе
# внутренний сосед получит адрес чужого роутера,
# до которого у него может не быть маршрутаКак проверять себя
show bgp summary — показывает соседей и их состояние. Если в столбце, где обычно пишут состояние, вместо слова «Idle»/«Active» стоит время (например 00:05:12) — сессия установлена (Established).show ip bgp — показывает таблицу маршрутов BGP (Loc-RIB) с атрибутом AS_PATH в последнем столбце. Маршруты с пустым AS_PATH — это ваши собственные сети.show bgp neighbor <IP> — подробности о конкретной сессии, включая причину проблем (например «Inbound updates discarded due to missing policy»).Частые ошибки
• Неправильный
• Забыли
• Современные роутеры по умолчанию требуют политику (route-map/prefix-list) для eBGP-соседей — без команды
• Попытка анонсировать через network statement подсеть, которой реально нет в локальной RIB — маршрут просто не появится в BGP-таблице.
remote-as — сессия не поднимется совсем.• Забыли
neighbor ... activate в address-family — сессия Established, но маршрутов нет ни в одну сторону.• Современные роутеры по умолчанию требуют политику (route-map/prefix-list) для eBGP-соседей — без команды
no bgp ebgp-requires-policy анонсы тихо отбрасываются, хотя сессия выглядит полностью рабочей (Established).• Попытка анонсировать через network statement подсеть, которой реально нет в локальной RIB — маршрут просто не появится в BGP-таблице.
Контрольные вопросы
Дальше — лабораторная работа «eBGP-кольцо через 4 AS»
Для неё нужен аккаунт: стенд поднимается персонально под вас — свои роутеры, свои конфиги, никто в них не мешает. Регистрация — почта и пароль.
Теория прочитана. Дальше — руками.
Личный стенд из настоящих роутеров разворачивается за секунды. Платформа проверяет не ответы на тесты, а состояние вашей сети: поднялись ли соседства, сошлись ли маршруты, ходит ли ping. Рядом — AI-наставник, который видит ваши конфиги и ведёт к решению, не выдавая готовое.
Начать бесплатно →
бета открыта, доступ бесплатный