OpenWRT
Требования
- OpenWRT 19.07 и выше
- Внешнее хранилище (USB или extroot) - рекомендуется, так как на внутренней памяти роутера может не хватить места
На роутерах с OpenWRT внутренняя память ограничена (overlay). Если доступно менее 2 МБ, установщик выводит предупреждение. Рекомендуется extroot или USB-накопитель.
Инструкция по настройке extroot: https://openwrt.org/docs/guide-user/additional-software/extroot_configuration
Установка
По SSH на роутере:
curl -fsSL https://raw.githubusercontent.com/DanielLavrushin/b4/main/install.sh | sh
Если curl не установлен:
opkg update && opkg install curl ca-certificates
Или через wget:
wget -qO- https://raw.githubusercontent.com/DanielLavrushin/b4/main/install.sh | sh
Стандартный wget в OpenWRT (BusyBox) не поддерживает HTTPS. Полная версия устанавливается так:
opkg update && opkg install wget-ssl ca-certificates
Модули ядра
Установщик пытается загрузить необходимые модули автоматически. Если при запуске появляется предупреждение [WARN] No netfilter queue module available или ошибки, связанные с nftables, модули нужно установить вручную.
OpenWRT 24.x+ (apk)
apk add kmod-nft-queue kmod-nft-nat kmod-nft-compat kmod-nft-conntrack
OpenWRT 23.x и ниже (opkg)
opkg update
opkg install kmod-nft-queue kmod-nft-conntrack nftables-json coreutils-nohup
Для совсем старых версий (без nftables):
opkg install kmod-nfnetlink-queue kmod-ipt-nfqueue iptables-mod-nfqueue iptables-mod-conntrack-extra
Загрузка модулей
После установки модулей их может потребоваться загрузить вручную:
modprobe nft_queue
modprobe nft_ct
modprobe xt_connbytes
Если команда выполняется без вывода - модуль загружен успешно.
Управление сервисом
/etc/init.d/b4 enable # автозапуск при загрузке
/etc/init.d/b4 start
/etc/init.d/b4 stop
/etc/init.d/b4 restart
Сервис b4 работает как системный демон - он продолжает работать после закрытия SSH-сессии (PuTTY, терминал и т.д.). Ручной screen или nohup не нужен.
Пути
При наличии /opt (extroot/USB):
| Что | Где |
|---|---|
| Бинарник | /opt/bin/b4 |
| Конфигурация | /opt/etc/b4/b4.json |
Без внешнего хранилища (fallback):
| Что | Где |
|---|---|
| Бинарник | /usr/bin/b4 |
| Конфигурация | /etc/b4/b4.json |
Веб-интерфейс
После запуска b4 доступен по адресу http://<IP роутера>:7000. Например, при IP роутера 192.168.1.1 адрес в браузере:
http://192.168.1.1:7000
LuCI-приложение
Существует сторонний пакет luci-app-b4, который добавляет управление b4 в интерфейс LuCI. Проект находится в стадии alpha и покрывает часть функций. Основной веб-интерфейс b4 (порт 7000) по-прежнему доступен.
Устранение неполадок
Service crashed / сервис не запускается
- Модули ядра должны быть установлены и загружены (см. раздел «Модули ядра» выше)
- Логи:
logread | grep b4
Error: Could not process rule
Если b4 вылетает с ошибкой при добавлении правил в цепочку, возможно остались «битые» таблицы от предыдущего неудачного запуска. Их очистка:
nft delete table inet b4_mangle 2>/dev/null
После этого b4 запускается заново:
/etc/init.d/b4 restart
Низкая скорость / тормозит видео
Стоит проверить настройку Software flow offloading в разделе Network → Firewall, в обоих положениях - на некоторых устройствах она влияет на производительность b4.
Как совместить flow offloading и b4
Flow offloading переводит установленное соединение на быстрый путь, минуя хуки netfilter, с которыми работает b4: при включённом offloading b4 запущен, но трафика не видит. На слабом железе выключение offloading заметно снижает пропускную способность.
b4 разбирает только первые пакеты соединения (по умолчанию 19 для TCP и 8 для UDP, параметры queue.tcp_conn_bytes_limit и queue.udp_conn_bytes_limit), поэтому offloading можно отложить до момента, когда b4 уже отработал. В файле /usr/share/firewall4/templates/ruleset.uc нужная строка:
meta l4proto { tcp, udp } flow offload @ft;
Она заменяется на:
meta l4proto { tcp, udp } ct original packets ge 40 flow offload @ft;
Затем файрвол перезапускается:
fw4 restart
На что обратить внимание:
- Порог должен оставаться выше лимитов пакетов, заданных в b4. Если поднять
tcp_conn_bytes_limitвыше порога, соединение уйдёт на быстрый путь раньше, чем b4 с ним закончит. ct original packetsчитает счётчики conntrack. Еслиsysctl net.netfilter.nf_conntrack_acctвозвращает0, счётчик остаётся нулевым, правило не срабатывает и offloading не включается вообще.- Сеты с включённым Duplicate для TCP разбираются на протяжении всего соединения, для них не подойдёт никакой порог.
- Файл принадлежит пакету
firewall4и перезаписывается при обновлении пакета и при sysupgrade.
Системная диагностика (Настройки -> Информация о системе и экран диагностики установщика) показывает найденный порог и сравнивает его с лимитами b4.