Adguard Home DNS - проект с открытым исходным кодом, может использоваться как DNS, DHCP сервер, умеет блокировать часть рекламного контента при помощи блокировки DNS запросов, можно устанавливать и настраивать различные фильтры. В этой статье расскажу про установку AGH с использованием docker-compose и настройку домашнего DNS сервера с блокировкой рекламы. Можно использовать на виртуальной машине, отдельном сервере или на одноплатнике типа Rasberry Pi.
Установка Docker
Обновляем пакеты
apt update && apt upgrade -y
Устанавливаем docker
bash <(curl -sSL https://get.docker.com)
Добавляем текущего пользователя в группу docker
sudo usermod -aG docker ${USER}
После выполнения команды выйдите из системы и войдите снова, чтобы изменения вступили в силу. Или используйте команду:
newgrp docker
Запуск Adguard Home
На официальной странице Adguard Home на docker-hub приведен пример кода с docker run, но в целях удобства будем использовать docker-compose файл для запуска контейнера.
---
services:
adguardhome:
image: 'adguard/adguardhome:latest'
container_name: 'adguard'
hostname: 'adguard'
restart: 'unless-stopped'
volumes:
- '/etc/localtime:/etc/localtime:ro'
- './work:/opt/adguardhome/work'
- './config:/opt/adguardhome/conf'
ports:
# Plain DNS
- '53:53/tcp'
- '53:53/udp'
# AdGuard Home Admin Panel as well as DNS-over-HTTPS
- '5000:5000/tcp' # Admin panel
# - '443:443/tcp' # DOH
# - '443:443/udp' # DOH
- '3000:3000/tcp' # Setup page
# DNS-over-TLS
- '853:853/tcp'
# DNS-over-QUIC
# - '784:784/udp' # DNS-over-QUIC
# - '853:853/udp' # DNS-over-QUIC
# - '8853:8853/udp' # DNS-over-QUIC
# DNSCrypt
# - '5443:5443/tcp' # DNSCrypt
# - '5443:5443/udp' # DNSCrypt
Описание используемых портов:
-p 53:53/tcp -p 53:53/udp- для работы DNS сервера.-p 67:67/udp -p 68:68/tcp -p 68:68/udp- для работы DHCP сервера-p 80:80/tcp -p 443:443/tcp -p 443:443/udp -p 3000:3000/tcp- для доступа к Web панели и работы в режиме HTTPS/DNS-over-HTTPS-p 853:853/tcp- для работы в режиме DNS-over-TLS-p 784:784/udp -p 853:853/udp -p 8853:8853/udp- для DNS-over-QUIC-p 5443:5443/tcp -p 5443:5443/udp- для DNSCrypt
Так как я не планирую использовать Adguard Home в качестве DHCP сервера, DOH, DNSoQUIC, DNSCrypt отключил проброс не нужных портов задокументировав соответсвующие строки. Для первоначальной настройки используется порт 3000, после завершения первоначальной настройки его можно отключить. Порт 5000 здесь используется для доступа к веб интерфейсу, по умолчанию используется порт 80 его всегда можно изменить по своему желанию.
При попытке поднять данный контейнер, возникает следующая ошибка
Error starting userland proxy: listen tcp4 0.0.0.0:53: bind: address already in use
Эта ошибка свидетельствует о том что 53 порт уже используется системой, посмотрим кто его занял
sudo lsof -i :53

Видим, что 53 порт занят systemd-resolve
Редактирем файл resolved.conf
sudo nano /etc/systemd/resolved.conf

[Resolve]
DNS=1.1.1.1
DNSStubListener=no
Сохраняем файл Ctrl+S, Ctrl+X и перезапускаем службу
systemctl restart systemd-resolved.service
Теперь можно запускать docker-compose
docker compose up -d
Настройка AdGuard Home
После запуска контейнера, открываем Web интерфейс по адресу http://YOUR-IP:3000и продолжаем настройку

Меняем порт веб интерфейса на 5000, затем нам предложат установить логин и пароль, далее будет показана инструкция по настройке, жмем готово. После завершения настройки нас перекидывает на основную панель.

Черные списки DNS
Переходим к настройке черных списков DNS

Переходим в Фильтры -> Черные списки DNS и добавляем нужные нам списки
Я использую списки от schakal:
https://schakal.ru/hosts/alive_hosts_ru_com.txthttps://schakal.ru/hosts/hosts_mail_fb.txt
Больше списков можно найти на 4PDA
Тепрь указываем адрес нашего DNS сервера как основного в настройки маршрутизатора, убеждаемся что все клиенты получили по DHCP новый адрес DNS сервера и проверяем его в деле. Для проверки используем сервис checkadblock.ru

Как видим по итогам тестирования набираем 72 балла из 100. К сожалению блокировка рекламы средствами DNS не саммый эффективный метод, добиться 100% результата им невозможно, но хотя бы можем избавиться от части рекламы.

Спустя некоторое время у вас появится статистика, в ней вы можете увидеть все DNS запросы, запросы от конкретного клиента и болокируемые запросы. Если у вас дома есть Яндекс Станция вы сразу увидите огромное количество запросов на сервера Яндеса, но Adguard Home их блокирует.
Дополнительные настройки
Так же можно тонко настраивать клиентов и распределять их по группам с разными правилами, ручные записи DNS, белые списки, блокировать контент 18+ и т.д.
При обнаружении в журнвле, что какой-то нужный вам ресурс попал в черный список вы можете его разблокировать нажава на три точки напротив запроса, либо перейдя в Пользовательские правила фильтрации

Итоги
В итоге мы получаем по моему мнению лучший DNS сервер для дома, с предоставлением статистики, возможностью блокировки рекламы и большим количеством дополнительных настроек.
