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

Установка docker в mikrotik RouterOS

Начиная с версии 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.

Для RouterOS которая установлена на виртуальный сервер это X86.

Распаковываем скачанный архив и загружаем файл с названием container-*.*.npk в корень вашего роутера. После загрузки файла перезагружаем виртуальную машину или роутер (System — Reboot), дополнение установится автоматически.

После перезапуска RouterOS открываем новое окно терминала и выполняем команду которая активирует режим контейнеров

/system/device-mode/update container=yes

После выполнения данной команды нам необходимо будет еще раз перегрузить роутер, на это у нас есть 5 минут. Выполняем еще одну перезагрузку.

После перезагрузки у вас появится новый пункт меню Container.

Настройка сети для установки контейнера Docker

Для каждого контейнера который будет установлен в систему нам необходимо создать виртуальный интерфейс VETH. Переходим в Interfaces — вкладка VETH.

Указываем название интерфейса, адрес и шлюз.

Команда для добавление интерфейса через терминал

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

Также необходимо будет создать bridge интерфейс для того чтобы подключить контейнер к сети.

Дадим название нашему bridge интерфейсу docker, для этого перейдем в раздел Interfaces и во вкладке Interface добавим новый интерфейс типа Bridge.

Укажем IP адрес интерфейса bridge 172.17.0.1/24 для этого переходим в IP — Addresses — добавляем новый адрес 172.17.0.1/24 и назначаем его интерфейсу docker.

Добавим виртуальный порт 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

И настроим NAT для исходящего трафика.

/ip/firewall/nat/add chain=srcnat action=masquerade src-address=172.17.0.0/24

В качестве примера мы установим docker контейнер блокировщика рекламы и нежелательных DNS запросов PiHole.

Установка контейнера PiHole в RouterOS

Для правильной работы контейнера PiHole необходимо указать несколько переменных.

Переходим в 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

Для добавления образа нам необходимо добавить url поиска контейнеров. Нажмем на кнопку Config и в поле Registry URL укажем https://registry-1.docker.io а в Tmp dir /pull

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

Для установки контейнера все готово и мы можем перейти к созданию контейнера.

Во вкладке 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

После этого открываем в барузере http://server_ip:8080 и вы попадаете в админ панель PiHole.

Вводим пароль который мы указывали в переменной WEBPASSWORD и входим в админ панель.

Переходим в настройки и убедимся, что все работает.

На этом настройка docker в mikrotik routeros и разворачивание pihole завершено.

И для того чтобы использовать 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