Как настроить DNS для определенных устройств на Keenetic роутере с AdGuard Home?
Ситуация:
- Роутер Keenetic GIGA, версия ОС 4.3.6.3
- AdGuard Home развернут на локальном хосте Ubuntu 24 через Docker
- В настройках роутера в меню “Интернет фильтры” установлен режим “Публичные DNS резолверы”
- Создан профиль “Профиль модерация” с DNS сервером 192.168.1.20 (адрес AdGuard Home)
Проблема:
При назначении этого профиля устройству перестает работать интернет. DNS и nslookup выдают ошибку:
“UnKnown не удалось найти ya.ru: Query refused”
Тестирование:
Явный запрос DNS работает корректно:
nslookup ya.ru 192.168.1.20
Вопрос:
Как правильно настроить интернет фильтры на Keenetic роутере, чтобы для определенных устройств DNS запросы проходили через 192.168.1.20 (AdGuard Home) без потери интернет соединения?
Keenetic DNS AdGuard Home: самый надёжный путь — создать профиль DNS, применить его к отдельному сегменту сети и убедиться, что AdGuard Home на Ubuntu/Docker слушает на всех интерфейсах и порт 53 открыт. Если после назначения профиля вы видите “Query refused”, скорее всего роутер блокирует транзит через интернет‑фильтры или AdGuard отказывается от запросов из‑за биндинга/нат в Docker — исправляется применением профиля к сегменту, включением разрешения транзита или (при аккуратной подготовке) отключением встроенного DNS через opkg dns-override.
Содержание
- Как работает DNS в Keenetic и почему появляется Query refused
- Быстрая проверка: что сделать прямо сейчас
- Настройка DNS профилей Keenetic и сегментов сети (рекомендованный вариант)
- AdGuard Home на Keenetic: проверка и корректная настройка (Docker/Ubuntu)
- Расширенные опции: «Разрешить транзит» и opkg dns-override
- Диагностика: как понять, кто отказывает в запросе
- Частые ошибки и быстрые исправления
- Источники
- Заключение
Как работает DNS в Keenetic и почему появляется Query refused
Keenetic в режиме “Публичные DNS-резолверы” использует механизм интернет‑фильтров: роутер перенаправляет DNS‑запросы клиентов через выбранный профиль (публичный резолвер или заданный IP). Если профиль указывает на внешний сервис — всё обычно работает. Но при указании локального адреса (ваш AdGuard Home на 192.168.1.20) могут возникнуть две группы проблем:
- Keenetic блокирует или модифицирует транзит DNS внутри механизма фильтрации, поэтому запросы не проходят через профиль — результатом бывает “Query refused”.
- AdGuard Home физически не принимает или отказывает запросы от роутера (биндинг интерфейсов, Docker‑NAT, правила файрвола или список разрешённых клиентов).
Решение — не гадать: привести в порядок и роутер, и AdGuard, и способ передачи DNS (через сегмент/профиль или как основной резолвер). Официальное описание интернет‑фильтров и профилей DNS смотрите в документации Keenetic: Интернет‑фильтры (Контентная фильтрация) и по созданию профиля DNS: Создание DNS‑профиля без фильтрации.
Быстрая проверка: что сделать прямо сейчас
Перед тем как перелазить через настройки роутера — проверьте очевидное. У вас уже есть полезная проверка:
nslookup ya.ru 192.168.1.20— ответ есть. Это значит, что AdGuard сам по себе отвечает на запросы. Хорошо.
Дальше проверьте ещё:
- AdGuard действительно слушает на 0.0.0.0:53 (или нужном LAN‑интерфейсе) и на UDP+TCP. На хосте Ubuntu выполните:
sudo ss -lunp | grep :53
sudo ss -ltunp | grep :53
- Если AdGuard в Docker — проверьте, как проброшены порты (рекомендуется сетевой режим host или корректная проброска
-p 53:53/udp -p 53:53/tcp). Пример с host‑сетью:
docker run --name adguardhome --network host -v /srv/adguard/work:/opt/adguardhome/work -v /srv/adguard/conf:/opt/adguardhome/conf adguard/adguardhome
- Файрвол Ubuntu: откройте 53/tcp и 53/udp:
sudo ufw allow 53/tcp
sudo ufw allow 53/udp
- Проверьте, от какого IP приходят запросы в логах AdGuard (в веб‑интерфейсе AdGuard Home — Query log). Если источник — не 192.168.1.X, а например 172.17.X или 127.0.0.1, то Docker‑NAT или локальный прокси изменяют адрес — это часто вызывает отказ.
Если все выше в порядке, переходим к правильной настройке профилей и сегментов в Keenetic.
Настройка DNS профилей Keenetic и сегментов сети (рекомендованный вариант)
Почему сегмент? Потому что назначение DNS‑профиля прямо на устройство в интерфейсе иногда даёт неожиданные результат (включая “Query refused”). Проверенный рабочий план — профиль → сегмент → устройства.
Шаги:
- Создайте DNS‑профиль:
- В веб‑интерфейсе Keenetic откройте раздел DNS / Интернет‑фильтры → Профили DNS → + Добавить профиль.
- Укажите имя, например “Профиль модерация”, и в качестве DNS‑сервера впишите 192.168.1.20. Сохраните профиль. (См. инструкцию Keenetic: Создание DNS‑профиля без фильтрации.)
- Создайте отдельный сегмент сети:
- Мои сети и Wi‑Fi → + Добавить сегмент (например: Moderation / Модерация).
- В настройках сегмента примените созданный DNS‑профиль к этому сегменту (в Keenetic профиль DNS привязывается к сегменту — тогда все устройства в сегменте получают заданный профиль автоматически).
- Перенесите нужные устройства в сегмент:
- Для Wi‑устройств — привяжите их к соответствующей Wi‑сети (SSID), либо назначьте устройство в разделе устройств и укажите сегмент. Для проводных — статический DHCP‑лид или привязка к порту/сегменту.
- Проверьте:
- С устройства в сегменте выполните
nslookup ya.ru(без указания сервера). Результат должен приходить от 192.168.1.20.
Этот подход именно тот, который рекомендовали в практическом решении на Хабр Q&A — создать сегмент и назначить профиль сегменту, чтобы избежать “Query refused”: Habr Q&A.
Если при этом всё ещё происходит “Query refused” — см. следующий раздел про транзит и CLI.
AdGuard Home на Keenetic: проверка и корректная настройка (Docker/Ubuntu)
AdGuard Home должен принимать запросы от роутера без отказов. Основные моменты:
- Listen interfaces: в веб‑интерфейсе AdGuard установите DNS-сервис на «Все интерфейсы» и порт 53 (как советует опыт установки AdGuard для Keenetic): пример установки и рекомендации.
- Docker: лучший вариант — запускать контейнер в host‑сети, тогда исходный IP клиента (Keenetic) сохранится и AdGuard будет видеть 192.168.x. Это устраняет проблемы с NAT‑адресацией контейнера. Если вы пробрасываете порты через bridge, убедитесь, что UDP+TCP 53 проброшены и container действительно слушает на нужном интерфейсе.
- Firewall: откройте 53/tcp и 53/udp на Ubuntu‑хосте. Проверка:
sudo ufw status
sudo ss -lunp | grep :53
- Логи AdGuard: если в логах видно REFUSED — смотрите источник запроса и правила клиента. Возможно, в AdGuard включены ограничения по клиентам/сетям.
Полезная страница по настройке AdGuard и Keenetic: AdGuard KB для Keenetic.
Расширенные опции: «Разрешить транзит» и opkg dns-override
Если профиль на сегменте и корректный AdGuard не помогли, есть два более радикальных варианта:
-
«Разрешить транзит» или отключить интернет‑фильтр в Keenetic. В простых словах — позволить роутеру не обрабатывать DNS через встроенные фильтры, а просто транзитить запросы к назначенному резолверу. В Habr Q&A советовали либо отключить фильтр, либо добавить правило «Разрешить транзит» в разделе Интернет‑фильтры. Это часто решает конфликт между встроенным DNS‑механизмом и локальным DNS‑сервером.
-
Отключить встроенный DNS‑прокси Keenetic через CLI (опасно, но эффективно): команда
opkg dns-overrideи затемsystem configuration save(как описано в развернутых инструкциях по установке AdGuard на Keenetic). Внимание — после этого доступ в интернет может временно пропасть, пока AdGuard не будет корректно доступен и не начнёт отвечать на запросы. Инструкция по шагам установки/отключения встроенного резолвера и последствиям есть в сообществе: Dartraiden — AdGuard Home + Keenetic.
Выбор между «разрешить транзит» и opkg dns-override зависит от того, хотите ли вы оставить интернет‑фильтры Keenetic в работе или полностью перевести резолвинг на AdGuard.
Диагностика: как понять, кто отказывает в запросе
Порядок действий, если всё ещё видите “Query refused”:
- С клиента:
nslookup ya.ru 192.168.1.20— если работает, значит AdGuard отвечает. - С клиента:
nslookup ya.ru(без сервера) — получает ли клиент ответ? Если нет, значит DHCP/профиль не выдал корректный DNS или роутер блокирует транзит. - В логах AdGuard посмотрите источник отклонённого запроса — какой IP приходит. Если это 127.0.0.1/172.x, у вас проблема NAT; если 192.168.1.1 (роутер), но AdGuard отвечает REFUSED — проверьте список разрешённых клиентов в AdGuard.
- На Ubuntu можно прослушать трафик:
sudo tcpdump -n -i any port 53
Это покажет, приходят ли запросы от роутера к хосту и в каком виде.
5. Проверьте в Keenetic: применён ли профиль к нужному сегменту и не перекрывают ли правила интернет‑фильтров этот трафик (журнал/diagnostics в интерфейсе Keenetic).
Если потребуется, приведите фрагменты логов AdGuard и вывод tcpdump — по ним видно, где именно случается отказ.
Частые ошибки и быстрые исправления
-
Проблема: AdGuard отвечает на прямой запрос, но роутер получает “Query refused”.
Решение: назначьте профиль на сегмент или включите транзит; проверьте биндинг AdGuard (host network рекомендуется). -
Проблема: Docker NAT меняет исходный IP на 172.x → AdGuard отказывает.
Решение: запуск в--network hostили проброс портов и настройка AdGuard разрешённых сетей. -
Проблема: файрвол на Ubuntu блокирует UDP/TCP 53.
Решение: открыть 53/udp и 53/tcp (ufw/iptables). -
Проблема: Keenetic переопределяет DNS провайдера или использует DoT/DoH.
Решение: проверьте режим интернет‑фильтров и профиль; при необходимости временно отключите DoT/DoH или настройте корректные upstream.
Источники
- Keenetic — Интернет‑фильтры (Контентная фильтрация): https://help.keenetic.com/hc/ru/articles/4415711575698-%D0%98%D0%BD%D1%82%D0%B5%D1%80%D0%BD%D0%B5%D1%82-%D1%84%D0%B8%D0%BB%D1%8C%D1%82%D1%80%D1%8B-%D0%9A%D0%BE%D0%BD%D1%82%D0%B5%D0%BD%D1%82%D0%BD%D0%B0%D1%8F-%D1%84%D0%B8%D0%BB%D1%8C%D1%82%D1%80%D0%B0%D1%86%D0%B8%D1%8F
- Keenetic — Создание DNS‑профиля без фильтрации: https://help.keenetic.com/hc/ru/articles/7248035195548-%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5-DNS-%D0%BF%D1%80%D0%BE%D1%84%D0%B8%D0%BB%D1%8F-%D0%B1%D0%B5%D0%B7-%D1%84%D0%B8%D0%BB%D1%8C%D1%82%D1%80%D0%B0%D1%86%D0%B8%D0%B8
- Keenetic — AdGuard DNS / DoT/DoH (общий контекст): https://help.keenetic.com/hc/ru/articles/360000582119-%D0%98%D0%BD%D1%82%D0%B5%D1%80%D0%BD%D0%B5%D1%82-%D1%84%D0%B8%D0%BB%D1%8C%D1%82%D1%80-AdGuard-DNS-%D0%B4%D0%BB%D1%8F-%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D0%B9-KeeneticOS-3-7-4-%D0%B8-%D0%B1%D0%BE%D0%BB%D0%B5%D0%B5-%D1%80%D0%B0%D0%BD%D0%BD%D0%B8%D1%85
- Практическое решение (Habr Q&A) — сегмент + профиль + транзит: https://qna.habr.com/q/1405652
- Руководство по установке AdGuard Home на Keenetic (опыт): https://dartraiden.github.io/AdGuard-Home-Keenetic/
- AdGuard — KB: Keenetic (общая инструкция): https://adguard-dns.io/kb/private-dns/connect-devices/routers/keenetic/
- Пример обсуждения похожей проблемы на Superuser: https://superuser.com/questions/1868783/dns-queries-not-going-through-adguard-home-after-configuring-router-dns
Заключение
Коротко: для корректной работы Keenetic DNS с локальным AdGuard Home (192.168.1.20) сделайте так — настройте AdGuard на прослушивание всех интерфейсов и убедитесь в открытом порте 53; в Keenetic создайте DNS‑профиль и примените его к отдельному сегменту сети; если роутер блокирует — включите «Разрешить транзит» или, при подготовленном AdGuard, отключите встроенный DNS через opkg dns-override. Такой подход (профиль → сегмент + правильный биндинг AdGuard) решает большинство случаев “Query refused” и даёт стабильную настройку Keenetic DNS AdGuard Home.