BGP

Как установить BGP-сессию, менять настройки конфигурации и мониторить состояние соединений.

Что это

BGP (Border Gateway Protocol) — протокол динамической маршрутизации. Application Delivery Controller использует его, чтобы анонсировать свои сетевые префиксы во внешнюю сеть и принимает из неё маршруты.

Через что осуществляется

Взаимодействие строится через четыре основных компонента:

  • BIRD — демон, который устанавливает сессии с соседями, обменивается маршрутами и прогоняет их через фильтры.

  • birdc — консольный клиент для удалённого управления запущенным демоном BIRD. Позволяет просматривать состояние сессий, проверять таблицы маршрутов и менять конфигурацию в реальном времени.

  • bird.conf — конфигурационный файл. Описывает параметры сессий, номера автономных систем и правила фильтрации. По умолчанию располагается в /etc/bird.conf (или /etc/bird/bird.conf).

  • Ядро ОС — системная таблица маршрутизации. BIRD синхронизирует свою внутреннюю таблицу с ядром через протокол kernel, чтобы операционная система знала, куда физически отправлять пакеты.

Как работает

BGP-сессия и обмен маршрутами устроены так:

  1. BIRD читает bird.conf и поднимает протоколы, описанные в файле.

  2. Протокол device обновляет список сетевых интерфейсов, direct создаёт маршруты на подключённые сети.

  3. Протокол bgp открывает TCP-соединение с адресом внешнего маршрутизатора, указанным в параметре neighbor.

  4. Наша система и маршрутизатор обмениваются данными (сверяют local as и ASN внешней стороны) и согласуют семейства адресов (IPv4, IPv6) для передачи.

  5. Соединение переходит в статус Established. Начинается двусторонний обмен:

    • Наша система принимает внешние маршруты, которые соответствуют правилам import-фильтра.

    • Наша система анонсирует свои префиксы, прошедшие через export-фильтр.

  6. Все принятые маршруты фиксируются во внутренней таблице BIRD, после чего протокол kernel синхронизирует их с таблицей маршрутизации ядра.

  7. При появлении новых путей или исчезновении старых стороны обмениваются обновлениями. BIRD пересчитывает таблицу маршрутов и мгновенно пробрасывает изменения в ядро.

  8. Если сессия закрывается — вручную командой 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.conf убедитесь, что у вас подготовлены:

  • ASN — номер вашей автономной системы.

  • Выделенное IP‑пространство — префиксы, которые вы планируете обслуживать.

  • BGP-сессия — подтвержденная настройка со стороны провайдера.

Без этих трёх составляющих BIRD нечего анонсировать и некому передавать маршруты.

Порядок изменений

Любое изменение в bird.conf требует обязательной проверки синтаксиса. Одна опечатка может привести к некорректной работе всей маршрутизации.

  1. Проверьте файл на ошибки:

    bird -p

    Если ошибок нет, команда вернет 0. Если есть — укажет на строку с ошибкой.

  2. Примените настройки:

    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, а в InfoEstablished.

Если сессия не поднимается, проверьте 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 пишет в syslog.

log syslog { warning, error, info };   # Логирование в syslog
log "/var/log/bird.log" all;           # Логирование в файл

Для отладки сложных проблем рекомендуется настроить запись в отдельный файл с уровнем debug:

log "/var/log/bird.log" { info, debug };

Фильтрация маршрутов

Фильтры — отдельная подсистема 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.