Новые релизы
Сравнение версии рецепта с последним известным релизом upstream. Это номер версии, а не разбор изменений.
AdGuard Home заменяет DNS-резолвер роутера и фильтрует рекламу, трекеры и вредоносные домены сразу на всех устройствах сети, включая телевизоры и смартфоны без возможности установить блокировщик. Один контейнер, веб-панель со статистикой и журналом запросов, поддержка DNS-over-HTTPS и DNS-over-TLS.
AdGuard Home — DNS-сервер, который встаёт между устройствами сети и интернетом и отбрасывает запросы к рекламным, трекерным и вредоносным доменам. Блокировка работает на уровне сети, поэтому охватывает телевизоры, приставки, умные колонки и гостевые устройства, куда нельзя поставить браузерное расширение.
Кроме фильтрации сервер умеет быть обычным резолвером: поддерживает DNS-over-HTTPS и DNS-over-TLS к upstream-серверам, кеширует ответы, ведёт журнал запросов и показывает статистику по клиентам. Отдельные правила и расписания можно назначать конкретным устройствам.
Рецепт запускает один контейнер с двумя Docker volume и панелью управления на
127.0.0.1:3000. Встроенный DHCP-сервер AdGuard Home в рецепт не включён: ему
нужен host network или macvlan, что несовместимо с изолированной сетью Compose.
Контейнер работает без privileged, host network и Docker socket, с
no-new-privileges. Панель управления публикуется только на 127.0.0.1 —
администратор DNS видит историю посещений всей сети, и выставлять её наружу без
HTTPS и авторизации нельзя.
Главный риск специфичен для DNS: сервер, слушающий порт 53 на публичном
интерфейсе, становится open resolver и используется в атаках DNS-амплификации.
Поэтому ADGUARD_DNS_BIND по умолчанию равен 127.0.0.1, а в инструкции
предлагается указывать конкретный адрес LAN-интерфейса, а не 0.0.0.0. На VPS
доступ к DNS следует давать только через VPN.
Второй риск — приватность самих данных: журнал запросов хранит домены, которые открывают все устройства сети. Срок хранения и анонимизацию клиентов задают в настройках журнала.
Это сохранённые результаты отдельных проверок, а не данные в реальном времени. Неизвестный статус означает, что проверка ещё не выполнялась.
Сравнение версии рецепта с последним известным релизом upstream. Это номер версии, а не разбор изменений.
Результат отдельного сканирования Docker-образов, а не проверки Compose.
Новый major находится сравнением номеров версий. Вердикт о совместимости заносится вручную после чтения release notes и порядка миграции.
Изменения upstream Compose относительно проверенного рецепта.
Проверка закреплённых тегов образов на наличие новых версий.
От наблюдения к действию
Рецепт уже закрепляет последний известный релиз. Ниже показаны сохранённые основания для этой версии.
v0.107.79v0.107.79Открыть релиз на GitHub ↗ Ссылка нужна для ревизии и сама по себе не доказывает совместимость.
Номера версий не пересекают major-границу совместимости. Вердикт о совместимости не записан.
Смена тегов образов сейчас не планируется.
Смена тега и перезапуск. Шаги конкретного релиза всё равно берутся из release notes и инструкции по установке.
Смена версии сейчас не планируется. Рецепт содержит процедуру backup. Restore проверен.
Точная проверка уровня «Проверен полностью» для этой версии записана 2026-08-31.
Статус показывает, насколько опубликованный рецепт покрывает требования каждого уровня.
Минимальная конфигурация для локальной сети или доступа через VPN.
Рецепт закрывает все требования этого уровня.
Публичная установка с защищённым доступом и резервными копиями.
Нужно добавить вручную: домен, https через reverse proxy, backup вне сервера.
Конфигурация для предсказуемой эксплуатации и наблюдаемости.
Нужно добавить вручную: отдельная бд, внешний мониторинг, лимиты cpu и памяти.
Собрать под свой сервер
Ответьте на пять вопросов и скачайте готовый комплект AdGuard Home.
Сначала прочитайте полную инструкцию: в ней описаны доступ извне, backup и расположение данных.
cp .env.example .envdocker compose up -ddocker compose psМинимум: 1 CPU, 256 МБ RAM и 2 ГБ на диске. Рекомендуется 512 МБ RAM — расход растёт вместе с размером кеша, журнала запросов и подключённых блок-листов. Нужны Ubuntu 22.04+ или Debian 12+ с Docker Engine и Docker Compose v2.24+. Отдельная база данных не требуется.
docker --version
docker compose version
На Ubuntu и Debian порт 53 почти всегда занят systemd-resolved. Проверьте:
sudo ss -lunp | grep ':53 '
Если в выводе есть systemd-resolve, отключите его локальный слушатель, но
оставьте службу работающей — иначе сам сервер потеряет разрешение имён:
sudo mkdir -p /etc/systemd/resolved.conf.d
printf '[Resolve]\nDNSStubListener=no\n' | sudo tee /etc/systemd/resolved.conf.d/adguardhome.conf
sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
sudo systemctl restart systemd-resolved
sudo ss -lunp | grep ':53 ' || echo "порт 53 свободен"
Ссылка на /run/systemd/resolve/resolv.conf оставляет хосту рабочие
upstream-серверы. Не направляйте /etc/resolv.conf на сам AdGuard Home, пока он
не запущен: иначе сервер останется без DNS.
Поместите compose.yaml, .env.example, backup.sh, restore.sh и каталог
proxy в отдельный каталог:
mkdir -p ~/services/adguard-home
cd ~/services/adguard-home
cp .env.example .env
chmod 600 .env
В .env заданы:
ADGUARD_VERSION — закреплённый тег образа, с префиксом v;ADGUARD_DNS_BIND — адрес, на котором публикуется DNS, по умолчанию 127.0.0.1;ADGUARD_DNS_PORT — внешний порт DNS, обычно 53;ADGUARD_WEB_PORT — локальный порт панели управления, по умолчанию 3000;ADGUARD_CONF_VOLUME — volume с AdGuardHome.yaml: пользователи, upstream-серверы, правила;ADGUARD_WORK_VOLUME — volume со статистикой, журналом запросов и скачанными блок-листами;TZ — часовой пояс, от него зависят графики и расписания.Все пользовательские данные лежат только в этих двух volume. В каталоге рецепта никаких данных не остаётся.
docker compose pull
docker compose up -d
docker compose ps
С настройками по умолчанию наружу не смотрит ни один порт: DNS и панель
привязаны к 127.0.0.1. На VPS так и должно остаться — доступ к резолверу
дают через VPN (WireGuard, Tailscale), указав в ADGUARD_DNS_BIND адрес
интерфейса VPN. Открывать порт 53 на публичном адресе нельзя: сервер станет
open resolver и будет использоваться для DNS-амплификации.
Панель доступна только локально, поэтому пробросьте порт по SSH:
ssh -L 3000:127.0.0.1:3000 user@server.example
Откройте http://localhost:3000. В мастере оставьте веб-интерфейс на порту
3000, а DNS на порту 53 — эти номера соответствуют портам внутри контейнера
из compose.yaml. Если выбрать другие, healthcheck и проброс портов перестанут
совпадать с конфигурацией. Задайте имя администратора и длинный пароль,
сохраните его в менеджере паролей.
После мастера проверьте работу сервера:
docker compose exec adguard-home nslookup example.org 127.0.0.1
Чтобы устройства сети пользовались фильтрацией, DNS должен слушать на
LAN-интерфейсе. Укажите в .env конкретный адрес сервера и пересоздайте
контейнер:
sed -i 's/^ADGUARD_DNS_BIND=.*/ADGUARD_DNS_BIND=192.168.1.10/' .env
docker compose up -d
Не ставьте 0.0.0.0: на VPS это откроет резолвер всему интернету. Закройте порт
53 на внешнем интерфейсе firewall и разрешите его только из локальной подсети:
sudo ufw allow from 192.168.1.0/24 to any port 53 proto udp
sudo ufw allow from 192.168.1.0/24 to any port 53 proto tcp
Дальше пропишите адрес сервера как DNS в роутере — тогда фильтрация включится
для всех устройств сразу. Панель управления при этом остаётся на 127.0.0.1.
Через reverse proxy публикуется только панель управления: DNS работает по своему
протоколу и через HTTP proxy не проходит. Готовые примеры лежат в
proxy/Caddyfile, proxy/nginx.conf и proxy/traefik.yaml, замените в них
dns.example.com своим доменом. Caddy получает сертификат автоматически, пример
Nginx предполагает сертификат Certbot, Traefik использует resolver
letsencrypt. Для Traefik в контейнере замените 127.0.0.1 на адрес host
gateway, доступный контейнеру.
Панель управления показывает историю запросов всей сети, поэтому доступ к домену стоит дополнительно ограничить по IP или базовой авторизацией на стороне proxy. Публиковать DNS-over-HTTPS средствами самого AdGuard Home этот рецепт не настраивает: для этого понадобится отдельно пробросить порт 443 и передать серверу сертификат.
Данные лежат в volume adguard-home-conf и adguard-home-work. Скрипт
архивирует оба сразу — конфигурация без статистики восстанавливается
рассогласованно:
chmod +x backup.sh restore.sh
./backup.sh
Архив появится в ./backups. Он содержит AdGuardHome.yaml с логином и хешем
пароля администратора, поэтому храните копию вне сервера и в защищённом месте.
Восстановление полностью заменяет содержимое обоих volume выбранным архивом:
./restore.sh ./backups/adguard-home-YYYYMMDDTHHMMSSZ.tar.gz
docker compose ps
Перед распаковкой скрипт создаёт страховочную копию текущих данных.
Отключите встроенное автообновление в панели — версия задаётся тегом образа.
Создайте backup, прочитайте release notes, измените ADGUARD_VERSION в .env
(не забудьте префикс v), затем выполните:
./backup.sh
docker compose pull
docker compose up -d
docker compose ps
docker compose logs --tail=100 adguard-home
Верните прежнее значение ADGUARD_VERSION в .env и выполните
docker compose pull и docker compose up -d. AdGuard Home хранит настройки в
AdGuardHome.yaml и при запуске приводит файл к формату своей версии, поэтому
после отката старый бинарник может не прочитать обновлённый конфиг. В этом
случае восстановите архив, созданный перед обновлением:
./restore.sh ./backups/adguard-home-YYYYMMDDTHHMMSSZ.tar.gz
Отдельной базы данных у приложения нет, миграции ограничены этим файлом.
Сохранить данные: docker compose down. Удалить контейнер и все данные
безвозвратно:
docker compose down
docker volume rm adguard-home-conf adguard-home-work
rm -rf ~/services/adguard-home
Не забудьте вернуть прежний DNS в роутере и на устройствах, иначе сеть останется без разрешения имён. Если отключали stub listener, верните его:
sudo rm /etc/systemd/resolved.conf.d/adguardhome.conf
sudo systemctl restart systemd-resolved
Источники: установка в Docker, настройка после установки и конфигурация.
Порт занят systemd-resolved или другим резолвером:
sudo ss -lunp | grep ':53 '
docker compose logs --tail=100 adguard-home
Отключите stub listener по шагу 2 инструкции. Если порт держит другой контейнер,
найдите его через docker ps — два DNS-сервера на одном адресе не уживаются.
Healthcheck обращается к панели на порту 3000 внутри контейнера:
docker compose ps
docker inspect --format '{{json .State.Health}}' "$(docker compose ps -q adguard-home)"
Самая частая причина — в мастере первичной настройки выбран другой порт
веб-интерфейса. Верните 3000 в AdGuardHome.yaml (ключ http.address) либо
поправьте healthcheck и проброс портов в compose.yaml под выбранный порт.
Проверьте, на каком адресе опубликован порт:
docker compose port adguard-home 53/udp
Если ответ начинается с 127.0.0.1, значение ADGUARD_DNS_BIND не менялось.
Укажите адрес LAN-интерфейса сервера и выполните docker compose up -d. Затем
проверьте с клиента:
nslookup example.org 192.168.1.10
Пустой ответ при работающем сервере обычно означает firewall: порт 53 нужен и по UDP, и по TCP.
Проверьте, что устройство действительно ходит через сервер: в журнале запросов должны появляться его домены. Многие браузеры и телефоны используют собственный DNS-over-HTTPS в обход системных настроек — его отключают в настройках браузера или блокируют правилом на роутере. Реклама, встроенная в тот же домен, что и контент (например, в ленте соцсети), DNS-фильтрацией не убирается принципиально.
Найдите домен в журнале запросов, откройте карточку записи и нажмите разблокировку —
правило @@||domain^ попадёт в собственный список исключений. Проверить, какое
правило сработало, можно и без запроса:
curl -u admin:password 'http://127.0.0.1:3000/control/filtering/check_host?name=example.org'
Контейнер не увидел конфигурацию — почти всегда это другой volume:
docker volume inspect adguard-home-conf
docker compose config
Не проходите мастер повторно, пока не проверите путь к данным: новая установка
перезапишет AdGuardHome.yaml. Если volume потерян, восстановите архив через
./restore.sh.
Сброс делается только правкой конфигурации: остановите контейнер, откройте
AdGuardHome.yaml в volume adguard-home-conf и замените хеш в блоке users
на новый bcrypt-хеш, затем запустите контейнер. Перед правкой сделайте backup.
Fossary — независимый информационный каталог, не связанный с разработчиками представленных приложений. Мы собираем сведения из открытых источников и проверяем опубликованные рецепты, но не разрабатываем, не распространяем и не контролируем эти приложения.
Публикация карточки или статус проверки не являются требованием, навязыванием либо персональной рекомендацией использовать приложение. Вы самостоятельно решаете, подходит ли оно вам, и используете его на свой риск. Мы не гарантируем безопасность, доступность или пригодность приложения и, в пределах, допускаемых законом, не отвечаем за вызванные им потери или ущерб. До установки проверьте лицензию, настройки безопасности, обработку данных и резервное копирование.