Что нового
Выпуск про то, что мешало каждый день: обход не поднимался сам при входе
в систему, а проверка блокировок называла сломанным то, что работает.
Новое:
Выбор рецепта советует быстрейший, а не «любой из отмеченных». Окно
перебирает рецепты пресета и отмечает те, что открывают имя, — но их обычно
несколько, и прежний совет отправлял выбирать наугад из пяти одинаково зелёных
строк. Теперь у каждого рабочего стоит время, за которое имя открылось,
а в итоге назван самый быстрый: рецепт, при котором рукопожатие проходит
с меньшим сопротивлением, и в работе ведёт себя лучше.
Заодно помечен тот рецепт, который пресет и так применяет к этому имени.
Без пометки его можно было выбрать вслепую и потом не понять, почему ничего
не изменилось. А если быстрейшим оказался он же — значит менять нечего
и беда не в рецепте.
Исправления:
Автозапуск поднимает движки, а не только значок. Жалоба была такая: при
входе в систему трей появляется, программа работает, а обход приходится
включать кнопкой. В журнале при этом семь раз подряд стояло «автозапуск:
движки подняты с попытки 1» — и стояло правдиво по прежней мерке: успехом
считался запустившийся супервизор. Дальше тот мог пять раз не поднять
sing-box и сдаться, о чём никто не спрашивал.
Теперь успехом считается поднявшийся движок. Автозапуск ждёт, пока все службы
не станут здоровыми, и только тогда останавливается; не дождавшись — снимает
недоподнятое и пробует снова, до трёх раз. Повторы, заведённые когда-то ради
неготовой при входе сети, впервые заработали: прежде первая попытка «удавалась»
всегда, и до второй дело не доходило.
Если поднять не вышло и с третьего раза, в журнале теперь стоит причина
словами самой службы — «sing-box: не запустился, процесс завершился с кодом 1»
вместо «не получилось». И с датой: строки автозапуска писались одним временем,
без дня, в общий журнал, где всё остальное датировано.
Без подписки поднимается десинк, а не ничего. Прежде выборочный режим
требовал туннеля всегда: сборка конфига отвечала «Подписка не задана», запуск
отказывался — и десинк, которому подписка не нужна вовсе, не получал своего
шанса. Программа без подписки выглядела нерабочей целиком, хотя половина
её работы от подписки не зависит. Теперь выборочный без выхода равнозначен
«только десинку», и на «Главной» так и написано — «только десинк, VPN
не задан», — чтобы не гадать, почему правило «через VPN» ничего не меняет.
Режимы «всё через VPN» при этом не понижаются молча: без выхода они
по-прежнему отказываются стартовать и говорят, чего не хватает. Тихое
понижение означало бы, что трафик, который просили спрятать, пошёл открыто.
Заодно включённый WARP теперь считается выходом наравне с подпиской: он затем
и заведён, чтобы работать, когда подписки нет, а прежде в одиночку
не поднимался — отказ приходил раньше, чем кто-либо смотрел на выключатель.
Проверка блокировок просит сжатие, как браузер. Прежде она просила отдать
страницу как есть — и тянула то, чего браузер не тянет никогда: itch.io
отдаёт 110 636 Б без сжатия против 20 748 со сжатием, x.ai — 249 325 против
38 983. Второе число почти упиралось в потолок, отведённый на одно имя.
Платили за это ложными обрывами. Проверка идёт по ста семнадцати именам подряд,
и лишние двести килобайт на каждом — та самая теснота, из-за которой поток
замирает, а работающий сайт объявляется сломанным.
В таблице появилась ячейка «н/с» — замер не состоялся. У whatsapp.net
стояло «ДАННЫЕ: нет» рядом с вердиктом «доступен» и без объяснения — читалось
как противоречие самому себе. Вердикт был верен: рукопожатие прошло, значит
путь до хоста исправен, а из ответа не пришло ни байта, и судить не о чем.
Неверна была ячейка — она утверждала обрыв, которого никто не измерял.
Под капотом
Разобран WARP. Он не сломан: учётная запись Cloudflare запрашивается
ровно один раз и с тех пор живёт в кэше движка. Полночи ушло на замеры,
которые подставляли движку пустой кэш и потому мерили несуществующую беду.
Открытым остался только первый запуск на чистой машине, где кэша ещё нет.
История целиком — в docs/warp.md, вместе со списком того, что уже
опровергнуто и повторять не стоит.
Тестов стало 653 — 592 на начинку и 61 на окно. Новых тридцать шесть,
и каждая партия испытана нарочной поломкой того, что она проверяет:
подменишь мерку здоровья движков — трое краснеют, правило выбора рецепта —
четверо, снимешь кавычки вокруг имени пресета в командной строке — двое.
Тест, который не краснеет от поломки, не тест.
Чем это собрано и как сверить
NetZapret.zip 18FC7682E14E250A42078EEF77EEBF143A2CAD69B9E6BD711D09E84C1C0F350D
NetZapret.exe 0CA3700FD18639DA7395887D6579EBFFAF0AABB47A6571B11739E963413D816C
Пакет SDK .NET 8.0.424, сборка Release, win-x64, self-contained, один файл.
Проверить скачанное:
Get-FileHash NetZapret.zip -Algorithm SHA256
Собрать самому и сравнить:
git checkout v0.6.2
pack.cmd
Совпасть должен NetZapret.exe. Архив — нет: в нём лежат winws2 и sing-box,
собранные не нами, и их версии у вас могут отличаться.