Настройка BGP в FRRouting на Linux VPS
Пошаговая настройка 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"
Ваш префикс должен появиться в выводе. Если его нет, проверьте:
- Dummy-интерфейс поднят (
ip addr show dummy-bgp). - Маршрут существует в ядре (
ip route show YOUR_PREFIX_V4). - Директива
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 не может подключиться. Проверяйте по порядку:
- Файрвол: Можете ли вы достучаться до пира на TCP 179?
sudo nft list ruleset | grep 179 - IP пира: Правильный ли IP соседа? Опечатки -- самая частая причина.
sudo vtysh -c "show bgp neighbors PEER_IPV4" | grep "BGP state" - Несовпадение MD5: Если используется TCP MD5, обе стороны должны иметь одинаковую строку пароля. Полезного сообщения об ошибке нет. Сессия просто молча не устанавливается.
- GTSM: Если установлено
ttl-security hops 1, но пир находится за несколько хопов (через NAT или туннель), проверка TTL не пройдет. Уберитеttl-securityи используйтеebgp-multihopдля многохоповых сессий.
Префикс не виден извне
Сессия установлена, но префикс не появляется на looking glasses.
-
Проверьте анонсируемые маршруты:
sudo vtysh -c "show bgp ipv4 unicast neighbors PEER_IPV4 advertised-routes"Если вашего префикса нет в списке, исходящий фильтр его блокирует. Проверьте, что prefix-list совпадает с вашим точным префиксом.
-
Проверьте маршрут в ядре:
ip route show YOUR_PREFIX_V4Если отсутствует, dummy-интерфейс не работает или неправильно настроен.
-
Проверьте 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