Linux
April 30

Локальный DNS-сервер с AdGuard Home

Adguard Home - это Github Open Source проект с открытым исходным кодом.

В этой статье разберём, как быстро и просто поднять собственный DNS-сервер в AdGuard Home, чтобы забыть о рекламе и получить полный контроль над интернет-трафиком в нашей сети. В нем так же возможно настроить DHCP, блокировать часть рекламного контента, устанавливать и настраивать различные фильтры. Всё будет работать через Docker Compose. Подходит для виртуалок, выделенных серверов и мини-ПК вроде Raspberry Pi.

Я же для себя выбрал его как дополнительный DNS сервер, с которого удобнее назначать устройствам в сети FQDN имена, чем например с роутера в cli:

ip host adg.home.local 192.168.1.11
system configuration save

Готовим площадку: минимальные требования

Установка будет проходить в LXC-контейнере на Proxmox, но подойдёт любая машина с Ubuntu 22.04 (или новее).
Минимальные ресурсы:
• ОС: Ubuntu 22.04
• CPU: 2 ядра
• RAM: 1 ГБ
• Диск: 10 ГБ

Обновляем систему и ставим Docker:

apt update && apt upgrade -y
apt install -y curl
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

Настраиваем docker-compose.yml

Создаем файл

nano docker-compose.yml

Копируем содержимое для docker-compose.yml

version: "3.8"
services:
 adguardhome:
 image: adguard/adguardhome:latest
 hostname: adguard
 volumes:
 - ./adguard/work:/opt/adguardhome/work
 - ./adguard/conf:/opt/adguardhome/conf
 ports:
 - 53:53/tcp
 - 53:53/udp
 - 80:80/tcp
 - 443:443/tcp
 - 443:443/udp
 - 3000:3000/tcp
 restart: unless-stopped

Вносим изменения, сохраняемся и выходим.

Описание используемых портов:

  • 53/tcp 53/udp - для работы DNS сервера.
  • 67/udp 68/tcp 68/udp - для работы DHCP сервера
  • 80/tcp 443/tcp 443/udp 3000/tcp - для доступа к Web панели и работы в режиме HTTPS/DNS-over-HTTPS
  • 853/tcp - для работы в режиме DNS-over-TLS
  • 784/udp 853/udp 8853/udp - для DNS-over-QUIC
  • 5443/tcp 5443/udp - для DNSCrypt

DHCP, DNS-over-QUIC и DNSCrypt я не использовал - соответствующие порты не пробрасываем для безопасности и экономии ресурсов.

Освобождаем порт 53

Если при запуске контейнера видите ошибку:

Error starting userland proxy: listen tcp4 0.0.0.0:53: bind: address already in use

Значит порт 53 уже занят (обычно это systemd-resolve).

Проверяем, кто занял порт:

lsof -i :53

Отключаем DNSStubListener

Открываем файл:

nano /etc/systemd/resolved.conf

В секции [Resolve] прописываем:

DNS=127.0.0.1
DNSStubListener=no

Сохраняем и перезапускаем службу:

systemctl restart systemd-resolved.service

Запускаем AdGuard Home

Теперь запускаем контейнер:

docker compose up -d

Первичная настройка AdGuard Home

Открываем браузер и идём по адресу:
http://<IP-адрес вашего сервера>:3000/
• Придумываем логин и пароль для панели управления.
• Следуем инструкции мастера установки.
• После завершения попадаем в основное меню.

У меня все настройки по умолчанию.

Подключаем DNS к роутеру

Тут я лишь могу показать на примере своего роутера Keenetic.

В настройках Интернет - Кабель Ethernet нужно добавить второй DNS.

Не забываем перед этим указать ему статику. У меня это 192.168.1.11

Теперь весь трафик домашних устройств будет проходить через AdGuard Home. Устройства в сети автоматически определят второй DNS.

Настраиваем фильтрацию рекламы

Фильтры - Черные списки DNS.

Добавляем чёрные списки - это основной инструмент для блокировки рекламы и вредоносных сайтов.

Все фильтры находятся в Добавить черный список - Выбрать из списка.

Я же добавил эти:

  • AdGuard DNS filter
  • AdAway Default Blocklist
  • 1Hosts (Lite)
  • AdGuard DNS Popup Hosts filter
  • AWAvenue Ads Rule
  • OISD Blocklist Big
Фильтры обновляются автоматически, поэтому нет необходимости проверять их актуальность.

DNS-Over-HTTPS (DoH)

Настройки - Настройки DNS - Upstream DNS-серверы.

Необходимо указать тип DNS over HTTPS. Их можно взять тут.

Я установил такие:

https://dns10.quad9.net/dns-query
https://dns.cloudflare.com/dns-query
https://security.cloudflare-dns.com/dns-query
https://freedns.controld.com/p0
https://dns.comss.one/dns-query

Проверяем работоспособность через кнопку TEST Upstream - если ошибок нет, всё работает корректно.

Перезапись DNS-запросов

Собственно, ради чего я это всё затеял.

Фильтры - Перезапись DNS-запросов.

Добавляем записи. У меня большая часть ведет через локальный обратный прокси Nginx Proxy Manager (192.168.1.88), на котором уже указаны статические адреса хостов с самоподписанным сертификатом home.local и на которые хожу по HTTPS.

AdGuard так же прописан в NPM.

Даже не имея сертификата, можно указать любое имя, например phanteks.pc

Можно сразу пингануть этот хост

Либо подключиться к нему по RDP

Проверяем работу фильтров

Для проверки DoH использу сервис Cloudflare - https://1.1.1.1/help

Для теста блокировки рекламы - https://checkadblock.ru

Больше радует что в черные списки попадают сервисы сбора метрик и блокируется это наглядно. Можно увидеть в статистике главной панели.

Где видно как Phanteks активно пытается отправлять телеметрию в Microsoft, но их блокирует Adguard.

Дополнительные настройки

  • Тонкая настройка клиентов - создавайте группы с разными правилами, управляйте белыми и чёрными списками, блокируйте контент 18+.
  • Быстрая блокировка популярных сервисов - одним кликом можно ограничить доступ к соцсетям, мессенджерам и другим отвлекающим ресурсам.
  • Статистика - на главной панели видно, какие устройства чаще всего обращаются к DNS и что именно блокируется.

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

Позволяет быстро заблокировать популярные сайты и сервисы.

Итоги

AdGuard Home - мощный и удобный инструмент для домашнего и офисного использования. Простая установка, гибкая настройка, наглядная статистика и возможность блокировать рекламу на всех устройствах без лишних танцев с бубном. Подходит даже для образовательных учреждений и малого бизнеса.
Собственный DNS - это не только про блокировку рекламы, но и про приватность, контроль и безопасность вашей сети.

Мне помогли:

https://akmalov.com/blog/adguard-home