Серверное оборудование для бизнеса — надёжные решения для любых задач Подробнее →
Статья

BGP для начинающих: как работает маршрутизация в интернете

BGP (Border Gateway Protocol) — это протокол, на котором держится весь интернет. Если вы когда-нибудь задавались вопросом, как пакет данных из Москвы попадает в Токио, минуя десятки автономных систем, — ответ именно в BGP. В этой статье разберём основы протокола без лишней воды, с практическими примерами и реальными инструментами.

Что такое автономная система (AS)

Автономная система — это набор IP-префиксов, управляемых одной организацией под единой политикой маршрутизации. Каждой AS присваивается уникальный номер (ASN). Например, AS15169 — это Google, AS8359 — МТС, AS3216 — «Билайн».

ASN бывают:

  • 16-битные (1–65535) — старый формат, используются до сих пор
  • 32-битные (до 4 294 967 295) — расширенный пул, введён в RFC 4893

Диапазоны 64512–65535 и 4200000000–4294967294 зарезервированы для приватного использования (аналог RFC 1918 для IP).

Получить ASN и IP-префиксы можно через региональные интернет-регистратуры (RIR): RIPE NCC для Европы и СНГ, ARIN для Северной Америки и т.д.

eBGP и iBGP: в чём разница

eBGP (external BGP) — сессия между роутерами из разных AS. Именно так провайдеры обмениваются маршрутами между собой. TTL по умолчанию = 1, то есть соседи должны быть напрямую подключены (или использовать ebgp-multihop).

iBGP (internal BGP) — сессия внутри одной AS. Используется для распространения внешних маршрутов внутри сети провайдера. Главное ограничение iBGP: маршруты, полученные по iBGP, нельзя передавать другим iBGP-соседям (правило split-horizon). Решения: route reflectors или конфигурация full-mesh.

Как работает выбор маршрута (path selection)

BGP — это протокол политик, а не метрик. Он не ищет кратчайший путь — он выбирает маршрут по набору атрибутов. Алгоритм выбора (упрощённо, в порядке приоритета):

  1. Highest Weight (Cisco-проприетарный, локальный)
  2. Highest Local Preference (внутри AS)
  3. Locally originated routes (network/aggregate)
  4. Shortest AS_PATH
  5. Lowest Origin (IGP < EGP < Incomplete)
  6. Lowest MED (Multi-Exit Discriminator)
  7. eBGP over iBGP
  8. Lowest IGP metric to next-hop
  9. Oldest route (для eBGP)
  10. Lowest Router ID

Понимание этого алгоритма критично при настройке политик: хотите трафик идти через одного провайдера — поднимайте Local Preference для его маршрутов.

Анонсы префиксов и route objects

Чтобы анонсировать свои IP-адреса в интернет, недостаточно просто настроить BGP-сессию. Нужно:

  1. Зарегистрировать route object в базе RIPE (или другого RIR). Это запись вида route: 203.0.113.0/24, origin: AS65001.
  2. Убедиться, что провайдер принимает ваши префиксы (prefix-list или RPKI).

Посмотреть маршруты в реальном времени можно через Looking Glass — веб-интерфейсы крупных провайдеров и IXP. Например, lg.he.net (Hurricane Electric) или lg.level3.net.

RPKI: защита от ошибок и атак

RPKI (Resource Public Key Infrastructure) — криптографическая система, которая позволяет владельцу IP-префикса подписать его своим ASN. Создаётся объект ROA (Route Origin Authorization): «префикс X анонсируется из AS Y».

Роутеры с RPKI-валидацией помечают маршруты как:

  • Valid — префикс и ASN совпадают с ROA
  • Invalid — ASN не совпадает (потенциальный hijack или ошибка)
  • NotFound — ROA не существует

Настроить RPKI-валидацию можно через validator (например, Routinator от NLnet Labs) и подключить его к роутеру.

Инструмент bgpq4 позволяет автоматически генерировать prefix-list или route-map на основе данных из IRR-баз (RIPE, ARIN и др.):

bgpq4 -4 -l PREFIX-LIST-CUSTOMER AS65001

BGP Hijacking: когда маршрутизация идёт не туда

BGP hijacking — это ситуация, когда чужая AS анонсирует ваши префиксы (умышленно или по ошибке). Самые громкие случаи:

  • 2008: Пакистанский провайдер Pakistan Telecom анонсировал 208.65.153.0/24 (YouTube) и положил сервис на несколько часов для большей части мира.
  • 2010: China Telecom анонсировала ~50 000 префиксов, трафик через Китай шёл ~18 минут.
  • 2019: Небольшой провайдер из Пенсильвании случайно «оттянул» на себя трафик Cloudflare, Amazon, Google через bgp-оптимизатор.

Защита от hijacking: RPKI + мониторинг анонсов через сервисы типа BGPmon или RIPE Stat.

Практика: настройка BGP-сессии на BIRD

BIRD — популярный open-source BGP-демон для Linux. Устанавливается из пакетов:

apt install bird2

Минимальный конфиг для eBGP-сессии (/etc/bird/bird.conf):

router id 203.0.113.1;

protocol bgp upstream {
    local 203.0.113.1 as 65001;
    neighbor 198.51.100.1 as 65002;
    ipv4 {
        import filter {
            if net ~ [ 0.0.0.0/0 ] then accept;
            reject;
        };
        export filter {
            if net ~ [ 203.0.113.0/24 ] then accept;
            reject;
        };
    };
}

После редактирования применяем конфиг без перезапуска:

birdc configure
birdc show protocols
birdc show route

Зачем это знать сисадмину

Даже если вы не провайдер и не держите собственный ASN, понимание BGP полезно:

  • Диагностика проблем связности: почему трафик идёт через неожиданный путь
  • Работа с CDN и anycast-адресами
  • Анализ инцидентов через RIPE Stat и BGPlay
  • Понимание, почему «интернет упал в регионе»

BGP — это не rocket science. Это набор правил и политик, которые вполне понятны, если разобраться с основами AS, атрибутами и фильтрацией.

3 Ответа

  1. RPKI наконец-то начали нормально внедрять крупные провайдеры, но до повсеместного покрытия ещё далеко. Routinator удобен, советую попробовать в связке с FRR.

  1. BGP hijacking — это реально страшно, особенно когда понимаешь, что весь интернет держится на доверии между AS. Случай с Pakistan Telecom до сих пор классика в курсах по сетевой безопасности.

  1. А можете пояснить, зачем нужен AS_PATH если есть Local Preference? Не понимаю когда какой атрибут применяется.