Андрей Бобырев 66354221a4 fix: audit corrections
Fix YAML section parsing and upstream ID extraction in compile-config,
detect-lan shell syntax, lighttpd CGI modules, API reload path, install
idempotency, and dashboard log display.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-24 23:04:44 +03:00
2026-05-24 23:04:44 +03:00
2026-05-24 23:04:44 +03:00
2026-05-24 23:04:44 +03:00
2026-05-24 23:04:44 +03:00
2026-05-24 23:04:44 +03:00

Keenetic Split DNS

На Keenetic в настройках DNS можно включить DNS-over-TLS — но только один сервер на всё. Нельзя сказать роутеру: «для vk.com — Яндекс DoT, для остального — как у провайдера». Этот проект как раз про такую «раздельную» DNS-политику.

Keenetic Split DNS — веб-панель и скрипты для роутера с Entware: списки доменов (Яндекс, VK, Mail.ru, OK и др.) резолвятся через выбранный DoT upstream, всё остальное — через обычный DNS Keenetic/провайдера. Интерфейс на русском, порт 3200, доступ только из LAN.

Обзор веб-интерфейса

Кому подойдёт

  • Роутер Keenetic с установленным Entware (USB-накопитель).
  • Вы уже пользуетесь или планируете HydraRoute Neo — маршрутизация по IP из DNS; Split DNS подставляет «правильный» резолв для RU-сервисов.
  • Нужно, чтобы VK/Mail/OK/Yandex шли через Яндекс DoT (77.88.8.8:853), а не через один глобальный DoT в прошивке.

Установка и удаление

Одна команда — скачивает репозиторий, ставит пакеты Entware (smartdns, lighttpd, …), поднимает сервисы:

curl -fsSL https://raw.githubusercontent.com/andrey271192/Keenetic-Split-DNS/main/install.sh | sh

После установки откройте в браузере http://<IP_роутера_в_LAN>:3200. Токен для входа покажут в консоли (файл /opt/etc/keenetic-split-dns/token).

Удаление:

curl -fsSL https://raw.githubusercontent.com/andrey271192/Keenetic-Split-DNS/main/uninstall.sh | sh

С удалением пакетов Entware:

curl -fsSL https://raw.githubusercontent.com/andrey271192/Keenetic-Split-DNS/main/uninstall.sh | sh -s -- --purge

Как это устроено (коротко)

  1. Клиенты в LAN спрашивают DNS у роутера.
  2. Запросы попадают в SmartDNS на Entware (часто через opkg dns-override).
  3. Домены из списков (например ru-services.txt) идут на профиль yandex-dot; остальное — на isp-default (DNS Keenetic/провайдера).
  4. Правки — в /opt/etc/keenetic-split-dns/config.yaml или во вкладках веб-UI; кнопка «Применить» пересобирает конфиг и перезагружает SmartDNS.

Upstream и домены группы

Вкладки в UI: Обзор, Upstream (профиль → домены), Домены, Проверка (dig через локальный SmartDNS), Настройки (YAML и токен).

Проверка запроса vk.com

Важно: глобальный DoT в Keenetic

В прошивке (Интернет-фильтры → Настройка DNS) глобальный DNS-over-TLS перехватывает все запросы и не умеет привязку «домен → сервер».

Рекомендация: отключите глобальный DoT в UI Keenetic и настройте split-DNS здесь. Иначе политики SmartDNS могут не сработать для клиентов.

Совместимость с HydraRoute Neo

HydraRoute Neo маршрутизирует по IP, полученным из DNS — сам upstream DNS не выбирает.

Что сделать Зачем
DHCP: DNS = IP роутера в LAN Клиенты ходят в SmartDNS на Entware
Предпочтительно opkg dns-override (делает install.sh) Трафик DNS на :53 → Entware
Выключить глобальный DoT Keenetic Не ломать split-политику
Порты HRweb 2000, Split-DNS 3200 — не пересекаются

Установщик сохраняет состояние dns-override в dns-override.state; uninstall.sh пытается вернуть прежний dns-override.conf.

Частые вопросы

Нужен ли USB с Entware?
Да. Без Entware некуда поставить SmartDNS и веб-сервер. В магазине Keenetic — компонент Entware.

Что если уже включён DoT в Keenetic?
Лучше выключить в прошивке и пользоваться DoT только для нужных доменов через этот проект (см. выше).

Как применить правки вручную?

/opt/share/keenetic-split-dns/scripts/apply.sh

Структура репозитория

install.sh / uninstall.sh
scripts/          detect-lan, compile-config, apply, api
etc/              config.yaml.example, domain-sets, lighttpd, smartdns, ndm
www/              веб-интерфейс (порт 3200)
cgi-bin/api.cgi
init.d/           S97ksd-compile, S98smartdns, S99ksd-web
docs/images/      скриншоты для README

Лицензия

MIT — см. LICENSE.

English (short)

Keenetic Split DNS adds split-DNS on Keenetic routers with Entware: listed domains (Yandex, VK, Mail.ru, OK, etc.) resolve via a chosen DNS-over-TLS upstream (e.g. Yandex DoT); everything else uses your ISP/Keenetic DNS. Keenetics built-in global DoT cannot map domains to different servers — disable it and use this stack instead. Web UI on port 3200 (LAN only). Install: curl -fsSL https://raw.githubusercontent.com/andrey271192/Keenetic-Split-DNS/main/install.sh | sh. Works alongside HydraRoute Neo when clients use the router as DNS and dns-override points to SmartDNS.


andrey271192

Description
No description provided
Readme MIT 275 KiB
Languages
HTML 47.8%
Shell 25.4%
JavaScript 16%
CSS 10.8%