Find a file
Necronicle f9fe836612
Some checks are pending
CI / ShellCheck (push) Waiting to run
CI / Go Build & Test (push) Waiting to run
CI / Luacheck (push) Waiting to run
CI / Mutation Testing (push) Waiting to run
Purge jsdelivr cache / Evict jsdelivr edge cache (push) Waiting to run
chore(manifest): указать ref p-73 на несущий коммит
2026-08-06 21:08:23 +03:00
.github/workflows revert: drop manifest signing — the failure mode is unrecoverable 2026-08-04 09:49:42 +03:00
archive/custom-detectors-rotation stage 1: restore detector library z2k-detectors.lua (load-only) 2026-05-30 09:18:14 +03:00
extras docs: Discord voice hosts fix — downloadable list + README section 2026-07-15 13:50:31 +03:00
files feat: исключения по адресату — локалка мимо десинка + список в панели 2026-08-06 21:08:13 +03:00
lib fix: выключатель туннеля гасит оба туннеля и не оставляет сироту в памяти 2026-08-06 20:38:02 +03:00
mtproxy-client fix(tunnel): установка больше не запирается навсегда до первой регистрации 2026-08-05 12:19:20 +03:00
rt-proxy perf+fix: restart 25 s -> ~1.5 s, rt-proxy review, WARP address and leftover interface 2026-07-26 19:26:40 +03:00
scripts build(release): префикс версии обязан совпадать с типом 2026-08-05 13:15:55 +03:00
tests feat: исключения по адресату — локалка мимо десинка + список в панели 2026-08-06 21:08:13 +03:00
vps-relay feat(whatsapp): чиним веб-клиент — живой зарубежный адрес вместо заблокированного 2026-08-05 11:48:04 +03:00
vps-stats stats: harden collector/aggregator per adversarial verification 2026-05-30 18:46:48 +03:00
webpanel release: p-73 (patch) 2026-08-06 21:08:22 +03:00
z2k-detect build: disable Go VCS stamping so binaries reproduce from source 2026-07-25 00:51:22 +03:00
--config fix(warp): stop rotating when the session is up, try a fresh registration instead 2026-07-27 14:10:01 +03:00
.gitattributes fix: comprehensive code review — 40 fixes across 14 files 2026-03-19 00:38:58 +03:00
.gitignore chore: untrack the plan docs and ignore them — they are local, not published 2026-07-26 20:32:32 +03:00
.luacheckrc chore: delete z2k-http-strats.lua — unwired on purpose in June, still shipped 2026-08-03 16:05:29 +03:00
debug.sh Remove unicode symbols to match z4r output 2026-01-29 10:23:28 +03:00
LICENSE feat(mtproxy): прозрачный Telegram прокси через Cloudflare WebSocket 2026-04-10 01:17:51 +03:00
quic_strats.ini fix(quic): yt_quic udp_in 1->8 — unstick QUIC rotation on responding TSPU 2026-06-08 13:03:49 +03:00
README.md fix: порченый пуловый Strategy.txt больше не вешает regen конфига 2026-08-06 15:51:15 +03:00
release.sh revert: drop manifest signing — the failure mode is unrecoverable 2026-08-04 09:49:42 +03:00
strats_new2.txt fix(rotation): revert reset+retrans=3, reorder yt_tcp (z4r strat first) 2026-06-08 23:34:56 +03:00
UPDATES.json chore(manifest): указать ref p-73 на несущий коммит 2026-08-06 21:08:23 +03:00
UPSTREAM_PROPOSALS.md feat: IPv6 support, web panel, ECH detection, integration tests 2026-04-11 01:17:22 +03:00
z2k.sh release: r-72 (reinstall) — одна дверь для стратегий, диагностика вместо логов, снятый Austerus 2026-08-04 16:53:32 +03:00
z2k_cleanup.sh perf+fix: restart 25 s -> ~1.5 s, rt-proxy review, WARP address and leftover interface 2026-07-26 19:26:40 +03:00

z2k — Zapret2 для Keenetic

Telegram-группа: @zapret2keenetic — вопросы, помощь с настройкой, обсуждение

Поддержать проект:

  • TON: UQA6Y6Mf1Qge2dVSl3_vSqb29SKrhI8VgJtoRBjgp08oB8QY
  • USDT (ERC20): 0xA1D6d7d339f05C1560ecAF0c5CB8c4dc80Dc46A9
  • USDT (TRC20): TVtWDryrowtb4MYGGtA8Q2yCAei4VFh5g5

Огромная благодарность спонсорам проекта

  • SupWgeneral
  • Alexey
  • Jet_sk_ya
  • Suharik39
  • ZyaK<-
  • Алексей Стрельцов
  • Diman86RUS
  • Alex
  • GRM
  • Dez
  • hoaxx
  • Mansurchick
  • Dkarloff - SEO отец

Важно: после установки применяются autocircular стратегии. Им нужно время и несколько попыток, чтобы подстроиться под сетевую среду. Если сайт не открывается сразу — дайте странице несколько раз перезагрузиться. Параметры перебираются автоматически, после чего соединение обычно стабилизируется.

Данный проект предназначен для исследования сетевых протоколов и изучения работы систем анализа трафика. Используется исключительно в учебных целях.


Что это

z2k — модульный установщик zapret2 для роутеров Keenetic с Entware.

Цель проекта: упростить установку zapret2 на Keenetic и предоставить набор сетевых стратегий с автоподбором (autocircular), персистентной памятью, телеметрией и полной поддержкой IPv4/IPv6.


Особенности

Сетевые стратегии

  • Установка zapret2 (openwrt-embedded релиз) без компиляции, с проверкой работоспособности nfqws2
  • Три TCP autocircular профиля с разными стратегиями:
    • RKN — список ресурсов (TCP/TLS + HTTP) — 50 стратегий
    • YouTube TCP — youtube.com и связанные домены — 22 стратегии
    • YouTube GV — googlevideo CDN (стриминг) — 22 стратегии
  • QUIC autocircular профили: YouTube QUIC (UDP/443) и Discord voice — с z2k morph-стратегиями (QUIC morph / timing morph)
  • Discord профили:
    • TCP: hostlist Discord включён в RKN-профиль
    • UDP voice/video: circular — стратегия закрепляется в state.tsv после первого успеха и удерживается между перезапусками
  • Hostlist режим: стратегии применяются только к доменам из списков
  • Автохостлист (меню [L]) — режим, в котором движок сам находит заблокированные домены и дописывает их в список, вместо работы по готовым спискам
  • Whitelist: домены-исключения (госуслуги, банки, Steam / PlayStation / Nintendo / Epic, VK, Яндекс и др.) не обрабатываются — к ним desync не применяется

Сеть и прокси

  • Telegram — прозрачная работа для всех устройств в сети, без настройки на клиентах
  • IPv6 — полная поддержка: dual-stack DNS, IPv6 SO_ORIGINAL_DST, Telegram DC IPv6 CIDR
  • Игровой режим (WARP) — игры, заблокированные по IP (не по домену), обходятся через split-туннель Cloudflare WARP; списки игровых IP/CIDR редактируются в вебморде. Подробнее — раздел «Игровой режим (WARP)» ниже.

Инструменты и мониторинг

  • Веб-панель — управление и мониторинг через браузер: статус и запуск сервиса, стратегии, списки, диагностика, обновление z2k
  • Config validator — валидация конфигурации перед применением (порты, hostlist-файлы, blob-файлы, lua-desync)
  • Rollback — откат конфигурации к предыдущему snapshot
  • Планировщик — обновление списков доменов и обслуживающие задачи по расписанию (заменяет cron, который на Entware ненадёжен)
  • Сбор статистики — анонимная отправка обезличенных данных о том, какие стратегии срабатывают; включён по умолчанию, выключается в меню [C]

Установка

1) Компоненты прошивки Keenetic

«Модули ядра подсистемы Netfilter» нужны на ЛЮБОЙ прошивке Keenetic — по умолчанию они не предустановлены, и без них z2k не запустится. Их нужно доустановить в веб-интерфейсе Keenetic (раздел «Изменить набор компонентов»):

  1. «Модули ядра подсистемы Netfilter» — обязательно, на всех прошивках и роутерах.
  2. «Протокол IPv6» — нужен только на старых прошивках (и только если вы используете IPv6). На новых прошивках IPv6 уже включён по умолчанию, и такого пункта в списке может не быть.

На части прошивок пункт «Модули ядра подсистемы Netfilter» появляется в списке только после того, как выбран компонент «Протокол IPv6».

2) Подготовка USB и установка Entware (обязательно)

Подготовьте USB-накопитель и установите Entware по официальной инструкции Keenetic: https://help.keenetic.com/hc/ru/articles/360021214160

После установки Entware выполните обновление индекса пакетов и установите зависимости:

opkg update
opkg install coreutils-sort curl grep gzip ipset iptables kmod_ndms xtables-addons_legacy openssl-util

3) Установка z2k

{ curl --resolve raw.githubusercontent.com:443:213.176.74.63 -fsSL https://raw.githubusercontent.com/necronicle/z2k/z2k-enhanced/z2k.sh || curl -fsSL https://raw.githubusercontent.com/necronicle/z2k/z2k-enhanced/z2k.sh; } | sh

Меню

Меню открывается той же командой, что и установка — если z2k уже установлен, она просто открывает меню (а если ещё нет — ставит и открывает):

{ curl --resolve raw.githubusercontent.com:443:213.176.74.63 -fsSL https://raw.githubusercontent.com/necronicle/z2k/z2k-enhanced/z2k.sh || curl -fsSL https://raw.githubusercontent.com/necronicle/z2k/z2k-enhanced/z2k.sh; } | sh
Пункт Описание
[1] Установить/переустановить zapret2
[2] Управление сервисом (старт/стоп/рестарт/статус)
[3] Обновить списки доменов
[4] Резервная копия/восстановление
[5] Удалить zapret2
[U] Проверить обновления z2k
[W] Whitelist — управление списком исключений
[R] RST-фильтр — фильтрация аномальных TCP RST
[F] Silent fallback для РКН (осторожно — возможны поломки)
[E] Игровой режим WARP (Cloudflare-туннель для игр, заблоченных по IP)
[T] Telegram прокси
[S] Скрипты custom.d
[P] Веб-панель
[D] Диагностика (сводка для траблшутинга)
[I] Убрать статические IP Instagram (обход DNS-отравления)
[Y] Diagnose domain — 4-стадийная проба + рекомендация
[M] Динамический TTL для fake-пакетов — выключить для мобильных операторов
[A] Политика доступа Keenetic — фильтр устройств по NDM-политике (PBR)
[C] Сбор статистики стратегий (анонимно)
[H] Аппаратный offload — per-flow исключение (нативная ротация на Keenetic)
[L] Автохостлист — движок сам находит заблокированные домены

Автодетекция (z2k-detect)

z2k-detect — фоновый Go-демон z2k для проактивного обнаружения DPI-блокировок. Заменил сломанные z2k-probe / z2k-classify. По умолчанию выключен — включается оператором в меню [Y].

Как работает:

  1. Слушает DNS-запросы клиентов. Источник наблюдения авто-детектится: AdGuardHome querylog → dnsmasq.log → AF_PACKET sniff на UDP/53 (универсальный fallback, работает без логов)
  2. На каждый новый домен — 4-стадийная проба: DNS → TCP:443 → TLS → HTTP read 32KB
  3. Классификация по 22 типизированным кодам (tls_garbage, http_cutoff, mtls_required, tcp_refused, ...)
  4. Решение:
    • HOT — путь до сервера не работает → домен дописывается в discovered-domains.txt, nfqws2 подхватывает inotify, следующий запрос юзера уже через bypass
    • IGNORE — DNS не резолвится / сервер сам отказал политикой (typed TLS alert / mTLS)

Управление:

  • Меню [Y] — статус, диагностика конкретного домена, toggle on/off
  • Z2K_DISCOVER=0|1 в /opt/zapret2/config — флаг автозапуска
  • Логи: /var/log/z2k-detect.log
  • State: только in-memory + сам discovered-domains.txt. Никаких отдельных state-файлов на диске.

Динамический TTL (Z2K_DYNAMIC_TTL)

z2k автоматически инжектит :fool=z2k_dynamic_ttl в каждую fake-стратегию (fake, fakedsplit, fakeddisorder, hostfakesplit) TCP-профилей rkn_tcp / yt_tcp / gv_tcp. Lua-hook (files/lua/z2k-fooling-ext.lua) перед отправкой fake-пакета ставит ему ip_ttl = (TTL реального исходящего пакета) 1, чтобы fake выглядел как обычный клиентский пакет с точки зрения ТСПУ. Жёстко прибитый ip_ttl=8 от роутера в 50+ хопах от назначения сразу палится — dynamic_ttl это закрывает.

Когда выключать (меню [M]Выключить или Z2K_DYNAMIC_TTL=0 в /opt/zapret2/config):

  • Мобильные операторы с запретом раздачи (МТС, Билайн), когда на роутере включён NDM TTL-fix (ip ttl-fix через Keenetic CLI) и используется телефонная симка под маскировкой IMEI. В этой топологии NDM всё равно перебивает TTL всех исходящих на фиксированное значение, поэтому наш inject в POSTROUTING не доживает до провода — становится чистым per-fake lua-call overhead на слабом MIPS.
  • Если speedtest показывает резкую деградацию throughput при включённом z2k и top показывает nfqws2 под потолком CPU — это первый кандидат на опт-аут.

По умолчанию включён (Z2K_DYNAMIC_TTL=1). Значение переживает z2k update / reinstall. Меню [M] показывает текущий статус в шапке только если выключен.


Командная строка

После установки в /opt/bin/ появляется короткая команда z2k:

z2k <команда>
Команда Описание
menu, m Открыть меню
install, i Установить/переустановить
uninstall Удалить zapret2 (снимает и TG tunnel)
status, s Показать статус системы
check, info Показать какие списки обрабатываются
diag, d Одностраничная сводка для траблшутинга
update, u Обновить z2k до последней версии
rollback Откатить конфигурацию к snapshot
snapshot Создать snapshot конфигурации
validate Валидация текущей конфигурации
cleanup Очистить старые бэкапы (оставить 5)
version, v Показать версию
help, h Показать справку

Как работает autocircular

Каждый TCP/QUIC профиль содержит N стратегий с номерами strategy=1..N. Модуль circular в nfqws2 отслеживает успех/неудачу per-domain и переключается на следующую стратегию при неудаче. Успешная стратегия закрепляется.

Аппаратный офлоад Keenetic. На части устройств (особенно ТВ-приставках и Smart TV) NAT-офлоад уводил соединение мимо conntrack, из-за чего десинк к нему не применялся и сайт молча не открывался, а ротация «залипала». z2k при старте сервиса выключает софт-фастпас (nf_conntrack_fastnat), поэтому обход и автоподбор стратегий работают и на офлоадных устройствах.

Детекция неудач

  • Стандартный детектор — TCP ретрансмиссии и аномальные RST
  • UDP детектор — соотношение отправленных/полученных пакетов (4+ out, ≤1 in = неудача)
  • TLS alert детектор (z2k_tls_alert_fatal) — анализирует TLS alert + HTTP redirect
  • Mid-stream stall детектор (z2k_mid_stream_stall) — ловит «тихие» разрывы посередине потока, когда DPI режет соединение без RST/alert
  • 3-state HTTP classifier — отличает positive/neutral/hard_fail на HTTP-ответе, чтобы не зачитывать редирект на блок-страницу как успех
  • IP block detector — если несколько ClientHello к одному IP не получают ответа, шлёт client RST, чтобы приложение быстрее переключилось на другой адрес. По умолчанию выключен: его порог срабатывает раньше автоподбора и мешает выбору стратегий. Включается переменной IPBLOCK_DETECT=1 в конфиге

Персистентность

Найденные рабочие стратегии сохраняются в state.tsv и переживают перезапуск сервиса. Файл защищён от конкурентной записи через lock-механизм с atomic rename.

Сбор статистики

z2k раз в сутки отправляет обезличенную сводку о том, какие стратегии на каких категориях срабатывают: имя пула, номер стратегии и время удержания. Ни доменов, ни адресов, ни идентификаторов роутера в ней нет — данные нужны, чтобы понимать, какие стратегии стоит держать в пулах, а какие себя изжили.

Включено по умолчанию, выключается в меню [C] или тумблером в разделе «Режимы» веб-панели.


Веб-панель мониторинга

Встроенная веб-панель для просмотра состояния через браузер.

Установка через меню z2k:

  1. Открыть меню через curl (раздел «Меню» выше — та же команда установки открывает меню)
  2. Выбрать [P][1] (Установить/Переустановить)

После установки панель доступна в локальной сети по адресу http://ROUTER_IP:8088/ (порт 8088, без авторизации).

Разделы панели: Дашборд (статус сервиса, запуск/остановка/перезапуск, баннер обновления z2k), Режимы (переключатели функций), Стратегии (см. ниже), WARP (списки игровых IP — см. ниже), Whitelist (домены-исключения), Доп. домены (свой список доменов для обхода), Диагностика (см. ниже), Благодарности.

Раздел «Стратегии»

Всё, что касается стратегий, живёт в одном разделе с двумя вкладками.

«Автоподбор» — что подбор выбрал по каждому домену, и управление этим выбором:

  • Ручной выбор стратегии — в выпадающем списке напротив домена выбрать любую стратегию из пула категории (проскочить заведомо нерабочую, протестировать свою, закрепить понравившуюся). Применяется на лету (~2 с); автоподбор при этом продолжается.
  • Заморозка 🔒 — кнопка-замок фиксирует строку на текущей стратегии: автоподбор перестаёт её менять. Повторное нажатие — разморозка, подбор возобновляется.
  • Голос Discord — отдельный селектор над таблицей: голосовой пул не привязан к домену, поэтому в таблице его нет, а выбрать стратегию можно заранее, до первого звонка.
  • × (сброс) — вернуть строку к стратегии 1 и режиму «авто».

Ручной выбор и заморозка сохраняются и переживают перезагрузку роутера и обновление z2k. Выпадающий список всегда показывает полный набор стратегий категории.

«Свои стратегии» — задать свою строку параметров вместо подбора, целиком на пул (см. «Свои стратегии»).

Важно: пул, которому задана своя строка, на вкладке «Автоподбор» не появляется. Директива circular входит в саму строку стратегии, и ваша строка заменяет её целиком — подбор для этого пула выключается и записей он не создаёт. Пул при этом работает, просто ровно так, как вы написали.

Раздел «Диагностика»

Сводка отвечает на вопросы, которые мы обычно задаём в чате, чтобы их не пришлось задавать. Сверху — что именно не так: список проблем явным текстом, а если их нет, одна строка об этом. Ниже детали: версия и архитектура, состояние сервиса и правил, место на диске и память, смонтирован ли /opt, доустановлены ли модули Netfilter, умеет ли ядро ipset bitmap:port (без него обход не работает целиком), не включён ли fastnat (при нём стратегии не применяются), резолвится ли DNS, состояние туннеля и выбранные стратегии. В конце — ошибки, собранные по всем логам z2k, повторы схлопнуты.

Две кнопки для отправки:

  • «Копировать» — компактная сводка, помещается в одно сообщение.
  • «Скачать файл» — полный отчёт с логами. В сообщение он не влезает, поэтому отправляется вложением. Это предпочтительный вариант, когда что-то не работает.

Отдельного раздела «Логи» больше нет: он показывал первый попавшийся файл из трёх под общим заголовком «Сервисный лог», без выбора и без подписи, а остальные логи из панели были недоступны вовсе. Теперь их читает сводка.

WARP — списки игровых IP

Раздел «WARP» управляет ipset'ом игрового трафика (см. «Игровой режим (WARP)»):

  • Тумблер WARP — включает/выключает split-туннель (переехал сюда из «Режимов»).
  • Списки — просмотр и правка пользовательских списков IP/CIDR: дописать строки, удалить, отредактировать целиком, выгрузить список в .txt и загрузить свой.
  • Изменения применяются на лету; ваши правки не затираются автообновлением базового списка.

Telegram

Telegram работает для всех устройств в сети автоматически, без настройки на клиентах. Включается при установке или через меню [T].


Игровой режим (WARP)

Часть игр блокируется по IP-адресам серверов (а не по домену/SNI) — пакетный обход (desync) тут бессилен. Для таких игр z2k поднимает split-туннель через Cloudflare WARP: трафик к игровым серверам из списка заворачивается в MASQUE-туннель (пакет usque, интерфейс opkgtun0), а весь остальной трафик роутера идёт напрямую. Десинка и автоподбора здесь нет — только маршрутизация нужных подсетей в туннель.

  • Списки по играм — берутся из открытого проекта medvedeff-true/ru-gaming-blocklist и обновляются автоматически. На свежей установке не включён ни один — выберите нужные игры в разделе «WARP» вебморды, иначе в туннель ничего не пойдёт. Раньше вместо этого был один общий список на ~14 тыс. подсетей; он покрывал 15% интернета вместе с чужими сервисами, поэтому заменён на выбор по играм и вычищается при обновлении.
  • Свои адреса — там же можно вести собственный список IP/CIDR: добавлять, удалять, редактировать, выгружать и загружать .txt. Он отдельный от апстримных, поэтому их обновление его не трогает.
  • Включение — тумблером в разделе «WARP» вебморды либо пунктом меню [E]. Клиент usque z2k скачивает сам при первом включении.

Discord — голосовые каналы (фикс на ПК)

Веб и текст Discord z2k тянет на роутере сам. А вот голос иногда виснет на «Connecting» — провайдер душит финские голосовые серверы Discord. На уровне роутера это не лечится (нужно было бы ~200 DNS-записей — почти весь лимит Keenetic), поэтому фикс делается на самом ПК: пином финского диапазона в hosts-файл на рабочий Cloudflare-адрес.

Готовый список (200 строк finlandNNNNN.discord.media104.25.158.178):

  • скачать: https://cdn.jsdelivr.net/gh/necronicle/z2k@z2k-enhanced/extras/discord-voice-hosts.txt
  • зеркало: https://raw.githubusercontent.com/necronicle/z2k/z2k-enhanced/extras/discord-voice-hosts.txt

Куда добавить (строки из файла — в конец системного hosts):

  • Windows: C:\Windows\System32\drivers\etc\hosts — открыть Блокнотом от имени администратора.
  • Linux / macOS: /etc/hosts — через sudo.

После правки — сбросить DNS-кэш и перезапустить Discord:

  • Windows: ipconfig /flushdns
  • Linux: sudo resolvectl flush-caches
  • macOS: sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder

Адрес 104.25.158.178 со временем может смениться. Если голос снова отвалился — скачайте список заново (свежий держит проект Flowseal/zapret-discord-youtube, кнопка «Update hosts file»).


Пользовательские домены

В большинстве случаев чтобы заблокированный сайт начал обходиться через z2k — достаточно добавить его в extra-список, без всяких своих стратегий. autocircular сам подберёт рабочую стратегию из пула (50 вариантов для TLS, 8 для обычного HTTP) и закрепит её в state.tsv после первого успеха.

Файл со списком:

/opt/zapret2/lists/extra-domains.txt

Формат: один домен на строку, без http:// / www., поддоменов писать не надо (example.com автоматически покрывает foo.example.com):

forum.ru-board.com
example.com
some-blocked-site.org

После редактирования файл подхватывается live, без перезапуска сервиса z2k (см. ниже про политику апдейтов хост-листов). Через несколько секунд z2k начнёт пытаться обходить блокировку на этих доменах — по профилю rkn_tcp для HTTPS/TLS и по HTTP-профилю для порта 80. К YouTube-профилям и к QUIC ваш список не подключается: QUIC-обход работает по собственному списку доменов.

Стандартные списки (RKN-блок, YouTube, Discord, Instagram, etc.) обновляет планировщик z2k в 04:00, а также меню → [3] Обновить списки доменов. Свои добавки в extra-domains.txt через обновление не перезаписываются.


Свои стратегии

Обычно z2k подбирает стратегию сам: перебирает варианты и закрепляет тот, что заработал (см. «Как работает autocircular»). Своя строка нужна редко — если автоподбор не справился или вы уже нашли рабочую комбинацию и хотите зафиксировать именно её.

Сначала попробуйте способ попроще. Не открывается конкретный сайт — добавьте его в extra-domains.txt. Залипла стратегия на одном домене — выберите или заморозьте её на вкладке «Автоподбор». Свои стратегии — уровень ниже: они меняют поведение сразу для целой группы трафика.

Стратегия задаётся не на домен, а на пул. Пулов четыре:

Пул Что покрывает Стратегий в автоподборе
rkn_tcp Заблокированные сайты (TCP/TLS) 50
yt_tcp YouTube (TCP) 22
gv_tcp YouTube видео, googlevideo (TCP) 22
yt_quic YouTube (QUIC/UDP) 9

Профили Telegram, Discord и HTTP так не настраиваются.

Своя строка заменяет пул целиком и выключает для него автоподбор: директива circular входит в саму строку, и если вы её не написали — ротации не будет, отработает ровно то, что задано. Остальные три пула продолжат подбираться сами.

Через веб-панель

Раздел «Стратегии» в веб-панели, вкладка «Свои стратегии»:

  1. Напротив нужного пула нажать «Своя стратегия» — откроется поле ввода.
  2. Вписать параметры nfqws2. Можно в несколько строк и с комментариями через # — при сборке конфига всё склеится в одну строку.
  3. «Проверить» — прогнать строку через движок, ничего не применяя. При ошибке показывается ответ самого nfqws2.
  4. «Сохранить и применить» — сохранить, пересобрать конфиг и перезапустить сервис.

Кнопка «Вернуть авто» удаляет вашу строку и возвращает пул на автоподбор.

За основу удобно взять штатную строку пула — она лежит в /opt/zapret2/extra_strats/ (TCP/RKN/Strategy.txt, TCP/YT/Strategy.txt, TCP/YT_GV/Strategy.txt, UDP/YT/Strategy.txt). Сами эти файлы править не нужно: они перезаписываются при обновлении.

Почему проверка обязательна. nfqws2 разбирает все профили как одну строку опций и при ошибке в любой её части не стартует вообще. Опечатка в строке для rkn_tcp уронит не «сайты», а весь обход — вместе с YouTube и Telegram. Поэтому кандидат прогоняется через nfqws2 --dry-run на полной собранной конфигурации во временном файле, и только пройдя её — сохраняется. Рабочий конфиг при неудачной проверке не трогается.

Через SSH

Панель хранит строки обычными файлами, по одному на пул:

/opt/zapret2/lists/custom-strategies/rkn_tcp.txt
/opt/zapret2/lists/custom-strategies/yt_tcp.txt
/opt/zapret2/lists/custom-strategies/gv_tcp.txt
/opt/zapret2/lists/custom-strategies/yt_quic.txt

Генератор читает их напрямую, так что править можно и руками — но этот путь не проходит проверку движком, и об ошибке вы узнаете по тому, что сервис не поднялся. Проще отредактировать файл по SSH, затем открыть раздел «Стратегии» в панели (ваш текст уже будет в поле) и нажать «Сохранить и применить» — проверка, пересборка и перезапуск произойдут сами.

Пустой файл или файл из одних комментариев игнорируется. Удалить файл — то же, что вернуть пул на автоподбор.

Свои строки не теряются. Они читаются заново при каждой пересборке конфига, поэтому переживают и переключение тумблеров в панели, и обновление z2k, и переустановку.


Управление сервисом

/opt/etc/init.d/S99zapret2 start
/opt/etc/init.d/S99zapret2 stop
/opt/etc/init.d/S99zapret2 restart
/opt/etc/init.d/S99zapret2 status

Полная зачистка (z2k_cleanup)

Если zapret или zapret2 были удалены некорректно, остались зависшие процессы или мусорные правила — используйте скрипт полной зачистки:

{ curl --resolve raw.githubusercontent.com:443:213.176.74.63 -fsSL https://raw.githubusercontent.com/necronicle/z2k/z2k-enhanced/z2k_cleanup.sh || curl -fsSL https://raw.githubusercontent.com/necronicle/z2k/z2k-enhanced/z2k_cleanup.sh; } | sh

ВНИМАНИЕ: Скрипт удаляет ВСЁ связанное с zapret и zapret2:

  • Останавливает все процессы nfqws и nfqws2
  • Удаляет init-скрипты, netfilter хуки, iptables цепочки
  • Полностью удаляет директории /opt/zapret и /opt/zapret2 (включая конфиги, списки, стратегии)
  • Очищает ipset и временные файлы

После зачистки можно выполнить чистую установку z2k.


Поддерживаемые архитектуры

Архитектура определяется автоматически. Поддерживаются все платформы из zapret2 openwrt-embedded:

Архитектура Роутеры
arm64 / aarch64 Keenetic Hero, Ultra, Giga, Hopper и другие на ARM Cortex-A
arm Более старые модели на ARM
mipsel Keenetic на MT7621 (Extra, Start, Air и др.)
mips Older MIPS big-endian
mips64 MIPS64 (big-endian)
mips64el MIPS64 (little-endian)
lexra Realtek Lexra
x86 / x86_64 x86-роутеры и виртуальные машины
riscv64 RISC-V
ppc PowerPC

Структура проекта

z2k/
├── z2k.sh                      # Bootstrap / main installer
├── z2k_cleanup.sh              # Complete uninstall
├── strats_new2.txt             # TCP strategy database (RKN 50 / YT 22 / GV 22)
├── quic_strats.ini             # UDP/QUIC strategy database (yt_quic + discord_voice)
├── lib/                        # Core modules (загружаются z2k.sh)
│   ├── utils.sh                # Utilities, safe_config_read, z2k_fetch с 5-layer fallback
│   ├── install.sh              # 16-step install + rollback
│   ├── strategies.sh           # Strategy parsing & management
│   ├── config.sh               # Configuration management
│   ├── config_official.sh      # nfqws2 config generation
│   ├── webpanel.sh             # CGI веб-панель installer
│   ├── menu.sh                 # Interactive menu (20 опций)
│   └── auto_update.sh          # Self-update z2k через UPDATES.json
├── files/
│   ├── S99zapret2.new          # Init script
│   ├── 000-zapret2.sh          # ndmc hook
│   ├── init.d/                 # Дополнительные init-скрипты (TG watchdog и др.)
│   ├── ndm/                    # Keenetic ndmc-интеграция
│   ├── fake/                   # Binary protocol blobs
│   ├── lua/
│   │   ├── z2k-state-persist.lua   # Persistent strategy memory (state.tsv)
│   │   ├── z2k-detectors.lua       # Failure detectors (TLS alert, mid-stream stall, ...)
│   │   ├── z2k-modern-core.lua     # IP frag, QUIC morph, TLS shuffle, ECH
│   │   ├── z2k-fooling-ext.lua     # Dynamic-TTL fooling hook
│   │   └── z2k-range-rand.lua      # Randomised range injection
│   ├── lists/                  # Domain & IP lists (RKN, YouTube, Telegram, WARP game IPs, extra-domains)
│   ├── z2k-warp.sh             # Game-mode WARP split-tunnel (routing)
│   ├── z2k-scheduler.sh        # Periodic tasks (list update, self-heal) — replaces cron
│   ├── z2k-config-validator.sh # Config validation
│   ├── z2k-update-lists.sh     # Auto domain list updater
│   ├── z2k-auto-update.sh      # Self-update cron entry
│   ├── z2k-geosite.sh          # Geosite ru-blocked import
│   ├── z2k-diag.sh             # Single-page troubleshooting summary
│   ├── z2k-blocked-monitor.sh  # Watch nfqws2 logs for blocked sessions
│   ├── z2k-tg-watchdog.sh      # Telegram tunnel health watchdog
│   ├── z2k-fix-tg-iptables.sh  # TG NAT/iptables hotfix
│   └── z2k-fix-tg-watchdog.sh  # TG watchdog hotfix
├── webpanel/                   # Веб-панель (установщик, CGI-бэкенд, фронтенд)
├── z2k-detect/                 # Демон автодетекции блокировок (Go)
├── rt-proxy/                   # Прокси для RuTracker (Go)
├── vps-relay/                  # Серверный релей туннелей (Go)
├── vps-stats/                  # Приём и агрегация анонимной статистики
├── extras/                     # discord-voice-hosts.txt и прочие вспомогательные файлы
├── UPDATES.json                # Манифест обновлений: версии + sha256 каждого файла
├── mtproxy-client/             # Telegram tunnel (Go)
│   ├── main.go                 # Entry point
│   ├── tunnel.go               # Tunnel client
│   └── listener.go             # SO_ORIGINAL_DST (IPv4 + IPv6)
├── tests/                      # Test framework (lua + shell fixtures, see tests/run_all.sh)
└── .github/workflows/
    ├── ci.yml                  # shellcheck + go + luacheck + cross-arch build
    └── jsdelivr-purge.yml      # Сбросить jsdelivr CDN после релиза

Примечания

  • Если вы используете IPv6 в сети, убедитесь что он включён в прошивке (см. требования выше).
  • Автообновление списков доменов — планировщиком z2k в 04:00 (/opt/zapret2/z2k-update-lists.sh).
  • Если конкретный сайт не открывается — добавь домен в /opt/zapret2/lists/extra-domains.txt (через webpanel «Доп. домены» или вручную); autocircular подберёт страту в течение нескольких TLS-handshake'ов.
  • RST_FILTER по умолчанию выключен для совместимости с Cloudflare; если у провайдера подтверждены fake-RST инжекты ТСПУ, добавь RST_FILTER=1 в /opt/zapret2/config и перезапусти сервис.
  • Для траблшутинга пришли вывод z2k diag — это одностраничная сводка о состоянии всех компонентов.
  • Валидация конфигурации: z2k validate. Откат: z2k rollback.

Лицензия

MIT