Инструкция по установке и запуску Docker контейнера в роутере MikroTik. Для Docker контейнера будут созданы отдельные ENV, монтироваться диск(том) и пробрасываться порты для доступа с локальной сети. Схема работы с Docker будет приближена к принципам работы с Docker Compose. В качестве роутера используется MikroTik hAP ax2, а запускаться в Docker будет контейнер с DNS сервером Pi-hole. С помощью Pi-hole будет рассмотрен вариант блокировки сайтов на уровне DNS.
Docker – это программная платформа для быстрой разработки, тестирования и развертывания приложений. Docker упаковывает приложения в стандартизованные блоки, которые называются контейнерами. Каждый контейнер включает все необходимое для работы приложения: библиотеки, системные инструменты, код и среду исполнения. Благодаря Docker можно быстро развертывать и масштабировать приложения в любой среде и сохранять уверенность в том, что код будет работать.
Pi-hole — это приложение для блокировки рекламы и интернет-трекеров на сетевом уровне Linux, которое действует как «DNS дыра» и, опционально, DHCP сервер, предназначенный для использования в частной сети. Pi-hole предназначен для маломощных встраиваемых устройств с сетевыми возможностями, таких как Raspberry Pi, но может быть установлен практически на любой машине Linux.
Pi-hole имеет возможность блокировать традиционную рекламу веб-сайтов, а также рекламу в нетрадиционных местах, таких как реклама смарт-телевизоров и мобильных операционных систем.
Настройка Docker на роутере MikroTik
Как для специалиста, который использует Docker в повседневной работе, возможность использовать(запускать контейнеры) Docker на роутере MikroTik оказалась очень полезной функцией. Можно запускать как и реальные сервисы так и использовать MikroTik как альтернативу Docker Compose. Контейнеры можно объединять в общий Bridge, подкидывать в них конфигурационные файлы или просто монтировать том(volume).
В качестве решений для запуска Docker в MikroTik могут выступать небольшие сайты(WordPress, NextCloud), прокси сервера(Nginx) и любые другие приложения, которые запускаются на Linux(Ubuntu, CentOS).
Поддержка Docker в MikroTik появилась в RouterOS начиная с версии 7.5, поэтому если текущая версия ниже, то следует обновить RouterOS. На тестовом стенде будет использоваться версия 7.12
Установка пакета Container
Этот шаг состоит из нескольких небольших действий:
- перейти на сайт mikrotik.com в раздел Sofware;
- скачать Extra packeges для соответствующего типа CPU(к примеру X86);
- загрузить пакет Container на роутер и перезагрузить;
- Включить Docker в MikroTik.
Настройка находится Files
Так как включение Docker в MikroTik создаёт дополнительную уязвимость, общая рекомендация — не использовать Docker в MikroTik. Поэтому шаг включения Docker усложнён, пакет Container установить можно только при физическом доступе к оборудованию.
Включить Docker в MikroTik
Настройка находится Terminal
/system/device-mode update container=yes
Далее нужно перезагрузить MikroTik по питанию(hard reboot) или единоразово нажать кнопку Mode на корпусе устройства, в течении 5 минут.
Проверить статус включения Docker
/system/device-mode print
Добавить Veth интерфейс
Настройка находится Interfaces→VETH
/interface veth add address=192.168.254.2/24 gateway=192.168.254.1 gateway6="" name=Veth-Pihole
где Gateway это будущий IP адрес Bridge с VETH интерфейсом.
Добавить Bridge для Docker
Настройка находится Bridge→Bridge
Настройка находится Bridge→Ports
Настройка находится IP→Addresses
/interface bridge add admin-mac=02:F1:38:46:46:E2 auto-mac=no name=Bridge-Docker /interface bridge port add bridge=Bridge-Docker interface=Veth-Pihole /ip address add address=192.168.254.1/24 interface=Bridge-Docker network=192.168.254.0
Включить NAT для Docker
Настройка находится IP→Firewall→NAT
/ip firewall nat add action=masquerade chain=srcnat src-address=192.168.254.0/24
Добавить переменные окружения(env) для Docker
Настройка находится Containers→Envs
/container envs add key=TZ name=pihole_env value=Europe/Kyiv add key=WEBPASSWORD name=pihole_env value=10203040 add key=DNSMASQ_USER name=pihole_env value=root
Смонтировать том(volume) в Docker
Настройка находится Containers→Mounts
/container mounts add dst=/etc/pihole name=etc_pihole src=/slot1/etc add dst=/etc/dnsmasq.d name=dnsmasq_pihole src=/slot1/etc-dnsmasq.d
Общие настройки Docker
Настройка находится Containers→Config
/container config set registry-url=https://registry-1.docker.io tmpdir=/slot1/pull
Запуск Docker контейнера
Настройка находится Containers
/container add remote-image=pihole/pihole:latest interface=Veth-Pihole root-dir=/slot1/pihole mounts=dnsmasq_pihole,etc_pihole envlist=pihole_env
После добавление нового Docker контейнера в MikroTik происходит скачивание образа, его разархивирование и Docker контейнер переходит в статус «stopped«. Для запуска контейнера нужно нажать кнопку «Start«. Успешный запуск Docker контейнера будет сопровождаться статусом «running«.
Проброс порта для Docker
Настройка находится IP→Firewall→NAT
/ip firewall nat add action=dst-nat chain=dstnat dst-address=192.168.5.254 dst-port=8080 \ protocol=tcp to-addresses=192.168.254.2 to-ports=80
Настройка Pi-hole в MikroTik Docker
Для входа в настройки Pi-hole можно воспользоваться ссылкой http://192.168.5.254:8080/admin и ввести учётные данные, которые были определены в Containers→Envs при настройке пакета Container.
192.168.5.254 это IP адрес MikroTik.
Настроить Pi-hole как сервер DNS
В рамках тестового стенда Pi-hole как сервер DNS будет использоваться только на одном компьютере.
Разрешить DNS запросы в Docker
Настройка находится IP→Firewall→NAT
/ip firewall nat add action=dst-nat chain=dstnat dst-address=192.168.5.254 dst-port=53 \ protocol=udp to-addresses=192.168.254.2
Ошибка Pi-hole
Но при подключении Pi-hole, как сервер DNS, не обрабатывал запросы, а в логах была ошибка «Ignoring query from non-local network«, которая решается настройкой «Permit all origins»
Заблокировать сайт youtube.com в MikroTik
Результат блокировка сайта в MikroTik
Стоит отменить, что ответы приходят достаточно быстро. Pi-hole можно использовать не только как блокировщик сайтов через роутер MikroTik, но и также для экономии трафика и времени при блокировании различной рекламы.
День добрый, Docker контейнер: pihole работает ? Я установил по Вашей статье и у меня ошибку выдал
в статусе: не runing a error