Перейти к основному содержимому

MikroTik (RouterOS 7.x)

b4 запускается как контейнер на MikroTik RouterOS 7.x.

Требования

  • RouterOS версии 7.21.1 и выше
  • Архитектура ARM64 или AMD64
  • Подключённый внешний накопитель (Flash/SSD/HDD), отформатированный в Ext4
warning

Контейнеры на MikroTik требуют внешний накопитель - внутренней памяти роутера недостаточно.

Параметры примера

В руководстве используются следующие значения. Замените на свои:

ПараметрЗначение
Сеть моста192.168.210.0/24
Шлюз моста192.168.210.1
Имя мостаbridge-docker
IP контейнера192.168.210.10
Имя интерфейсаB4
Сеть LAN192.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

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

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

Решение проблем

Контейнер не запускается:

  1. Проверьте статус: /container print
  2. Смотрите логи: /log print where topics~"container"
  3. Убедитесь, что диск отформатирован в Ext4

Нет доступа к веб-интерфейсу:

  1. Проверьте, что контейнер запущен: /container print
  2. Проверьте связность: /ping 192.168.210.10

Трафик не перенаправляется:

  1. Проверьте список: /ip firewall address-list print where list=b4users
  2. Проверьте mangle: /ip firewall mangle print
  3. Проверьте маршрут: /ip route print where routing-table=to_b4