Краткое описание: инструкция по установке и запуску Docker контейнера в роутере MikroTik. В качестве роутера используется MikroTik hAP ax2, а запускаться в Docker будет контейнер с DNS сервером Pi-hole. С помощью Pi-hole будет рассмотрен вариант блокировки сайтов на уровне DNS.

Docker – это программная платформа для быстрой разработки, тестирования и развертывания приложений. Docker упаковывает приложения в стандартизованные блоки, которые называются контейнерами. Каждый контейнер включает все необходимое для работы приложения: библиотеки, системные инструменты, код и среду исполнения. Благодаря Docker можно быстро развертывать и масштабировать приложения в любой среде и сохранять уверенность в том, что код будет работать.

Настройка Docker в MikroTik

Pi-hole — это приложение для блокировки рекламы и интернет-трекеров на сетевом уровне Linux, которое действует как “DNS дыра” и, опционально, DHCP сервер, предназначенный для использования в частной сети. Pi-hole предназначен для маломощных встраиваемых устройств с сетевыми возможностями, таких как Raspberry Pi, но может быть установлен практически на любой машине Linux.

Pi-hole имеет возможность блокировать традиционную рекламу веб-сайтов, а также рекламу в нетрадиционных местах, таких как реклама смарт-телевизоров и мобильных операционных систем.

Настройка Docker в MikroTik, описание 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.

Настройка Docker в MikroTik, скачать Extra Packages

Настройка находится Files

Настройка Docker в MikroTik, установить новый пакет

Так как включение Docker в MikroTik создаёт дополнительную уязвимость, общая рекомендация – не использовать Docker в MikroTik. Поэтому шаг включения Docker усложнён, пакет Container установить можно только при физическом доступе к оборудованию.

Включить Docker в MikroTik

Настройка находится Terminal

/system/device-mode
update container=yes

Настройка Docker в MikroTik, включить использование контейнеров

Далее нужно перезагрузить MikroTik по питанию(hard reboot) или единоразово нажать кнопку Mode на корпусе устройства, в течении 5 минут.

Проверить статус включения Docker

/system/device-mode
print

Настройка Docker в MikroTik, проверить активность пакета Container

Добавить Veth интерфейс

Настройка находится Interfaces→VETH

Настройка Docker в MikroTik, добавить 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

Настройка Docker в MikroTik, создать Bridge

Настройка находится Bridge→Ports

Настройка Docker в MikroTik, добавить Veth в Bridge

Настройка находится IP→Addresses

Настройка Docker в MikroTik, задать IP адрес для Bridge

/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

Настройка Docker в MikroTik, включить NAT

Настройка Docker в MikroTik, включить NAT для подсети

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

Добавить переменные окружения(env) для Docker

Настройка находится Containers→Envs

Настройка Docker в MikroTik, добавить env

/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

Настройка Docker в MikroTik, смотрировать папку

/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

Настройка Docker в MikroTik, общие настройки

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

Запуск Docker контейнера

Настройка находится Containers

Настройка Docker в MikroTik, запуск контейнера

/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

Настройка Docker в MikroTik, проброс порта

Настройка Docker в MikroTik, проброс 80 порта

/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 в MikroTik, авторизация

Настроить Pi-hole как сервер DNS

Настройка Pi-hole в MikroTik, использовать как DNS сервер

В рамках тестового стенда Pi-hole как сервер DNS будет использоваться только на одном компьютере.

Разрешить DNS запросы в Docker

Настройка находится IP→Firewall→NAT

Настройка Pi-hole в MikroTik, пробросить DNS запросы

Настройка Pi-hole в MikroTik, пробросить DNS запросы в Docker

/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

Настройка Pi-hole в MikroTik, разрешить запросы с других подсетей

Заблокировать сайт youtube.com в MikroTik

Настройка Pi-hole в MikroTik, добавить блокировку сайтов

Результат блокировка сайта в MikroTik

Настройка Pi-hole в MikroTik, результат блокировки сайта

Стоит отменить, что ответы приходят достаточно быстро. Pi-hole можно использовать не только как блокировщик сайтов через роутер MikroTik, но и также для экономии трафика и времени при блокировании различной рекламы.

Есть вопросы или предложения по настройке Pi-hole на базе Docker в MikroTik? Активно предлагай свой вариант настройки! Оставить комментарий