Bird — свободный демон маршрутизации, который поддерживает BGP, OSPF, RIP, статические маршруты и проверку RPKI. Его используют и в домашних лабораториях, и на границе крупных сетей. В этой статье речь пойдёт только о BGP внутри собственной инфраструктуры: между офисами, филиалами, гипервизорами и маршрутизаторами, которые вам принадлежат. Никаких чужих автономных систем, обхода ограничений и работы с префиксами, на которые у вас нет прав.

Когда BGP действительно нужен

Для двух-трёх подсетей достаточно статических маршрутов: они предсказуемы, не требуют демона и легко читаются. BGP становится оправданным, когда сеть растёт и появляется несколько путей. Типичные сценарии: два офиса с резервным каналом, несколько гипервизоров с плавающими подсетями виртуальных машин, лаборатория с эмуляцией провайдеров или площадка, где маршруты должны переключаться автоматически при отказе линка.

Главное преимущество BGP — не магия, а формальное описание политики: какие префиксы принимать, какие отдавать, какой путь считать лучше. Внутри одной организации это удобнее, чем десятки статических записей, которые забывают обновлять.

Адресация и номера автономных систем

Для внутренней маршрутизации используются частные ASN из диапазона 64512–65534, зарезервированного RFC 6996. Публичный номер нужен только при работе с провайдерами, и его выдают региональные регистраторы. Для примеров и стендов применяйте документационные префиксы 192.0.2.0/24, 198.51.100.0/24 и 203.0.113.0/24 — они не маршрутизируются в интернете и не создают конфликтов.

Различайте eBGP и iBGP. Внешний BGP соединяет разные ASN, внутренний — маршрутизаторы одной ASN. В небольшой сети проще назначить каждому офису свой частный ASN и использовать eBGP: правила проще, а петли видны сразу. iBGP требует полной сетки соседств или route reflector, иначе маршруты не передаются транзитом.

Установка и расположение файлов

В Debian, Ubuntu и производных дистрибутивах пакет называется bird2. Версия 2 использует единый синтаксис с блоками ipv4 и ipv6, поэтому старые конфигурации от Bird 1.6 придётся переписать. Служба запускается через systemd, основной конфиг лежит в /etc/bird/bird.conf, а управление идёт через сокет и утилиту birdc.

sudo apt update
sudo apt install bird2
systemctl status bird2 --no-pager
sudo birdc show status

После правки конфигурации не перезапускайте службу вслепую: сначала проверьте синтаксис командой sudo bird -p -c /etc/bird/bird.conf. Если ошибок нет, примените конфигурацию через sudo birdc configure — это мягкая перезагрузка, при которой существующие сессии по возможности сохраняются.

Минимальная конфигурация

Ниже — рабочий пример для маршрутизатора офиса с адресом 10.10.0.1 и ASN 65001. Сосед 10.10.0.2 принадлежит филиалу с ASN 65002. Блок device включает мониторинг интерфейсов, direct импортирует подключённые сети, kernel синхронизирует таблицу маршрутизации с ядром Linux.

router id 10.10.0.1;

protocol device { }

protocol direct {
    ipv4;
    interface "eth1";
}

protocol kernel {
    ipv4 {
        export all;
    };
    learn;
}

protocol bgp office_filial {
    local as 65001;
    neighbor 10.10.0.2 as 65002;
    ipv4 {
        import all;
        export all;
    };
}

Параметр learn в блоке kernel позволяет Bird принимать маршруты, добавленные в ядро вручную. На практике его лучше отключить, чтобы демон оставался единственным источником истины, а ручные записи не создавали расхождений.

Фильтры префиксов

Отдавать соседу все маршруты без разбора — плохая привычка даже внутри своей сети. Фильтр ограничивает анонсы вашими же подсетями и защищает от случайной утечки маршрута по умолчанию. Запись 10.20.0.0/16{16,24} означает: разрешены префиксы от /16 до /24 внутри этого блока.

filter export_own {
    if net ~ [ 10.20.0.0/16{16,24} ] then accept;
    reject;
}

protocol bgp office_filial {
    local as 65001;
    neighbor 10.10.0.2 as 65002;
    ipv4 {
        import all;
        export filter export_own;
    };
}

Для входящих маршрутов полезно добавить проверку bogon-префиксов и максимальное число принимаемых записей. В Bird 2 есть параметр import limit 1000 action warn — он не рвёт сессию, но пишет предупреждение, если сосед прислал слишком много. Это спасает от аварии из-за разросшейся таблицы.

Проверка сессии и маршрутов

После применения конфигурации убедитесь, что сессия перешла в состояние Established. Команда show protocols all показывает таймеры, счётчики сообщений и причину последнего разрыва — это первое, что стоит смотреть при проблемах.

sudo birdc show protocols all office_filial
sudo birdc show route
sudo birdc show route all 10.20.0.0/16
sudo birdc show route count

Команда show route выводит лучшие маршруты, show route all — все кандидаты, включая отклонённые фильтром. Если префикс виден в all, но отсутствует в основной таблице, ищите причину в фильтре импорта или в более предпочтительном пути от другого соседа.

Диагностика типовых проблем

Самая частая причина — закрытый TCP-порт 179. Проверьте, слушает ли демон, и посмотрите трафик на интерфейсе. BGP работает поверх TCP, поэтому обычные сетевые инструменты здесь полностью применимы.

sudo ss -tnp | grep :179
sudo tcpdump -ni any tcp port 179 -c 20
sudo journalctl -u bird2 -n 50 --no-pager
sudo birdc show protocols

Если сессия поднимается и сразу падает, сверьте ASN, адреса соседей и версию протокола. Если соединение устанавливается, но маршруты не приходят, проверьте фильтры с обеих сторон и не забывайте, что BGP по умолчанию не анонсирует ничего, пока вы явно это не разрешите.

Отдельный класс проблем — асимметрия и MTU. При инкапсуляции туннелей уменьшайте MTU на интерфейсе и не полагайтесь на фрагментацию. Для BGP это критично: сессия может подняться, но большие обновления будут теряться.

Чек-лист перед вводом в эксплуатацию

  • Каждому маршрутизатору назначен уникальный router id и частный ASN.
  • Порт 179 открыт только между доверенными адресами, доступ ограничен на уровне фильтра пакетов.
  • Экспортные фильтры разрешают только ваши префиксы, импортные — отсекают bogon и лишние анонсы.
  • Настроен лимит числа принимаемых маршрутов и оповещение при его приближении.
  • Ведётся мониторинг состояния сессий, а не только доступности хостов по ICMP.
  • Конфигурация хранится в системе контроля версий, изменения проходят проверку синтаксиса.

Итог

Bird 2 даёт полный контроль над маршрутизацией без проприетарных лицензий и сложных панелей. Начните с двух соседей и жёстких фильтров, проверьте поведение при отключении линка, и только потом расширяйте схему. Главное правило: анонсируйте ровно те префиксы, которыми владеете, и документируйте каждое исключение. Тогда динамическая маршрутизация останется понятной и предсказуемой частью вашей сети.

Насколько публикация полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка 0 / 5. Количество оценок: 0

Оценок пока нет. Поставьте оценку первым.

Поделиться: Telegram ВКонтакте