Repository navigation
Releases: necronicle/keenetic-doq
Release list
v0.6.0 — Local SmartDNS
Локальный SmartDNS вместо гео-DNS
Теперь doqd сам отвечает адресами прокси для имён из hosts. Все остальные имена идут через обычные DoQ-серверы с выбором самого быстрого здорового upstream по накопленным замерам. Cloudflare Zero Trust и отдельные гео-DNS для этой схемы не нужны.
- Встроен список из 1025 точных имён: GeoHide EU, Sora и
releases.openai.comдля обновления Codex. - Полностью удалены гео-полоса, закрепление сервера, автоматическая классификация и специальные geo-команды. Бывшие гео-DNS убраны из дефолтов; вручную их можно добавить как обычный upstream.
- Добавлены
doqd hosts export,check,status,reload. Пользовательский hosts заменяет встроенный; перечитывание атомарное, ошибочный файл не заменяет рабочие правила. - Для имён из hosts A/AAAA содержат только заданные IP. Если IPv6 нет — пустой успешный AAAA. HTTPS/SVCB не выдают реальные IP-подсказки. Локальный TTL — 60 секунд.
- Сохранены обычный DNS-кэш, резервные upstream и обработка отказов.
- Исправлен выбор upstream: быстрый SERVFAIL/REFUSED больше не возвращает неисправный сервер в начало списка из-за колебаний задержки.
Обновление
Это изменение формата конфигурации. Используйте установщик из этого релиза или обновлённого main, а не просто заменяйте бинарник.
Keenetic:
curl -fsSL https://raw.githubusercontent.com/necronicle/keenetic-doq/v0.6.0/install.sh | shOpenWrt:
wget -qO- https://raw.githubusercontent.com/necronicle/keenetic-doq/v0.6.0/install-openwrt.sh | shПеред изменением конфига установщик сохраняет копию .pre-smartdns.*. Стандартная старая тройка гео-DNS удаляется, пользовательские гео-серверы становятся обычными upstream. Собственные geo-domain без IP нужно перенести в hosts вручную: установщик объяснит это и остановится до изменения работающей установки. Новый конфиг и hosts проверяются новым бинарником до остановки службы.
Адреса прокси остаются сторонними: doqd не является VPN и не создаёт собственный зарубежный выход. Автообновления hosts и автоматической замены умерших прокси нет. Точное имя не включает произвольные поддомены. Сторонняя веб-панель может требовать обновления для новых команд.
Проверка
Go-тесты и race detector, vet, миграции обоих установщиков, shellcheck, сборка 11 Linux-архитектур. Локальный демон проверен реальными DNS-запросами: локальные A/AAAA/HTTPS/SVCB по UDP/TCP и обычный домен через DoQ. Это не означает проверку каждого из 1025 сервисов или прогон новой версии на всех моделях роутеров.
v0.5.4
Changed
- Переоценка при частично мёртвом пуле. Раньше закреплённый сервер
обхода уступал место, только когда мертвы ВСЕ его прокси три проверки
подряд. Bezmezhau 21.10.2026 показал дыру: из двух прокси умер тот, что для
Claude и Gemini, второй жил, и doqd держал сервер бесконечно, а claude.ai
уходил на единственный мёртвый адрес. Теперь мёртвый прокси в пуле три
проверки подряд (90 с) запускает переоценку всех серверов обхода.
Закреплённый уступает только серверу со строго большим охватом
проверочных имён: если рядом с мёртвым адресом в ответах есть живой, сервер
остаётся, и IP выхода у пользователей не меняется зря. По одному и тому же
набору мёртвых прокси переоценка идёт один раз.
v0.5.3
Changed
- Bezmezhau DNS убран из значений по умолчанию. У него два прокси, и один
из них (143.20.64.55: Claude, Gemini, Copilot, Grok) перестал отвечать по
порту 443 из сетей РФ, тогда как порт 853 на том же адресе отвечает: это
фильтр, а не падение. ChatGPT через второй прокси работал, Claude и Gemini
нет. - Серверы обхода по умолчанию:
quic://eu.geohide.ru,quic://dns.comss.one,
quic://dns.dns-ai.ru. Замер 21.10.2026 из РФ: у всех трёх DoQ живой и
полное покрытие семи проверочных имён. eu.geohide.ru: 7 прокси в DE и NL,
все живы, TLS до chatgpt.com 0,15–0,38 с. comss: 4 прокси в NL, TLS
0,14–0,24 с (медленных прокси, из-за которых его убрали в 0.3.5, больше
нет). dns-ai: один прокси в FI, TLS 0,18 с; теперь проксирует и
sentinel/auth/tcr9i OpenAI и assets-proxy Anthropic, которых ему не
хватало в 0.4.1. Российский узел geohide.ru не взят: три его прокси из
четырёх закрыты по 443. - Установщики (Keenetic и OpenWRT) мигрируют конфиг ровно с одним сервером
обходаquic://dns.bezmezhau.comна эту тройку. Конфигурации со своими
серверами обхода не затрагиваются.
v0.5.2
v0.5.1
Changed
- Серверы обхода получают только геоблокированные имена. Раньше они
стояли и в быстрой полосе: если geohide или dns-ai отвечали быстрее
Quad9, обычные имена (в том числе.ru) резолвили они. Прокси для
обычных имён они не отдавали, но видеть всё, что открывают устройства,
им незачем. Теперь обычные имена идут только наupstream. Если в
конфиге нет ни одногоupstream, обычные имена идут на серверыgeo,
как раньше. - Третий обычный сервер по умолчанию — NextDNS (
quic://dns.nextdns.io,
без профиля ничего не фильтрует). Без серверов обхода в быстрой полосе
двух серверов мало: ControlD у части провайдеров не отвечает по QUIC. У
Cloudflare и Google DoQ нет. - Ответ с оборванной цепочкой CNAME больше не выигрывает у полного.
ControlD наwww,esiaиlk.gosuslugi.ruотвечал одним CNAME на
*.gslb.gosuslugi.ruбез адресов, и если ControlD был самым быстрым,
Госуслуги не открывались. Теперь такой ответ doqd считает бесполезным, как
SERVFAIL: спрашивает следующий сервер и отдаёт оборванный ответ, только
если полного нет ни у кого. Честный NODATA (SOA в конце цепочки) не
затронут. doqd list: заголовок секции FAST —every other name goes to the fastest of these.- Установщики (Keenetic и OpenWRT) обновляют комментарий над строками
upstream. В конфиг ровно с прежней парой (Quad9 и ControlD) они
добавляютupstream quic://dns.nextdns.io. Конфиг со своимиupstream
не меняется.
v0.5.0
Added
- OpenWRT. Установка одной командой:
wget -qO- https://raw.githubusercontent.com/necronicle/keenetic-doq/main/install-openwrt.sh | sh.
doqd слушает127.0.0.1:5354и становится единственным сервером dnsmasq
(server 127.0.0.1#5354,noresolv 1). Установщик меняет dnsmasq, только
когда doqd уже отвечает, и проверяет запрос через порт 53. Если проверка
не прошла, он возвращает dnsmasq в исходное состояние. procd перезапускает
демона после любого сбоя. Удаление —uninstall-openwrt.sh: оно сначала
возвращает dnsmasq исходныеserverиnoresolv. - Имена серверов NTP на OpenWRT идут на bootstrap-серверы обычным DNS, мимо
doqd. После перезагрузки часы роутера могут отставать, и тогда
сертификаты DoQ-серверов «ещё не выданы»: doqd не может установить TLS, а
NTP без обхода не смог бы исправить часы. Проверено в эмуляторе: с
отставшими часами doqd восстановился сам, когда NTP поставил время. - Файлы doqd на OpenWRT попадают в список sysupgrade
(/lib/upgrade/keep.d/doqd). Обновление прошивки с сохранением настроек
оставляет doqd рабочим, а не dnsmasq без серверов. - Новые сборки:
armv7,armv5,amd64,386,mips64,mips64le,
riscv64,loong64— всего 11 архитектур. Установщик OpenWRT выбирает
сборку поDISTRIB_ARCH; ARMv7 без FPU получаетarmv5. - В бинарник встроены корневые сертификаты. doqd берёт их, только если в
прошивке своих нет. doqd statusна OpenWRT проверяет dnsmasq: есть ли doqd в
/etc/config/dhcpи в конфиге, с которым dnsmasq работает сейчас.
Строкаother DNSперечисляет серверы, которые отвечают мимо doqd.
Changed
- Сборка на Go 1.26 (была 1.23). На тест-роутере Keenetic память демона
снизилась с 19 до 12,5 МБ. - Пути doqd выбирает по прошивке: на Keenetic всё по-прежнему в
/opt, на
OpenWRT —/etc/doqd.conf,/etc/doqd/geo.state,/etc/init.d/doqd. install.shиuninstall.shдля Keenetic на OpenWRT останавливаются и
называют нужный скрипт.- README переписан: Keenetic и OpenWRT, короткие предложения.
v0.4.1
Fixed
- ChatGPT не отвечал («Не удалось загрузить этот ответ»), вход сбрасывался,
когда закреплялся dns.dns-ai.ru. Оценка серверов обхода проверяла только
chatgpt.com, claude.ai и gemini.google.com. dns-ai подменяет эти имена, но
для остальных хостов, без которых сервис не работает (sentinel.openai.com —
антибот перед каждым ответом, tcr9i.chat.openai.com — капча входа,
assets-proxy.anthropic.com), отдаёт настоящие адреса: браузер открывал сайт
через чужой прокси, а антибот и капчу — напрямую с российского адреса, и
OpenAI их отклонял. geohide.ru подменяет все эти хосты, но проигрывал по
скорости TLS. Теперь пробных доменов семь (chatgpt.com, sentinel.openai.com,
tcr9i.chat.openai.com, auth.openai.com, claude.ai, assets-proxy.anthropic.com,
gemini.google.com); охват — сколько из них сервер подменяет живым прокси, а
рейтинг сначала сравнивает охват и только потом скорость, так что побеждает
сервер с полным охватом. DNS-запросы по пробным
доменам идут параллельно. Если резолвер сравнения не ответил по какому-то
хосту, он не засчитывается никому; если не ответил ни по одному, оценка
безрезультатна. Пул прокси растёт только от ответов на хосты, которые
закреплённый сервер действительно подменяет: настоящие адреса не попадают
в пул. Победитель с неполным охватом закрепляется, но оценка повторяется
(1 мин, ×2 до 30 мин), пока не вернётся сервер с полным охватом. geo.stateхранит набор пробных доменов. Если он не совпадает с текущим
(в том числе уgeo.stateверсии 0.4.0, где поля нет), закреплённому выбору
не доверяют: после обновления каждый роутер один раз переоценивает серверы и
снимает закрепление dns-ai.
v0.4.0
Changed
- Гео-полоса: геоблокированные имена резолвит один закреплённый сервер
обхода. Раньше doqd на каждое имя брал самый быстрый DNS-ответ: домены
одного сайта получали прокси разных серверов (разных стран), а быстрый
DNS не значил быстрых прокси. Теперь серверы обхода — отдельный ключ
geo; doqd один раз оценивает их по живости и скорости TLS до их прокси
(chatgpt.com, claude.ai, gemini.google.com), закрепляет лучший и меняет
его только при отказе: три ошибки подряд на A/AAAA (SERVFAIL и REFUSED
тоже; ошибки на HTTPS/SVCB не считаются — geohide сбрасывает такие запросы
всегда) или все прокси мертвы три проверки подряд. Перед переключением
doqd проверяет сеть запросом через быструю полосу: если молчит и она,
закреплённый остаётся. Оценка, в которой ни один сервер ничего не обошёл
(лежит интернет), безрезультатна: прежний выбор, рейтинг иgeo.state
остаются, оценка повторяется через 1 мин с удвоением до 30 мин. Серверы,
у которых медиана TLS в пределах 20 % от лучшей, считаются равными и
сохраняют порядок из конфига. Выбор хранится в
/opt/var/lib/doqd/geo.stateи переживает рестарт; оценка, прерванная
остановкой демона, не сохраняется, повреждённыйgeo.stateвызывает новую
оценку. Обычные имена по-прежнему резолвит самый быстрый сервер. - Геоблокированное имя определяется встроенным списком (OpenAI, Anthropic,
Gemini/AI Studio, NotebookLM, xAI), своими доменами (geo-domain,
doqd add-domain) и автоматически: если ответ на имя попал в пул прокси
сервера обхода. Пул растёт только от ответов на пробные домены (chatgpt.com,
claude.ai, gemini.google.com), а не от каждого гео-имени. Напрямую
классифицируются только A-запросы; AAAA, HTTPS и остальные типы сначала
проходят внутренний A-запрос. Выученное геоблокированным имя остаётся
таким до рестарта. - HTTPS/SVCB для геоблокированных имён: doqd вырезает из ответа подсказки
ipv4hint/ipv6hint(в них может быть настоящий адрес сервиса), а если
не ответил ни один сервер обхода — отвечает NODATA вместо ответа обычного
резолвера. Браузер берёт адреса из A/AAAA, а они идут через прокси. - Дефолты:
geo— geohide и dns-ai; Quad9 и ControlD — обычныеupstream
вместоfallback. Инсталлер переводит старые конфиги сам; повторный запуск
на конфиге 0.4.0 ничего не меняет. comss инсталлер, как и раньше, убирает
только при обновлении с 0.3.x и только если в конфиге остаётся другая
строкаupstream; иначе comss переходит вgeo. - Откат на 0.3.x: старые версии не знают ключа
geoи с конфигом 0.4.0 не
запустятся. Перед установкой старой версии верните строкиgeoв
upstream, а строкиupstreamс Quad9 и ControlD — вfallback; строки
geo-domainудалите (0.3.x отвергает неизвестные ключи); или
удалите/opt/etc/doqd.conf, чтобы получить дефолты той версии.
Added
- Фильтр прокси. Адреса прокси закреплённого сервера проверяются раз в
30 с; мёртвые и медленные (медиана TLS > 1 с и > 3× лучшей) выкидываются
из ответов, если рядом есть здоровый адрес того же типа, а кешированные
ответы с таким прокси по тому же правилу сбрасываются сразу. Так не
доходят до клиентов, например, прокси geohide с TLS ~3 с и мёртвый адрес,
который dns-ai начал отдавать при смене пула. doqd geo— закреплённый сервер, рейтинг, состояние прокси;
doqd geo reselect— переоценить сейчас (ждёт до 45 с; шлёт сигнал только
демону 0.4.0 со свежим снимком);doqd add --geo(подсказывает запустить
doqd geo reselect);
doqd add-domain/doqd remove-domain; секции GEO/FAST вdoqd list;
строкаgeo:вdoqd status.
v0.3.5
Changed
- comss убран из дефолтных апстримов. Основные теперь geohide и dns-ai.
doqd выбирает сервер с самым быстрым DNS-ответом, и обычно это был comss,
но его прокси для геоблокированных сервисов оказались самыми медленными:
TLS-рукопожатие с chatgpt.com через них занимало от 0,2 до 4,7 с против
0,13–0,15 с через dns-ai. DNS отвечал быстро, а ChatGPT открывался долго.
Инсталлер при обновлении убираетupstream quic://dns.comss.oneиз
конфига, если в нём остаются другие основные апстримы. Вернуть:
doqd add quic://dns.comss.one.
v0.3.4
Added
- Резервные апстримы: ключ
fallbackиdoqd add --fallback. Резервный
сервер спрашивается, только когда отказали все основные (upstream):
подстраховкой он не запускается, пока ждётся ответ хоть одного основного,
даже медленного. TTL его ответов урезается до 60 с, чтобы после
возвращения основных настоящий адрес не застрял в кешах. Отказавший
основной стоит за здоровым резервом и возвращается вперёд, как только
ответит фоновой проверке.doqd listпомечает резерв[fallback]. doqd statusпоказывает другие DNS-серверы роутера (other DNS): их
ndnproxy спрашивает наравне с doqd и берёт самый быстрый ответ — так
геоблокированный сервис может получить настоящий адрес мимо doqd.
Changed
- Дефолты — серверы обхода геоблокировок. Основные апстримы — comss,
geohide и dns-ai: для ChatGPT, Gemini, Claude и других закрытых для
России сервисов они отдают адреса своих прокси. Резерв — Quad9 и ControlD
(p0.freedns.controld.com, без фильтрации, из другой сети). Раньше
comss и Quad9 были равны, запрос уходил в быстрейший, а подстраховка — в
другой, и Quad9 регулярно обгонял comss с настоящим адресом: «геоблок
то работает, то нет». Инсталлер при обновлении переводит
upstream quic://dns.quad9.netвfallback, если в конфиге есть другие
апстримы и ещё нет резервных, и добавляет к нему ControlD; в конфиг со
старыми дефолтами (только comss и Quad9) он добавляет geohide и dns-ai.