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

Запускаем контейнеры докер на роутере Mikrotik

·484 слов·3 минут
Андрей Двуреченский
Автор
Андрей Двуреченский

Mikrotik с версии RouterOS 7.5 поддерживает контейнеры докер
#

Запустим что-нибудь интересное, например AdguardHome

Для начала скачиваем файл Extra packages для своей архитектуры с сайта Mikrotik.

Разархивируем и файл container-7.X.npk закидываем на роутер в меню Files.

Перезагружаем роутер.

Функционал контейнеров добавлен, но еще надо его активировать.

Для этого в терминале роутера выполняем команду

/system/device-mode/update container=yes

После этой команды в течении 5 минут необходимо выполнить cold reboot роутера. Сold reboot - это выдернуть шнур питания из розетки или нажать кнопку reset на роутере. В моем случае выдергивание из розетки не помогло и пришлось вытаскивать роутер из стойки и жать кнопку reset.

Появится меню container:

В линуксе докер сам создает необходимую себе инфраструктуру: сеть, интерфейсы, адреса, правила файрвола. Здесь же придется все прописывать вручную..

Создадим bridge для контейнеров

/interface/bridge/add name=containers

Назначим ему внутренний адрес

/ip/address/add address=172.17.0.1/24 interface=containers

Создадим виртуальный сетевой интерфейс для нашего будущего контейнера и назначим ему адрес 172.17.0.2

/interface/veth/add name=veth1 address=172.17.0.2/24 gateway=172.17.0.1

Добавим интерфейс будущего контейнера в созданный bridge

/interface/bridge/port add bridge=containers interface=veth1

Для каждого контейнера надо создавать свой интерфейс veth c новым адресом и добавлять их в bridge

Внутренней памяти роутера скорее всего окажется недостаточно для запуска большинства контейнеров, поэтому рекомендую использовать флешку или внешний диск. Их необходимо отформатировать самостоятельно, либо через меню System -> Disk -> Format Drive

Переходим к настройке контейнера Container -> Config

/container/config/set registry-url=https://registry-1.docker.io tmpdir=usb1-part1/pull

Здесь https://registry-1.docker.io реестр откуда будут скачиваться образы контейнеров, usb1-part1/pull - директория на флешке куда они будут скачиваться.

Для контейнера AdGuardHome смонтируем с флешки две папки work и conf

/container/mounts/add name=adguard-conf src=usb1-part1/adguard/conf dst=/opt/adguardhome/conf
/container/mounts/add name=adguard-work src=usb1-part1/adguard/work dst=/opt/adguardhome/work

Запускаем сам контейнер AdGuardHome

/container/add remote-image=adguard/adguardhome:latest interface=veth1 root-dir=usb1-part1/adguard/root mounts=adguard-conf,adguard-work

Ждем когда контейнер загрузится и получит статус stopped, после этого запускаем его кнопкой Start или командой

/container/start 0

Осталось перебросить порт с роутера на вирутальный порт нашего контейнера

/ip firewall nat 
add action=dst-nat chain=dstnat dst-address=192.168.88.1 dst-port=3000 protocol=tcp to-addresses=172.17.0.2 to-ports=3000

Теперь зайдя по адресу 192.168.88.1:3000 мы увидим настройку AdGuardHome

Советую порт, на которм будет доступна панель управления AdGuardHome оставить 3000, чтобы не переписывать предыдущее правило {: .prompt-tip }

И укажем роутеру использовать AdGuardHome в качестве DNS-сервера

/ip dns set servers=172.17.0.2

Плюсы
#

  • С помощью контейнеров можем бесконечно (в пределах аппаратных ресурсов) расширять функционал роутера
  • Можем вырезать рекламу с помощью черных списков AdGuardHome

Минусы
#

  • В AdGuardHome мы увидим только одного клиента, собственно наш роутер с адресом 172.17.0.1, не получится настраивать доступ к сайтам для отдельных клиентов сети

  • При перезагрузке не факт, что заработает..

    У меня при отключении электричества, контейнеры отказались запускаться. Первый раз получилось пересоздать их вручную, второй раз - не получилось ничего. Учитывая пункт 1, решать пункт 2 я не стал.

Хорошая попытка Mikrotik - но нет
#

Технология докер контейнеров на RouterOS для меня лично отправляется на полку. Может когда-нибудь попробую еще раз. В OPNsense к примеру, функционал AdGuardHome добавляется как плагин. Все, оно сразу начинает работать, никаких cold reboot или ресетов, никаких бриджей и виртуальных интерфейсов, реестров и точек монтирования, и AdGuardHome видит всех внутренних клиентов сети.