Локальный 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-HTTPS853/tcp
- для работы в режиме DNS-over-TLS784/udp 853/udp 8853/udp
- для DNS-over-QUIC5443/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.
Настраиваем фильтрацию рекламы
Добавляем чёрные списки - это основной инструмент для блокировки рекламы и вредоносных сайтов.
Все фильтры находятся в Добавить черный список - Выбрать из списка.
- 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 - это не только про блокировку рекламы, но и про приватность, контроль и безопасность вашей сети.