Настройка BGP в FRRouting на Linux VPS

12 мин чтения·Matthieu|

Пошаговая настройка FRRouting BGP для анонсирования собственных IPv4 и IPv6 префиксов с Linux VPS. Установка, конфигурация vtysh, prefix-lists, route-maps, GTSM и правила файрвола nftables.

Этот туториал описывает настройку FRRouting (FRR) для анонсирования собственных IPv4 и IPv6 префиксов по BGP с Linux VPS. Все команды протестированы на Debian 12 и Ubuntu 24.04 с FRR 10.5.

К концу вы получите работающую eBGP-сессию с вашим апстрим-провайдером, dual-stack анонсирование префиксов через постоянные dummy-интерфейсы, входящую и исходящую фильтрацию маршрутов, защиту сессии через GTSM и правила файрвола nftables для TCP 179.

Если вы выбираете между FRR и BIRD2 -- оба варианта хороши. FRR использует CLI в стиле Cisco (vtysh), что удобно тем, кто работал с IOS или JunOS. BIRD2 использует декларативный конфигурационный файл. Этот гайд покрывает FRR. Про BIRD2 читайте BIRD2 BGP Configuration on a Linux VPS.

Про то, как привязать собственное IP-пространство к VPS, смотрите BGP: Bring Your Own IP to a VPS.

Требования

Перед началом вам понадобится:

  • Публичный ASN (Autonomous System Number). Если у вас его еще нет, смотрите Register an ASN at RIPE NCC.
  • Минимум один IPv4 /24 или IPv6 /48 префикс, привязанный к вашему ASN.
  • ROA (Route Origin Authorization) объекты, созданные в RPKI-панели вашего RIR. Смотрите .
  • Апстрим-провайдер с BGP-сессией (IP transit или пиринг). Вам понадобятся: ASN провайдера, IPv4 и IPv6 адреса пира и согласованный MD5-пароль (если применимо).
  • Linux VPS на Debian 12 (Bookworm) или Ubuntu 24.04 (Noble). Root или sudo доступ.

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

Плейсхолдер Значение Пример
YOUR_ASN Ваш номер AS 212345
PEER_ASN ASN апстрим-провайдера 6939
PEER_IPV4 IPv4 BGP-пира провайдера 198.51.100.1
PEER_IPV6 IPv6 BGP-пира провайдера 2001:db8:1::1
YOUR_IPV4 Ваш IPv4 на BGP-пиринге 198.51.100.2
YOUR_IPV6 Ваш IPv6 на BGP-пиринге 2001:db8:1::2
YOUR_PREFIX_V4 Ваш IPv4 префикс 203.0.113.0/24
YOUR_PREFIX_V6 Ваш IPv6 префикс 2001:db8:abc::/48
MD5_PASSWORD Согласованный TCP MD5 пароль (от провайдера)

Как установить FRRouting на Debian 12 и Ubuntu 24.04?

Установите FRR из официального apt-репозитория, чтобы получить последнюю стабильную версию (10.5.x на март 2026). Пакеты в Debian и Ubuntu обычно отстают на несколько мажорных версий. Официальный репозиторий поддерживает текущую стабильную ветку для Bookworm и Noble.

Добавьте GPG-ключ подписи:

curl -s https://deb.frrouting.org/frr/keys.gpg | sudo tee /usr/share/keyrings/frrouting.gpg > /dev/null

Добавьте репозиторий. Используйте frr-stable для отслеживания последней стабильной ветки:

FRRVER="frr-stable"
echo deb '[signed-by=/usr/share/keyrings/frrouting.gpg]' https://deb.frrouting.org/frr \
     $(lsb_release -s -c) $FRRVER | sudo tee /etc/apt/sources.list.d/frr.list

Установите FRR и Python-утилиты (нужны для frr-reload.py):

sudo apt update && sudo apt install -y frr frr-pythontools

Проверьте установленную версию:

sudo vtysh -c "show version" | head -1

Ожидаемый вывод:

FRRouting 10.5.3 (<hostname>) on Linux(6.8.0-xxx-generic).

FRR устанавливается как systemd-сервис. Включите его, чтобы он переживал перезагрузки, и запустите сразу:

sudo systemctl enable --now frr

Проверьте, что он работает:

systemctl status frr

Вы должны увидеть active (running) в выводе. FRR запускает несколько демонов (zebra, bgpd и т.д.), управляемых одним родительским процессом.

Как включить демон BGP в FRR?

FRR поставляется с отключенными протокольными демонами, кроме zebra. Нужно явно включить bgpd в файле daemons, иначе FRR не запустит BGP-процесс. Файл находится по пути /etc/frr/daemons.

Откройте файл daemons:

sudo nano /etc/frr/daemons

Найдите строку bgpd и установите значение yes:

bgpd=yes

Остальные демоны (ospfd, isisd и т.д.) можно оставить на no, если они вам не нужны. Zebra всегда включена и управляет таблицей маршрутизации ядра.

Вот что делает каждый демон:

Демон Назначение По умолчанию
zebra Управление маршрутами ядра, отслеживание интерфейсов всегда включен
bgpd Протокол BGP no
ospfd OSPFv2 no
ospf6d OSPFv3 (IPv6) no
ripd RIP no
isisd IS-IS no
staticd Статические маршруты через vtysh no

Перезапустите FRR, чтобы изменения вступили в силу:

sudo systemctl restart frr

Проверьте, что bgpd запущен:

sudo vtysh -c "show bgp summary"

Вы должны увидеть % BGP instance not found. Это нормально: bgpd запущен, но router bgp еще не сконфигурирован. Этим займемся дальше.

Основы vtysh

vtysh -- это интегрированная оболочка FRR. Она дает Cisco-подобный CLI для настройки всех демонов FRR из одного интерфейса. Несколько базовых вещей перед началом конфигурации.

Войдите в vtysh:

sudo vtysh

Вы попали в CLI FRR. Промпт показывает имя хоста. Режимы, которые понадобятся:

Режим Вход Промпт Назначение
Exec (по умолчанию) # Команды show, проверка
Config configure terminal (config)# Глобальная конфигурация
Router BGP router bgp ASN (config-router)# Конфигурация BGP
Address-family address-family ipv4 unicast (config-router-af)# Настройки по AFI/SAFI

Для сохранения текущей конфигурации на диск:

write memory

Это записывает в /etc/frr/frr.conf. FRR по умолчанию использует интегрированную модель конфигурации: все настройки демонов хранятся в одном файле.

Выход из vtysh -- exit или end (возврат в exec-режим из любого подрежима).

Как настроить BGP-сессию с апстрим-провайдером?

Войдите в vtysh и режим configure terminal для базовой конфигурации BGP. Здесь создается процесс роутера, задается router ID, отключается автоматический IPv4 unicast (чтобы вы контролировали, какие address families активны для каждого соседа), и определяется апстрим-пир.

sudo vtysh
configure terminal

router bgp YOUR_ASN
 bgp router-id YOUR_IPV4
 no bgp default ipv4-unicast

 neighbor PEER_IPV4 remote-as PEER_ASN
 neighbor PEER_IPV4 description Upstream-v4
 neighbor PEER_IPV4 password MD5_PASSWORD
 neighbor PEER_IPV4 ttl-security hops 1
 neighbor PEER_IPV4 soft-reconfiguration inbound

 neighbor PEER_IPV6 remote-as PEER_ASN
 neighbor PEER_IPV6 description Upstream-v6
 neighbor PEER_IPV6 password MD5_PASSWORD
 neighbor PEER_IPV6 ttl-security hops 1
 neighbor PEER_IPV6 soft-reconfiguration inbound

Что делает каждая директива:

  • bgp router-id: 32-битный идентификатор, обычно ваш основной IPv4-адрес. Должен быть уникальным на пиринге.
  • no bgp default ipv4-unicast: Запрещает FRR автоматически активировать IPv4 unicast для каждого соседа. Address families активируются явно. Стандартная практика для dual-stack конфигураций.
  • ttl-security hops 1: Включает GTSM (RFC 5082). Требует, чтобы пакеты приходили с TTL 254 (один хоп). Отбрасывает поддельные BGP-пакеты от удаленных источников. Несовместимо с ebgp-multihop.
  • password: Устанавливает TCP MD5 аутентификацию (RFC 2385). Обе стороны должны использовать одинаковую строку. Не все провайдеры используют это. Пропустите, если ваш провайдер этого не требует.
  • soft-reconfiguration inbound: Сохраняет полученные маршруты в памяти, чтобы можно было применять изменения политик без сброса сессии. Расходует больше RAM, но позволяет избежать разрывов сессии при обновлении фильтров.

Не выходите из режима конфигурации. Дальше добавим address families и фильтры.

Как анонсировать собственные IPv4 и IPv6 префиксы?

Для анонсирования префиксов в FRR нужны две вещи: директива network в конфигурации BGP и наличие префикса в таблице маршрутизации ядра. Самый простой способ добавить префикс в ядро -- через dummy-интерфейс. Сначала создадим dummy-интерфейсы, затем настроим address families в BGP.

Как создать постоянные dummy-интерфейсы для анонсирования префиксов?

Dummy-интерфейс -- это интерфейс, похожий на loopback, который держит IP-адрес без привязки к физическому оборудованию. Zebra в FRR подхватывает маршруты из ядра, так что если ваш префикс назначен на dummy-интерфейс, zebra его установит и bgpd сможет его анонсировать.

Создайте dummy-интерфейсы через systemd-networkd, чтобы они сохранялись после перезагрузки.

Создайте netdev-файл:

sudo tee /etc/systemd/network/10-dummy-bgp.netdev > /dev/null << 'EOF'
[NetDev]
Name=dummy-bgp
Kind=dummy
EOF

Создайте network-файл с вашими префиксами:

sudo tee /etc/systemd/network/10-dummy-bgp.network > /dev/null << 'EOF'
[Match]
Name=dummy-bgp

[Address]
Address=YOUR_PREFIX_V4

[Address]
Address=YOUR_PREFIX_V6
EOF

Для IPv4-адреса используйте первый доступный IP в вашем префиксе (например, 203.0.113.1/24). Для IPv6 -- любой адрес в пределах вашего префикса (например, 2001:db8:abc::1/48).

Включите systemd-networkd, если он еще не активен, и перезапустите:

sudo systemctl enable --now systemd-networkd
sudo systemctl restart systemd-networkd

Проверьте, что dummy-интерфейс поднят:

ip addr show dummy-bgp

Вы должны увидеть оба ваших IPv4 и IPv6 адреса, назначенных на интерфейс.

Проверьте, что маршруты есть в ядре:

ip route show dev dummy-bgp
ip -6 route show dev dummy-bgp

Конфигурация address-family

Вернитесь в режим конфигурации vtysh (или войдите заново: sudo vtysh, затем configure terminal, затем router bgp YOUR_ASN):

 address-family ipv4 unicast
  network YOUR_PREFIX_V4
  neighbor PEER_IPV4 activate
  neighbor PEER_IPV4 route-map EXPORT-V4 out
  neighbor PEER_IPV4 route-map IMPORT-V4 in
  neighbor PEER_IPV4 prefix-list BOGONS-V4 in
  neighbor PEER_IPV4 maximum-prefix 500000 80
 exit-address-family

 address-family ipv6 unicast
  network YOUR_PREFIX_V6
  neighbor PEER_IPV6 activate
  neighbor PEER_IPV6 route-map EXPORT-V6 out
  neighbor PEER_IPV6 route-map IMPORT-V6 in
  neighbor PEER_IPV6 prefix-list BOGONS-V6 in
  neighbor PEER_IPV6 maximum-prefix 200000 80
 exit-address-family

Подробности:

  • activate включает соседа в данной address family. Обязательно, потому что мы отключили bgp default ipv4-unicast.
  • network говорит bgpd анонсировать этот префикс. Префикс должен присутствовать в таблице маршрутизации ядра (zebra подхватывает его с dummy-интерфейса).
  • maximum-prefix 500000 80 разрывает сессию, если пир отправит больше 500 000 IPv4 префиксов. 80 генерирует предупреждение при 80% (400 000). Подстройте в зависимости от того, получаете ли вы full table или только default route. Для сессии только с default route установите 10.
  • Ссылки на route-map и prefix-list указывают на фильтры, которые определим дальше.

Как фильтровать BGP-маршруты с помощью prefix-lists и route-maps?

Фильтрация маршрутов не опциональна. Без исходящих фильтров ошибка в конфигурации может привести к утечке чужих префиксов. Без входящих фильтров вы принимаете bogon-маршруты и потенциально создаете черные дыры для трафика. Это соответствует RFC 7454 (BGP Operations and Security).

Для более глубокого разбора стратегий фильтрации смотрите .

Исходящие prefix-lists

Анонсируйте только свои префиксы. Ничего больше.

ip prefix-list OUR-PREFIXES-V4 seq 10 permit YOUR_PREFIX_V4
ip prefix-list OUR-PREFIXES-V4 seq 999 deny any

ipv6 prefix-list OUR-PREFIXES-V6 seq 10 permit YOUR_PREFIX_V6
ipv6 prefix-list OUR-PREFIXES-V6 seq 999 deny any

Если анонсируете несколько префиксов, добавьте дополнительные строки permit с возрастающими sequence numbers.

Входящие bogon prefix-lists

Отклоняйте префиксы, которые не должны появляться в публичном интернете. Этот список соответствует NLNOG BGP Filter Guide:

ip prefix-list BOGONS-V4 seq 10 deny 0.0.0.0/8 le 32
ip prefix-list BOGONS-V4 seq 20 deny 10.0.0.0/8 le 32
ip prefix-list BOGONS-V4 seq 30 deny 100.64.0.0/10 le 32
ip prefix-list BOGONS-V4 seq 40 deny 127.0.0.0/8 le 32
ip prefix-list BOGONS-V4 seq 50 deny 169.254.0.0/16 le 32
ip prefix-list BOGONS-V4 seq 60 deny 172.16.0.0/12 le 32
ip prefix-list BOGONS-V4 seq 70 deny 192.0.2.0/24 le 32
ip prefix-list BOGONS-V4 seq 80 deny 192.88.99.0/24 le 32
ip prefix-list BOGONS-V4 seq 90 deny 192.168.0.0/16 le 32
ip prefix-list BOGONS-V4 seq 100 deny 198.18.0.0/15 le 32
ip prefix-list BOGONS-V4 seq 110 deny 198.51.100.0/24 le 32
ip prefix-list BOGONS-V4 seq 120 deny 203.0.113.0/24 le 32
ip prefix-list BOGONS-V4 seq 130 deny 224.0.0.0/4 le 32
ip prefix-list BOGONS-V4 seq 140 deny 240.0.0.0/4 le 32
ip prefix-list BOGONS-V4 seq 999 permit 0.0.0.0/0 le 24

ipv6 prefix-list BOGONS-V6 seq 10 deny ::/8 le 128
ipv6 prefix-list BOGONS-V6 seq 20 deny 100::/64 le 128
ipv6 prefix-list BOGONS-V6 seq 30 deny 2001:2::/48 le 128
ipv6 prefix-list BOGONS-V6 seq 40 deny 2001:10::/28 le 128
ipv6 prefix-list BOGONS-V6 seq 50 deny 2001:db8::/32 le 128
ipv6 prefix-list BOGONS-V6 seq 60 deny 3fff::/20 le 128
ipv6 prefix-list BOGONS-V6 seq 70 deny 2002::/16 le 128
ipv6 prefix-list BOGONS-V6 seq 80 deny 3ffe::/16 le 128
ipv6 prefix-list BOGONS-V6 seq 90 deny 5f00::/16 le 128
ipv6 prefix-list BOGONS-V6 seq 100 deny fc00::/7 le 128
ipv6 prefix-list BOGONS-V6 seq 110 deny fe80::/10 le 128
ipv6 prefix-list BOGONS-V6 seq 120 deny fec0::/10 le 128
ipv6 prefix-list BOGONS-V6 seq 130 deny ff00::/8 le 128
ipv6 prefix-list BOGONS-V6 seq 999 permit ::/0 le 48

Последняя строка permit в каждом списке пропускает все, что не было явно отклонено. le 24 (IPv4) и le 48 (IPv6) отклоняют слишком специфичные префиксы: никто не должен анонсировать /25 и длиннее в IPv4 или /49 и длиннее в IPv6.

Route-maps

Route-maps связывают prefix-lists воедино и дают место для дополнительных политик (local-pref, communities, AS-path prepending).

route-map EXPORT-V4 permit 10
 match ip address prefix-list OUR-PREFIXES-V4

route-map EXPORT-V6 permit 10
 match ipv6 address prefix-list OUR-PREFIXES-V6

route-map IMPORT-V4 permit 10
 match ip address prefix-list BOGONS-V4

route-map IMPORT-V6 permit 10
 match ipv6 address prefix-list BOGONS-V6

Исходящие route-maps пропускают только ваши собственные префиксы. Все остальное неявно отклоняется (FRR отклоняет все, что не совпало ни с одним правилом route-map). Входящие route-maps пропускают трафик через bogon prefix-list, который отклоняет bogon-диапазоны и пропускает все остальное.

Сохраните конфигурацию:

write memory

Проверьте, что конфиг записался:

ls -la /etc/frr/frr.conf

Файл должен показать недавнюю метку времени модификации с владельцем frr:frr и правами 640.

Как защитить BGP-сессию и закрыть TCP 179?

BGP работает на TCP порту 179. Любой хост в интернете может попытаться к нему подключиться. Помимо уже настроенных GTSM и MD5 аутентификации, нужны правила файрвола для ограничения TCP 179 только адресами ваших пиров.

Правила файрвола nftables

Установите nftables, если его еще нет. На минимальных установках Ubuntu 24.04 он не включен по умолчанию:

sudo apt install -y nftables

Создайте директорию /etc/nftables.d/ для дополнительных конфигурационных файлов и добавьте директиву include в основной конфиг nftables, чтобы правила переживали перезагрузку:

sudo mkdir -p /etc/nftables.d
echo 'include "/etc/nftables.d/*.conf"' | sudo tee -a /etc/nftables.conf

Создайте отдельный конфигурационный файл nftables для BGP:

sudo tee /etc/nftables.d/bgp.conf > /dev/null << 'EOF'
table inet bgp-filter {
    set bgp_peers_v4 {
        type ipv4_addr
        elements = { PEER_IPV4 }
    }

    set bgp_peers_v6 {
        type ipv6_addr
        elements = { PEER_IPV6 }
    }

    chain input {
        type filter hook input priority 0; policy accept;

        # Allow BGP from known peers only
        tcp dport 179 ip saddr @bgp_peers_v4 accept
        tcp dport 179 ip6 saddr @bgp_peers_v6 accept

        # Allow BGP return traffic (our side initiates)
        tcp sport 179 ip saddr @bgp_peers_v4 accept
        tcp sport 179 ip6 saddr @bgp_peers_v6 accept

        # Drop all other BGP attempts
        tcp dport 179 drop
        tcp sport 179 drop
    }
}
EOF

Если у вас уже есть конфигурация nftables, интегрируйте эти правила в существующую input chain вместо создания отдельной таблицы. Подход выше самодостаточен и не конфликтует с другими правилами файрвола.

Чтобы добавить несколько пиров, добавьте их IP в набор elements:

elements = { 198.51.100.1, 203.0.113.1 }

Включите nftables для сохранения правил после перезагрузки, затем перезагрузите для применения нового include:

sudo systemctl enable --now nftables
sudo systemctl reload nftables

Проверьте, что правила загружены:

sudo nft list table inet bgp-filter

Вы должны увидеть IP ваших пиров в наборах и правила chain.

Сводка по безопасности

Защита Что делает Где настроено
GTSM (ttl-security hops 1) Отбрасывает BGP-пакеты не от напрямую подключенного пира vtysh, для каждого neighbor
TCP MD5 (password) Аутентифицирует TCP-сегменты, предотвращает RST injection vtysh, для каждого neighbor
Prefix-list (исходящий) Анонсирует только ваши собственные префиксы vtysh, route-map
Prefix-list (входящий) Отклоняет bogon/зарезервированные диапазоны vtysh, для каждого neighbor
maximum-prefix Разрывает сессию, если пир отправляет слишком много маршрутов vtysh, для каждой address-family
nftables Ограничивает TCP 179 известными IP пиров /etc/nftables.d/bgp.conf

Как проверить BGP-сессию и распространение префиксов?

После сохранения конфигурации через write memory BGP-сессия начнет устанавливаться. Проверка идет в три этапа: локальные команды vtysh, таблица маршрутизации ядра и внешние looking glasses.

Команды проверки vtysh

Команда Что показывает
show bgp summary Все пиры, их состояние, количество полученных префиксов
show bgp ipv4 unicast Таблица BGP IPv4
show bgp ipv6 unicast Таблица BGP IPv6
show bgp ipv4 unicast neighbors PEER_IPV4 advertised-routes Что вы отправляете пиру
show bgp ipv4 unicast neighbors PEER_IPV4 received-routes Что пир отправляет вам (требует soft-reconfiguration inbound)
show ip bgp neighbors PEER_IPV4 Детальное состояние соседа, uptime, capabilities

Проверьте состояние сессии:

sudo vtysh -c "show bgp summary"

Ожидаемый вывод (сокращенно):

IPv4 Unicast Summary:
BGP router identifier YOUR_IPV4, local AS number YOUR_ASN, vrf default
Neighbor        V    AS   MsgRcvd  MsgSent  TblVer   InQ  OutQ  Up/Down  State/PfxRcd
PEER_IPV4       4  PEER_ASN   1205     843       0      0     0 01:23:45        12

Обратите внимание на столбец State/PfxRcd. Число означает, что сессия установлена и столько префиксов получено. Если видите Active, Connect или OpenSent -- сессия еще не поднялась. Смотрите раздел устранения неполадок ниже.

Проверьте, что ваш префикс анонсируется:

sudo vtysh -c "show bgp ipv4 unicast neighbors PEER_IPV4 advertised-routes"

Ваш префикс должен появиться в выводе. Если его нет, проверьте:

  1. Dummy-интерфейс поднят (ip addr show dummy-bgp).
  2. Маршрут существует в ядре (ip route show YOUR_PREFIX_V4).
  3. Директива network совпадает с точным префиксом и маской.

Внешняя проверка

Проверьте извне вашей сети, что префикс виден в интернете.

С вашей локальной машины (не с VPS):

traceroute YOUR_PREFIX_V4_FIRST_IP

Используйте bgp.tools для проверки вашего префикса:

  • Origin AS совпадает с вашим ASN.
  • ROA-статус показывает "Valid" (не "Unknown" или "Invalid").
  • Префикс виден с нескольких точек наблюдения.

Также можно запросить looking glass RIPE RIS:

curl -s "https://stat.ripe.net/data/looking-glass/data.json?resource=YOUR_PREFIX_V4" | python3 -m json.tool | head -50

Сохранение конфигурации

FRR сохраняет конфигурацию в /etc/frr/frr.conf при выполнении write memory в vtysh. Пока сервис FRR включен (systemctl enable frr), он читает этот файл при загрузке.

Проверьте оба механизма сохранения:

sudo systemctl is-enabled frr

Должно вернуть enabled.

sudo vtysh -c "show running-config" | head -5

Сравните с сохраненным файлом:

head -5 /etc/frr/frr.conf

Они должны совпадать. Если расходятся, выполните write memory еще раз.

Dummy-интерфейс сохраняется через systemd-networkd (настроен ранее). Проверьте:

sudo systemctl is-enabled systemd-networkd

Полный аннотированный frr.conf

Вот полный пример конфигурации для справки. Замените все плейсхолдеры своими значениями.

frr version 10.5.3
frr defaults traditional
hostname bgp-vps
log syslog informational
!
! --- Prefix-lists: outbound (only our prefixes) ---
ip prefix-list OUR-PREFIXES-V4 seq 10 permit 203.0.113.0/24
ip prefix-list OUR-PREFIXES-V4 seq 999 deny any
!
ipv6 prefix-list OUR-PREFIXES-V6 seq 10 permit 2001:db8:abc::/48
ipv6 prefix-list OUR-PREFIXES-V6 seq 999 deny any
!
! --- Prefix-lists: inbound bogon filters ---
ip prefix-list BOGONS-V4 seq 10 deny 0.0.0.0/8 le 32
ip prefix-list BOGONS-V4 seq 20 deny 10.0.0.0/8 le 32
ip prefix-list BOGONS-V4 seq 30 deny 100.64.0.0/10 le 32
ip prefix-list BOGONS-V4 seq 40 deny 127.0.0.0/8 le 32
ip prefix-list BOGONS-V4 seq 50 deny 169.254.0.0/16 le 32
ip prefix-list BOGONS-V4 seq 60 deny 172.16.0.0/12 le 32
ip prefix-list BOGONS-V4 seq 70 deny 192.0.2.0/24 le 32
ip prefix-list BOGONS-V4 seq 80 deny 192.88.99.0/24 le 32
ip prefix-list BOGONS-V4 seq 90 deny 192.168.0.0/16 le 32
ip prefix-list BOGONS-V4 seq 100 deny 198.18.0.0/15 le 32
ip prefix-list BOGONS-V4 seq 110 deny 198.51.100.0/24 le 32
ip prefix-list BOGONS-V4 seq 120 deny 203.0.113.0/24 le 32
ip prefix-list BOGONS-V4 seq 130 deny 224.0.0.0/4 le 32
ip prefix-list BOGONS-V4 seq 140 deny 240.0.0.0/4 le 32
ip prefix-list BOGONS-V4 seq 999 permit 0.0.0.0/0 le 24
!
ipv6 prefix-list BOGONS-V6 seq 10 deny ::/8 le 128
ipv6 prefix-list BOGONS-V6 seq 20 deny 100::/64 le 128
ipv6 prefix-list BOGONS-V6 seq 30 deny 2001:2::/48 le 128
ipv6 prefix-list BOGONS-V6 seq 40 deny 2001:10::/28 le 128
ipv6 prefix-list BOGONS-V6 seq 50 deny 2001:db8::/32 le 128
ipv6 prefix-list BOGONS-V6 seq 60 deny 3fff::/20 le 128
ipv6 prefix-list BOGONS-V6 seq 70 deny 2002::/16 le 128
ipv6 prefix-list BOGONS-V6 seq 80 deny 3ffe::/16 le 128
ipv6 prefix-list BOGONS-V6 seq 90 deny 5f00::/16 le 128
ipv6 prefix-list BOGONS-V6 seq 100 deny fc00::/7 le 128
ipv6 prefix-list BOGONS-V6 seq 110 deny fe80::/10 le 128
ipv6 prefix-list BOGONS-V6 seq 120 deny fec0::/10 le 128
ipv6 prefix-list BOGONS-V6 seq 130 deny ff00::/8 le 128
ipv6 prefix-list BOGONS-V6 seq 999 permit ::/0 le 48
!
! --- Route-maps ---
route-map EXPORT-V4 permit 10
 match ip address prefix-list OUR-PREFIXES-V4
!
route-map EXPORT-V6 permit 10
 match ipv6 address prefix-list OUR-PREFIXES-V6
!
route-map IMPORT-V4 permit 10
 match ip address prefix-list BOGONS-V4
!
route-map IMPORT-V6 permit 10
 match ipv6 address prefix-list BOGONS-V6
!
! --- BGP configuration ---
router bgp 212345
 bgp router-id 198.51.100.2
 no bgp default ipv4-unicast
 !
 ! IPv4 peer
 neighbor 198.51.100.1 remote-as 6939
 neighbor 198.51.100.1 description Upstream-v4
 neighbor 198.51.100.1 password SECRET
 neighbor 198.51.100.1 ttl-security hops 1
 neighbor 198.51.100.1 soft-reconfiguration inbound
 !
 ! IPv6 peer
 neighbor 2001:db8:1::1 remote-as 6939
 neighbor 2001:db8:1::1 description Upstream-v6
 neighbor 2001:db8:1::1 password SECRET
 neighbor 2001:db8:1::1 ttl-security hops 1
 neighbor 2001:db8:1::1 soft-reconfiguration inbound
 !
 address-family ipv4 unicast
  network 203.0.113.0/24
  neighbor 198.51.100.1 activate
  neighbor 198.51.100.1 route-map EXPORT-V4 out
  neighbor 198.51.100.1 route-map IMPORT-V4 in
  neighbor 198.51.100.1 prefix-list BOGONS-V4 in
  neighbor 198.51.100.1 maximum-prefix 500000 80
 exit-address-family
 !
 address-family ipv6 unicast
  network 2001:db8:abc::/48
  neighbor 2001:db8:1::1 activate
  neighbor 2001:db8:1::1 route-map EXPORT-V6 out
  neighbor 2001:db8:1::1 route-map IMPORT-V6 in
  neighbor 2001:db8:1::1 prefix-list BOGONS-V6 in
  neighbor 2001:db8:1::1 maximum-prefix 200000 80
 exit-address-family
!

Устранение неполадок

BGP-сессия зависла в состоянии Active или Connect

Сессия пытается установиться, но TCP 179 не может подключиться. Проверяйте по порядку:

  1. Файрвол: Можете ли вы достучаться до пира на TCP 179?
    sudo nft list ruleset | grep 179
    
  2. IP пира: Правильный ли IP соседа? Опечатки -- самая частая причина.
    sudo vtysh -c "show bgp neighbors PEER_IPV4" | grep "BGP state"
    
  3. Несовпадение MD5: Если используется TCP MD5, обе стороны должны иметь одинаковую строку пароля. Полезного сообщения об ошибке нет. Сессия просто молча не устанавливается.
  4. GTSM: Если установлено ttl-security hops 1, но пир находится за несколько хопов (через NAT или туннель), проверка TTL не пройдет. Уберите ttl-security и используйте ebgp-multihop для многохоповых сессий.

Префикс не виден извне

Сессия установлена, но префикс не появляется на looking glasses.

  1. Проверьте анонсируемые маршруты:

    sudo vtysh -c "show bgp ipv4 unicast neighbors PEER_IPV4 advertised-routes"
    

    Если вашего префикса нет в списке, исходящий фильтр его блокирует. Проверьте, что prefix-list совпадает с вашим точным префиксом.

  2. Проверьте маршрут в ядре:

    ip route show YOUR_PREFIX_V4
    

    Если отсутствует, dummy-интерфейс не работает или неправильно настроен.

  3. Проверьте ROA-валидность: Если ваш ROA отсутствует или неправильный, сети с RPKI-валидацией будут отбрасывать ваш анонс. Проверьте на RIPE RPKI Validator.

Чтение логов

FRR по умолчанию пишет логи в syslog. Для отслеживания BGP-событий:

journalctl -u frr -f --grep="bgpd"

Для более подробного вывода включите debug временно в vtysh:

debug bgp updates
debug bgp keepalives

Выключите когда закончите (очень многословно):

no debug bgp updates
no debug bgp keepalives

Дальнейшие шаги

  • Добавить RPKI-валидацию: Настройте встроенную поддержку RPKI в FRR для валидации входящих маршрутов по ROA-данным. Смотрите .
  • Продвинутая фильтрация: Создайте более гранулярные route-maps с matching по community, фильтрами AS-path и настройкой local-preference. Смотрите .
  • Мониторинг: Настройте мониторинг BGP-сессий с помощью Prometheus + bgp_exporter или Zabbix SNMP traps для получения алертов при падении сессии.

Copyright 2026 Virtua.Cloud. Vse prava zashchishcheny.

Готовы попробовать?

Разверните свой сервер за секунды. Linux, Windows или FreeBSD.

Смотреть тарифы VPS