// DevOps
BGP на Keenetic: как поднять динамическую маршрутизацию через Entware и FRR
Опубликовано 30.05.2026
BGP обычно ассоциируется с оборудованием операторов и Linux-серверами, но в небольших распределённых сетях он полезен и на офисном роутере: соседние площадки сами узнают о новых подсетях, а при падении туннеля маршруты перестраиваются без ручных правок.
В официальном списке компонентов KeeneticOS 5.x ни BGP, ни OSPF нет. Протокол на Keenetic запускают как сторонний демон в среде OPKG/Entware. Готовые пакеты в репозитории Entware есть для BIRD и Quagga; FRR готовым пакетом не распространяется, его нужно собирать самому. В статье — все три варианта и вариант с отдельной машиной рядом с роутером.
BGP работает поверх TCP, порт 179. Открывать его на внешнем интерфейсе без фильтрации нельзя: это прямой путь к атакам на управляющую часть роутера. Поддержка Keenetic допускает установку пакетов Entware, но по их настройке не консультирует — всё делается самостоятельно.
Схема
┌──────────────────────┐
│ Upstream / VPS / DC │
│ AS 65001 │
│ 10.255.0.1 │
└──────────┬───────────┘
│
WireGuard / GRE / IPIP
│
┌──────────▼───────────┐
│ Keenetic │
│ KeeneticOS + Entware │
│ BIRD / Quagga / FRR │
│ AS 65010 │
│ 10.255.0.2 │
└──────────┬───────────┘
│
LAN 192.168.10.0/24Keenetic здесь — небольшой пограничный маршрутизатор площадки. Он получает от центрального узла маршрут по умолчанию или ограниченный набор префиксов, анонсирует свою локальную сеть и перестраивает маршруты между резервными туннелями. Полную таблицу интернета (больше миллиона префиксов) роутер не потянет — это встраиваемое устройство с ограниченными процессором и памятью.
Когда это оправдано
- Связь площадок через VPN. Несколько офисов соединены туннелями WireGuard или GRE, BGP сообщает соседям о новых и изменённых подсетях.
- Резервные туннели. Основной и запасной каналы: BGP переключает маршруты при падении сессии, без самописных скриптов.
- Лабораторный стенд. Изучение BGP в связке с VyOS, MikroTik или Cisco на недорогом роутере.
Плохая идея — принимать полную таблицу от провайдера, строить на Keenetic ядро сети, использовать его как route reflector для множества клиентов и публиковать BGP наружу без фильтров.
Варианты
| Вариант | Что ставить | Плюсы | Минусы |
|---|---|---|---|
| A. Отдельная Linux-машина | FRR из пакетов дистрибутива | надёжно, штатные обновления, роутер не нагружен | нужна ещё одна машина |
| B. BIRD на Keenetic | bird2 из Entware | готовый пакет, лёгкий демон | собственный синтаксис конфигурации |
| C. Quagga на Keenetic | quagga-* из Entware | готовые пакеты, синтаксис vtysh как у Cisco | проект не развивается с 2018 года |
| D. FRR на Keenetic | собственная сборка | современный стек, vtysh | сборка и доработка рецепта, всё сопровождение на вас |
Вариант A рекомендуем для рабочих сетей: FRR на мини-ПК, в LXC-контейнере или виртуальной машине рядом с роутером, а на Keenetic — только статический маршрут к нему.
Keenetic ── LAN ── Linux с FRR ── VPN/BGP ── UpstreamДальше — варианты B, C и D на самом роутере.
Подготовка Keenetic
Шаг 1. Установить Entware
В веб-интерфейсе: Управление → Общие настройки → Изменить набор компонентов, компонент «Поддержка открытых пакетов (OPKG)». Хранилище — USB-накопитель с EXT4 или, на моделях с KeeneticOS 3.7 и новее, встроенная память. Архив установщика выбирается по архитектуре процессора роутера (mipsel, mips или aarch64); для встроенной памяти установка выполняется командой вида:
(config)> opkg disk storage:/ https://bin.entware.net/aarch64-k3.10/installer/aarch64-installer.tar.gzШаг 2. Войти в среду Entware и обновить пакеты
(config)> exec shopkg update
opkg upgradeПроверьте, что доступно для вашей архитектуры:
opkg list | grep -E '^(bird|quagga|frr)'На сентябрь 2026 года в выводе будут bird2, bird3 и пакеты quagga-*, а frr не будет — его в бинарном репозитории Entware нет.
Исходные данные для всех примеров:
- AS Keenetic —
65010, AS центрального узла —65001; - адрес туннеля Keenetic —
10.255.0.2, центрального узла —10.255.0.1; - локальная сеть Keenetic —
192.168.10.0/24.
Вариант B. BIRD
opkg install bird2 bird2cПакет устанавливает демон /opt/sbin/bird, консоль /opt/sbin/birdc, конфигурацию /opt/etc/bird.conf (пример из дистрибутива BIRD) и скрипт запуска /opt/etc/init.d/S70bird.
Замените содержимое /opt/etc/bird.conf:
router id 10.255.0.2;
protocol device { }
# Сети интерфейса LAN — чтобы было что анонсировать.
# Имя интерфейса сверьте командой ip -4 addr.
protocol direct {
ipv4;
interface "br0";
}
# В ядро роутера — только маршруты, полученные по BGP.
protocol kernel {
ipv4 {
export where source = RTS_BGP;
};
}
filter lan_out {
if net ~ [ 192.168.10.0/24 ] then accept;
reject;
}
filter from_upstream {
if net ~ [ 0.0.0.0/0, 10.0.0.0/8{8,24}, 172.16.0.0/12{12,24} ] then accept;
reject;
}
protocol bgp upstream {
local 10.255.0.2 as 65010;
neighbor 10.255.0.1 as 65001;
ipv4 {
import filter from_upstream;
export filter lan_out;
};
}Запуск и проверка:
/opt/etc/init.d/S70bird start
birdc show protocols
birdc show route protocol upstreamСессия должна быть в состоянии Established. Скрипт S70bird запускается автоматически вместе с остальными службами Entware.
Вариант C. Quagga
opkg install quagga-zebra quagga-bgpd quagga-vtyshКонфигурация — в /opt/etc/quagga/, скрипт запуска — /opt/etc/init.d/S50quagga. Скрипт стартует те демоны, для которых существует файл <демон>.conf, поэтому нужны zebra.conf и bgpd.conf. Демоны по умолчанию работают от пользователя network: если его нет в системе Entware, запуск завершится ошибкой — создайте пользователя или поправьте скрипт.
/opt/etc/quagga/zebra.conf:
hostname keenetic-zebra
log file /opt/var/log/zebra.log/opt/etc/quagga/bgpd.conf:
hostname keenetic-bgpd
log file /opt/var/log/bgpd.log
!
ip prefix-list PL-LAN seq 10 permit 192.168.10.0/24
ip prefix-list PL-IN seq 10 permit 0.0.0.0/0
ip prefix-list PL-IN seq 20 permit 10.0.0.0/8 le 24
!
router bgp 65010
bgp router-id 10.255.0.2
network 192.168.10.0/24
neighbor 10.255.0.1 remote-as 65001
neighbor 10.255.0.1 prefix-list PL-IN in
neighbor 10.255.0.1 prefix-list PL-LAN out/opt/etc/init.d/S50quagga start
vtysh -c 'show ip bgp summary'Quagga — предшественник FRR, последние изменения в её репозитории датированы февралём 2018 года. Для лабораторий и простых схем её хватает, но исправлений безопасности она больше не получает.
Вариант D. Собственная сборка FRR
Почему готового пакета нет
Рецепт сборки FRR 10.4.1 в исходниках Entware есть (репозиторий entware-packages, каталог net/frr), но он перенесён из OpenWrt без адаптации: конфигурация ставится в /etc/frr, программы — в /usr/sbin и /usr/bin, скрипт запуска рассчитан на систему инициализации OpenWrt. На Keenetic стороннее ПО живёт в /opt, поэтому рецепт перед сборкой нужно доработать. В OpenWrt актуальная версия пакета уже 10.6.1.
Сборка
Сборка идёт на Linux-машине с зависимостями системы сборки OpenWrt и не меньше 7 ГБ свободного места (по wiki Entware):
git clone https://github.com/Entware/Entware.git && cd Entware
make package/symlinks
cp -iv configs/mipsel-3.4.config .config # или aarch64-3.10, mips-3.4 — по архитектуре роутера
make -j$(nproc) tools/install
make -j$(nproc) toolchain/install
make -j$(nproc) target/compileПеред сборкой самого пакета исправьте рецепт feeds/packages/net/frr/Makefile (путь внутри дерева сборки может отличаться — найдите каталог net/frr):
- в параметрах
--sysconfdirи--localstatedirзамените/etc/frrи/var/run/frrна/opt/etc/frrи/opt/var/run/frr; - в секциях установки замените
/usr/sbin,/usr/bin,/usr/libи/etc/frrна соответствующие каталоги в/opt; - скрипт запуска OpenWrt не используйте — ниже приведён свой.
Затем выберите в make menuconfig пакеты frr, frr-zebra, frr-bgpd, frr-vtysh, frr-watchfrr и соберите:
make package/frr/compileУ подпакета frr-bgpd в рецепте указана опция ядра CONFIG_TCP_MD5SIG (нужна для паролей BGP). Если он не выбирается в menuconfig, дело в этой зависимости. Работать ли паролям BGP на роутере, решает уже ядро Keenetic, а не сборка.
Готовые .ipk появятся в каталоге bin/ дерева сборки. Вместе с FRR соберётся библиотека libyang — в бинарном репозитории Entware её нет, её пакет тоже нужно скопировать на роутер. Остальные зависимости (libjson-c, libprotobuf-c, libreadline, libcap и другие) ставятся из репозитория Entware.
Установка на роутер
opkg install ./libyang_*.ipk ./frr_*.ipk ./frr-zebra_*.ipk ./frr-bgpd_*.ipk ./frr-vtysh_*.ipkFRR собирается с пользователем и группой network (--enable-user=network): если их нет в системе Entware, демоны не запустятся — создайте их или соберите с root.
Конфигурация FRR
/opt/etc/frr/frr.conf:
frr defaults traditional
hostname keenetic-bgp
log file /opt/var/log/frr/frr.log informational
service integrated-vtysh-config
!
ip prefix-list PL-LAN seq 10 permit 192.168.10.0/24
ip prefix-list PL-LAN seq 999 deny 0.0.0.0/0 le 32
!
ip prefix-list PL-IN seq 10 permit 0.0.0.0/0
ip prefix-list PL-IN seq 20 permit 10.0.0.0/8 le 24
ip prefix-list PL-IN seq 30 permit 172.16.0.0/12 le 24
ip prefix-list PL-IN seq 999 deny 0.0.0.0/0 le 32
!
route-map RM-IN permit 10
match ip address prefix-list PL-IN
!
route-map RM-OUT permit 10
match ip address prefix-list PL-LAN
!
router bgp 65010
bgp router-id 10.255.0.2
neighbor 10.255.0.1 remote-as 65001
neighbor 10.255.0.1 description upstream-vps
neighbor 10.255.0.1 timers 10 30
!
address-family ipv4 unicast
network 192.168.10.0/24
neighbor 10.255.0.1 route-map RM-IN in
neighbor 10.255.0.1 route-map RM-OUT out
exit-address-family
!
line vtyВ режиме frr defaults traditional FRR не требует политики для eBGP-соседа, но фильтры всё равно задавайте явно: они защищают сеть от ошибок на другой стороне. bgp router-id лучше указать вручную — не стоит полагаться на автоматический выбор по адресам интерфейсов роутера.
BGP анонсирует сеть из network только если такой префикс есть в таблице маршрутизации ядра:
ip route show 192.168.10.0/24Автозапуск
/opt/etc/init.d/S80frr:
#!/bin/sh
PATH=/opt/sbin:/opt/bin:/sbin:/bin:/usr/sbin:/usr/bin
RUN_DIR=/opt/var/run/frr
start() {
mkdir -p "$RUN_DIR" /opt/var/log/frr
for d in mgmtd zebra bgpd; do
pidof "$d" >/dev/null || "$d" -d -A 127.0.0.1
done
sleep 2
vtysh -b # загрузить /opt/etc/frr/frr.conf во все демоны
}
stop() {
for d in bgpd zebra mgmtd; do
pid=$(pidof "$d") && kill "$pid"
done
}
case "$1" in
start) start ;;
stop) stop ;;
restart) stop; sleep 2; start ;;
*) echo "Usage: $0 {start|stop|restart}"; exit 1 ;;
esacchmod +x /opt/etc/init.d/S80frr
/opt/etc/init.d/S80frr startmgmtd в FRR 10 — служба управления конфигурацией, её запускают вместе с zebra.
Настройка противоположной стороны (Linux с FRR)
frr defaults traditional
hostname upstream-vps
log syslog informational
service integrated-vtysh-config
!
ip prefix-list FROM-KEENETIC seq 10 permit 192.168.10.0/24
ip prefix-list FROM-KEENETIC seq 999 deny 0.0.0.0/0 le 32
!
ip prefix-list TO-KEENETIC seq 10 permit 0.0.0.0/0
ip prefix-list TO-KEENETIC seq 999 deny 0.0.0.0/0 le 32
!
router bgp 65001
bgp router-id 10.255.0.1
neighbor 10.255.0.2 remote-as 65010
neighbor 10.255.0.2 description keenetic-router
!
address-family ipv4 unicast
neighbor 10.255.0.2 prefix-list FROM-KEENETIC in
neighbor 10.255.0.2 prefix-list TO-KEENETIC out
neighbor 10.255.0.2 default-originate
exit-address-familydefault-originate отдаёт соседу маршрут по умолчанию, даже если его нет в таблице BGP самого сервера. Включите пересылку пакетов:
sysctl -w net.ipv4.ip_forward=1
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.d/99-forwarding.confПроверка
| Что проверить | BIRD | Quagga / FRR |
|---|---|---|
| Состояние сессии | birdc show protocols | vtysh -c 'show bgp summary' |
| Полученные маршруты | birdc show route protocol upstream | vtysh -c 'show ip bgp' |
| Маршруты в ядре | ip route | ip route show proto bgp (FRR) |
Нужное состояние сессии — Established.
Типичные ошибки
opkg install frr— «Unknown package». Готового FRR в Entware нет: используйте BIRD или Quagga либо соберите FRR сами.- Сессия висит в
ActiveилиConnect. Проверьте доступность соседа по TCP 179 (nc -vz 10.255.0.1 179) и межсетевой экран KeeneticOS на туннельном интерфейсе. - Сессия
Established, но маршрутов нет. Ошибка в фильтрах или prefix-list на одной из сторон. - После перезагрузки ничего не работает. Демоны стартуют только после монтирования хранилища Entware; проверьте, что накопитель подключился и скрипты в
/opt/etc/init.dзапустились. - Демон не стартует из-за пользователя. Quagga и FRR по умолчанию работают от
network— пользователь должен существовать.
Ограничения
- Маршруты вне ведома KeeneticOS. Сторонний демон пишет маршруты прямо в таблицу ядра Linux. KeeneticOS управляет своими таблицами, политиками подключений и Multi-WAN сам и эти маршруты в веб-интерфейсе не показывает. Документация Keenetic такую связку не описывает, поэтому после изменений настроек роутера проверяйте, что маршруты на месте и трафик идёт через нужный интерфейс.
- Зависимость от хранилища. Если флешка с Entware отказала или отмонтировалась, демон маршрутизации перестаёт работать вместе с ней.
- Ресурсы. Частые изменения маршрутов у соседа (flapping) нагружают слабый процессор роутера и мешают остальным его функциям.
Итог
BGP на Keenetic через Entware — рабочий инструмент для небольших распределённых сетей и лабораторий. Проще всего начать с BIRD: пакет готовый и лёгкий. Quagga подойдёт тем, кому привычен синтаксис Cisco, но проект заброшен. FRR на самом роутере возможен только через собственную сборку и остаётся вариантом для энтузиастов. Для рабочих сетей надёжнее вынести FRR на отдельную Linux-машину рядом с роутером, а Keenetic оставить подключение к интернету.
// Contact
Нужна помощь?
Свяжись со мной и я помогу решить проблему
Написать в TelegramОтвечаю в течение рабочего дня (03:00–13:00 GMT)
Или оставьте заявку здесь:
// Related