Skip to content

Управление стратегиями#32

Open
serogaq wants to merge 21 commits into
IndeecFOX:masterfrom
serogaq:optional-strategies
Open

Управление стратегиями#32
serogaq wants to merge 21 commits into
IndeecFOX:masterfrom
serogaq:optional-strategies

Conversation

@serogaq
Copy link
Copy Markdown

@serogaq serogaq commented May 10, 2026

Сделал большой рефакторинг управления стратегиями: стратегии вынесены из config.default в отдельные файлы и теперь формируются в zapret/config автоматически при пересборке.

Для чего делал: заметил откат MR #30 с комментарием "zapret1 не тянет большой конфиг" и решил переделать работу скрипта с конфигом так, чтобы он не распухал от неиспользуемых стратегий. Плюс очень приятный функционал добавления своих стратегий, не поставляемых скриптом. Если будет принято в этот репозиторий, сделаю MR с добавлением (выключенными по умолчанию) новых встроенных стратегий.

Основные изменения

  • Добавлен каталог strategies/:
    • strategies/TCP/ для базовых TCP-стратегий.
    • strategies/UDP/ для YouTube UDP QUIC-стратегий.
  • Одна стратегия = один .txt файл с параметрами nfqws.
  • Встроенные стратегии нумеруются с 1.
  • Пользовательские стратегии создаются с номера 1000, чтобы не пересекаться с будущими встроенными стратегиями.
  • Отключенные стратегии маркируются как N.disabled.txt.
  • config.default больше не содержит статический блок стратегий, вместо него используется генерируемый блок между:
    • # Z4R_STRATEGIES_START
    • # Z4R_STRATEGIES_END

Как теперь работает генерация config

При пересборке zapret/config скрипт:

  • читает включенные стратегии из /opt/zapret/z4r_strategies/TCP и /opt/zapret/z4r_strategies/UDP;
  • генерирует только строки для включенных стратегий;
  • не добавляет отключенные стратегии в config;
  • сохраняет существующую логику hostlist-ов:
    • TCP YT
    • TCP RKN
    • TCP GV
    • TCP User/temp
    • UDP YT
    • безразборный режим

Меню управления стратегиями

Добавлен раздел управления файлами стратегий:

  • включение/отключение TCP и UDP стратегий;
  • ввод номеров через запятую, например 1,2,5,1000;
  • добавление, удаление и просмотр пользовательских TCP/UDP стратегий;

Переключение активности стратегий применяется пачкой: изменения копятся в меню и сохраняются только при 0. Назад / Сохранить, после чего config пересобирается и zapret перезапускается один раз.

screen1 screen2

Пользовательские стратегии

  • Создаются как 1000.txt, 1001.txt и тп
  • При отключении становятся 1000.disabled.txt
  • При удалении сначала стратегия убирается из config через пересборку и restart zapret, затем удаляются связанные hostlist-файлы, чтобы избежать ошибок nfqws по отсутствующим hostlist-ам.

Дополнительно

  • Вся логика по переключению ts/ts,badsum, смене sni сохранена и переписана.
  • Текст меню со стратегиями и счетчики вариантов формируются автоматически.
  • Список стратегий для sni-переключателя (пункт 14) строится автоматически по файлам стратегий (ищет, где есть sni).
  • Добавлен функционал предотвращающий дублирование домена в User хостлистах
  • Пользовательские стратегии >=1000 не отправляются в telemetry.
  • Добавлена миграция для обновления с прошлой версии на новую файловую модель стратегий.
  • Проверено на BusyBox awk/sed и Bash 5.3, на Entware Keenetic и Alpine Linux
screen3

Как легко протестировать функционал

curl -O https://raw.githubusercontent.com/serogaq/z4r/main/z4r && sh z4r

На текущий момент этой командой вы сразу обновитесь на мой fork и этот функционал, откатить можно такой же командой, поменяв serogaq на IndeecFOX.

Репорты по проблемам широко приветствуются

serogaq added 21 commits May 9, 2026 22:18
@serogaq
Copy link
Copy Markdown
Author

serogaq commented May 11, 2026

Исправлены баги (спасибо AloofLobra за тест):

  • при перезаписи конфига иногда сбрасываются обход войсов, обход UDP и оффлоад в дефолт. Например, при > изменении фулинга. Полагаю, сбросится в дефолт и переключатель iptables/nftables. P.S. да, сбросится =)
  • в некоторых местах меню нужно два раза нажать enter для выхода вместо одного (например в смене UDP стратегий YT если прокликать все и ни одну не сохранить)
  • не баг, но плохо: обновление стратегий требует неприлично много времени
  • не очищается последняя проверенная в 1 пункте стратегия если максимальный номер стратегии больше последней включённой. Например, TCP max = 22, но 18–22 отключены. Я проверил стратегии до 17, ничего не выбрал, цикл пропустил 18–22 и завершился. В конце очистится 22.txt, а 17.txt не очистился. В результате UI скажет “ничего не подошло”, а фактически последняя проверенная стратегия останется активной.
  • не уверен новый это баг или старый, но переключатель SNI находит не все стратегии с SNI
    Судя по всему сейчас мы ищем только паттерн
    --dpi-desync-fake-tls-mod=sni=...
    и заменяем тоже только его.
    А часть стратегий использует
    --dpi-desync-fake-tls-mod=rnd,dupsid,sni=www.google.com

Касательно "переключатель SNI находит не все стратегии с SNI" - это старый баг, но его я тоже поправил

screen

@serogaq serogaq mentioned this pull request May 11, 2026
@IndeecFOX
Copy link
Copy Markdown
Owner

Вы есть в нашем чате ТГ? Можете мне в личку написать?)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants