Программа стала окном
Раньше в архиве лежала консольная программа с текстовым меню. Теперь —
окно, и только оно. Разделы: Главная, VPN, Десинк, Маршруты, Проверка
блокировок, DNS, Файл hosts, Журнал, Диагностика, Ещё.
Это не оболочка поверх консоли. Окно собирает конфиг туннеля само и поднимает
движки, перезапуская себя с ключом --supervisor, — отдельный процесс нужен
потому, что супервизор обязан пережить закрытие окна, но это та же программа.
Один исполняемый файл вместо двух. Два файла рядом, из которых правильный
для двойного щелчка менее очевиден, — выбор, который никто не должен делать,
а каждый нёс бы свою копию среды .NET.
Командная строка в архив больше не входит. Она осталась в исходниках.
Окно закрывает всё, кроме watch, test и rules, — эти три пары в окне
пока не имеют.
Проверка прохода трафика больше не гасила исправный движок
Настройка «проверять проход трафика» включала у супервизора запрос через
локальный прокси на порт 21080. В конфиге с туннелем такого входа не было
и быть не могло: инбаунды TUN и локальный mixed были взаимоисключающи
по построению.
Проверка не проходила никогда. Супервизор считал исправный sing-box мёртвым,
гасил его, поднимал заново — пять раз подряд, — и сдавался. В журнале
оставалась строка «функциональная проверка не прошла» без единого намёка,
чего именно не хватило, а сам sing-box при уровне warn не печатал ничего,
и его журнал не создавался вовсе. Со стороны: «запущен, но не отвечает».
Теперь вход проверки поднимается рядом с TUN, а не вместо него, на отдельном
порту 21090 — 21080 занимает замер серверов и раздаёт параллельным замерам
соседние. Если порта всё-таки нет, проверка понижается до Clash API и пишет
об этом в журнал, вместо того чтобы убивать движок по кругу.
Запуск показывает, что происходит
Подъём с проверкой прохода трафика занимает десятки секунд. Прежде кнопки
просто гасли на три секунды и оживали посреди запуска, показывая
«остановлено» у ещё запускающегося движка.
Теперь на карточке состояния бежит полоса и идёт счётчик секунд с подписью
фазы: собираем конфиг, поднимается туннель, проверяем проход трафика.
Умерший движок концом запуска не считается — супервизор его перезапустит,
и так и написано.
Диагностика
Семь групп проверок: права, движки, десинк, правила, конфиг туннеля, имена
и hosts, супервизор. Отдельно — «куда пойдёт это имя»: отвечает тот же движок
правил, что решает судьбу настоящих соединений, а не поиск по строкам.
Поэтому ответ верен и там, где правила перекрывают друг друга, то есть ровно
там, где вопрос и возникает.
Отчёт проверки блокировок пишется в файл
reports\blockcheck-<дата>-<время>.txt, двадцать последних. Прежде таблицу
переносили выделением мышью, теряя половину при прокрутке.
В шапку идёт состояние движков: доступное при работающем обходе может быть
доступно как раз благодаря ему, и через неделю этого уже не вспомнить.
Прерванная проверка тоже записывается — набранное до остановки такой же замер.
Появилась и третья глубина, «полностью»: по два имени с каждой части
вместо одного. Второе имя отделяет случайную неудачу одного хоста от закрытой
части целиком — одно имя ошибается само по себе, два подряд уже нет.
Обслуживание
В разделе «Ещё»: сброс настроек до заводских, забыть свои маршруты, очистить
рабочие файлы, сбросить сетевой стек Windows.
Настройки и маршруты при сбросе не удаляются, а отодвигаются в .bak:
набираются они руками и месяцами, а кнопка стоит там, куда заходят посмотреть
версию. Сброс и очистка при работающих движках отклоняются — иначе теряется
след запущенных процессов, и остановить их становится нечем.
Мелочи
- Порт глубокой проверки задавался в двух местах — в компиляторе конфига и
в разборе аргументов запуска. Разъехавшись, они давали вечно проваливающуюся
проверку, которая выглядит как неисправный движок. Теперь он один. - Окно добавлено в CI. Своё решение в
NetZapret.slnне входит, и до сих пор
его не собирал никто — оно могло сломаться незаметно.
Чем это собрано и как сверить
NetZapret.zip 5F2495870C15A74AB4840503006512BA1B4174702169FF7E69426E4ADB1A519B
netzapret.exe 315FB3E7785E424BB8EBE7ADBA3157261FCA7AF20B9BFA957627B351B1B4A96E
Пакет SDK .NET 8.0.424, сборка Release, win-x64, self-contained, один файл.
Проверить скачанное:
Get-FileHash NetZapret.zip -Algorithm SHA256
Собрать самому и сравнить:
git checkout v0.5.0
pack.cmd
Совпасть должен netzapret.exe. Архив — нет: в нём лежат winws2 и sing-box,
собранные не нами, и их версии у вас могут отличаться.