Commit Graph
7 Commits
Author SHA1 Message Date
xyzmean 70c200e9de Автообход 1.38: подбор zapret в изоляции, три WARP в разных колониях, списки splify2-lists, ИИ-сервисы через свой DoH
Поверх интерфейса 1.38 — то, чего ему не хватало в бэкенде:

- Подбор стратегий zapret больше не перебирает их на всей сети. Кандидаты и цели те же,
  менеджерские, но каждая стратегия мерится своим nfqws на очереди 8397, куда попадает
  только трафик проверки (порты 20000-20999); сеть до конца подбора живёт на прежней
  настройке, победитель уходит один раз, в конце. Устройство — как у тестера splify2.
- Страница steer держит три туннеля WARP (zmwarp, zmwarp2, zmwarp3) со своими
  регистрациями. Точка выбирается методом warpscout, как в brb: настоящее рукопожатие на
  живом интерфейсе, потери и круг, колония изнутри туннеля по CF-RAY; колонии разводятся,
  российские — в запас, при нехватке — та же колония через другой адрес. В спеке один выход
  со всеми живыми туннелями и prefer: latency. Все интерфейсы заводятся одним reload до
  разведки — иначе netifd перезапускал соседние туннели посреди неё. Кнопки перезапуска,
  смены точки и новых ключей действуют на все три; статус показывает колонии живых.
- Списки для туннеля — наборы .srs каталога splify2-lists (itdoginfo) с тегом из lists.json,
  разложенные steer srs-read; качаются напрямую или через уже поднятый туннель, при неудаче —
  списки пакета. Сужение Discord (udp и порты голоса) — отдельным каналом схемы 2.
- ИИ-сервисы открывает DNS, а не туннель: в WARP они больше не идут. Резолвер выбирается из
  пула geo (brb плюс dns.yo1nk.app) настоящим запросом к chatgpt.com через его DoH и
  работает своим экземпляром https-dns-proxy (zm-geodns) только для доменов списка
  dns.malw.link; остальной DNS и /etc/config/https-dns-proxy не меняются. Сторож раз в
  30 минут подбирает заново, если сервисы перестали открываться. На странице — «через DoH»,
  какой DNS выбран, «Подобрать DNS заново» и «Выключить».
- Проверка «DoH перехватывает DNS» смотрела на любой процесс https-dns-proxy и принимала
  zm-geodns за перехват; теперь — на службу пакета, и выключенную службу не поднимает.

Проверено на OpenWrt 25.12.5 в QEMU с чистого образа: steer поставил три туннеля,
автообход открыл закрытые по адресам Instagram и WhatsApp через WARP (клиент за LAN — 200),
ИИ-сервисы — через DoH, страницы автообхода и steer в Web UI без ошибок.
2026-09-23 21:54:27 +03:00
xyzmean 7e54f073a9 Красная кнопка: ИИ-сервисы через свой DoH только для их доменов, списки из splify2-lists
- ИИ-сервисы больше не идут в подбор zapret и WARP: геоблок снимает только резолвер.
  Резолвер выбирается из пула geo BigRedButton плюс dns.yo1nk.app: каждому шлётся
  настоящий запрос к chatgpt.com через его DoH (curl --doh-url), и берётся самый быстрый
  из тех, чей прокси ответил без отказа. Он работает своим экземпляром https-dns-proxy
  (служба zm-geodns, 127.0.0.1:5055), а dnsmasq отдаёт ему только домены из списка
  dns.malw.link (файл hosts его репозитория, 17 тысяч имён после сворачивания поддоменов).
  Остальной DNS роутера и настройка /etc/config/https-dns-proxy не меняются. Раз в 30 минут
  сторож проверяет, открываются ли сервисы, и при отказе подбирает резолвер заново.
- Если пакет https-dns-proxy ставит кнопка, его служба выключается, только когда настройки
  до установки не было: иначе dnsmasq оставался бы на мёртвых портах.
- Пробы остальных сервисов разрешают имена своим DoH (Cloudflare, Google, Яндекс — первый
  ответивший), а не системным DNS: тот может отдавать подмену провайдера или fakeip
  вышестоящего роутера.
- Списки для туннеля — наборы .srs каталога splify2-lists (itdoginfo: youtube, discord,
  meta, twitter) с тегом из lists.json, разложенные `steer srs-read`; качаются напрямую или
  через уже поднятый туннель, при неудаче — списки из пакета. Сужение Discord (udp и порты
  голоса) — отдельным каналом схемы 2; общий набор двух сервисов попадает в спеку один раз.
- Движок, поставленный кнопкой, включается только вместе с правилами: с пустой спекой он
  всё равно заворачивает DNS сети на свой резолвер, и на тестовом роутере запросы клиентов
  к роутеру по IPv6 уходили в тайм-аут.
- После установки пакетов бэкенд проверяет, что объект zapret-manager есть в ubus:
  post-install luci-proto-amneziawg перезагружает rpcd, и страница получала «Object not
  found». Страница, потеряв роутер, ждёт его и продолжает следить за подбором.
- Журнал: каждый сервис сразу после проверки, стратегии тестера, подбор для YouTube,
  точки WARP.
2026-09-23 19:41:13 +03:00
xyzmean e20d5f75c4 Красная кнопка: плеер своим блоком, остановка без задержек, переустановка не рвёт подбор
- Плеер вынесен в отдельный блок «А пока подбираем…» на всю ширину страницы, журнал —
  своим блоком под ним.
- Остановка срабатывает между сервисами, а неполный победитель остановленного тестера не
  применяется. Раньше после «Остановить» подбор успевал применить стратегию и перепроверить
  сервисы.
- Установщик отказывает, пока идёт подбор: он стирает каталог задач, и вместе с ним
  пропадали журнал и флаг остановки — подбор продолжался невидимым и не останавливался.
2026-09-23 18:58:28 +03:00
xyzmean c4b71d2be8 Красная кнопка: ролик по новому имени репозитория Zapret-Manager-Exp
Старые адреса держались на переадресации GitHub, которая пропадёт, если под прежним
именем появится новый репозиторий.
2026-09-23 18:50:13 +03:00
xyzmean 1730e16a6c Красная кнопка: ролик над журналом на время подбора и журнал без долгих пауз
- Пока идёт подбор, над журналом играет ролик; после окончания плеер убирается и ничего
  не качает. Звук выключается отдельной кнопкой рядом с плеером, выбор запоминается.
  Если браузер не даёт играть со звуком, ролик идёт без звука.
- Журнал пишет по ходу: каждый сервис сразу после проверки, каждую стратегию тестера и
  сколько она открыла, подбор для YouTube (раньше шёл молча, минутами), каждую
  пробуемую точку WARP. На стенде самая длинная пауза без новых строк — 15 секунд.
- Снятие настроек помечается своей фазой, и открытая в это время страница не включает
  ролик.
2026-09-23 18:49:29 +03:00
xyzmean fb4fffd38a Ролик на время подбора красной кнопки
erdekagi — «Больше чем цена на Aviasales», с разрешения автора. H.264 480p и AAC,
2 МБ, с быстрым стартом: страница кнопки показывает его, пока идёт подбор.
2026-09-23 18:42:17 +03:00
xyzmean 670bd12cd1 Красная кнопка в веб-пакете: автоподбор обхода по сервисам
Новый раздел «Красная кнопка» в LuCI и в Web UI на порту 7788. Роутер сам проверяет
восемь сервисов (YouTube, Discord, Instagram, WhatsApp, X, GitHub, ИИ-сервисы, Telegram)
и берёт каждому самый дешёвый работающий способ: напрямую, через Zapret, через WARP или,
для Telegram, через веб-сокет. Каталог сервисов и идея — из BigRedButton
(gitlab.com/xyzmean/brb), логика переписана:

- Стратегию zapret подбирает тестер менеджера (do_test_run), а применяют его же функции
  strategy_set_v / strategy_set_flowseal / strategy_set_youtube. Своего перебора nfqws,
  как в brb, нет. Если стратегия открыла меньше сервисов, чем было, прежняя настройка
  возвращается.
- То, что zapret не открыл, уходит в туннель AmneziaWG к WARP через движок steer 1.5.7
  (спека с выходом kind=interface). Точка входа выбирается по рукопожатию и данным через
  туннель; российские колонии берутся только в запас. Туннелю заводится зона firewall
  с NAT и mtu_fix, без которой устройства сети через туннель не ходили.
- Telegram проверяется настоящим запросом MTProto (req_pq_multi) к пяти дата-центрам;
  при молчании ставится микропакет tgws.
- DNS роутера кнопка не трогает. Если DNS over HTTPS перехватывает порт 53 у резолвера
  движка, это показывается на странице, а исправляется только по нажатию.
- Чужая спека steer и splify2 не перезаписываются. Всё, что поставлено и изменено,
  записывается в /etc/zm-redbtn/owned; «Снять настройки» снимает ровно это.
- Тест стратегий на странице Zapret не запускается, пока идёт подбор кнопки.

Проверено на OpenWrt 25.12.5 x86_64 в QEMU: быстрый подбор около шести минут; сервис,
закрытый по адресам, открылся через WARP у клиента за LAN (fakeip, счётчики канала и
трафик туннеля растут); снятие убирает интерфейс, зону, steer, tgws и AmneziaWG.
2026-09-23 18:14:44 +03:00