Главная Проекты Статьи 🔑 Генератор паролей ⚡ VLESS Конвертер Контакты
← Все статьи
Self-hosted

AdGuard Home в Docker: блокировка рекламы для всей сети

Что такое AdGuard Home

AdGuard Home — DNS-сервер с блокировкой рекламы и трекеров для всей локальной сети. В отличие от расширений браузера, работает на уровне DNS: любое устройство в сети (смартфон, Smart TV, игровая консоль) получает защиту автоматически без дополнительных настроек.

Ключевые возможности:

  • Блокировка рекламы, трекеров, вредоносных доменов
  • DNS-over-HTTPS (DoH) и DNS-over-TLS (DoT) для зашифрованных запросов
  • Статистика и логи DNS-запросов по устройствам
  • Родительский контроль и пользовательские правила
  • Встроенный DHCP-сервер (опционально)

Требования

  • Сервер или VM с Linux (Debian/Ubuntu/Rocky)
  • Docker и Docker Compose
  • Порт 53 свободен (systemd-resolved может его занимать)
  • Статический IP сервера в локальной сети

Шаг 1 — Освободить порт 53

На большинстве современных дистрибутивов Ubuntu/Debian порт 53 занят systemd-resolved. Его нужно отключить до запуска AdGuard.

sudo systemctl stop systemd-resolved
sudo systemctl disable systemd-resolved

Настройте DNS вручную, чтобы сервер не потерял доступ в интернет после отключения resolved:

echo "nameserver 1.1.1.1" | sudo tee /etc/resolv.conf
На Debian 12+ вместо редактирования /etc/resolv.conf используйте NetworkManager: nmcli con mod <name> ipv4.dns "1.1.1.1 8.8.8.8"

Шаг 2 — Структура проекта

mkdir -p /opt/adguard/{work,conf}
cd /opt/adguard

Шаг 3 — Docker Compose файл

services:
  adguardhome:
    image: adguard/adguardhome:latest
    container_name: adguardhome
    restart: unless-stopped
    network_mode: host
    volumes:
      - ./work:/opt/adguardhome/work
      - ./conf:/opt/adguardhome/conf
    environment:
      - TZ=Europe/Moscow

Сохраните файл как /opt/adguard/docker-compose.yml.

network_mode: host обязателен для корректной работы на порту 53 — AdGuard должен видеть реальные IP-адреса клиентов для статистики по устройствам.

Шаг 4 — Первый запуск и настройка

cd /opt/adguard
docker compose up -d

Откройте в браузере мастер первоначальной настройки:

http://<IP-сервера>:3000

Мастер предложит:

  • Выбрать интерфейсы для DNS (оставьте все)
  • Задать логин и пароль для веб-панели
  • После настройки веб-панель переедет на порт 80 (или 3000 если 80 занят)

Шаг 5 — Настройка DNS-серверов

Перейдите в Настройки → Настройки DNS. Рекомендуемые апстримы с поддержкой DoH:

# Cloudflare (DoH)
https://dns.cloudflare.com/dns-query

# Google (DoH)
https://dns.google/dns-query

# Quad9 (DoH, блокирует вредоносное ПО)
https://dns.quad9.net/dns-query

В разделе Резервные DNS-серверы укажите обычные серверы на случай недоступности DoH:

1.1.1.1
8.8.8.8

Шаг 6 — Списки блокировок

Перейдите в Фильтры → Списки блокировки DNS и добавьте:

Базовые (уже встроены)

  • AdGuard DNS filter — реклама и трекеры
  • AdAway Default Blocklist — мобильная реклама

Дополнительные рекомендуемые

# Реклама и трекеры (расширенный)
https://raw.githubusercontent.com/nicehash/ha-adlist/main/combined.txt

# Вредоносные домены
https://raw.githubusercontent.com/hagezi/dns-blocklists/main/adblock/tif.txt

# Российская реклама
https://raw.githubusercontent.com/nicehash/ha-adlist/main/ru.txt

Шаг 7 — Настройка MikroTik для использования AdGuard

Укажите IP сервера с AdGuard как DNS для всех клиентов сети через DHCP:

/ip/dhcp-server/network/set [find] dns-server=192.168.1.100

И для самого роутера:

/ip/dns set servers=192.168.1.100 allow-remote-requests=yes

Принудительно перенаправляйте все DNS-запросы клиентов на AdGuard (даже если устройство вручную прописало 8.8.8.8):

/ip/firewall/nat
add chain=dstnat protocol=udp dst-port=53   in-interface-list=LAN   action=dst-nat to-addresses=192.168.1.100 to-ports=53   comment="Force DNS to AdGuard"
add chain=dstnat protocol=tcp dst-port=53   in-interface-list=LAN   action=dst-nat to-addresses=192.168.1.100 to-ports=53   comment="Force DNS to AdGuard TCP"

Шаг 8 — HTTPS для веб-панели (опционально)

Если есть домен и SSL-сертификат, включите HTTPS для панели и DoH/DoT:

# Скопируйте сертификат и ключ в директорию conf
cp /etc/letsencrypt/live/yourdomain.com/fullchain.pem /opt/adguard/conf/
cp /etc/letsencrypt/live/yourdomain.com/privkey.pem /opt/adguard/conf/

В AdGuard: Настройки → Настройки шифрования — укажите пути к файлам сертификата.

После этого клиенты смогут использовать DoH напрямую:

https://yourdomain.com/dns-query

Шаг 9 — Обновление

cd /opt/adguard
docker compose pull
docker compose up -d

Полезные команды

Просмотр логов

docker logs adguardhome -f --tail 50

Резервное копирование конфигурации

tar -czf adguard-backup-$(date +%Y%m%d).tar.gz /opt/adguard/conf /opt/adguard/work/data

Статистика запросов из консоли

docker exec adguardhome cat /opt/adguardhome/work/data/querylog.json | tail -20 | python3 -m json.tool

Устранение неполадок

Контейнер не запускается — порт 53 занят

sudo lsof -i :53
sudo systemctl stop systemd-resolved
sudo systemctl disable systemd-resolved

Клиенты не отображаются по именам

Перейдите в Настройки → Клиенты и вручную задайте имена для IP-адресов, либо включите reverse DNS lookup в настройках.

Некоторые сайты не открываются

Проверьте раздел Журнал запросов — там видно, какие домены заблокированы. Добавьте исключения в Фильтры → Пользовательские правила:

@@||example.com^

Ссылки