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 — это протокол политик, а не метрик. Он не ищет кратчайший путь — он выбирает маршрут по набору атрибутов. Алгоритм выбора (упрощённо, в порядке приоритета):
- Highest Weight (Cisco-проприетарный, локальный)
- Highest Local Preference (внутри AS)
- Locally originated routes (network/aggregate)
- Shortest AS_PATH
- Lowest Origin (IGP < EGP < Incomplete)
- Lowest MED (Multi-Exit Discriminator)
- eBGP over iBGP
- Lowest IGP metric to next-hop
- Oldest route (для eBGP)
- Lowest Router ID
Понимание этого алгоритма критично при настройке политик: хотите трафик идти через одного провайдера — поднимайте Local Preference для его маршрутов.
Анонсы префиксов и route objects
Чтобы анонсировать свои IP-адреса в интернет, недостаточно просто настроить BGP-сессию. Нужно:
- Зарегистрировать route object в базе RIPE (или другого RIR). Это запись вида
route: 203.0.113.0/24, origin: AS65001. - Убедиться, что провайдер принимает ваши префиксы (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, атрибутами и фильтрацией.
RPKI наконец-то начали нормально внедрять крупные провайдеры, но до повсеместного покрытия ещё далеко. Routinator удобен, советую попробовать в связке с FRR.