| .github/workflows | ||
| archive/custom-detectors-rotation | ||
| extras | ||
| files | ||
| lib | ||
| mtproxy-client | ||
| rt-proxy | ||
| scripts | ||
| tests | ||
| vps-relay | ||
| vps-stats | ||
| webpanel | ||
| z2k-detect | ||
| --config | ||
| .gitattributes | ||
| .gitignore | ||
| .luacheckrc | ||
| debug.sh | ||
| LICENSE | ||
| quic_strats.ini | ||
| README.md | ||
| release.sh | ||
| strats_new2.txt | ||
| UPDATES.json | ||
| UPSTREAM_PROPOSALS.md | ||
| z2k.sh | ||
| z2k_cleanup.sh | ||
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 (раздел «Изменить набор компонентов»):
- «Модули ядра подсистемы Netfilter» — обязательно, на всех прошивках и роутерах.
- «Протокол 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].
Как работает:
- Слушает DNS-запросы клиентов. Источник наблюдения авто-детектится: AdGuardHome querylog → dnsmasq.log → AF_PACKET sniff на UDP/53 (универсальный fallback, работает без логов)
- На каждый новый домен — 4-стадийная проба: DNS → TCP:443 → TLS → HTTP read 32KB
- Классификация по 22 типизированным кодам (
tls_garbage,http_cutoff,mtls_required,tcp_refused, ...) - Решение:
- HOT — путь до сервера не работает → домен дописывается в
discovered-domains.txt, nfqws2 подхватывает inotify, следующий запрос юзера уже через bypass - IGNORE — DNS не резолвится / сервер сам отказал политикой (typed TLS alert / mTLS)
- HOT — путь до сервера не работает → домен дописывается в
Управление:
- Меню
[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:
- Открыть меню через curl (раздел «Меню» выше — та же команда установки открывает меню)
- Выбрать
[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]. Клиентusquez2k скачивает сам при первом включении.
Discord — голосовые каналы (фикс на ПК)
Веб и текст Discord z2k тянет на роутере сам. А вот голос иногда виснет на «Connecting» — провайдер душит финские голосовые серверы Discord. На уровне роутера это не лечится (нужно было бы ~200 DNS-записей — почти весь лимит Keenetic), поэтому фикс делается на самом ПК: пином финского диапазона в hosts-файл на рабочий Cloudflare-адрес.
Готовый список (200 строк finlandNNNNN.discord.media → 104.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 входит в саму строку, и если вы её не написали — ротации не будет, отработает ровно то, что задано. Остальные три пула продолжат подбираться сами.
Через веб-панель
Раздел «Стратегии» в веб-панели, вкладка «Свои стратегии»:
- Напротив нужного пула нажать «Своя стратегия» — откроется поле ввода.
- Вписать параметры nfqws2. Можно в несколько строк и с комментариями через
#— при сборке конфига всё склеится в одну строку. - «Проверить» — прогнать строку через движок, ничего не применяя. При ошибке показывается ответ самого nfqws2.
- «Сохранить и применить» — сохранить, пересобрать конфиг и перезапустить сервис.
Кнопка «Вернуть авто» удаляет вашу строку и возвращает пул на автоподбор.
За основу удобно взять штатную строку пула — она лежит в /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