AdGuard Home
Свой DNS-сервер, который режет рекламу и трекеры для всех устройств сразу - без приложений на каждом телефоне. Развернули v0.107.79 в Docker, настроили шифрованный DNS (DoH/DoT/DoQ) и проверили, что сервер не стал открытым резолвером.
Вердикт
- заблокировать рекламу и трекеры на уровне сети, для всех устройств дома сразу
- поднять личный шифрованный DNS (DoH/DoT) на VPS - работает с телефона из любой сети
- увидеть, кто и куда стучится: журнал запросов по каждому клиенту
- если нужен просто блокировщик в браузере - это расширение, а не DNS-сервер
- как публичный DNS для чужих людей: открытый резолвер быстро попадет в abuse
- для фильтрации рекламы внутри приложений (она часто идет с тех же доменов, что контент)
Что это и какую задачу решает
AdGuard Home - это DNS-сервер с фильтрацией на уровне всей сети. Вместо того чтобы ставить блокировщик рекламы в каждый браузер и на каждый телефон, вы поднимаете один DNS, прописываете его на роутере или на устройстве, и он режет обращения к рекламным и трекерным доменам еще до того, как они загрузятся. Работает для всего, что ходит через этот DNS: телевизор, умные лампочки, приложения на телефоне.
Второй сценарий - личный шифрованный DNS. AdGuard Home умеет принимать запросы по DNS-over-HTTPS, DNS-over-TLS и DNS-over-QUIC. Если поднять его на VPS с валидным TLS, получаете свой приватный резолвер: телефон в любой сети (кафе, мобильный интернет, чужой Wi-Fi) ходит через ваш зашифрованный DNS с вашими списками фильтрации, а провайдер видит только шифрованный трафик до вашего сервера.
Чем отличается от платных аналогов
Ближайшие платные варианты - облачные фильтрующие DNS вроде NextDNS и AdGuard DNS по подписке.
| Параметр | AdGuard Home (self-hosted) | Облачный DNS по подписке |
|---|---|---|
| Модель цены | бесплатно, платите только за VPS | подписка + лимит запросов в тарифе |
| Лимит запросов | без лимита | квота, дальше - деньги или троттлинг |
| Где логи запросов | на вашем сервере | у провайдера сервиса |
| Свои списки фильтров | любые, полный контроль | ограничено набором сервиса |
| Шифрованный DNS (DoH/DoT/DoQ) | есть, на своем домене | есть |
| Обслуживание | ваше: сервер, TLS, обновления | на стороне сервиса |
Главный размен честный: облачный сервис вы включили и забыли, а self-hosted требует, чтобы вы сами следили за сервером, продлевали сертификат и не оставили открытый резолвер. Взамен - никаких лимитов, свои списки и логи только у вас.
Тех-стек и архитектура
Написан на Go, поставляется одним бинарником без внешних зависимостей - ни базы данных, ни рантайма ставить не нужно. Внутри: собственный DNS-резолвер с апстримом наверх (по умолчанию можно указать любой публичный DoH/DoT), движок фильтрации по спискам, веб-интерфейс для настройки и журнала запросов.
Все состояние - один YAML-файл AdGuardHome.yaml плюс папка с данными (статистика, журнал). В Docker удобнее всего запускать в host-режиме сети: DNS слушает порты напрямую, а веб-панель и шифрованные протоколы садятся на свои порты хоста. Для DoH/DoT/DoQ нужен валидный TLS-сертификат - его выпускаем через Let's Encrypt.
Минимальная конфигурация
AdGuard Home - один из самых легких self-hosted сервисов. Реальные требования сильно ниже, чем у типичного веб-стека.
| Официальный минимум RAM | ~256 MB |
| Реально в простое (контейнер) | ~43 MiB |
| Диск под образ + данные | < 1 GB (журнал растет со временем) |
| Минимальный тариф | CPU1-RAM1-DISK20 |
| Рекомендуем тариф | CPU2-RAM2-DISK20 |
Важно: ресурсов сервису нужно немного, самого маленького тарифа хватает с запасом. Второй ядро и лишний гигабайт берем не под сам AdGuard, а под TLS-нагрузку DoH и под рост журнала запросов, если клиентов много.
В маркетплейсе Fatmetal
Не хотите ставить руками?
Этот стек есть в маркетплейсе Fatmetal - можно не повторять установку из разбора вручную. Заказываете сервер, за пару минут получаете рабочий домен, валидный TLS и файл с доступами.
Рекомендуемая конфигурация:
2 vCPU · 4 ГБ RAM · 50 ГБ NVMe от 450 ₽/мес
Развертывание на Fatmetal
Базовый путь - Cloud Server + Ubuntu 24.04 + Docker. Ниже - вариант с шифрованным DNS на своем домене.
Создать VM и указать домен
Тариф CPU2-RAM2-DISK20, Ubuntu 24.04, приложение Docker. Заведите A-запись домена (например
dns.example.com) на IP сервера - он нужен для TLS-сертификата и для шифрованного DNS.Выпустить TLS-сертификат
DoH/DoT/DoQ работают только с валидным сертификатом. Берем его у Let's Encrypt (порт 80 должен быть свободен):
apt install -y certbot certbot certonly --standalone -d dns.example.comЗапустить AdGuard Home
docker run -d --name adguardhome --restart unless-stopped \ --network host \ -v /opt/adguardhome/work:/opt/adguardhome/work \ -v /opt/adguardhome/conf:/opt/adguardhome/conf \ -v /etc/letsencrypt:/etc/letsencrypt:ro \ adguard/adguardhome:v0.107.79Первый запуск открывает мастер настройки на порту
3000. Задайте логин, пароль и укажите апстрим (мы взяли Quad9 по DoH:https://dns10.quad9.net/dns-query).Включить шифрование и закрыть открытый резолвер
В разделе Encryption укажите домен и пути к сертификату Let's Encrypt - поднимутся DoH на 443, DoT и DoQ на 853. Затем отключите прием обычного DNS на порту 53 снаружи (в конфиге
serve_plain_dns: false) и оставьте открытыми только 443 и 853. Проверка ниже.
Client-ID в адресе. Чтобы разделять клиентов и списки, AdGuard дает эндпоинт вида https://dns.example.com/dns-query/home - суффикс home и есть идентификатор клиента. На телефоне в приватном DNS указываете именно этот адрес.
Что измерили после запуска
Цифры со свежей установки на тарифе CPU2-RAM2-DISK20, без нагрузки. Только реальные замеры.
| RAM контейнера в простое | ~43 MiB |
| CPU в простое | ~0.03% |
| Среднее время обработки запроса | ~53 мс |
| Среднее время ответа апстрима (DoH) | ~91 мс |
| Память хоста под все | ~431 из 1967 MB |
Главное: по ресурсам это почти ничего. 43 MiB на контейнер - редкий случай, когда сервис реально влезает в самый маленький тариф. Основное время в ответе - это поход наверх к апстриму (91 мс), сам AdGuard добавляет считанные миллисекунды.
Проверено на версии v0.107.79, август 2026. На новых версиях результаты могут отличаться.
Где может сломаться
Реальные грабли, на которые наткнулись при запуске в облаке.
Открытый резолвер. Если оставить обычный DNS на порту 53 доступным из интернета, ваш сервер станет открытым резолвером - его начнут использовать для DNS-амплификации, и хостер пришлет abuse. На VPS обычный 53 наружу закрываем: либо serve_plain_dns: false, либо файрвол, а снаружи оставляем только шифрованные DoH/DoT/DoQ.
Порт 80 занят под certbot. Выпуск сертификата в режиме standalone требует свободный порт 80. Если на нем уже что-то висит, certbot не пройдет валидацию. Освободите 80 на время выпуска или используйте DNS-валидацию.
Причина. Клиент подключается к DoH/DoT по имени домена, но сертификат самоподписанный или не совпадает с доменом - телефон и системные резолверы такое соединение рвут.
Решение. Использовать валидный сертификат Let's Encrypt на том же домене, который вбиваете в приватный DNS клиента. Проверить срок: openssl s_client -connect dns.example.com:853.
Безопасность и обновления
Минимальный набор для облака: закрыть обычный DNS на 53 снаружи, оставить открытыми только 443 (DoH) и 853 (DoT/DoQ), веб-панель (порт 3000) не выставлять в интернет, админку - под паролем. AdGuard хранит хэш пароля (bcrypt) и умеет блокировать перебор (лимит попыток входа). Апстрим стоит держать по DoH/DoT, чтобы и путь наверх был шифрованным.
Обновление - подмена образа на новую версию:
docker pull adguard/adguardhome:latest
docker stop adguardhome && docker rm adguardhome
# запустить docker run с новым образом (том с данными сохраняется)
Бэкап - это папка с конфигом и данными:
tar czf adguard-backup.tar.gz /opt/adguardhome/conf /opt/adguardhome/work
Связь с другими стеками
- VPN - связка с личным VPN: DNS-фильтрация применяется ко всему туннелю, реклама режется в любой сети.
- Reverse proxy - Caddy или Nginx, если хотите отдать веб-панель по отдельному поддомену за TLS.
- Мониторинг - Uptime Kuma для проверки, что DoH-эндпоинт жив, плюс алерт на приближение срока сертификата.
А нужен ли свой DNS на телефоне? Скорее нет
Мы прогнали мобильный сценарий на живом телефоне и сверились с журналом сервера. Результат отрезвляющий, и прятать его мы не стали.
На телефоне уже работает приложение AdGuard, и оно режет рекламу и трекеры своими встроенными фильтрами прямо на устройстве - еще до того, как запрос уйдет на любой DNS. В тесте на adblock-tester.com приложение само набрало 68 из 100. А наш удаленный DNS-сервер за то же окно получил 118 запросов с телефона и заблокировал из них всего 9 (реклама ad.mail.ru, ads.adfox.ru) - около 8%. Почти всю чистку на телефоне делает приложение, а не сервер.
Вывод по мобильному сценарию. Поднимать под один телефон отдельный шифрованный DNS с client-ID - лишняя возня без выигрыша. Нужна чистка рекламы на телефоне - поставьте приложение AdGuard, свой сервер для этого не требуется.
Свой DNS-сервер реально оправдан в другом: одна настройка в домашнем роутере фильтрует сразу все устройства сети - телефоны, телевизор, гостевой Wi-Fi - без приложения на каждом. Но это сценарий для тех, кто готов возиться с роутером, а не «поставил на телефон и забыл». Если коротко: продукт про контроль DNS и фильтрацию на уровне сети, а не про «меньше рекламы на моем телефоне».
Когда это НЕ ваш выбор
Нужен блокировщик только в браузере
Если задача - убрать рекламу на одном ноутбуке, расширение uBlock Origin проще и умеет прятать элементы на странице, чего DNS-фильтр не делает в принципе.
Не готовы обслуживать сервер
DNS - критичный сервис: если он ляжет, интернет пропадет на всех устройствах, что на него настроены. Если не хотите следить за аптаймом, сертификатом и обновлениями, облачный DNS по подписке снимет эту заботу.
Killer-use у AdGuard Home - дома, а не в облаке
Максимум пользы он дает на роутере или мини-сервере в домашней сети, где фильтрует весь трафик локально. Облачный сценарий на VPS - это отдельная задача (личный шифрованный DNS для мобильных устройств), и именно ее мы разбирали.
Частые вопросы
Хватит ли 1 GB RAM?
Да, с большим запасом: в простое контейнер держит около 43 MiB. Самый маленький тариф закрывает задачу.
Можно поставить без Docker?
Да, это один бинарник на Go - есть установка скриптом прямо в систему. Docker удобнее для обновлений и изоляции, поэтому разбирали именно его.
Как не стать открытым резолвером?
Закрыть обычный DNS на порту 53 снаружи (serve_plain_dns: false или файрвол) и оставить только шифрованные DoH/DoT/DoQ. Мы это проверили: обычный 53 снаружи не отвечает.
Зачем нужен домен и сертификат?
Шифрованный DNS (DoH/DoT/DoQ) работает только с валидным TLS на реальном домене. Самоподписанный сертификат клиенты отвергают.
Стоит ли подключать телефон к своему DNS?
Технически можно: в приватном DNS указать адрес вида https://dns.example.com/dns-query/home. Но для одного телефона это лишняя возня - приложение AdGuard режет рекламу локально и эффективнее. Подробнее в разделе «А нужен ли свой DNS на телефоне».
Режет ли он рекламу в приложениях и на YouTube?
Частично. Рекламу, которая идет с отдельных доменов, режет. Рекламу с тех же доменов, что и контент (как у YouTube), DNS-фильтр не убирает.
Какая лицензия?
GPL-3.0, полностью бесплатно, коммерческое использование разрешено.
Итог
AdGuard Home - легкий (около 43 MiB в простое) и понятный способ фильтровать рекламу и трекеры на уровне сети. Дома его место на роутере, а на VPS он превращается в личный шифрованный DNS, который работает с телефона из любой сети. Главное при облачном сценарии - выпустить валидный TLS, закрыть обычный DNS на 53 снаружи и не оставить открытый резолвер.
Рекомендуемая конфигурация для установки:
2 vCPU · 4 ГБ RAM · 50 ГБ NVMe
Не хотите устанавливать вручную?
Запустите AdGuard Home на этой конфигурации автоматически - от 450 ₽/мес.
Этот стек у нас запущен на тарифе CPU2-RAM2-DISK20. Нашли баг в гайде - напишите, поправим в течение дня.