Стояла на left: -14px — ровно на ширину отступа боковой панели, то есть вплотную к краю окна,
и со скруглением только справа выглядела обрезанной. Теперь в зазоре, скруглена целиком.
Страница steer была рассчитана на один туннель: одна точка входа, один сервер, одна
«последняя связь», а «Проверить» смотрело только первый туннель. Теперь:
- steer_status отдаёт tunnels[] — у каждого туннеля точка, колония из последней разведки,
свежесть рукопожатия и трафик; карточка «Туннели WARP» показывает их по одному, в шапке —
«работает N из 3» и колонии живых. Один туннель — прежний вид.
- «Проверить» проверяет каждый туннель: HTTPS-трассировка с warp=on — ок; не прошла, но
CF-RAY по HTTP отвечает — «соединение есть, но HTTPS через туннель не проходит» (другая
поломка и другое действие); иначе — трафик не идёт. Упал один из трёх при живых остальных —
замечание, а не поломка: steer переключится сам.
- Кнопки названы во множественном числе: «Перезапустить туннели», «Сменить точки входа».
- Разведка требует HTTPS через туннель: на части сетей через туннель проходят только мелкие
пакеты и порт 80, и точка, годная по рукопожатию, потерям и CF-RAY, сайтов на устройствах
не открывала. Такие точки — в последний запас.
Код 1.38 ищет ролики в files/AutoBypass и их список в videos.txt — ролик переехал туда из
files/RedButton, каталог заведён. Запасной источник в форке смотрит туда же.
Запасная версия tgws (если GitLab не ответил) — 0.2.8: в ней починены картинки Telegram (ДЦ203).
Поверх интерфейса 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 без ошибок.
- ИИ-сервисы больше не идут в подбор 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.
- Плеер вынесен в отдельный блок «А пока подбираем…» на всю ширину страницы, журнал —
своим блоком под ним.
- Остановка срабатывает между сервисами, а неполный победитель остановленного тестера не
применяется. Раньше после «Остановить» подбор успевал применить стратегию и перепроверить
сервисы.
- Установщик отказывает, пока идёт подбор: он стирает каталог задач, и вместе с ним
пропадали журнал и флаг остановки — подбор продолжался невидимым и не останавливался.
- Пока идёт подбор, над журналом играет ролик; после окончания плеер убирается и ничего
не качает. Звук выключается отдельной кнопкой рядом с плеером, выбор запоминается.
Если браузер не даёт играть со звуком, ролик идёт без звука.
- Журнал пишет по ходу: каждый сервис сразу после проверки, каждую стратегию тестера и
сколько она открыла, подбор для YouTube (раньше шёл молча, минутами), каждую
пробуемую точку WARP. На стенде самая длинная пауза без новых строк — 15 секунд.
- Снятие настроек помечается своей фазой, и открытая в это время страница не включает
ролик.
Новый раздел «Красная кнопка» в 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.