MikroTik (RouterOS 7.x)
b4 запускается как контейнер на MikroTik RouterOS 7.x.
Требования
- RouterOS версии 7.21.1 и выше
- Архитектура ARM64 или AMD64
- Подключённый внешний накопитель (Flash/SSD/HDD), отформатированный в Ext4
Контейнеры на MikroTik требуют внешний накопитель - внутренней памяти роутера недостаточно.
Параметры примера
В руководстве используются следующие значения. Замените на свои:
| Параметр | Значение |
|---|---|
| Сеть моста | 192.168.210.0/24 |
| Шлюз моста | 192.168.210.1 |
| Имя моста | bridge-docker |
| IP контейнера | 192.168.210.10 |
| Имя интерфейса | B4 |
| Сеть LAN | 192.168.100.0/24 |
| DNS-сервер | 192.168.100.1 |
| Таблица маршрутизации | to_b4 |
| Диск | /usb1 |
| Список клиентов | b4users |
Шаг 1: Мост
Создайте мост для Docker-сети:
/interface/bridge add name=bridge-docker port-cost-mode=short
/ip/address add address=192.168.210.1/24 interface=bridge-docker network=192.168.210.0
Шаг 2: Интерфейс
Создайте виртуальный Ethernet-интерфейс и подключите к мосту:
/interface/veth add address=192.168.210.10/24 gateway=192.168.210.1 name=B4
/interface/bridge/port add bridge=bridge-docker interface=B4
Шаг 3: Маршрутизация
Создайте таблицу маршрутизации и маршрут через контейнер:
/routing table add disabled=no fib name=to_b4
/ip route add check-gateway=ping gateway=192.168.210.10 routing-table=to_b4
Шаг 4: Маркировка трафика
Перенаправьте трафик клиентов из списка b4users через контейнер:
/ip firewall mangle add chain=prerouting action=mark-connection \
new-connection-mark=b4_connections passthrough=yes connection-state=new \
dst-address-type=!local src-address-list=b4users in-interface-list=LAN \
place-before=0
/ip firewall mangle add chain=prerouting action=mark-routing \
new-routing-mark=to_b4 passthrough=no connection-mark=b4_connections \
in-interface-list=LAN log=no place-before=1
FastTrack обходит правила mangle. Ограничьте его немаркированными соединениями:
/ip firewall filter set [find action=fasttrack-connection] connection-mark=no-mark
Шаг 5: Точки монтирования
/container/mounts add name=b4_etc src=/usb1/docker/b4-mounts/etc dst=/opt/etc/b4
Убедитесь, что директория /usb1/docker/b4-mounts/etc существует на диске.
Шаг 6: Запуск контейнера
Настройте реестр:
/container/config set registry-url=https://registry-1.docker.io tmpdir=/usb1/docker/pull
Создайте и запустите контейнер:
/container add remote-image=lavrushin/b4:latest interface=B4 \
root-dir=/usb1/docker/b4-mikrotik mounts=b4_etc \
cmd="--config /opt/etc/b4/b4.json" start-on-boot=yes \
logging=yes dns=192.168.100.1
После загрузки образа:
/container start [find tag~"b4"]
Шаг 7: Добавление клиентов
Добавьте устройства в адресный список b4users:
/ip firewall address-list add list=b4users address=192.168.100.50
/ip firewall address-list add list=b4users address=192.168.100.51
Веб-интерфейс
После запуска контейнера: http://192.168.210.10:7000
Обновление
/container stop [find tag~"b4"]
/container remove [find tag~"b4"]
/container add remote-image=lavrushin/b4:latest interface=B4 \
root-dir=/usb1/docker/b4-mikrotik mounts=b4_etc \
cmd="--config /opt/etc/b4/b4.json" start-on-boot=yes \
logging=yes dns=192.168.100.1
Конфигурация хранится на точке монтирования и сохраняется при пересоздании контейнера.
Решение проблем
Контейнер не запускается:
- Проверьте статус:
/container print - Смотрите логи:
/log print where topics~"container" - Убедитесь, что диск отформатирован в Ext4
Нет доступа к веб-интерфейсу:
- Проверьте, что контейнер запущен:
/container print - Проверьте связность:
/ping 192.168.210.10
Трафик не перенаправляется:
- Проверьте список:
/ip firewall address-list print where list=b4users - Проверьте mangle:
/ip firewall mangle print - Проверьте маршрут:
/ip route print where routing-table=to_b4