NetLab Academy

Сетевые лаборатории в браузере

Войти Начать бесплатно

Теория: 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 — отдельная большая тема за рамками этой лабы.

Таблица BGP: Adj-RIB-In, Loc-RIB, Adj-RIB-Out

У BGP, в отличие от OSPF, нет единой «карты сети» — вместо этого каждый роутер хранит несколько таблиц маршрутов:
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, через какой из нескольких входов к нам лучше заходить.

Как 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, чтобы искусственно сделать путь менее привлекательным).

Как растёт AS_PATH на практике

Когда маршрут передаётся от одной AS к другой, в его атрибут AS_PATH добавляется номер AS, через которую он прошёл. Например, если r1 узнаёт о подсети r4 через r2 и r3, в выводе show ip bgp вы увидите путь вида 65002 65003 65004 — это буквально маршрут путешествия анонса через автономные системы, как штампы в паспорте на границах. AS_PATH одновременно служит и метрикой (чем короче, тем предпочтительнее), и защитой от петель: если роутер видит в AS_PATH номер своей собственной AS, он молча отбрасывает такой анонс.
AS_PATH — штампы в паспорте анонса: и метрика, и защита от петель
что видно в 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»).

Частые ошибки

• Неправильный 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-наставник, который видит ваши конфиги и ведёт к решению, не выдавая готовое.

Начать бесплатно → бета открыта, доступ бесплатный