Перейти к содержанию

AdGuard Home

Сам DNS-фильтр: включена ли защита, работает ли его DNS-сервер, что он ответил и блокировал, обновляются ли ещё его списки фильтров, отвечают ли его внешние серверы, и доступна ли более новая версия.

Сломанный DNS-фильтр не выглядит сломанным. Страницы продолжают открываться, со своей рекламой. Обычные отказы тихие: защита поставлена на паузу «на час» из приложения на телефоне и никогда не включена обратно, списки фильтров перестали загружаться недели назад, внешний сервер DNS-over-HTTPS больше не отвечает, так что каждый запрос ждёт следующего.

DumbMonit читает REST API AdGuard Home (/control) с базовой аутентификацией HTTP. Проверено на AdGuard Home v0.107.79 (и проверке версии v0.107.78).

Что отслеживается

Все метрики с префиксом dumbmonit_adguard_. Показатели запросов и блокировок — это суммы за окно статистики AdGuard Home (24 часа, если не изменено в Settings → General settings), а не счётчики: они растут и падают по мере скольжения окна, и хранятся как есть.

Метрика Что Метки
running 1, когда DNS-сервер работает
protection_enabled 1, когда защита включена
protection_paused_seconds время, оставшееся до возврата защиты на паузе, 0 без паузы
version_info значение 1 version
dns_queries запросы в окне статистики
blocked_filtering запросы, блокированные списками фильтров и собственными правилами
replaced_safebrowsing, replaced_parental, replaced_safesearch ответы, заменённые Browsing security, Parental control, Safe search
blocked_percent доля блокированных запросов (фильтры, Browsing security, Parental control); отсутствует без единого запроса
avg_processing_seconds среднее время ответа
stats_window_seconds, stats_enabled окно статистики и хранится ли статистика (0.107.30 и новее)
upstream_responses, upstream_avg_seconds ответы и среднее время ответа на внешний сервер в окне, как показывает Top upstreams панели (не более 8) upstream
upstream_up 1, когда собственная проверка AdGuard Home этого внешнего сервера проходит; 0 — когда отказывает или не отвечает за 4 секунды (не более 8). Метка — это внешний сервер, как его записывает AdGuard Home в своей статистике (https://dns10.quad9.net:443/dns-query, 192.0.2.1:53); для внешнего сервера, оставшегося молчащим, — строка как настроена. upstream
filtering_enabled 1, когда фильтрация включена в Settings → General settings
filters, filters_enabled настроенные списки блокировки, и включённые
filter_rules правила, загруженные из включённых списков
filter_rules_count, filter_update_age_seconds на каждый включённый список (не более 32) filter
filter_oldest_update_age_seconds возраст самого старого обновления среди включённых списков
filters_never_updated включённые списки, которые никогда не загружались
filter_update_interval_hours как часто обновляются списки; 0 отключает обновления
update_check_enabled 0, когда AdGuard Home работает с отключённой проверкой версии
update_available 1, когда последняя проверка версии объявила более новую версию; отсутствует, когда проверка отключена latest
scrape_errors второстепенные вызовы, завершившиеся ошибкой при последней проверке

Проверка версии отключена в официальном образе Docker и в большинстве пакетов дистрибутивов, которые обновляют AdGuard Home сами: там update_available никогда не записывается, и его правило молчит.

Статистика внешних серверов считает только ответы: внешний сервер, который перестаёт отвечать, не оставляет в ней следа. Поэтому DumbMonit просит AdGuard Home проверять каждый внешний сервер при каждой проверке — тот же тест, что кнопка Test upstreams в Settings → DNS settings: один DNS-запрос от AdGuard Home к этому серверу. Мёртвый внешний сервер заставил бы AdGuard Home ждать дважды его собственный таймаут (по умолчанию 20 секунд); DumbMonit перестаёт ждать через 4 секунды и сообщает его как недоступный. Снимите отметку с опции Test upstream servers, чтобы это отключить.

Применяемые встроенные правила: «Защита AdGuard Home выключена», «DNS AdGuard Home не работает», «Внешний DNS AdGuard Home не отвечает», «Списки фильтров AdGuard Home устарели», «Доступно обновление AdGuard Home», плюс «Монитор недоступен».

Страница монитора

Панель над графиками читает то, что сохранила проверка; открытие страницы никогда не подключается к AdGuard Home. Она сообщает, включены ли защита и DNS-сервер (и когда заканчивается пауза), затем — запросы, блокировки и время ответа за окно статистики, внешние серверы с результатом их проверки и временем ответа, и списки фильтров с их правилами и последним обновлением.

Добавление пользователя для DumbMonit в AdGuard Home

  1. У AdGuard Home нет учётной записи только для чтения: каждый пользователь, перечисленный в AdGuardHome.yaml, может менять каждую настройку. Дайте DumbMonit собственного пользователя, чтобы его можно было удалить, не трогая вашего. Сначала создайте bcrypt-хеш длинного случайного пароля (htpasswd идёт с пакетом apache2-utils или httpd-tools):

    htpasswd -B -C 10 -n -b dumbmonit 'LONG-RANDOM-PASSWORD'
    
  2. Остановите AdGuard Home, откройте AdGuardHome.yaml (рядом с бинарным файлом AdGuardHome, либо в папке conf тома Docker) и добавьте эту строку под «users:», с тем же отступом, что уже есть у строки «- name:». Замените HASH тем, что htpasswd вывел после «dumbmonit:». Запустите AdGuard Home снова.

    - { name: dumbmonit, password: "HASH" }
    

    Тогда раздел читается так:

    users:
      - { name: dumbmonit, password: "$2y$10$…" }
      - name: yourname
        password: $2a$10$…
    
  3. Проверьте с хоста DumbMonit, что пользователь принят:

    curl -u dumbmonit http://adguard.lan/control/status
    
  4. В DumbMonit введите адрес веб-интерфейса AdGuard Home, например «adguard.lan» (порт 80) или «http://adguard.lan:3000», затем пользователя dumbmonit и его пароль.

  5. DumbMonit читает только статус, статистику, списки фильтров и последнюю проверку версии. Он никогда не читает журнал запросов. При каждой проверке он просит AdGuard Home протестировать каждый внешний DNS-сервер, как делает кнопка Test upstreams; снимите отметку с Test upstream servers ниже, чтобы это остановить.

Warning

Пользователь dumbmonit может менять каждую настройку, как любой пользователь AdGuard Home: храните его пароль только для DumbMonit. Он путешествует с каждым запросом, поэтому в недоверенной сети включите HTTPS в Settings → Encryption settings. После пяти неверных паролей AdGuard Home отклоняет адрес на 15 минут.

AdGuard Home должен быть остановлен, пока вы редактируете файл: он перезаписывает AdGuardHome.yaml при каждом изменении настройки и отбросил бы строку, добавленную во время работы.

Учётные данные

Учётные данные Поля
Имя пользователя / пароль Выделенный пользователь, добавленный в AdGuardHome.yaml, отправляется как базовая аутентификация HTTP.
Без аутентификации Только для AdGuard Home вообще без пользователей в AdGuardHome.yaml.

Адрес: имя хоста или IP (adguard.lan), host:port, или полный URL с префиксом пути за обратным прокси (https://dns.lan/adguard); завершающий /control игнорируется. Опции: протокол (по умолчанию HTTP), порт (80), проверка сертификата, таймаут запроса (5 с) и тест внешних серверов (включён).

Вызовы

Вызов Почему
GET /control/status работа, защита, версия: единственный вызов, чей отказ проваливает проверку
GET /control/stats, GET /control/stats/config запросы, блокировки, ответы внешних серверов, окно статистики
GET /control/filtering/status списки фильтров
POST /control/version.json с {"recheck_now": false} результат последней проверки версии, как его читает веб-интерфейс при каждой загрузке страницы; никогда не форсирует новую проверку
GET /control/dns_info, затем POST /control/test_upstream_dns на каждый внешний сервер настроенные внешние серверы и bootstrap-серверы, затем тест внешнего сервера; не меняет ни одну настройку