Начиная с версии RouterOS v7.5 в роутерах mikrotik появилась возможность установки docker контейнеров. В данной статье мы разберемся как правильно подготовить роутер и как развернуть контейнер в RouterOS.
В роутерах mikrotik начального уровня операционной памяти для полноценной работы docker контейнеров недостаточно, мы будем устанавливать docker контейнер на виртуальном сервере с установленной RouterOS системой. У нас вы можете подобрать оптимальную конфигурацию виртуального сервера с предустановленной RouterOS.
Если вы хотите установить routerOS на свой виртуальный сервер то вам стоит ознакомиться с данной инструкцией.
Подготовка RouterOS к установке Docker контейнеров
Поддержка контейнеров Docker появилась в операционной системы RouterOS 7.5, если версия вашей операционной системы ниже то вам необходимо обновить ее до самой последней версии.
В стандартный набор установленных дополнений RouterOS не входит дополнение container и для того чтобы его добавить, необходимо перейти на официальный сайт mikrotik и в разделе software скачать набор дополнений Extra packages предварительно выбрав архитектуру на которой установлена RouterOS.
![](https://blog.unixhost.pro/wp-content/uploads/2022/10/image-4.png)
Для RouterOS которая установлена на виртуальный сервер это X86.
![](https://blog.unixhost.pro/wp-content/uploads/2022/10/telegram-cloud-photo-size-2-5384362051457105837-y-1024x651.jpg)
Распаковываем скачанный архив и загружаем файл с названием container-*.*.npk в корень вашего роутера. После загрузки файла перезагружаем виртуальную машину или роутер (System — Reboot), дополнение установится автоматически.
После перезапуска RouterOS открываем новое окно терминала и выполняем команду которая активирует режим контейнеров
/system/device-mode/update container=yes
![](https://blog.unixhost.pro/wp-content/uploads/2022/10/image-5.png)
После выполнения данной команды нам необходимо будет еще раз перегрузить роутер, на это у нас есть 5 минут. Выполняем еще одну перезагрузку.
![](https://blog.unixhost.pro/wp-content/uploads/2022/10/telegram-cloud-photo-size-2-5384362051457105863-x.jpg)
После перезагрузки у вас появится новый пункт меню Container.
Настройка сети для установки контейнера Docker
Для каждого контейнера который будет установлен в систему нам необходимо создать виртуальный интерфейс VETH. Переходим в Interfaces — вкладка VETH.
![](https://blog.unixhost.pro/wp-content/uploads/2022/10/image-6.png)
Указываем название интерфейса, адрес и шлюз.
Команда для добавление интерфейса через терминал
/interface/veth/add name=veth1 address=172.17.0.2/24 gateway=172.17.0.1
Также необходимо будет создать bridge интерфейс для того чтобы подключить контейнер к сети.
![](https://blog.unixhost.pro/wp-content/uploads/2022/10/image-7.png)
Дадим название нашему bridge интерфейсу docker, для этого перейдем в раздел Interfaces и во вкладке Interface добавим новый интерфейс типа Bridge.
![](https://blog.unixhost.pro/wp-content/uploads/2022/10/image-8.png)
Укажем IP адрес интерфейса bridge 172.17.0.1/24 для этого переходим в IP — Addresses — добавляем новый адрес 172.17.0.1/24 и назначаем его интерфейсу docker.
![](https://blog.unixhost.pro/wp-content/uploads/2022/10/image-9.png)
Добавим виртуальный порт veth1 в bridge docker.
Все действия которые мы сделали выше можно выполнить с помощью даных команд в терминале.
/interface/bridge/add name=docker
/ip/address/add address=172.17.0.1/24 interface=docker
/interface/bridge/port add bridge=docker interface=veth1
![](https://blog.unixhost.pro/wp-content/uploads/2022/10/image-10.png)
![](https://blog.unixhost.pro/wp-content/uploads/2022/10/image-11.png)
И настроим NAT для исходящего трафика.
/ip/firewall/nat/add chain=srcnat action=masquerade src-address=172.17.0.0/24
В качестве примера мы установим docker контейнер блокировщика рекламы и нежелательных DNS запросов PiHole.
Установка контейнера PiHole в RouterOS
Для правильной работы контейнера PiHole необходимо указать несколько переменных.
![](https://blog.unixhost.pro/wp-content/uploads/2022/10/image-12.png)
![](https://blog.unixhost.pro/wp-content/uploads/2022/10/image-13.png)
Переходим в Container — вкладка Envs и добавляем три переменных:
- TZ — указываем вашу временную зону
- WEBPASSWORD — пароль для доступа к панели управления PiHole
- DNSMASQ_USER — указываем root
Для добавления переменных в терминале выполняем следующую команду
/container/envs/add name=pihole_env key=TZ value="Europe/Prague"
/container/envs/add name=pihole_env key=WEBPASSWORD value="mystrongpassword"
/container/envs/add name=pihole_env key=DNSMASQ_USER value="root"
Добавим точки монтирования для контейнера PiHole. Переходим во вкладку Mount в Container и добавляем две точки:
- etc_pihole в которой указываем src = /etc с dst = /etc/pihole
- dnsmasq_pihole в которой указываем src = /etc-dnsmasq.d с dst = /etc/dnsmasq.d
disk1 — номер смонтированного диска, если у вас несколько дисков то указывайте ваш
/container/mounts/add name=etc_pihole src=/etc dst=/etc/pihole
/container/mounts/add name=dnsmasq_pihole src=/etc-dnsmasq.d dst=/etc/dnsmasq.d
![](https://blog.unixhost.pro/wp-content/uploads/2022/10/image-14.png)
Для добавления образа нам необходимо добавить url поиска контейнеров. Нажмем на кнопку Config и в поле Registry URL укажем https://registry-1.docker.io а в Tmp dir /pull
/container/config/set registry-url=https://registry-1.docker.io tmpdir=/pull
Для установки контейнера все готово и мы можем перейти к созданию контейнера.
![](https://blog.unixhost.pro/wp-content/uploads/2022/10/image-15.png)
Во вкладке Container нажимаем кнопку + и заполняем следующие поля:
- Remote Image pihole/pihole:latest
- Interface veth1
- Root dir /pihole
- Mounts dnsmasq_pihole,etc_pihole
- Envlist pihole_env
Установить контейнер можно командой в терминале
/container/add remote-image=pihole/pihole:latest interface=veth1 root-dir=/pihole mounts=dnsmasq_pihole,etc_pihole envlist=pihole_env
Нажимаем apply и дожидаемся пока контейнер загрузится и статус будет stopped. После этого мы можем запускать контейнер нажав на кнопку Start.
Последнее что нам осталось — пробросить порт веб интерфейса PiHole на внешний порт нашего сервера. Замените server_ip на IP адрес вашего роутера или сервера, а в to-addresses укажите IP адрес который вы назначили docker контейнеру, а dst-port на порт который вы хотите открыть для доступа к админ панели PiHole.
/ip firewall nat
add action=dst-nat chain=dstnat dst-address=server_ip dst-port=8080 protocol=tcp to-addresses=172.17.0.2 to-ports=80
![](https://blog.unixhost.pro/wp-content/uploads/2022/10/image-18.png)
После этого открываем в барузере http://server_ip:8080 и вы попадаете в админ панель PiHole.
Вводим пароль который мы указывали в переменной WEBPASSWORD и входим в админ панель.
![](https://blog.unixhost.pro/wp-content/uploads/2022/10/image-19.png)
Переходим в настройки и убедимся, что все работает.
На этом настройка docker в mikrotik routeros и разворачивание pihole завершено.
![](https://blog.unixhost.pro/wp-content/uploads/2022/10/image-21.png)
И для того чтобы использовать IP адрес вашего сервера в качестве DNS сервера, достаточно указать IP адрес контейнера с PiHole в настройках RouterOS и активировать Allow Remote Requests.
А так же добавить два правила в Firewall
/ip firewall filter add action=accept chain=input
/ip firewall nat add action=masquerade chain=srcnat