mikrotik-wiki.ru
Главная
Загрузка...

AdGuard Home в контейнере на MikroTik — DNS-фильтрация

RouterOS 7.xКонтейнеры9 мин230 мар. 2026 г.
TelegramVK

AdGuard Home — мощная альтернатива Pi-hole с встроенной поддержкой DNS-over-HTTPS (DoH), DNS-over-TLS (DoT), DNS-over-QUIC, родительским контролем и современным веб-интерфейсом. Запуск AdGuard Home на маршрутизаторе MikroTik через контейнер позволяет фильтровать рекламу, трекеры и вредоносные домены для всей сети без дополнительного оборудования. В этом руководстве подробно разберём установку, сравнение с Pi-hole, настройку зашифрованного DNS и эксплуатацию на RouterOS 7.20+.

Описание

AdGuard Home vs Pi-hole — детальное сравнение

Оба продукта решают одну задачу — DNS-фильтрацию. Но подходы и возможности различаются:

ПараметрAdGuard HomePi-hole
DNS-over-HTTPS (DoH)Встроенный сервер и клиентТолько через cloudflared (доп. контейнер)
DNS-over-TLS (DoT)ВстроенныйНет
DNS-over-QUIC (DoQ)ВстроенныйНет
Веб-интерфейсСовременный, responsiveФункциональный, но устаревший дизайн
Язык интерфейсаРусский, English и др.English (русский через community)
Потребление RAM50–100 МБ80–150 МБ
ФильтрыСобственные + сторонниеGravity lists
Родительский контрольВстроенный (по клиентам)Нет (только через списки)
Safe SearchВстроенный (Google, YouTube, Bing)Нет
Индивидуальные настройки клиентовДа (per-client rules)Ограниченно (group management)
APIREST APIREST API
Кодовая базаGo (один бинарник)PHP + Python + dnsmasq
Docker-образ~50 МБ (ARM64)~200 МБ (ARM64)
ЛицензияGPL v3EUPL

Вывод: AdGuard Home предпочтительнее для MikroTik из-за меньшего потребления ресурсов, встроенного DoH/DoT и русскоязычного интерфейса. Pi-hole имеет более зрелое сообщество и больше документации.

Как работает AdGuard Home

AdGuard Home выступает DNS-сервером для всех клиентов сети. При получении DNS-запроса:

  1. Проверяет запрос по фильтрам и чёрным спискам.
  2. Если домен заблокирован — возвращает NXDOMAIN или 0.0.0.0.
  3. Если разрешён — пересылает на upstream DNS (можно через DoH/DoT).
  4. Кэширует ответ для ускорения повторных запросов.
  5. Записывает статистику по клиентам и доменам.

Требования

КомпонентМинимумРекомендуется
RouterOS7.4+7.20+
УстройствоRB5009, CCR2004, CHRRB5009UPr+S+
АрхитектураARM64 или x86ARM64
Свободная RAM128 МБ256 МБ+
Хранилище512 МБ на USB2 ГБ+ USB
Container modeВключён

AdGuard Home значительно легче Pi-hole: один бинарник на Go потребляет 50–100 МБ RAM. Это делает его лучшим выбором для устройств с ограниченными ресурсами.

Настройка

Шаг 1: Включение container mode

[admin@MikroTik] >
# Если container mode ещё не включён
/system/device-mode/update container=yes
# Нажмите кнопку reset на устройстве или перезагрузите CHR

Настройка хранилища:

[admin@MikroTik] >
/container/config/set registry-url=https://registry-1.docker.io tmpdir=usb1/tmp ram-high=512M

Шаг 2: Создание сетевой инфраструктуры

Bridge для контейнеров

[admin@MikroTik] >
# Bridge (если ещё не создан)
/interface/bridge/add name=bridge-containers comment="Container network"

# IP-адрес шлюза
/ip/address/add address=172.17.0.1/24 interface=bridge-containers comment="Container gateway"

veth-интерфейс для AdGuard Home

[admin@MikroTik] >
# veth с фиксированным IP
/interface/veth/add name=veth-adguard address=172.17.0.3/24 gateway=172.17.0.1 comment="AdGuard Home container"

# Добавляем в bridge
/interface/bridge/port/add bridge=bridge-containers interface=veth-adguard

NAT для контейнеров

[admin@MikroTik] >
# Masquerade для контейнерной подсети (если ещё не создано)
/ip/firewall/nat/add chain=srcnat action=masquerade src-address=172.17.0.0/24 out-interface-list=WAN comment="Container NAT"

Шаг 3: Подготовка хранилища и переменных окружения

[admin@MikroTik] >
# Создание директорий
/file/mkdir usb1/adguard
/file/mkdir usb1/adguard/work
/file/mkdir usb1/adguard/conf

# Точки монтирования
/container/mounts/add name=adguard-work src=usb1/adguard/work dst=/opt/adguardhome/work
/container/mounts/add name=adguard-conf src=usb1/adguard/conf dst=/opt/adguardhome/conf

# Переменные окружения
/container/envs/add name=adguard-env key=TZ value="Europe/Moscow"

AdGuard Home хранит конфигурацию в /opt/adguardhome/conf/AdGuardHome.yaml и данные (статистику, логи запросов) в /opt/adguardhome/work/. Монтирование этих директорий гарантирует сохранение настроек при обновлении контейнера.

Шаг 4: Создание и запуск контейнера

[admin@MikroTik] >
# Создание контейнера AdGuard Home
/container/add remote-image=adguard/adguardhome:latest interface=veth-adguard root-dir=usb1/adguard/root envlist=adguard-env mounts=adguard-work,adguard-conf start-on-boot=yes hostname=adguard logging=yes comment="AdGuard Home DNS filter"

Дождитесь скачивания образа:

[admin@MikroTik] >
# Проверяем статус
/container/print

Запуск:

[admin@MikroTik] >
/container/start 0

Шаг 5: Первоначальная настройка AdGuard Home

При первом запуске AdGuard Home запускает мастер настройки на порту 3000. Откройте в браузере:

code
http://172.17.0.3:3000

Мастер настройки:

  1. Приветствие — нажмите «Начать».
  2. Веб-интерфейс — оставьте порт 80 (по умолчанию), слушать на всех интерфейсах (0.0.0.0).
  3. DNS-сервер — порт 53, слушать на всех интерфейсах (0.0.0.0).
  4. Логин и пароль — задайте учётные данные администратора.
  5. Готово — мастер перенаправит на основной интерфейс.

После завершения мастера веб-интерфейс доступен по адресу:

code
http://172.17.0.3

Шаг 6: Настройка DNS-фильтров

В веб-интерфейсе AdGuard Home перейдите в Фильтры → DNS-чёрные списки и добавьте списки:

Рекомендуемые фильтры:

  • AdGuard DNS filter — включён по умолчанию;
  • AdAway Default Blocklist — популярный мобильный список;
  • OISD Big — комплексный список (https://big.oisd.nl);
  • Steven Black — классический hosts-файл (https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts).

Не добавляйте слишком много списков — каждый увеличивает потребление RAM. Для MikroTik оптимально 2–4 списка.

Шаг 7: Настройка upstream DNS с шифрованием

Ключевое преимущество AdGuard Home — встроенная поддержка зашифрованного DNS. Перейдите в Настройки → Настройки DNS:

Upstream DNS-серверы

Укажите DoH или DoT серверы:

[admin@MikroTik] >
# DNS-over-HTTPS
https://dns.cloudflare.com/dns-query
https://dns.google/dns-query

# DNS-over-TLS
tls://1dot1dot1dot1.cloudflare-dns.com
tls://dns.google

# DNS-over-QUIC (самый быстрый)
quic://dns.adguard-dns.com

Рекомендуется использовать 2 upstream-сервера для отказоустойчивости. Выберите режим «Параллельные запросы» для максимальной скорости.

Bootstrap DNS

Bootstrap DNS нужен для разрешения доменных имён upstream-серверов (замкнутый цикл: DoH-сервер указан по имени, но для резолва имени нужен DNS):

code
1.1.1.1
8.8.8.8

Шаг 8: Перенаправление DNS на AdGuard Home

Подход 1: MikroTik DNS -> AdGuard Home (рекомендуется)

[admin@MikroTik] >
# MikroTik пересылает DNS-запросы в AdGuard Home
/ip/dns/set servers=172.17.0.3 allow-remote-requests=yes cache-size=2048KiB

# DHCP раздаёт IP маршрутизатора как DNS
/ip/dhcp-server/network/set [find] dns-server=192.168.88.1

Подход 2: Клиенты -> AdGuard Home напрямую

[admin@MikroTik] >
# DHCP раздаёт адрес AdGuard Home
/ip/dhcp-server/network/set [find] dns-server=172.17.0.3

При подходе 2 AdGuard Home видит реальные IP клиентов, что позволяет использовать per-client настройки и подробную статистику.

Принудительное перенаправление DNS

[admin@MikroTik] >
# Перехват всех DNS-запросов
/ip/firewall/nat/add chain=dstnat action=dst-nat to-addresses=172.17.0.3 to-ports=53 protocol=udp dst-port=53 src-address=!172.17.0.3 dst-address=!172.17.0.3 comment="Force DNS through AdGuard Home"
/ip/firewall/nat/add chain=dstnat action=dst-nat to-addresses=172.17.0.3 to-ports=53 protocol=tcp dst-port=53 src-address=!172.17.0.3 dst-address=!172.17.0.3 comment="Force DNS through AdGuard Home TCP"

Шаг 9: Настройка per-client правил

AdGuard Home позволяет создавать индивидуальные правила для каждого клиента. В веб-интерфейсе перейдите в Настройки → Настройки клиентов:

  1. Нажмите «Добавить клиента».
  2. Укажите имя (например, «Детский планшет»).
  3. Укажите IP-адрес или MAC-адрес.
  4. Настройте:
    • Использовать глобальные фильтры или индивидуальные;
    • Включить/отключить родительский контроль;
    • Включить/отключить безопасный поиск (Safe Search);
    • Заблокировать определённые сервисы (YouTube, TikTok, Instagram и т.д.).

Это особенно полезно для семей с детьми: взрослые устройства получают стандартную фильтрацию, а детские — дополнительные ограничения.

Шаг 10: Родительский контроль и Safe Search

Включение Safe Search

В Настройки → Общие настройки:

  • Безопасный поиск — принудительно включает SafeSearch в Google, YouTube, Bing, Yandex;
  • Родительский контроль — блокирует контент для взрослых на уровне DNS.

Эти настройки работают для всех клиентов или для конкретных (через per-client rules).

Блокировка сервисов

В Фильтры → Заблокированные сервисы можно одним кликом заблокировать:

  • Социальные сети (Facebook, Instagram, TikTok, VK);
  • Мессенджеры (Telegram, WhatsApp);
  • Видеосервисы (YouTube, Twitch);
  • Игры (Steam, Epic Games);
  • И другие категории.

Шаг 11: Статистика и мониторинг

Dashboard AdGuard Home показывает:

  • общее количество DNS-запросов за период;
  • процент заблокированных запросов;
  • топ заблокированных доменов;
  • топ клиентов;
  • графики по времени суток;
  • среднее время ответа DNS.

Для доступа к API (интеграция с Grafana и другими системами мониторинга):

[admin@MikroTik] >
# REST API AdGuard Home
GET http://172.17.0.3/control/stats
GET http://172.17.0.3/control/status
GET http://172.17.0.3/control/querylog

API защищён Basic Auth (логин/пароль из мастера настройки).

Проверка

Полная проверка работоспособности

[admin@MikroTik] >
# 1. Контейнер запущен
/container/print
# status: running

# 2. AdGuard Home отвечает на DNS
/tool/dns-query name=google.com server=172.17.0.3
# Должен вернуть IP-адрес

# 3. Блокировка работает
/tool/dns-query name=ads.doubleclick.net server=172.17.0.3
# Должен вернуть 0.0.0.0 или NXDOMAIN

# 4. MikroTik DNS использует AdGuard Home
/ip/dns/print
# servers: 172.17.0.3

# 5. Пинг контейнера
/ping 172.17.0.3 count=4

# 6. HTTP-доступ к веб-интерфейсу
/tool/fetch url="http://172.17.0.3" mode=http dst-path=adguard-test.html

Проверка зашифрованного DNS

В веб-интерфейсе AdGuard Home перейдите в Настройки → Настройки DNS. Нажмите «Проверить upstream» — AdGuard Home проверит доступность всех указанных DoH/DoT серверов.

Также проверьте на клиентском устройстве:

  • Откройте https://www.dnsleaktest.com/;
  • Запустите Extended test;
  • Убедитесь, что DNS-серверы соответствуют выбранным upstream (Cloudflare, Google и т.д.), а не провайдерским.

Типичные ошибки

Ошибка 1: Конфликт порта 53 с MikroTik DNS

Симптом: AdGuard Home запускается, но не отвечает на DNS-запросы на порту 53.

Причина: встроенный DNS MikroTik тоже слушает порт 53. Хотя они на разных IP, иногда возникают конфликты.

Решение:

[admin@MikroTik] >
# Вариант 1: Отключить MikroTik DNS (если все запросы через AdGuard)
/ip/dns/set allow-remote-requests=no

# Вариант 2: Изменить порт DNS MikroTik (RouterOS 7.15+)
# В RouterOS нет прямой настройки порта DNS, но можно через firewall:
/ip/firewall/filter/add chain=input action=drop protocol=udp dst-port=53 in-interface=bridge-containers comment="Block MikroTik DNS on container bridge"
/ip/firewall/filter/add chain=input action=drop protocol=tcp dst-port=53 in-interface=bridge-containers comment="Block MikroTik DNS on container bridge TCP"

Ошибка 2: Мастер настройки недоступен (порт 3000)

Симптом: при первом запуске не открывается http://172.17.0.3:3000.

Причина: контейнер ещё загружается, сетевая связность не настроена, или firewall блокирует.

Решение:

[admin@MikroTik] >
# Проверяем статус контейнера
/container/print
# Подождите, пока status станет "running"

# Проверяем сетевую связность
/ping 172.17.0.3 count=4

# Если пинг не проходит — проверяем veth и bridge
/interface/veth/print
/interface/bridge/port/print where bridge=bridge-containers

# Проверяем логи
/log/print where topics~"container"

Если проблема в firewall — убедитесь, что правила не блокируют трафик к 172.17.0.3.

Ошибка 3: AdGuard Home потребляет много RAM

Симптом: после добавления большого количества фильтров потребление RAM растёт до 200+ МБ.

Причина: слишком много списков фильтров загружено в память.

Решение:

Оптимизируйте списки фильтров:

[admin@MikroTik] >
# Проверяем потребление ресурсов
/system/resource/print

Рекомендации:

  • Используйте не более 3–4 списков фильтров;
  • Предпочитайте OISD (один комплексный список) вместо множества мелких;
  • Отключите Query Log, если он не нужен (экономит RAM и дисковое пространство);
  • Установите лимит хранения статистики: 7 дней вместо 90.

Ошибка 4: Медленный DNS после установки AdGuard Home

Симптом: DNS-запросы обрабатываются 200–500 мс вместо обычных 10–50 мс.

Причина: upstream DoH/DoT серверы добавляют задержку из-за TLS-handshake, или upstream-сервер далеко географически.

Решение:

  1. Используйте ближайшие upstream-серверы:

    • Для России: tls://dns.adguard-dns.com, https://common.dot.dns.yandex.net/dns-query;
    • Для Европы: tls://1dot1dot1dot1.cloudflare-dns.com.
  2. Включите кэширование в AdGuard Home (включено по умолчанию).

  3. Увеличьте DNS-кэш MikroTik:

[admin@MikroTik] >
/ip/dns/set cache-size=4096KiB
  1. Используйте режим «Параллельные запросы» для upstream — AdGuard Home отправит запрос всем upstream одновременно и вернёт первый ответ.

Ошибка 5: После обновления RouterOS контейнер не работает

Симптом: после обновления RouterOS контейнер AdGuard Home перестаёт работать.

Причина: обновление RouterOS могло сбросить container mode или изменить сетевые настройки.

Решение:

[admin@MikroTik] >
# Проверяем container mode
/system/device-mode/print
# Если container: no — включите заново

# Проверяем сетевую конфигурацию
/interface/veth/print
/interface/bridge/port/print where bridge=bridge-containers
/ip/address/print where interface=bridge-containers

# Проверяем контейнер
/container/print
# Если status: error — пересоздайте контейнер (данные в mounts сохранятся)

Обновление AdGuard Home

[admin@MikroTik] >
# 1. Остановка
/container/stop [/container/find where comment~"AdGuard"]

# 2. Удаление контейнера (конфигурация сохранится в mounts)
/container/remove [/container/find where comment~"AdGuard"]

# 3. Пересоздание
/container/add remote-image=adguard/adguardhome:latest interface=veth-adguard root-dir=usb1/adguard/root envlist=adguard-env mounts=adguard-work,adguard-conf start-on-boot=yes hostname=adguard logging=yes comment="AdGuard Home DNS filter"

# 4. Ожидание и запуск
/container/print
/container/start 0

Все настройки (фильтры, клиенты, upstream DNS, логин/пароль) сохраняются в /opt/adguardhome/conf/AdGuardHome.yaml, который хранится в точке монтирования adguard-conf.

[admin@MikroTik] >
# Если container mode ещё не включён
/system/device-mode/update container=yes
# Нажмите кнопку reset на устройстве или перезагрузите CHR
/container/config/set registry-url=https://registry-1.docker.io tmpdir=usb1/tmp ram-high=512M
# Bridge (если ещё не создан)
/interface/bridge/add name=bridge-containers comment="Container network"

# IP-адрес шлюза
/ip/address/add address=172.17.0.1/24 interface=bridge-containers comment="Container gateway"
# veth с фиксированным IP
/interface/veth/add name=veth-adguard address=172.17.0.3/24 gateway=172.17.0.1 comment="AdGuard Home container"

# Добавляем в bridge
/interface/bridge/port/add bridge=bridge-containers interface=veth-adguard
# Masquerade для контейнерной подсети (если ещё не создано)
/ip/firewall/nat/add chain=srcnat action=masquerade src-address=172.17.0.0/24 out-interface-list=WAN comment="Container NAT"
# Создание директорий
/file/mkdir usb1/adguard
/file/mkdir usb1/adguard/work
/file/mkdir usb1/adguard/conf

# Точки монтирования
/container/mounts/add name=adguard-work src=usb1/adguard/work dst=/opt/adguardhome/work
/container/mounts/add name=adguard-conf src=usb1/adguard/conf dst=/opt/adguardhome/conf

# Переменные окружения
/container/envs/add name=adguard-env key=TZ value="Europe/Moscow"
# Создание контейнера AdGuard Home
/container/add remote-image=adguard/adguardhome:latest interface=veth-adguard root-dir=usb1/adguard/root envlist=adguard-env mounts=adguard-work,adguard-conf start-on-boot=yes hostname=adguard logging=yes comment="AdGuard Home DNS filter"
# Проверяем статус
/container/print
/container/start 0
http://172.17.0.3:3000
http://172.17.0.3
# DNS-over-HTTPS
https://dns.cloudflare.com/dns-query
https://dns.google/dns-query

# DNS-over-TLS
tls://1dot1dot1dot1.cloudflare-dns.com
tls://dns.google

# DNS-over-QUIC (самый быстрый)
quic://dns.adguard-dns.com
1.1.1.1
8.8.8.8
# MikroTik пересылает DNS-запросы в AdGuard Home
/ip/dns/set servers=172.17.0.3 allow-remote-requests=yes cache-size=2048KiB

# DHCP раздаёт IP маршрутизатора как DNS
/ip/dhcp-server/network/set [find] dns-server=192.168.88.1
# DHCP раздаёт адрес AdGuard Home
/ip/dhcp-server/network/set [find] dns-server=172.17.0.3
# Перехват всех DNS-запросов
/ip/firewall/nat/add chain=dstnat action=dst-nat to-addresses=172.17.0.3 to-ports=53 protocol=udp dst-port=53 src-address=!172.17.0.3 dst-address=!172.17.0.3 comment="Force DNS through AdGuard Home"
/ip/firewall/nat/add chain=dstnat action=dst-nat to-addresses=172.17.0.3 to-ports=53 protocol=tcp dst-port=53 src-address=!172.17.0.3 dst-address=!172.17.0.3 comment="Force DNS through AdGuard Home TCP"
# REST API AdGuard Home
GET http://172.17.0.3/control/stats
GET http://172.17.0.3/control/status
GET http://172.17.0.3/control/querylog
# 1. Контейнер запущен
/container/print
# status: running

# 2. AdGuard Home отвечает на DNS
/tool/dns-query name=google.com server=172.17.0.3
# Должен вернуть IP-адрес

# 3. Блокировка работает
/tool/dns-query name=ads.doubleclick.net server=172.17.0.3
# Должен вернуть 0.0.0.0 или NXDOMAIN

# 4. MikroTik DNS использует AdGuard Home
/ip/dns/print
# servers: 172.17.0.3

# 5. Пинг контейнера
/ping 172.17.0.3 count=4

# 6. HTTP-доступ к веб-интерфейсу
/tool/fetch url="http://172.17.0.3" mode=http dst-path=adguard-test.html
# Вариант 1: Отключить MikroTik DNS (если все запросы через AdGuard)
/ip/dns/set allow-remote-requests=no

# Вариант 2: Изменить порт DNS MikroTik (RouterOS 7.15+)
# В RouterOS нет прямой настройки порта DNS, но можно через firewall:
/ip/firewall/filter/add chain=input action=drop protocol=udp dst-port=53 in-interface=bridge-containers comment="Block MikroTik DNS on container bridge"
/ip/firewall/filter/add chain=input action=drop protocol=tcp dst-port=53 in-interface=bridge-containers comment="Block MikroTik DNS on container bridge TCP"
# Проверяем статус контейнера
/container/print
# Подождите, пока status станет "running"

# Проверяем сетевую связность
/ping 172.17.0.3 count=4

# Если пинг не проходит — проверяем veth и bridge
/interface/veth/print
/interface/bridge/port/print where bridge=bridge-containers

# Проверяем логи
/log/print where topics~"container"
# Проверяем потребление ресурсов
/system/resource/print
/ip/dns/set cache-size=4096KiB
# Проверяем container mode
/system/device-mode/print
# Если container: no — включите заново

# Проверяем сетевую конфигурацию
/interface/veth/print
/interface/bridge/port/print where bridge=bridge-containers
/ip/address/print where interface=bridge-containers

# Проверяем контейнер
/container/print
# Если status: error — пересоздайте контейнер (данные в mounts сохранятся)
# 1. Остановка
/container/stop [/container/find where comment~"AdGuard"]

# 2. Удаление контейнера (конфигурация сохранится в mounts)
/container/remove [/container/find where comment~"AdGuard"]

# 3. Пересоздание
/container/add remote-image=adguard/adguardhome:latest interface=veth-adguard root-dir=usb1/adguard/root envlist=adguard-env mounts=adguard-work,adguard-conf start-on-boot=yes hostname=adguard logging=yes comment="AdGuard Home DNS filter"

# 4. Ожидание и запуск
/container/print
/container/start 0
Контейнеры / AdGuard Home в контейнере на MikroTik — DNS-фильтрация