Skip to content

Releases: Asofwar/prokop

2.28.3

Choose a tag to compare

@github-actions github-actions released this 06 Oct 16:40

Исключение устройства снова применяется

Срочное исправление. Если в правиле были и «Исключить устройства», и встроенные списки с адресами (Telegram, Cloudflare, Discord, Meta, Twitter и подобные), Prokop собирал конфигурацию, которую sing-box 1.14 отвергал. Перезагрузка прерывалась, на роутере оставалась старая конфигурация, и устройство продолжало ходить через туннель, хотя в настройках уже было исключено. Обновление ставится поверх, настройки не меняются, ничего делать вручную не нужно.

Что изменилось

  • Исключение устройства больше не ломает конфигурацию sing-box. Для списков с адресами sing-box 1.14 сначала получает ответ DNS (шаг evaluate), а уже потом сверяет адреса из ответа со списком. У этого шага нет собственных условий. Когда в правиле было исключённое устройство, Prokop оборачивал шаг в условие «и» с пустым первым условием, и sing-box отвечал parse dns rule[N]: missing conditions. В журнале это выглядело как [fatal] Generated sing-box configuration is invalid ... Aborted. сразу после сохранения правила, а nft и sing-box продолжали работать по старым правилам без исключения.

    Теперь у такого шага условием становится само исключение: «источник не исключённое устройство». Остальные правила с исключением не изменились.

Что проверено

  • PASS: автоматические тесты бэкенда (полный прогон). Новая проверка tests/sing_box_excluded_source_dns_rules.sh: ни одно правило DNS и маршрутизации не остаётся без условий, шаг evaluate пропускает исключённое устройство. Без исправления она падает на том же правиле dns rule[5].
  • PASS: sing-box check (сборка 1.14.1 из исходников) на конфигурации, собранной по отчёту пользователя: до исправления та же ошибка parse dns rule[5]: missing conditions, после исправления конфигурация принимается.
  • NOT TESTED: исправленная сборка на роутере.

2.28.2

Choose a tag to compare

@github-actions github-actions released this 06 Oct 11:10

sing-box больше не подключается сам к себе через DNS-вход устройств

Срочное исправление. Если у правила есть DNS-условия по устройствам (поиск DNS с учётом источника), sing-box мог по кругу открывать соединения сам к себе на 192.168.1.1:1603. Обновление ставится поверх, настройки не меняются, ничего делать вручную не нужно.

Что изменилось

  • DNS-входы sing-box принимают только DNS. DNS-запросы выбранных устройств nft перенаправляет с порта 53 на вход sing-box :1603. Раньше такое соединение считалось DNS, только если его распознал сниффер. Если сниффер его не распознавал (обычно TCP DNS, у которого истёк таймаут распознавания), соединение уходило в правило по умолчанию «Напрямую». А его адресом назначения после перенаправления был сам вход 192.168.1.1:1603. sing-box подключался к себе, новое соединение снова не распознавалось, и так по кругу.

    На роутере это выглядело так: в «Мониторинге» десятки соединений «192.168.1.1 → 192.168.1.1:1603, Напрямую, ни одно правило не сработало» с нулевым входящим трафиком. Под капотом были тысячи сокетов TIME_WAIT, около 13 тысяч записей conntrack, забитая очередь приёма на :1603, высокая нагрузка на процессор и медленный DNS у этих устройств.

    Теперь всё, что приходит на DNS-входы sing-box (dns-in, source-dns-in и входы проверки DNS-серверов), перехватывается как DNS, что бы ни сказал сниффер. Если в соединении не DNS, sing-box его закрывает, и в «Напрямую» оно больше не уходит.

Что проверено

  • PASS: автоматические тесты бэкенда (полный прогон). Новая проверка в tests/sing_box_runtime.sh: DNS-входы перехватываются правилом без условия на протокол сразу после сниффинга. Без исправления она падает.
  • PASS: на роутере (до исправления, только чтение) найдена сама петля: Clash API показывает соединения inbound source-dns-in, 192.168.1.1 → 192.168.1.1:1603, правило final, выход direct-out.
  • NOT TESTED: исправленная сборка на роутере.

2.28.1

Choose a tag to compare

@github-actions github-actions released this 06 Oct 10:59

Названия встроенных списков без перевода

Встроенные наборы правил в разделе снова называются так же, как в источнике списков и в инструкциях: «Russia inside», «Russia outside», «Geo Block», «Porn» и так далее. Обновление ставится поверх, настройки не меняются.

Что изменилось

  • Русские названия встроенных списков убраны. Перевод мешал понять, что включено: «Россия: блокируют извне» читалось как «то, что блокируют в России», хотя russia_outside наоборот содержит российские сервисы (ozon.ru, gosuslugi.ru, nalog.ru, yandex.net и другие), недоступные из-за границы. Включённый вместе с «Russia inside» на роутере в России, он отправляет эти сервисы в VPN.
  • Сам состав списков и правила маршрутизации не менялись.

Что проверено

  • PASS: фронтенд: prettier, eslint, tsc, vitest (1002 теста), сборка.
  • PASS: полный прогон автоматических тестов бэкенда; luci_builtin_ruleset_labels проверяет, что виджет встроенных списков показывает исходные названия в LuCI 24.10 и 25.12.
  • NOT TESTED: на роутере и в браузере. Стоит проверить, что в правиле список встроенных наборов показывает «Russia inside», «Russia outside» и остальные исходные названия.

2.28.0

Choose a tag to compare

@github-actions github-actions released this 05 Oct 21:32
c70bda9

Хранение истории и снимков

На странице «История и восстановление» теперь можно задать, сколько записей истории и снимков конфигурации хранить, и очистить их вручную. Длинные списки свёрнуты, страница стала короче. Обновление ставится поверх, настройки переносятся сами.

Что нужно знать при обновлении

  • Снимков по умолчанию хранится 20 вместо 10, ручных из них может быть до 18 (было 8). Два места по-прежнему всегда остаются для автоматических снимков перед восстановлением, «Сохранить и применить» и автоподбором.
  • История по умолчанию показывает 50 последних записей (было до 200). Если журнал длиннее, при следующей записи в нём останутся 50 последних.

Что изменилось

Лимиты хранения

  • Новая карточка «Хранение»: сколько записей истории (от 20 до 200) и сколько снимков (от 6 до 50) хранить, и сколько их сейчас.
  • Лимиты хранятся в /etc/prokop/retention.json, а не в конфигурации Prokop. Восстановление снимка их не меняет, и для их смены не нужна перезагрузка.
  • Уменьшенный лимит действует сразу: лишние старые записи и самые старые автоматические снимки удаляются. Перед этим страница говорит, что именно будет удалено, и просит подтверждения.

Автоматическая очистка и «Очистить…»

  • Сверх лимита удаляются только старые записи истории и автоматические снимки. Ручные снимки автоматически не удаляются никогда.
  • «Очистить…» у снимков удаляет все автоматические снимки, которые ничем не защищены. Ручные остаются.
  • Никакая очистка не трогает последний рабочий снимок, снимок, к которому ещё можно откатить автоподбор (в том числе если автоподбор прервался до того, как записал его), снимок неприменённого изменения из «Сохранить и применить», а также снимки «Перед восстановлением» и «Параллельная правка», пока стоит DPI-защита незавершённого восстановления или её состояние нельзя проверить. Такие снимки нельзя удалить и по одному: меню объясняет почему.
  • «Очистить…» у истории удаляет записи журнала, в нём остаётся одна запись об очистке. Состояние восстановления от журнала не зависит: неудачное изменение по-прежнему потребует восстановления.
  • Очистка и смена лимитов идут под блокировкой снимков и ждут, пока закончится автоподбор: проверка нового кандидата приняла бы их за помеху и откатила бы хорошую стратегию.
  • Очистка и лимиты доступны только администратору. Пользователь с доступом только на чтение видит лимиты и счётчики, но кнопок не видит, и ACL на чтение новых команд не даёт.

Списки

  • История показывает 10 последних событий, дальше кнопка «Показать ещё». Снимков сначала видно 5, остальные по кнопке «Показать все».

Что проверено

  • PASS: полный прогон автоматических тестов бэкенда от root и от непривилегированного пользователя. Падают только тесты, которые так же падают на 2.27.0 в этом окружении (нет jq, Node 18, нет nft для непривилегированного пользователя). readonly_hostile_env от root дважды упал при параллельном прогоне (другие тесты пишут в /var/run/prokop хоста) и трижды прошёл отдельно. Новые команды проверены: они не пишут в /var/run/prokop хоста. Фронтенд: prettier, eslint, tsc, vitest, сборка.
  • PASS: новый тест history_retention проверяет границы лимитов, удаление сверх лимита, все виды защищённых снимков, отказ при занятой блокировке снимков и журнала, и что очистка истории не скрывает неудачное изменение.
  • PASS: вкладка «История и восстановление» отрисована в Chromium на 1440/1024/768 по-русски с раскрытыми списками, ошибкой ввода и диалогом подтверждения. Горизонтальной прокрутки и обрезанных кнопок нет, режим только чтения тоже проверен (без темы LuCI, данные подставлены).
  • NOT TESTED: на роутере. В первую очередь стоит проверить: карточку «Хранение» и уменьшение лимита на настоящих снимках; «Очистить…» у снимков, когда стоит DPI-защита незавершённого восстановления; что история после обновления показывает 50 записей.

2.27.0

Choose a tag to compare

@github-actions github-actions released this 05 Oct 17:46

Оптимизации и защита TorrServer

Перезапуск быстрее, панель легче, у TorrServer появились пароль и изоляция, счётчики трафика дешевле. Обновление ставится поверх, настройки переносятся сами.

Что нужно знать при обновлении

  • Счётчики трафика по устройствам один раз начнутся с нуля: при обновлении их таблица пересоздаётся.
  • TorrServer один раз перезапустится: он получает мягкий предел памяти.

Что изменилось

TorrServer

  • Новая вкладка «Настройки → TorrServer».
  • Можно включить пароль на веб-страницу и API TorrServer. Приложения, которые работают через API (Lampa, MSX), тогда попросят имя пользователя и пароль. Ссылки на потоки остаются открытыми. Если пароль включён, но имя или пароль не годятся, TorrServer не запускается и пишет причину в журнал.
  • Можно запускать TorrServer в изоляции procd (ujail): он видит только свою программу, свою базу, каталоги кэша на диске и несколько системных файлов. Опция доступна, только если на роутере установлен пакет procd-ujail.
  • Пароль и изоляция по умолчанию выключены. Их изменение перезапускает TorrServer, изменение остальных настроек Prokop его не трогает.
  • TorrServer получает мягкий предел памяти Go (размер кэша плюс 64 МБ). С ним Go раньше возвращает память, но TorrServer никогда не падает из-за этого предела. Если предел вышел бы больше половины памяти роутера, он не ставится.
  • Рекомендуемые настройки выключают Bonjour: он объявлял TorrServer на всех адресах роутера, включая WAN.

Запуск

  • Перезапуск, когда с проверки перед ним ничего не изменилось, больше не собирает и не проверяет конфигурацию sing-box второй раз. Это экономит несколько секунд и около 100 МБ пиковой памяти. Если изменилось хоть что-то (настройки, подписки, списки, кэши, сам sing-box или код Prokop), конфигурация собирается заново, как раньше. В журнале видно, какой путь выбран.

Трафик по устройствам

  • Подсчёт пакетов дешевле: пакет только прибавляется к счётчику и не переписывает срок хранения записи. Адреса, по которым не было трафика 7 дней, удаляются раз в час.
  • Страница «Устройства» обновляется раз в 5 секунд вместо 3.

Автоподбор

  • После автоматической смены стратегии «последняя рабочая конфигурация» обновляется, только когда наблюдение прошло. Стратегия, которая не прошла наблюдение, истекла или была остановлена, никогда не становится конфигурацией, к которой Prokop откатывается. Карточка автоподбора показывает, что наблюдение прошло и ждёт записи, и отдельно, если оно закончилось без записи. Если наблюдение закончилось без результата (истекло или автоматический режим выключили), следующие автоматические применения не выполняются, пока вы не откатите стратегию или не смените её вручную: карточка объясняет это.
  • Ответы серверов при подборе считаются одним правилом nft вместо одного правила на каждую стратегию. Если ядро не поддерживает такой счётчик, автоматически используется прежний способ.

Интерфейс

  • Страницы Prokop в LuCI загружают меньше JavaScript: файлы страниц поставляются сжатыми (на 30% меньше, −122 КБ), а общий модуль панели стал на 12 КБ меньше. Прогресс обновления компонентов и таблица устройств загружаются только на своих страницах. Внешне ничего не меняется.

Что проверено

  • PASS: полный прогон автоматических тестов бэкенда от root и от непривилегированного пользователя без uci (как в CI). Фронтенд: prettier, eslint, tsc, vitest, сборка. На каждое изменение добавлен тест, который не проходит на 2.26.0 и проходит теперь. Счётчики трафика, удаление простаивающих адресов и счётчик ответов автоподбора проверены на настоящем nft с настоящими пакетами.
  • PASS: таблица устройств и панели прогресса, загруженные отдельными модулями, отрисованы в Chromium на 1440/1024/768 по-русски без горизонтальной прокрутки (без темы LuCI).
  • NOT TESTED: на роутере. В первую очередь стоит проверить: пароль TorrServer с Lampa; запуск в ujail и работу TorrServer напрямую при нём; одну сборку конфигурации при перезапуске (строка в журнале); счётчик ответов автоподбора на ядре OpenWrt 25.12; что все страницы Prokop открываются без ошибок в консоли после очистки кэша браузера.

2.26.1

Choose a tag to compare

@github-actions github-actions released this 05 Oct 17:15

Исправление TorrServer после 2.26.0

Срочное исправление ошибок, найденных при проверке 2.26.0 на роутере. Обновление ставится поверх, ничего делать вручную не нужно.

Что изменилось

  • TorrServer снова запускается на роутерах, где он был установлен до 2.26.0. Каталог /opt/torrserver, созданный прежними версиями, был доступен только root, и TorrServer, который с 2.26.0 работает от пользователя torrserver, не мог запустить свою программу: procd перезапускал его по кругу. Теперь каталог открывается на чтение для всех, а писать в него по-прежнему может только root.
  • Настройки TorrServer, сохранённые в settings.json, больше не теряются. Если в TorrServer включено хранение настроек в JSON, файл settings.json, а также история просмотров viewed.json, переезжают в /opt/torrserver/data вместе с базой. При sysupgrade они сохраняются.
  • Уведомление «Конфигурация успешно применена» снова показывает значения обычных настроек, например settings.intercept_client_dns: 1 → 0, а не *** → ***. Скрываются только настройки, где может быть секрет (пароли, токены, ссылки, chat ID, имена пользователей, HWID), и значения с адресами или произвольным текстом.
  • Сам роутер больше не показывается устройством в трафике по устройствам.

Что проверено

  • PASS: полный прогон автоматических тестов бэкенда от root и от непривилегированного пользователя без uci (как в CI). Новые проверки не проходят на 2.26.0 и проходят теперь: запуск из каталога 0700, перенос settings.json и viewed.json, список сохранения при sysupgrade, отказ запуска при ссылке вместо каталога, значения обычных настроек в уведомлении о применении при скрытых секретах, адрес роутера не считается устройством (на настоящем nft).
  • PASS на роутере (2.26.0): перенос настроек, DNS и HTTPS, расписание уведомлений, трафик по устройствам. Ошибки этого выпуска найдены там же.
  • NOT TESTED: сам выпуск 2.26.1 на роутере.

2.26.0

Choose a tag to compare

@github-actions github-actions released this 05 Oct 15:40

Исправления по аудиту от 5 октября

Большой набор исправлений по аудиту версии 2.25.2: уведомления, TorrServer, перехват DNS, трафик по устройствам, запуск и sing-box, подписки, автоподбор, обновления. Обновление ставится поверх, настройки переносятся сами.

Что нужно знать при обновлении

  • Перехват DNS клиентов теперь выключен по умолчанию, в том числе на уже установленных роутерах. Опция перехватывала любой трафик на порт 53, а не только DNS: ломались VPN-клиенты в LAN, подключённые к серверу на 53-м порту, и собственные резолверы в сети (Pi-hole, unbound). После обновления опция выключается один раз, в «Истории» появляется запись об этом. Если перехват нужен, включите его снова: «Настройки → Сеть». Для включённого перехвата появился список «Не перехватывать» (адреса и подсети, например VPN-сервер или резолвер в LAN). Делегированные IPv6-префиксы теперь тоже считаются локальными. Если dnsmasq не обслуживает интерфейс или его DNS выключен, перехват для него не включается.
  • TorrServer больше не работает от root. Он запускается от отдельного пользователя torrserver, база переезжает в /opt/torrserver/data автоматически при первом запуске. Если вы включали в TorrServer кэш на диск (UseDisk) в каталог, куда может писать только root, дайте пользователю torrserver право записи в этот каталог.

Что изменилось

Уведомления

  • Сообщения о падении sing-box или узла правила, через которое идёт Telegram, теперь доходят. Запасной путь «напрямую» узнаёт адрес сервера у bootstrap DNS из настроек, мимо DNS и FakeIP Prokop. Результат теста называет маршрут: «через правило», «обычным маршрутом роутера» или «напрямую, мимо Prokop». Если адрес не удалось узнать, причина пишется как ошибка DNS.
  • Сообщение «Prokop не запустился» повторяется до 30 минут, даже если при загрузке ещё не было интернета.
  • Фоновая задача уведомлений запускается раз в 5 минут, а раз в минуту только пока есть неотправленные сообщения. Если уведомления выключены, запуск, перезапуск и остановка Prokop их процесс не трогают.
  • Выключение уведомлений больше не стирает chat ID, категории, маршрут и срок предупреждения.
  • Длинное русское имя правила больше не ломает сообщение в Telegram. Скобки [ ] и { } в адресе webhook больше не превращаются в несколько запросов.
  • Предупреждения о подписках не повторяются после каждой перезагрузки. После продления подписки предупреждение о трафике снова придёт, когда трафик кончится.
  • Без сети отправка ограничена 60 секундами за проход и не задерживает проверки узлов.
  • Для webhook по http:// в интернет показывается предупреждение: токен в адресе уйдёт открытым текстом.
  • Пользователь с правом только на чтение видит кнопку «Отправить тест» неактивной с объяснением.

TorrServer

  • Рекомендуемые настройки применяются только при первой установке или по кнопке. Обновление Prokop, «Запустить» и «Обновить» больше не перезаписывают ваши настройки и не сбрасывают торренты. Если значения уже совпадают, настройки не отправляются вовсе.
  • Рекомендуемые настройки выключают UPnP, а окно подтверждения показывает реальный размер кэша в МБ.
  • Состояние TorrServer в карточке обновляется сразу, а не через час, поэтому кнопка «Запустить» появляется, как только TorrServer остановился.
  • Если на роутере стоит чужой TorrServer, Prokop не запускает его и не меняет его настройки, а карточка об этом говорит.
  • Обновление TorrServer требует примерно вдвое меньше места и качается сразу на флеш. Прерванное обновление чинится автоматически.
  • «TorrServer напрямую» больше не ломает трекеры из проксируемых списков (адреса FakeIP уходят в sing-box).
  • База TorrServer сохраняется при sysupgrade. Все ошибки TorrServer переведены. Если рекомендуемые настройки не применились, карточка предупреждает.

Сеть и трафик по устройствам

  • Kill-switch защищает интерфейсы с любыми допустимыми именами (раньше имена с + и : молча оставались без защиты) и быстрее замечает молчащий sing-box (5 секунд вместо 10).
  • Для исключённых устройств со своим DNS kill-switch снова сохраняет исключение.
  • Правила Discord больше не забирают UDP 443 общих диапазонов Cloudflare (QUIC чужих сайтов).
  • Поле EDNS Client Subnet проверяет значение так же, как роутер.
  • Трафик по устройствам: поддельные адреса источника больше не забивают таблицы, IPv6-адреса сводятся к устройству по MAC, широковещательные адреса не считаются устройствами. Список ограничен 200 самыми активными устройствами и предупреждает, когда он неполный. В панели сказано, что именно считается. Сброс счётчика замечается.

Запуск, sing-box и подписки

  • Если запуск прервался во время загрузки списков, Prokop больше не остаётся заблокированным до перезагрузки: оставшийся временный sing-box останавливается при следующем запуске или остановке.
  • Расширенные параметры xHTTP, которые установленный sing-box-extended не понимает, отбрасываются с предупреждением, и запуск больше не падает на них.
  • Ручная ссылка, которую sing-box не может собрать (kcp, quic), пропускается с предупреждением, а не ломает всю конфигурацию.
  • Подписки Clash с кавычками и экранированием читаются как YAML, поддерживаются h2-opts и vmess httpupgrade.
  • Проверка новой конфигурации при перезапуске больше не меняет то, что показывает панель, и не удаляет файлы правил, нужные работающему sing-box.
  • Выбор серверов в группах сохраняется при перезагрузке роутера. Группы Priority не сохраняются.
  • Пока Prokop стартует при загрузке, LAN всегда получает DNS от dnsmasq.
  • При холодном старте подписка, которая качается через другое правило, ждёт это правило, а не качается напрямую. Если временный прокси для списков не поднялся, запуск сразу останавливается с понятной причиной.
  • Имя сервера из подписки, похожее на параметр команды, больше не передаётся в dig.
  • Ускорены проверка DNS на вкладке «Диагностика» и проверки при каждом запуске.

Автоподбор

  • Неудачная проверка после применения сначала откатывается, а уже потом выясняется, была ли это потеря интернета. Плохая стратегия не держится в работе лишние минуты.
  • «Нет интернета» требует подтверждения вторым независимым адресом. Контрольная проверка только устанавливает TCP-соединение.
  • Наблюдение судит по доле неудачных проверок: «мигающая» стратегия откатывается, а одна случайная ошибка сразу после применения больше не ставит паузу на сутки.
  • Правка настроек, не касающаяся применённой стратегии, больше не снимает наблюдение. Откат в этом случае возвращает только строку стратегии и сохраняет вашу правку.
  • Наблюдение, закончившееся без результата, записывается в «Историю» и приходит уведомлением.
  • Счётчик ответов считает только пробные соединения самого роутера, занятые порты и умерший nfqws больше не записываются в вину стратегии. Интерфейс различает «проверка без результата» и «проверка не прошла».

Обновления

  • Если обновление через install.sh не удалось, прежний Prokop возвращается со своей конфигурацией. Прерывание обновления (Ctrl-C, SIGTERM) тоже откатывает его, а разрыв SSH больше не обрывает обновление посередине. Пакеты для отката берутся из каталога релизов, без лимита GitHub API.
  • Установка stable и tiny sing-box больше не скачивает пакет второй раз, пока Prokop остановлен.
  • Зависшая загрузка действительно останавливается, коррекция часов после загрузки роутера её не обрывает, а файл больше опубликованного размера не докачивается.
  • В карточке обновления появился этап «Восстановление после ошибки», ошибка показывается у того этапа, где она случилась. Итог «Готово / Ошибка» больше не пропадает и не превращается обратно в «Обновляется…». Время считается по часам роутера, в том числе у пользователя с правом только на чтение. Панель не перерисовывает всю страницу каждую секунду.
  • Ошибки компонентов, предупреждения kill-switch и ошибки загрузки списков показываются по-русски. Незнакомый текст заменяется русской строкой со ссылкой на системный журнал.

Что проверено

  • PASS: полный прогон автоматических тестов бэкенда от root и от непривилегированного пользователя без uci (как в CI); фронтенд (prettier, eslint, tsc, vitest, сборка). На каждое исправление добавлен или расширен тест, который не проходит на 2.25.3 и проходит теперь. Перехват DNS, kill-switch, TorrServer напрямую и счётчик автоподбора проверены на настоящем nft.
  • PASS: русский интерфейс панели «Устройства», окна TorrServer и панели прогресса обновлений отрисован в Chromium на 1440/1024/768 без горизонтальной прокрутки и обрезанных кнопок (без темы LuCI).
  • NOT TESTED: на роутере. В первую очередь стоит проверить: уведомление при убитом sing-box (prokop notify_status), запуск TorrServer от пользователя torrserver и перенос базы, перехват DNS с исключениями, перезагрузку с сохранением выбора серверов, холодный старт с подпиской через правило, откат обновления через install.sh.

2.25.3

Choose a tag to compare

@github-actions github-actions released this 05 Oct 14:26

Срочные исправления безопасности и DNS

Исправления к 2.25.2 по аудиту от 5 октября. Главное: имя сервера из подписки больше не может выполнить код в LuCI. Обновление ставится поверх, настройки не меняются, ничего делать вручную не нужно.

Что изменилось

  • Имена серверов и устройств в выпадающих списках выводятся как текст. В списках «Include servers» / «Exclude servers» (настройки URLTest, подписки, уровни приоритета) имя сервера приходит от провайдера подписки. Раньше при раскрытии списка LuCI разбирал его как HTML, и подписка с именем вида NL<img onerror=…> выполняла JavaScript в сессии администратора роутера. То же было с именами устройств в выборе «Имя (IP)», которые могут прийти из PTR-записи. Теперь имена всегда показываются как обычный текст. Находки FE-11 (P1) и FE-12 (P2).
  • Лаунчеры Zapret-Manager не качают скрипт по HTTP. Если в настройках указано зеркало с адресом http://, обновление Prokop переписывало команды zms/zmsA так, что они при каждом запуске скачивали скрипт через это зеркало без шифрования и выполняли его от root. Установка через такое зеркало и раньше запрещалась; теперь и лаунчеры с таким зеркалом скачивают скрипт с GitHub по https://, а при обновлении в журнал пишется предупреждение. Находка UPD-9.
  • Локальный DNS-резолвер на другом порту снова работает. С 2.5.0 Prokop отказывался запускаться, если основным, bootstrap или DNS-правилом указан резолвер на самом роутере: например https-dns-proxy (127.0.0.1:5053), unbound (:5335) или AdGuard Home. Петля возникает только при обычном DNS на порт dnsmasq (53 или порт из настроек dnsmasq), и только такой адрес теперь отклоняется. Другой порт, DoT или DoH на роутере принимаются с предупреждением в журнале: такой резолвер не должен пересылать запросы обратно в dnsmasq. Находка NET-11.
  • Кнопка «Отправить тест» в уведомлениях объясняет отказ. Если роутер не смог подготовить запрос (например, переполнен /var/run), кнопка раньше молча возвращалась в исходное состояние. Теперь показывается причина. Находка FE-17.
  • Проверка исходников, которая ищет вывод строк как HTML, теперь видит и такие места (выпадающие списки, E(tag, строка), содержимое модальных окон), а тест маскирования секретов для режима только чтения покрывает токен и chat ID Telegram и URL webhook. Находки FE-13, FE-20.

Что проверено

  • PASS: автоматические тесты бэкенда (полный прогон от root и от непривилегированного пользователя без uci, как в CI) и фронтенда (prettier, eslint, tsc, vitest, сборка). Новые проверки: имя сервера и имя устройства с HTML-разметкой попадают в выпадающий список как текст (tests/luci_outbound_choice_labels.sh, tests/local_device_labels.sh); лаунчеры при http://-зеркале остаются на https:// (tests/fork_fix_zapret_manager_launchers.sh); резолверы на портах 5053/5335/5353, DoT и DoH на роутере принимаются, порт 53 и порт dnsmasq из настроек отклоняются (tests/dns_server_loop.sh).
  • NOT TESTED: на роутере. Внешний вид русского интерфейса на 1440/1024/768 не проверялся: изменения не трогают разметку (меняется только способ вставки текста в существующие элементы).

2.25.2

Choose a tag to compare

@github-actions github-actions released this 05 Oct 13:32

Автоподбор: обрыв интернета больше не считается виной стратегии

Исправление к 2.25.0. Если во время проверки стратегии (сразу после применения или в окне наблюдения) пропадал интернет, Prokop мог решить, что не работает стратегия: поставить её на сутки на паузу, потратить дневное применение, а в окне наблюдения откатить рабочую стратегию. Теперь Prokop сначала проверяет, есть ли связь с сайтом в обход стратегии. Обновление ставится поверх, настройки не меняются, ничего делать вручную не нужно.

Что изменилось

  • Контрольная проверка связи. Когда проверка стратегии не прошла, Prokop делает одно дополнительное подключение к тому же адресу сайта напрямую, без DPI-стратегии, тем же изолированным путём, что и при подборе (рабочая конфигурация не меняется). Если сайт не отвечает даже на установку TCP-соединения или до него нет маршрута, значит, пропал интернет, а не сломалась стратегия.
  • Сразу после применения. При обрыве интернета изменение по-прежнему откатывается (стратегию нельзя подтвердить), но с причиной «нет сети»: без паузы на 24 ч и без расхода дневного лимита.
  • В окне наблюдения. Проверка, во время которой пропал интернет, теперь не засчитывается как неудача и не приводит к откату рабочей стратегии.
  • Если контрольная проверка не смогла выполниться (например, идёт другая операция), всё работает как раньше: неудача засчитывается стратегии. Prokop не придумывает оправдание, которого не проверил.

Исправлена находка AT-6 аудита от 5 октября: после 2.18.1 тайм-аут соединения справедливо перестал считаться обрывом сети (так же выглядит блокировка DPI), но замены не было, и почти любой обрыв во время проверки записывался в вину стратегии.

Что проверено

  • PASS: автоматические тесты, в том числе новые случаи в tests/autotune_apply.sh: контрольная проверка без ответа или без маршрута даёт откат с причиной «нет сети», ответ сайта или невозможность проверки оставляют вину на стратегии, при успешной проверке контроль не запускается; в окне наблюдения обрыв даёт «неопределённую» проверку вместо неудачи; контрольная проверка выполняется только внутри блокировки того применения, которое её запустило, посторонний процесс к этой блокировке не подключится.
  • NOT TESTED: на роутере (обрыв WAN во время проверки и наблюдения на реальном трафике).

2.25.1

Choose a tag to compare

@github-actions github-actions released this 05 Oct 13:18

Исправление хода действия TorrServer

Срочное исправление к 2.24.0. Ставится поверх, настройки не меняются.

Что изменилось

  • Запуск TorrServer и применение рекомендуемых настроек больше не выглядят как установка. В 2.24.0 ход этих действий начинался с «Проверки релиза», а впереди в карточке были перечислены загрузка и установка, которых не будет. Теперь «Запустить» показывает этап «Запуск», применение настроек показывает этап «Применение настройки», и других предстоящих этапов в списке нет.

Что проверено

  • PASS: автоматические тесты в режиме как в CI (не-root, без uci), 460 из 460, и unit-тесты интерфейса, в том числе новый тест на список этапов для применения настроек TorrServer.
  • NOT TESTED: на роутере.