Установка AdGuard Home в контейнере на MikroTik RouterOS 7
AdGuard Home — локальный DNS-сервер, который позволяет блокировать рекламу, трекеры, вредоносные и нежелательные домены сразу для всей домашней сети.
Если ваш MikroTik поддерживает Container, отдельный сервер, Raspberry Pi или виртуальная машина для AdGuard Home не нужны — его можно запустить непосредственно на роутере.
Схема работы будет примерно такой:
Код: Выделить всё
Компьютеры / телефоны / Smart TV|vMikroTik|vAdGuard Home(Container)|vUpstream DNSCloudflare / Google / DoH2. Что потребуется
Перед установкой необходимо:
- MikroTik с RouterOS 7;
- архитектура устройства, поддерживающая Container;
- установленный пакет container;
- USB-накопитель, SSD или другое хранилище;
- доступ MikroTik к интернету;
- доступ к терминалу RouterOS через WinBox, WebFig или SSH.
Не рекомендуется хранить контейнер AdGuard Home во внутренней Flash-памяти роутера. AdGuard ведёт статистику, журналы DNS-запросов и периодически записывает данные на диск.
Лучше использовать USB-накопитель или SSD.
Проверить архитектуру и версию RouterOS:
Код: Выделить всё
/system resource print/system package printКод: Выделить всё
containerНа актуальных версиях RouterOS разрешаем использование контейнеров:
Код: Выделить всё
/system/device-mode/update container=yesСледуйте сообщению в терминале — в зависимости от модели потребуется нажать кнопку Reset/Mode либо выполнить другое физическое подтверждение.
После этого проверяем:
Код: Выделить всё
/system/device-mode/printКод: Выделить всё
container: yesПосмотрим доступные диски:
Код: Выделить всё
/disk print/file printКод: Выделить всё
usb1Например:
Код: Выделить всё
usb1disk1usb2sata1Для контейнеров желательно использовать файловую систему ext4.
[warning]Форматирование полностью удалит данные с выбранного накопителя. Не форматируйте диск, пока не убедитесь, что выбрали правильное устройство.[/warning]
5. Настраиваем Container Registry
Укажем Docker Hub как источник образов:
Код: Выделить всё
/container/config/set registry-url=https://registry-1.docker.io tmpdir=/usb1/tmpПроверяем:
Код: Выделить всё
/container/config/printКонтейнеру потребуется собственный VETH-интерфейс.
В этом примере используем отдельную сеть:
Код: Выделить всё
172.18.0.0/24Код: Выделить всё
172.18.0.1Код: Выделить всё
172.18.0.2Код: Выделить всё
/interface/veth/add name=veth-adguard address=172.18.0.2/24 gateway=172.18.0.1Код: Выделить всё
/interface/bridge/add name=bridge-containers/interface/bridge/port/add bridge=bridge-containers interface=veth-adguardКод: Выделить всё
/ip/address/add address=172.18.0.1/24 interface=bridge-containersКод: Выделить всё
/interface/veth/print/ip/address/printЕсли стандартное правило masquerade уже распространяется на эту сеть, дополнительное правило может не понадобиться.
В противном случае добавляем:
Код: Выделить всё
/ip/firewall/nat/add chain=srcnat src-address=172.18.0.0/24 action=masquerade comment="Containers Internet"8. Создаём постоянное хранилище AdGuard Home
AdGuard Home использует два важных каталога:
Код: Выделить всё
/opt/adguardhome/conf/opt/adguardhome/workЧтобы они не исчезали при пересоздании контейнера, подключим их через RouterOS Mount.
Создаём Mount для конфигурации:
Код: Выделить всё
/container/mounts/add name=MOUNT_AGH_CONF src=/usb1/containers/adguard-conf dst=/opt/adguardhome/confКод: Выделить всё
/container/mounts/add name=MOUNT_AGH_WORK src=/usb1/containers/adguard-work dst=/opt/adguardhome/workКод: Выделить всё
/container/mounts/printКод: Выделить всё
MOUNT_AGH_CONFMOUNT_AGH_WORKИспользуем официальный Docker-образ:
Код: Выделить всё
adguard/adguardhome:latestКод: Выделить всё
/container/add remote-image=adguard/adguardhome:latest interface=veth-adguard root-dir=/usb1/containers/adguard-root mounts=MOUNT_AGH_CONF,MOUNT_AGH_WORK logging=yes start-on-boot=yesСкачивание и распаковка образа на MikroTik могут занять некоторое время. Особенно долго это происходит на слабых моделях и медленных USB-накопителях.
Следить за процессом можно командами:
Код: Выделить всё
/container/print/log/printКод: Выделить всё
/container/printПосмотрим номер контейнера:
Код: Выделить всё
/container/printКод: Выделить всё
/container/start 0Проверяем:
Код: Выделить всё
/container/printКод: Выделить всё
runningКод: Выделить всё
/log/printПри первом запуске AdGuard Home запускает мастер первоначальной настройки на TCP-порту:
Код: Выделить всё
3000Код: Выделить всё
http://172.18.0.2:3000Никакой Docker-style проброс портов в данном варианте не нужен.
Контейнер имеет собственный IP:
Код: Выделить всё
172.18.0.212. Настраиваем мастер AdGuard Home
В мастере первоначальной настройки выбираем интерфейс прослушивания.
Для DNS можно использовать:
Код: Выделить всё
All interfacesКод: Выделить всё
53Создаём:
- имя администратора;
- надёжный пароль.
13. Настраиваем Upstream DNS
Открываем:
Settings → DNS settings
В качестве обычных DNS, например:
Код: Выделить всё
1.1.1.11.0.0.1Например Cloudflare:
Код: Выделить всё
https://cloudflare-dns.com/dns-query14. Настраиваем MikroTik DHCP
Теперь необходимо сообщить клиентам локальной сети, что DNS-сервер находится по адресу:
Код: Выделить всё
172.18.0.2Код: Выделить всё
/ip/dhcp-server/network/printКод: Выделить всё
192.168.88.0/24Код: Выделить всё
/ip/dhcp-server/network/set [find address="192.168.88.0/24"] dns-server=172.18.0.2Код: Выделить всё
192.168.88.0/24После этого клиентам потребуется обновить DHCP lease.
Самый простой вариант — отключить и снова включить Wi-Fi/сетевой интерфейс.
В Windows можно выполнить:
Код: Выделить всё
ipconfig /releaseipconfig /renewКод: Выделить всё
ipconfig /allКод: Выделить всё
172.18.0.2При необходимости можно указать AdGuard Home в качестве DNS для самого MikroTik:
Код: Выделить всё
/ip/dns/set servers=172.18.0.2Например, если AdGuard использует MikroTik как Upstream DNS, а MikroTik одновременно использует AdGuard, получится:
Код: Выделить всё
MikroTik → AdGuard → MikroTik → AdGuard → ...Например:
Код: Выделить всё
AdGuard Home|+--> Cloudflare|+--> Google|+--> Quad9Этот пункт необязательный.
Некоторые устройства могут игнорировать DNS, полученный через DHCP, и использовать, например:
Код: Выделить всё
8.8.8.81.1.1.1Например, для LAN:
Код: Выделить всё
192.168.88.0/24Код: Выделить всё
/ip/firewall/nat/add chain=dstnat src-address=192.168.88.0/24 protocol=udp dst-port=53 dst-address=!172.18.0.2 action=dst-nat to-addresses=172.18.0.2 to-ports=53 comment="Force DNS UDP to AdGuard"/ip/firewall/nat/add chain=dstnat src-address=192.168.88.0/24 protocol=tcp dst-port=53 dst-address=!172.18.0.2 action=dst-nat to-addresses=172.18.0.2 to-ports=53 comment="Force DNS TCP to AdGuard"Код: Выделить всё
192.168.88.0/24Обратите внимание:
Эти правила перехватывают обычный DNS на порту 53, но не блокируют автоматически DNS-over-HTTPS (DoH) и DNS-over-TLS (DoT).
17. Firewall
Если используется стандартный строгий Firewall MikroTik, необходимо убедиться, что LAN-клиентам разрешено обращаться к сети контейнеров.
Нам как минимум нужен доступ:
Код: Выделить всё
LAN -> 172.18.0.2 TCP/UDP 53Код: Выделить всё
LAN -> 172.18.0.2 TCP Web-портОчень важно:
Не открывайте DNS AdGuard Home в интернет.
Публично доступный UDP/TCP 53 может превратить ваш роутер в открытый DNS resolver.
18. Проверяем работу DNS
На Windows:
Код: Выделить всё
nslookup google.com 172.18.0.2Также можно проверить обычный запрос:
Код: Выделить всё
nslookup google.comПосле этого открываем Web-интерфейс AdGuard Home.
В разделе:
Query Log
должны появляться DNS-запросы клиентов.
19. Добавляем фильтры
Переходим:
Filters → DNS blocklists
AdGuard Home уже имеет базовые возможности фильтрации.
Не стоит сразу добавлять десятки огромных списков.
Для MikroTik особенно важно помнить, что AdGuard работает непосредственно на роутере и использует его:
- RAM;
- CPU;
- дисковое пространство.
20. Ограничиваем размер Query Log и статистики
Если контейнер работает с USB-флешки, желательно не хранить чрезмерное количество статистики.
В настройках AdGuard Home можно уменьшить период хранения:
Settings → General settings
Это снизит объём записей и расход места.
Для постоянной работы контейнеров предпочтительнее хороший USB SSD, чем дешёвая флешка.
21. Обновление AdGuard Home
Контейнеры на MikroTik отличаются от обычного Docker.
Для обновления безопаснее сохранить каталоги:
Код: Выделить всё
/usb1/containers/adguard-conf/usb1/containers/adguard-workИменно поэтому конфигурацию и рабочие данные мы вынесли из:
Код: Выделить всё
adguard-rootТаким образом:
Код: Выделить всё
Container root|+--- можно пересоздатьadguard-conf|+--- сохраняемadguard-work|+--- сохраняемПосмотреть контейнеры:
Код: Выделить всё
/container/printКод: Выделить всё
/container/print detailКод: Выделить всё
/container/start 0Код: Выделить всё
/container/stop 0Код: Выделить всё
/interface/veth/print detailКод: Выделить всё
/container/mounts/print detailКод: Выделить всё
/log/printКод: Выделить всё
/log/print followКод: Выделить всё
/ip/address/printКод: Выделить всё
/ip/route/printКод: Выделить всё
/ip/dns/printПроблема №1: контейнер не скачивается
Проверяем:
Код: Выделить всё
/container/config/print/ip/dns/print/ip/route/print/log/print---
Проблема №2: AdGuard запущен, но 172.18.0.2 недоступен
Проверяем:
Код: Выделить всё
/container/print/interface/veth/print detail/interface/bridge/port/print/ip/address/print---
Проблема №3: AdGuard работает, но клиенты не имеют интернета
Сначала проверяем DNS:
Код: Выделить всё
nslookup google.com 172.18.0.2Код: Выделить всё
/ip/firewall/filter/print/ip/firewall/nat/printПроблема №4: ошибка при добавлении mounts
Mount должны быть сначала созданы:
Код: Выделить всё
/container/mounts/printКод: Выделить всё
mounts=MOUNT_AGH_CONF,MOUNT_AGH_WORKПроблема №5: после обновления/пересоздания пропали настройки
Проверьте, что конфигурация действительно вынесена через Mount:
Код: Выделить всё
MOUNT_AGH_CONF -> /opt/adguardhome/confMOUNT_AGH_WORK -> /opt/adguardhome/work24. Итоговая схема
В результате получаем:
Код: Выделить всё
INTERNET||[ MikroTik ]|+-------------+-------------+| || bridge-containers| || 172.18.0.1| || veth-adguard| || 172.18.0.2| || [ AdGuard Home ]| || DNS/DoH| || Upstream DNS|LAN Bridge|192.168.88.0/24|+----+----+--------+| | |PC Phone Smart TVКод: Выделить всё
Клиент|v172.18.0.2:53|vAdGuard Home|+--> проверка фильтров|vUpstream DNS|vInternetПосле выполнения настройки мы получаем:
- AdGuard Home непосредственно на MikroTik;
- отдельный IP контейнера;
- DNS-фильтрацию для всей локальной сети;
- блокировку рекламы и трекеров;
- Web-интерфейс AdGuard Home;
- сохранение конфигурации вне root контейнера;
- автоматический запуск AdGuard после перезагрузки MikroTik;
- возможность принудительно направлять обычный DNS клиентов через AdGuard.
Готово! AdGuard Home работает в Container на MikroTik RouterOS 7.