BGP
Как установить BGP-сессию, менять настройки конфигурации и мониторить состояние соединений.
Что это
BGP (Border Gateway Protocol) — протокол динамической маршрутизации. Application Delivery Controller использует его, чтобы анонсировать свои сетевые префиксы во внешнюю сеть и принимает из неё маршруты.
Через что осуществляется
Взаимодействие строится через четыре основных компонента:
-
BIRD— демон, который устанавливает сессии с соседями, обменивается маршрутами и прогоняет их через фильтры. -
birdc— консольный клиент для удалённого управления запущенным демоном BIRD. Позволяет просматривать состояние сессий, проверять таблицы маршрутов и менять конфигурацию в реальном времени. -
bird.conf— конфигурационный файл. Описывает параметры сессий, номера автономных систем и правила фильтрации. По умолчанию располагается в/etc/bird.conf(или/etc/bird/bird.conf). -
Ядро ОС — системная таблица маршрутизации. BIRD синхронизирует свою внутреннюю таблицу с ядром через протокол kernel, чтобы операционная система знала, куда физически отправлять пакеты.
Как работает
BGP-сессия и обмен маршрутами устроены так:
-
BIRDчитаетbird.confи поднимает протоколы, описанные в файле. -
Протокол
deviceобновляет список сетевых интерфейсов,directсоздаёт маршруты на подключённые сети. -
Протокол
bgpоткрывает TCP-соединение с адресом внешнего маршрутизатора, указанным в параметреneighbor. -
Наша система и маршрутизатор обмениваются данными (сверяют
local asи ASN внешней стороны) и согласуют семейства адресов (IPv4, IPv6) для передачи. -
Соединение переходит в статус
Established. Начинается двусторонний обмен:-
Наша система принимает внешние маршруты, которые соответствуют правилам
import-фильтра. -
Наша система анонсирует свои префиксы, прошедшие через
export-фильтр.
-
-
Все принятые маршруты фиксируются во внутренней таблице BIRD, после чего протокол
kernelсинхронизирует их с таблицей маршрутизации ядра. -
При появлении новых путей или исчезновении старых стороны обмениваются обновлениями. BIRD пересчитывает таблицу маршрутов и мгновенно пробрасывает изменения в ядро.
-
Если сессия закрывается — вручную командой
disable, по таймауту или из-за обрыва линка — все маршруты, выученные через эту сессию, автоматически удаляются из таблиц BIRD и из ядра системы.
Конфигурация
Структура файла
Конфигурация BIRD состоит из глобальных настроек и блоков-протоколов. Для работы BGP необходимы четыре базовых протокола:
-
device— сканирует сетевые интерфейсы и обновляет их список во внутренних структурах BIRD; -
direct— создает маршруты к подключенным сетям; -
kernel— синхронизирует таблицу маршрутизации BIRD с таблицей ядра: передаёт туда выученные маршруты и забирает уже существующие; -
bgp— устанавливает BGP-сессию с внешним маршрутизатором и обменивается с ним маршрутами.
Ниже представлен шаблон конфигурации.
# /etc/bird/bird.conf
# --- Глобальные настройки ---
log syslog all; # Логировать все события в syslog
router id 192.0.2.2; # Ваш публичный IP-адрес (должен быть уникальным)
# --- Протокол device---
protocol device {
scan time 10; # Сканировать интерфейсы каждые 10 секунд
}
# --- Протокол direct –
protocol direct {
ipv4;
ipv6;
}
# --- Протокол kernel ---
protocol kernel {
ipv4 {
export all; # Передавать все маршруты из BIRD в ядро
};
}
protocol kernel {
ipv6 {
export all;
};
}
# --- Протокол BGP ---
protocol bgp uplink1 {
local as 65001; # Ваш номер автономной системы
neighbor 198.51.100.1 as 64496; # Адрес и ASN провайдера
ipv4 {
import all; # Принимать все маршруты от провайдера
export where net ~ [ 203.0.113.0/24 ]; # Анонсировать только ваши префиксы
};
ipv6 {
import all;
export where net ~ [ 2001:db8:1000::/48 ];
};
}
Данный пример поднимает одну IPv4-сессию, принимает все маршруты от внешнего маршрутизатора и анонсирует ему один собственный префикс.
|
В примере использованы зарезервированные адреса и фиктивные ASN. Замените данные на ваши реальные значения. Перед редактированием
Без этих трёх составляющих BIRD нечего анонсировать и некому передавать маршруты. |
Порядок изменений
Любое изменение в bird.conf требует обязательной проверки синтаксиса. Одна опечатка может привести к некорректной работе всей маршрутизации.
-
Проверьте файл на ошибки:
bird -p
Если ошибок нет, команда вернет 0. Если есть — укажет на строку с ошибкой.
-
Примените настройки:
birdc configure
BIRD выполнит мягкое переключение: новые правила применятся, существующие BGP-сессии не сбросятся. Полный рестарт BIRD при изменении конфигурации не нужен — он приведёт к разрыву всех сессий.
Управление BGP-сессиями через birdc
Режимы birdc
birdc работает в двух режимах:
-
Интерактивный — вы запускаете
birdcбез аргументов, попадаете в подсказку bird> и вводите команды одну за другой; -
Выполнение одиночной команды —
birdc <команда>сразу выполняет команду и возвращает результат.
Интерактивный режим удобен для серии последовательных проверок при диагностике; одноразовый — для скриптов и однострочников.
# Интерактивный режим birdc bird> show protocols bird> exit # Выполнение одиночной команды birdc show status birdc show route
Состояние сессии
Чтобы посмотреть состояние всех протоколов BIRD, выполните:
birdc show protocols
Пример вывода:
Name Proto Table State Since Info uplink1 BGP master up 2025-05-13 Established device1 Device --- up 2025-05-13 kernel1 Kernel master up 2025-05-13
BGP-сессия считается успешно установленной только в том случае, если в колонке State указано up, а в Info — Established.
Если сессия не поднимается, проверьте birdc show protocols all uplink1 — эта команда выводит детальный статус, включая количество импортированных и экспортированных маршрутов.
Просмотр маршрутов
# Все маршруты birdc show route # Маршруты, полученные по конкретному протоколу birdc show route protocol uplink1 # Поиск маршрута до конкретного IP birdc show route for 8.8.8.8
Управление протоколами «на лету»
Для административных работ может потребоваться временно отключить или перезапустить BGP‑сессию:
birdc disable uplink1 # Отключить сессию birdc enable uplink1 # Включить сессию birdc restart uplink1 # Перезапустить сессию
Эти команды полезны при плановом обслуживании каналов связи или обновлении конфигурации.
Мониторинг и диагностика
Для стабильной работы Application Delivery Controller недостаточно просто поднять BGP. Необходимо отслеживать состояние сессий и корректность таблиц маршрутизации.
Базовые команды проверки
birdc show status # Статус демона (версия, uptime) birdc show interfaces # Список сетевых интерфейсов и их состояние birdc show protocols all # Детальный статус всех протоколов birdc show route count # Количество маршрутов в таблице
Команда show protocols all выводит подробную информацию: количество добавленных и удалённых маршрутов, состояние BGP‑соединения и другую статистику.
Пример фрагмента вывода:
# birdc show protocols all BIRD 3.1.3 ready. Name Proto Table State Since Info kernel1 Kernel master4 up 2026-03-26 Created: 2026-03-26 Channel ipv4 State: UP Import state: UP Export state: READY Table: master4 Preference: 10 Input filter: ACCEPT Output filter: ACCEPT Routes: 0 imported, 0 exported, 0 preferred Route change stats: received rejected filtered ignored RX limit limit accepted Import updates: 0 0 0 0 0 0 0 Import withdraws: 0 0 --- 0 --- --- 0 Export updates: 0 0 0 0 --- 0 0 Export withdraws: 0 --- --- 0 --- --- 0 …..
Проверка синхронизации с ядром
ip route list # Таблица маршрутизации ядра ip -6 route list # Таблица маршрутизации ядра (IPv6)
В выводе должны присутствовать маршруты, анонсированные или полученные BIRD.
Если в birdc маршрут есть, а в ip route его нет — проверьте настройки протокола kernel в конфигурации.
Фильтрация маршрутов
Фильтры — отдельная подсистема BIRD. Они описывают, какие маршруты протокол принимает (import) и какие отдаёт (export).
Фильтры пишутся на встроенном языке BIRD. Их можно описать как самостоятельный блок filter, оформить как функцию function, либо встроить прямо в протокол через where <условие>.
Ниже — два типовых сценария.
Импорт-фильтр: принимать только default-route
filter default_only {
if net = 0.0.0.0/0 then accept;
reject;
}
protocol bgp uplink1 {
# ...
ipv4 {
import filter default_only;
# ...
};
}
Здесь filter default_only пропускает только маршрут на 0.0.0.0/0. Остальное BIRD отбрасывает ещё до попадания в свою таблицу маршрутизации.
Экспорт-фильтр: анонсировать только свои префиксы
Вариант 1:
function is_my_prefix() -> bool {
return net ~ [ 203.0.113.0/24, 2001:db8:1000::/48 ];
}
protocol bgp uplink1 {
# ...
ipv4 {
export where is_my_prefix();
};
}
Вариант 2 (через function и where):
filter my_export_list {
if net ~ [90.200.100.0/24, 80.90.100.0/24 ] then {
accept;
}
else reject;
}
protocol bgp uplink1 {
# ...
ipv4 {
export filter my_export_list;
};
}
Здесь filter my_export_list пропускает наружу только маршруты на 90.200.100.0/24 и 80.90.100.0/24.