Начиная с версии RouterOS v7.5 в роутерах mikrotik появилась возможность установки docker контейнеров. В данной статье мы разберемся как правильно подготовить роутер и как развернуть контейнер в RouterOS.
В роутерах mikrotik начального уровня операционной памяти для полноценной работы docker контейнеров недостаточно, мы будем устанавливать docker контейнер на виртуальном сервере с установленной RouterOS системой. У нас вы можете подобрать оптимальную конфигурацию виртуального сервера с предустановленной RouterOS .
Если вы хотите установить routerOS на свой виртуальный сервер то вам стоит ознакомиться с данной инструкцией .
Поддержка контейнеров Docker появилась в операционной системы RouterOS 7.5, если версия вашей операционной системы ниже то вам необходимо обновить ее до самой последней версии.
В стандартный набор установленных дополнений RouterOS не входит дополнение container и для того чтобы его добавить, необходимо перейти на официальный сайт mikrotik и в разделе software скачать набор дополнений Extra packages предварительно выбрав архитектуру на которой установлена RouterOS.
Для RouterOS которая установлена на виртуальный сервер это X86 .
Распаковываем скачанный архив и загружаем файл с названием container-*.*.npk в корень вашего роутера. После загрузки файла перезагружаем виртуальную машину или роутер (System — Reboot), дополнение установится автоматически.
После перезапуска RouterOS открываем новое окно терминала и выполняем команду которая активирует режим контейнеров
После выполнения данной команды нам необходимо будет еще раз перегрузить роутер, на это у нас есть 5 минут. Выполняем еще одну перезагрузку.
После перезагрузки у вас появится новый пункт меню Container .
Для каждого контейнера который будет установлен в систему нам необходимо создать виртуальный интерфейс VETH. Переходим в Interfaces — вкладка VETH.
Указываем название интерфейса, адрес и шлюз.
Команда для добавление интерфейса через терминал
Также необходимо будет создать bridge интерфейс для того чтобы подключить контейнер к сети.
Дадим название нашему bridge интерфейсу docker, для этого перейдем в раздел Interfaces и во вкладке Interface добавим новый интерфейс типа Bridge.
Укажем IP адрес интерфейса bridge 172.17.0.1/24 для этого переходим в IP — Addresses — добавляем новый адрес 172.17.0.1/24 и назначаем его интерфейсу docker.
Добавим виртуальный порт veth1 в bridge docker.
Все действия которые мы сделали выше можно выполнить с помощью даных команд в терминале.
И настроим NAT для исходящего трафика.
В качестве примера мы установим docker контейнер блокировщика рекламы и нежелательных DNS запросов PiHole.
Для правильной работы контейнера PiHole необходимо указать несколько переменных.
Переходим в Container — вкладка Envs и добавляем три переменных:
Для добавления переменных в терминале выполняем следующую команду
Добавим точки монтирования для контейнера PiHole. Переходим во вкладку Mount в Container и добавляем две точки:
disk1 — номер смонтированного диска, если у вас несколько дисков то указывайте ваш
Для добавления образа нам необходимо добавить url поиска контейнеров. Нажмем на кнопку Config и в поле Registry URL укажем https://registry-1.docker.io а в Tmp dir /pull
Для установки контейнера все готово и мы можем перейти к созданию контейнера.
Во вкладке Container нажимаем кнопку + и заполняем следующие поля:
Установить контейнер можно командой в терминале
Нажимаем apply и дожидаемся пока контейнер загрузится и статус будет stopped. После этого мы можем запускать контейнер нажав на кнопку Start.
Последнее что нам осталось — пробросить порт веб интерфейса PiHole на внешний порт нашего сервера. Замените server_ip на IP адрес вашего роутера или сервера, а в to-addresses укажите IP адрес который вы назначили docker контейнеру, а dst-port на порт который вы хотите открыть для доступа к админ панели PiHole.
После этого открываем в барузере http://server_ip:8080 и вы попадаете в админ панель PiHole.
Вводим пароль который мы указывали в переменной WEBPASSWORD и входим в админ панель.
Переходим в настройки и убедимся, что все работает.
На этом настройка docker в mikrotik routeros и разворачивание pihole завершено.
И для того чтобы использовать IP адрес вашего сервера в качестве DNS сервера, достаточно указать IP адрес контейнера с PiHole в настройках RouterOS и активировать Allow Remote Requests.
А так же добавить два правила в Firewall