Запускаем контейнеры докер на роутере Mikrotik
Mikrotik с версии RouterOS 7.5 поддерживает контейнеры докер
Запустим что-нибудь интересное, например AdguardHome
Для начала скачиваем файл Extra packages
для своей архитектуры с сайта Mikrotik.
Разархивируем и файл container-7.X.npk
закидываем на роутер в меню Files
.
Перезагружаем роутер.
Функционал контейнеров добавлен, но еще надо его активировать.
Для этого в терминале роутера выполняем команду
1
/system/device-mode/update container=yes
После этой команды в течении 5 минут необходимо выполнить cold reboot
роутера. Сold reboot
- это выдернуть шнур питания из розетки или нажать кнопку reset
на роутере. В моем случае выдергивание из розетки не помогло и пришлось вытаскивать роутер из стойки и жать кнопку reset
.
Появится меню container
:
В линуксе докер сам создает необходимую себе инфраструктуру: сеть, интерфейсы, адреса, правила файрвола. Здесь же придется все прописывать вручную..
Создадим bridge
для контейнеров
1
/interface/bridge/add name=containers
Назначим ему внутренний адрес
1
/ip/address/add address=172.17.0.1/24 interface=containers
Создадим виртуальный сетевой интерфейс для нашего будущего контейнера и назначим ему адрес 172.17.0.2
1
/interface/veth/add name=veth1 address=172.17.0.2/24 gateway=172.17.0.1
Добавим интерфейс будущего контейнера в созданный bridge
1
/interface/bridge/port add bridge=containers interface=veth1
Для каждого контейнера надо создавать свой интерфейс
veth
c новым адресом и добавлять их вbridge
Внутренней памяти роутера скорее всего окажется недостаточно для запуска большинства контейнеров, поэтому рекомендую использовать флешку или внешний диск. Их необходимо отформатировать самостоятельно, либо через меню
System -> Disk -> Format Drive
Переходим к настройке контейнера Container -> Config
1
/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
1
2
/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
1
/container/add remote-image=adguard/adguardhome:latest interface=veth1 root-dir=usb1-part1/adguard/root mounts=adguard-conf,adguard-work
Ждем когда контейнер загрузится и получит статус stopped
, после этого запускаем его кнопкой Start
или командой
1
/container/start 0
Осталось перебросить порт с роутера на вирутальный порт нашего контейнера
1
2
/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
, чтобы не переписывать предыдущее правило
И укажем роутеру использовать AdGuardHome
в качестве DNS-сервера
1
/ip dns set servers=172.17.0.2
Плюсы
- С помощью контейнеров можем бесконечно (в пределах аппаратных ресурсов) расширять функционал роутера
- Можем вырезать рекламу с помощью черных списков
AdGuardHome
Минусы
- В
AdGuardHome
мы увидим только одного клиента, собственно наш роутер с адресом172.17.0.1
, не получится настраивать доступ к сайтам для отдельных клиентов сети При перезагрузке не факт, что заработает..
У меня при отключении электричества, контейнеры отказались запускаться. Первый раз получилось пересоздать их вручную, второй раз - не получилось ничего. Учитывая пункт 1, решать пункт 2 я не стал.
Хорошая попытка Mikrotik - но нет
Технология докер контейнеров на RouterOS для меня лично отправляется на полку. Может когда-нибудь попробую еще раз. В OPNsense к примеру, функционал AdGuardHome
добавляется как плагин. Все, оно сразу начинает работать, никаких cold reboot
или ресетов, никаких бриджей и виртуальных интерфейсов, реестров и точек монтирования, и AdGuardHome
видит всех внутренних клиентов сети.