z2k/README.md
Necronicle 9c04786ed4 readme: rewrite webpanel install to match actual menu flow
Previous command examples pointed at shell paths that don't exist before
install (chicken-and-egg — /opt/zapret2/webpanel/install.sh only shows up
AFTER the panel is installed, and nothing ever puts it there directly).
The only real install path is menu [P] → [1]. Default port is 8088, not
8080 — menu_webpanel calls install.sh without args, so port is fixed at
the install.sh default.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-18 10:27:46 +03:00

314 lines
16 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# z2k v2.0 — Zapret2 для Keenetic
**Telegram-группа: [@zapret2keenetic](https://t.me/zapret2keenetic)** — вопросы, помощь с настройкой, обсуждение
Поддержать проект:
- TON: `UQA6Y6Mf1Qge2dVSl3_vSqb29SKrhI8VgJtoRBjgp08oB8QY`
- USDT (ERC20): `0xA1D6d7d339f05C1560ecAF0c5CB8c4dc80Dc46A9`
## Огромная благодарность спонсорам проекта
- **SupWgeneral**
**Важно:** после установки применяются autocircular стратегии. Им нужно время и несколько попыток, чтобы подстроиться под сетевую среду. Если сайт не открывается сразу — дайте странице несколько раз перезагрузиться. Параметры перебираются автоматически, после чего соединение обычно стабилизируется.
> Данный проект предназначен для исследования сетевых протоколов и изучения работы систем анализа трафика. Используется исключительно в учебных целях.
---
## Что это
z2k — модульный установщик zapret2 для роутеров Keenetic с Entware.
Цель проекта: упростить установку zapret2 на Keenetic и предоставить набор сетевых стратегий с автоподбором (autocircular), персистентной памятью, телеметрией и полной поддержкой IPv4/IPv6.
---
## Особенности
### Сетевые стратегии
- Установка zapret2 (openwrt-embedded релиз) без компиляции, с проверкой работоспособности `nfqws2`
- Три TCP autocircular профиля с разными стратегиями:
- **RKN** — список ресурсов (TCP/TLS + HTTP) — 45 стратегий
- **YouTube TCP** — youtube.com и связанные домены — 22 стратегии
- **YouTube GV** — googlevideo CDN (стриминг) — 22 стратегии
- QUIC autocircular профиль: YouTube QUIC (UDP/443) — 12 стратегий с z2k morph
- Discord профили:
- TCP: hostlist Discord включён в RKN-профиль
- UDP voice/video: `circular_locked` (стратегия закрепляется per-domain)
- ECH (Encrypted Client Hello) detection — автоматический пропуск desync когда SNI зашифрован
- Hostlist режим: стратегии применяются только к доменам из списков
- Whitelist: домены-исключения (госуслуги, Steam, VK, Яндекс и др.) не обрабатываются
### Сеть и прокси
- **Telegram** — прозрачная работа для всех устройств в сети, без настройки на клиентах
- **IPv6** — полная поддержка: dual-stack DNS, IPv6 SO_ORIGINAL_DST, Telegram DC IPv6 CIDR
- **Игровой режим** — UDP для игр (Roblox и др.), autocircular на портах 1024-65535
### Инструменты и мониторинг
- **Веб-панель** — мониторинг через браузер (CGI): статус сервиса, стратегии, логи
- **Health check** — автоматическая проверка доступности сервисов (YouTube, Discord, RKN)
- **Config validator** — валидация конфигурации перед применением (порты, hostlist-файлы, blob-файлы, lua-desync)
- **Rollback** — откат конфигурации к предыдущему snapshot с авто-таймером
- **Auto updater** — автоматическое обновление списков доменов по cron
- **Телеметрия** — UCB1-scoring стратегий, латентность, cooldown (опционально)
### Качество кода
- **0 shellcheck warnings** — все shell-скрипты чистые
- **0 go vet issues** — Go код без замечаний
- **CI/CD** — GitHub Actions: shellcheck, go build/vet, luacheck, кросс-компиляция 9 архитектур
---
## Установка
### 1) Требования к прошивке Keenetic (обязательно)
Перед установкой zapret2 в веб-интерфейсе Keenetic нужно установить компоненты:
1. "Протокол IPv6"
2. "Модули ядра подсистемы Netfilter" (появляется только после выбора компонента "Протокол IPv6")
### 2) Подготовка USB и установка Entware (обязательно)
Подготовьте USB-накопитель и установите Entware по официальной инструкции Keenetic:
https://help.keenetic.com/hc/ru/articles/360021214160
После установки Entware выполните обновление индекса пакетов и установите зависимости:
```bash
opkg update
opkg install coreutils-sort curl grep gzip ipset iptables kmod_ndms xtables-addons_legacy libnghttp2
```
### 3) Установка z2k
```bash
curl -fsSL https://raw.githubusercontent.com/necronicle/z2k/master/z2k.sh | sh
```
---
## Меню
После установки доступно интерактивное меню:
```bash
curl -fsSL https://raw.githubusercontent.com/necronicle/z2k/master/z2k.sh | sh
```
| Пункт | Описание |
|---|---|
| **[1]** | Установить/переустановить zapret2 |
| **[2]** | Управление сервисом (старт/стоп/рестарт/статус) |
| **[3]** | Обновить списки доменов |
| **[4]** | Резервная копия/восстановление |
| **[5]** | Удалить zapret2 |
| **[A]** | Режим без хостлистов (Austerusj) — обработка всего TLS-трафика |
| **[W]** | Whitelist — управление списком исключений |
| **[R]** | RST-фильтр — фильтрация аномальных TCP RST |
| **[F]** | Silent fallback — ускоренная ротация при отсутствии ответа |
| **[G]** | Игровой режим (Roblox и др.) |
| **[T]** | Telegram |
| **[S]** | Скрипты custom.d |
| **[B]** | Rollback — откат конфигурации к snapshot |
| **[H]** | Health check — проверка доступности сервисов |
| **[V]** | Валидация конфигурации |
---
## Командная строка
```bash
sh z2k.sh [команда]
```
| Команда | Описание |
|---|---|
| `install` | Установить zapret2 |
| `menu` | Открыть интерактивное меню |
| `uninstall` | Удалить zapret2 |
| `status` | Показать статус системы |
| `check` | Показать какие списки обрабатываются |
| `update` | Обновить z2k до последней версии |
| `rollback` | Откатить конфигурацию к snapshot |
| `snapshot` | Создать snapshot конфигурации |
| `healthcheck` | Проверить доступность сервисов |
| `validate` | Валидация текущей конфигурации |
| `cleanup` | Очистить старые бэкапы |
| `version` | Показать версию |
---
## Как работает autocircular
Каждый TCP/QUIC профиль содержит N стратегий с номерами `strategy=1..N`. Модуль `circular` в nfqws2 отслеживает успех/неудачу per-domain и переключается на следующую стратегию при неудаче. Успешная стратегия закрепляется.
### Детекция неудач
- **Стандартный детектор** — TCP ретрансмиссии и аномальные RST
- **UDP детектор** — соотношение отправленных/полученных пакетов (4+ out, ≤1 in = неудача)
- **TLS alert детектор** (`z2k_tls_alert_fatal`) — анализирует TLS alert + HTTP redirect
- **Silent fallback** — детектор отсутствия ответа: если несколько запросов подряд без ответа, принудительно ротирует стратегию. Включается через меню [F]
### Персистентность
Найденные рабочие стратегии сохраняются в `state.tsv` и переживают перезапуск сервиса. Файл защищён от конкурентной записи через lock-механизм с atomic rename.
### Телеметрия (опционально)
При включении policy-режима стратегии оцениваются через UCB1 алгоритм (multi-armed bandit) с учётом:
- Success rate per strategy per domain
- Латентность (EMA)
- Cooldown при неудачах
---
## Веб-панель мониторинга
Встроенная веб-панель для просмотра состояния через браузер.
Установка через меню z2k:
1. Запустить меню: `sh /opt/zapret2/z2k.sh menu`
2. Выбрать `[P]``[1]` (Установить/Переустановить)
После установки панель доступна в локальной сети по адресу `http://ROUTER_IP:8088/` (порт 8088, без авторизации).
Панель показывает:
- Статус сервиса (PID, uptime)
- Текущие стратегии по категориям
- Состояние autocircular (домены, стратегии)
- Логи healthcheck и debug
- Системную информацию (память, диск, нагрузка)
- Статус rollback-snapshot
---
## Telegram
Telegram работает для всех устройств в сети автоматически, без настройки на клиентах. Включается при установке или через меню `[T]`.
---
## Пользовательские стратегии
Для добавления собственных стратегий без модификации основного кода создайте файлы в директории:
```
/opt/zapret2/extra_strats/custom_strategies.d/
```
Формат файла: `CATEGORY_PROTOCOL.conf` (например `MYSITE_TCP.conf`), содержимое — параметры nfqws2.
---
## Управление сервисом
```bash
/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 были удалены некорректно, остались зависшие процессы или мусорные правила — используйте скрипт полной зачистки:
```bash
curl -fsSL https://raw.githubusercontent.com/necronicle/z2k/master/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 |
| `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 (45 strategies)
├── quic_strats.ini # UDP/QUIC strategy database
├── lib/ # Core modules
│ ├── utils.sh # Utilities, safe_config_read, checks
│ ├── install.sh # 12-step install + rollback
│ ├── menu.sh # Interactive menu (15 options)
│ ├── strategies.sh # Strategy parsing & management
│ ├── config.sh # Configuration management
│ ├── config_official.sh # nfqws2 config generation
│ └── system_init.sh # System detection
├── files/
│ ├── S99zapret2.new # Init script
│ ├── fake/ # Binary protocol blobs (76 files)
│ ├── lua/
│ │ ├── z2k-autocircular.lua # Persistent strategy memory + telemetry
│ │ └── z2k-modern-core.lua # IP frag, QUIC morph, TLS shuffle, ECH
│ ├── lists/ # Domain lists (RKN, YouTube, Discord)
│ ├── z2k-healthcheck.sh # Service availability monitoring
│ ├── z2k-config-validator.sh # Config validation
│ └── z2k-update-lists.sh # Auto domain list updater
├── cf-worker/ # Cloudflare Worker relay
│ ├── worker.js # Telegram relay
│ └── wrangler.toml # Deployment config
├── mtproxy-client/ # Telegram tunnel (Go)
│ ├── main.go # Entry point
│ ├── tunnel.go # Tunnel client
│ └── listener.go # SO_ORIGINAL_DST (IPv4 + IPv6)
├── tests/ # Test framework
│ ├── run_all.sh # Test runner
│ ├── test_utils.sh # Utils tests (23 tests)
│ ├── test_strategies.sh # Strategy tests (21 tests)
│ ├── test_config_official.sh # Config gen tests (24 tests)
│ └── test_validator.sh # Validator tests (18 tests)
└── .github/workflows/ci.yml # CI: shellcheck + go + luacheck
```
---
## Примечания
- Если вы используете IPv6 в сети, убедитесь что он включён в прошивке (см. требования выше).
- Автообновление списков доменов — через cron (`/opt/zapret2/z2k-update-lists.sh`).
- Если многие сайты не открываются — попробуйте включить Silent fallback через меню [F].
- Валидация конфигурации доступна через `sh z2k.sh validate` или меню [V].
- Для отката к предыдущей конфигурации используйте `sh z2k.sh rollback` или меню [B].
---
## Лицензия
MIT