Files
Zapret-Manager/Подробная инструкция.md
T

370 lines
56 KiB
Markdown
Raw 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.
# Zapret Manager by StressOzz — подробная инструкция
Скрипт-меню для OpenWrt, объединяющий в одной оболочке установку, настройку, тестирование и обслуживание инструментов обхода блокировок (DPI): **Zapret**, **Zapret2**, **splify** (WARP), **Mixomo** (Mihomo + MagiTrickle), **NetShift** (форк Podkop), **TG WS Proxy** / **sTGWS**, **DNS over HTTPS**, редактор `hosts`, а также системные утилиты роутера.
---
## Содержание
1. [Главное меню](#главное-меню)
2. [Меню Zapret](#меню-zapret)
- [Меню стратегий Zapret](#меню-стратегий-zapret)
- [Меню тестирования стратегий](#меню-тестирования-стратегий)
- [Меню автоподбора стратегий по расписанию](#меню-автоподбора-стратегий-по-расписанию)
- [Меню настройки Discord](#меню-настройки-discord)
3. [Zapret2](#zapret2)
4. [Меню splify](#меню-splify)
5. [Меню Mixomo](#меню-mixomo)
6. [Меню NetShift](#меню-netshift)
7. [Меню TG WS Proxy](#меню-tg-ws-proxy)
8. [Меню DNS over HTTPS](#меню-dns-over-https)
9. [Меню управления доменами в hosts](#меню-управления-доменами-в-hosts)
10. [Системное меню](#системное-меню)
11. [Прочие пункты главного меню](#прочие-пункты-главного-меню)
---
## Главное меню
Открывается автоматически при запуске скрипта. Вверху выводится текущее состояние всех компонентов (какая версия Zapret/Zapret2 установлена, запущены ли они, какая стратегия активна, включён ли DNS over HTTPS, работает ли ttyd-доступ из браузера, зеркало OpenWrt и т.д.), а ниже — пункты навигации:
| Пункт | Действие | Результат |
|---|---|---|
| **1** | Меню Zapret | Переход в подменю установки/настройки/тестирования Zapret. |
| **2** | Установить / Обновить / Удалить Zapret2 | Пункт подписывается динамически (`Z2_ACTION_TEXT`) в зависимости от того, установлен ли Zapret2 и совпадает ли его версия с последней доступной. |
| **3** | Меню splify | Переход в подменю WARP-клиента splify. |
| **4** | Меню Mixomo | Переход в подменю Mihomo + MagiTrickle (маршрутизация по доменам/спискам через прокси/WARP). |
| **5** | Меню NetShift | Переход в подменю NetShift (замена Podkop), ByeDPI, AmneziaWG. |
| **6** | Меню TG WS Proxy | Переход в подменю прокси для Telegram (MTProto/SOCKS5/Rust/sTGWS). |
| **7** | Меню DNS over HTTPS | Переход в подменю настройки DoH. |
| **8** | Меню управления доменами в hosts | Переход в подменю добавления/удаления «зашитых» IP-адресов проблемных сервисов в файл `/etc/hosts`. |
| **f** | Удалить → установить → настроить Zapret | Полный автоматический цикл: удаляет текущий Zapret, ставит его заново с автовыбранной стратегией (`$STR_VERSION_AUTOINSTALL`), прописывает домены в `/etc/hosts`, настраивает Discord-обход и игровую стратегию — «Zapret под ключ» одним нажатием. |
| **m** | Системное меню | Переход в служебное меню (бэкапы, зеркала, expert mode, исключения IP и т.д.). |
| **s / s1 / s2** | Запустить / Остановить Zapret (и/или Zapret2) | Появляется, только если Zapret и/или Zapret2 установлены. Мгновенно останавливает/запускает демон(ы) без переустановки. Если включён Expert mode и установлены оба — показываются раздельные пункты `s1` (Zapret) и `s2` (Zapret2). |
| **Enter** | Выход | Завершает работу скрипта. |
Также в главном меню перед списком пунктов скрипт **предупреждает** о потенциальных проблемах:
- обнаружен активный IPv6 при выключенном в конфиге Zapret IPv6 → предложит включить IPv6 в системном меню;
- обнаружены конфликтующие пакеты `byedpi` или `youtubeUnblock`, установленные напрямую (не через это меню) — предупреждение о возможных конфликтах с Zapret;
- включён `Flow Offloading` без применённого FIX — предупреждение, что Zapret может не работать корректно;
- если в файле исключений IP (`Exclusions_menu`) есть записи — показывается «Исключённые IP: есть».
---
## Меню Zapret
Главное подменю ядра Zapret (пункт **1** главного меню).
| Пункт | Действие | Результат |
|---|---|---|
| **1** | Установить / Обновить / Удалить Zapret | Если Zapret не установлен — скачивает архив `zapret_v<версия>_<архитектура>.zip` с GitHub (remittor/zapret-openwrt), распаковывает и ставит `.ipk`/`.apk` пакеты (сначала `zapret*`, затем `luci-app-zapret*`), докачивает fake-файлы (`stun.bin`, `quic_initial_*.bin` и т.п.) для стратегий обмана DPI. Если версия совпадает с последней — предлагает удалить; если версия устарела — переустанавливает на актуальную. |
| **2** | Меню стратегий Zapret | См. раздел [Меню стратегий Zapret](#меню-стратегий-zapret). |
| **3** | Меню тестирования стратегий | См. раздел [Меню тестирования стратегий](#меню-тестирования-стратегий). |
| **4** | Меню автоподбора стратегий по расписанию | См. раздел [Меню автоподбора](#меню-автоподбора-стратегий-по-расписанию). |
| **5** | Меню настройки Discord | См. раздел [Меню настройки Discord](#меню-настройки-discord). |
### Меню стратегий Zapret
Здесь выбирается конкретная «стратегия» (набор параметров `nfqws`/`--dpi-desync`), которая и обходит блокировку по TCP 443/QUIC.
| Пункт | Действие | Результат |
|---|---|---|
| **1** | Выбрать и установить стратегию v1–v10 | Запрашивает номер (1–10) и применяет одну из встроенных стратегий `strategy_v1`…`strategy_v10` (разные комбинации `multisplit`, `fake`, `hostfakesplit`, `fooling=ts/badseq/badsum` и т.д.). Дополнительно докачивается exclude-список доменов, добавляются Google Play/YouTube-домены в исключения, автоматически подставляется базовая YouTube-стратегия (`ADD_Yv`) и стратегия для discord.media, если их ещё нет. |
| **2** | Выбрать и установить стратегию от Flowseal | Скачивает актуальный репозиторий `Flowseal/zapret-discord-youtube`, парсит `.bat`-файлы известных стратегий сообщества и показывает список для выбора. После выбора — применяет её в конфиг Zapret, докачивает исключения. |
| **3** | Выбрать и установить стратегию для YouTube | Скачивает список Yv-стратегий (`StrYoutube`) и позволяет выбрать конкретную только для YouTube-доменов, не трогая остальную стратегию. |
| **4** | Меню управления стратегией для игр | Открывает подменю [fix_GAME](#подменю-игровой-стратегии). |
| **5** | Включить/выключить обход по спискам РКН | Переключает режим применения стратегии: либо ко всем доменам (`--hostlist-exclude`), либо только к доменам из списка Роскомнадзора (`--hostlist=…zapret-hosts-user.txt`), автоматически скачивая актуальный список блокировок РКН. |
| **6** | Обновить список исключений | Перекачивает файл `zapret-hosts-user-exclude.txt` (домены, которые не нужно трогать стратегией) и перезапускает Zapret. |
| **7** | Добавить/удалить блок `--wssize 1:6` | Добавляет либо убирает в стратегию правило изменения размера окна TCP (Window Size) для 443 порта — иногда помогает против отдельных видов DPI. |
| **8** | Добавить/удалить блок `--methodeol` | Добавляет либо убирает правило `--methodeol` для портов 80,443 (модификация HTTP-метода в начале соединения). |
| **9** | Добавить/удалить блок `--filter-udp=443` | Добавляет либо убирает отдельное правило для QUIC (UDP/443) с fake-quic пакетом для Google-доменов. |
| **0** | Собрать собственную стратегию | Запускает конструктор [build_custom_strategy](#конструктор-собственной-стратегии) — пошаговая сборка своей комбинации из v-стратегии, YouTube-стратегии, игровой стратегии и discord.media-стратегии. |
В верхней части меню всегда отображается **текущая применённая стратегия**, статус списка РКН, fake-файл для Gv (игровой стратегии) и предупреждение, если пользовательский hostlist РКН стал слишком большим.
#### Подменю игровой стратегии
Вызывается из «Меню стратегий» → пункт 4, либо напрямую из главного меню Zapret.
| Пункт | Действие | Результат |
|---|---|---|
| **1–4** | Установить/удалить игровую стратегию Gv1–Gv4 | Добавляет в конфиг отдельный блок `--filter-udp=<игровые порты>` с fake-пакетом (stun.bin по умолчанию) и параметром `--dpi-desync-cutoff`, а также общий TCP-блок для игровых портов. Повторный выбор уже установленного номера — удаляет стратегию и возвращает исходные порты NFQWS. |
| **5** | Включить/отключить Xtreme режим | «Экстремальный» режим — расширяет диапазон игровых портов до `80,88,444-65535` (TCP) и `80,88,443-65535` (UDP), фактически обрабатывая почти весь трафик. Предупреждение: может ломать другие приложения, использовать только для диагностики игр. |
| **6** | Выбрать fake для игровой стратегии | Список из 9 fake-бинарников (`stun.bin`, `stun2.bin`, `quic_initial_*.bin`, `tls_clienthello_sochi_park.bin` и др.) для подмены в `--dpi-desync-fake-unknown-udp`. |
### Меню тестирования стратегий
Пункт 3 меню Zapret. Позволяет автоматически прогнать список стратегий по набору сайтов и увидеть, какая работает лучше.
| Пункт | Действие | Результат |
|---|---|---|
| **1** | Тестирование стратегий v / Flowseal | Подменю выбора: **1** — только v1…vN, **2** — только Flowseal, **3** — обе группы. Скрипт поочерёдно подставляет каждую стратегию в конфиг, перезапускает Zapret, обращается ко всем тестовым URL (Госуслуги, RuTracker, Instagram, Discord, PornHub, OpenWrt и др. + динамический DPI-чек-лист), считает `OK/FAIL`, сортирует результаты по убыванию количества успешных доменов. |
| **2** | Тестировать текущую стратегию | Не меняя конфиг, проверяет доступность контрольного списка доменов + отдельно доменов YouTube на **уже применённой** стратегии, выводит счётчик `X/Y`. |
| **3** | Тестировать стратегии по домену | Позволяет ввести один или несколько своих доменов (например `x.com vk.com`) и прогоняет по ним весь набор v + Flowseal стратегий, показывая детальный `[ OK ]/[FAIL]` лог по каждому домену для каждой стратегии. |
| **4** | Тестировать стратегии для YouTube | Открывает [YOUTUBE_TEST_MENU](#подменю-тестирования-youtube). |
| **5** | Тестировать стратегии из `/root/custom_test.txt` | Даёт протестировать собственный набор стратегий, который пользователь заранее прописал в файле `/root/custom_test.txt` в формате `#Имя` + строки параметров `nfqws`. |
| **7** | Результаты тестирования по домену | Показывает сохранённые результаты последнего теста по конкретным доменам (пункт 3). |
| **8** | Результаты тестирования стратегий | Показывает объединённый (Flowseal + v) отсортированный список результатов последнего массового теста. |
| **9** | Результаты тестирования YouTube | Показывает сохранённые результаты теста YouTube-стратегий. |
| **0** | Результаты тестирования Custom-стратегий | Показывает результаты теста файла `/root/custom_test.txt`. |
| **10** | Удалить результаты тестирования | Стирает все файлы с результатами (`/opt/zapret/tmp/results*`). |
Перед каждым массовым тестом скрипт **обязательно выполняет контрольный тест «Zapret выключен»** — чтобы понимать базовый уровень доступности доменов без обхода блокировки, и не засчитывать сайты, которые в принципе недоступны (например, не в РФ или лежат по другой причине).
#### Подменю тестирования YouTube
| Пункт | Действие | Результат |
|---|---|---|
| **1** | Тестировать каждую стратегию отдельно | Интерактивный режим: показывает стратегию, проверяет доступность доменов YouTube, просит подтвердить работу вживую (открыть видео на устройстве) и по нажатию Enter/S/N применяет, останавливает или продолжает перебор дальше. |
| **2** | Тестировать все стратегии сразу | Прогоняет автоматически (без интерактивного подтверждения) весь список Yv-стратегий или файл `custom_test.txt`, сохраняет результаты. |
| **3** | Тестировать стратегии из `/root/custom_test.txt` | То же самое, но источник стратегий — пользовательский файл. |
### Меню автоподбора стратегий по расписанию
Пункт 4 меню Zapret. Автоматизирует регулярный подбор лучшей рабочей стратегии без участия пользователя (например, ночью по крону).
| Пункт | Действие | Результат |
|---|---|---|
| **1** (динамический) | Включить/изменить время автоподбора по расписанию | Запрашивает час (0–23) и добавляет задание в crontab: `0 <час> * * * /usr/bin/zmsA --auto-best`. |
| **2** (появляется, если расписание задано) | Отключить автоподбор по расписанию | Удаляет cron-задание. |
| **3** | Запустить/остановить автоподбор в фоне | Запускает (или прерывает) фоновый прогон `auto_apply_best_strategy` немедленно, не дожидаясь расписания. При остановке — восстанавливает исходный конфиг из бэкапа. |
| **4** (если есть результаты) | Показать результаты последнего теста | Выводит отсортированный список `Стратегия → OK/TOTAL` последнего автоподбора. |
| **5** (если есть лог) | Показать полный лог последнего теста | Выводит полный технический лог выполнения (`/opt/zapret/tmp/auto_best.log`). |
| **6** | Настроить время на роутере | Открывает [TIME_MENU](#меню-времени). |
| **7** | Выбрать стратегии для автоподбора | Подменю: **1** — только v-стратегии, **2** — только Flowseal, **3** — обе группы (по умолчанию). |
| **8** (если есть результаты/лог) | Удалить результаты теста и лог | Стирает файлы результатов, бэкапа и лога автоподбора. |
Логика самого автоподбора (`auto_apply_best_strategy`): скрипт делает бэкап текущего конфига, собирает выбранные группы стратегий, тестирует каждую по списку доменов + динамическому DPI-чек-листу, выбирает стратегию с максимальным числом успешных доменов, применяет её и **восстанавливает** ранее выбранные пользователем стратегии для YouTube (Yv), Discord (Dv) и игр (Gv), если они были заданы — то есть автоподбор не сбрасывает точечные настройки.
#### Меню времени
| Пункт | Действие | Результат |
|---|---|---|
| **1** | Синхронизировать время через NTP | Запускает `ntpd`/`sysntpd`, синхронизирует системные часы и (если доступно) записывает их в аппаратные часы (`hwclock -w`). |
| **2** | Установить часовой пояс | Список из 12 российских/UTC часовых поясов (Калининград … Камчатка, UTC) — выбор применяет `uci set system.@system[0].timezone/zonename` и перезагружает системную службу времени. |
### Меню настройки Discord
Пункт 5 меню Zapret (или напрямую из главного меню Zapret) — отдельная тонкая настройка обхода блокировки Discord/discord.media.
| Пункт | Действие | Результат |
|---|---|---|
| **1** | Установить скрипт `50-stun4all` | Скачивает и подключает готовый custom.d-скрипт Zapret для обхода STUN (голосовые звонки Discord). |
| **2** | Установить скрипт `50-quic4all` | Аналогично, но для QUIC-трафика. |
| **3** | Установить скрипт `50-discord-media` | Готовый скрипт под медиа-серверы discord.media. |
| **4** | Установить скрипт `50-discord` | Готовый скрипт под подсети Discord целиком (более старая версия из zapret v70.5). |
| **5** | Удалить скрипт | Убирает установленный `custom.d`-скрипт и возвращает флаг `DISABLE_CUSTOM` в конфиге. |
| **6** | Добавить/удалить Финские IP в hosts | Добавляет диапазон `finland10000…10199.discord.media → 104.25.158.178` в `/etc/hosts` (обходной приём для войс-серверов Discord) либо убирает его. |
| **7** | Выбрать и установить стратегию для discord.media | Запрашивает номер стратегии (список `Dv1`…`Dv17`, каждая — своя комбинация `multisplit/fake/fakedsplit/hostfakesplit` и fooling-параметров для портов 2053,2083,2087,2096,8443) и подставляет её в конфиг. |
| **8** | Меню выбора fake для discord,stun | Список из 9 fake-файлов для блока `--filter-l7=discord,stun` (используется для голосовых пакетов Discord через STUN), плюс пункт «0 — Удалить fake». |
---
## Zapret2
Отдельная, более новая реализация Zapret (пакет от Routerich, доступна **только** для архитектуры `aarch64_cortex-a53`). Доступна из главного меню, взаимоисключающе с обычным Zapret (нельзя иметь установленными оба одновременно, кроме случая включённого Expert mode).
- **Установка**: проверяет архитектуру устройства, скачивает индекс пакетов с `packages.routerich.ru`, находит актуальные файлы `zapret2` и `luci-app-zapret2`, устанавливает их, докачивает exclude-список, устанавливает файлы стратегии по умолчанию для медиа Discord, запускает и включает автозапуск службы `zapret2`.
- **Удаление**: останавливает и отключает `zapret2`, удаляет пакеты `zapret2`/`luci-app-zapret2`, стирает конфигурацию и папку `/opt/zapret2`.
Для Zapret2 в отдельном меню недоступны стратегии/тестирование Zapret1 — большая часть тонкой настройки (меню стратегий, тестирование, Discord) работает **только** с Zapret1 (кроме Expert mode).
---
## Меню splify
Пункт 3 главного меню — управление клиентом WARP-туннеля `splify` (на базе AmneziaWG).
| Пункт | Действие | Результат |
|---|---|---|
| **1** | Установить / Обновить splify | Устанавливает пакет `splify` + `luci-app-splify` + русскую локализацию, ставит `amneziawg-tools`/`luci-proto-amneziawg`/`kmod-amneziawg`, регистрирует новый WARP-ключ (через официальный API Cloudflare, с резервным способом через `wg`/`awg` + собственный сервер регистрации), создаёт интерфейс `warp0` с параметрами AmneziaWG-обфускации (Jc/Jmin/Jmax/H1-H4/S1/S2/I1), сохраняет `/root/WARP.conf`, регистрирует endpoint в splify, настраивает зону firewall и перезапускает службы. При обновлении — просто обновляет пакет и перезапускает. |
| **2** | Удалить splify | Полностью деинсталлирует: останавливает службы, удаляет интерфейс `warp0`, зоны/форвардинги firewall, правила маршрутизации, nftables-правила, cron-задачи, файлы `/etc/splify*`, пакеты splify и (если не используется NetShift) — пакеты AmneziaWG. |
| **3** | Установить splify2 | Запускает **официальный** установщик splify2 (`gitlab.com/xyzmean/splify2/install.sh`) — более новая версия с движком steer. При выборе движка в официальном установщике рекомендуется выбирать «1». |
| **4** | Удалить splify2 | Останавливает/отключает службу `steer`, удаляет пакеты `steer`, `steer-extended`, `luci-app-splify2` и связанные конфиги/файлы. |
| **5** | Сгенерировать и применить WARP для splify | Перегенерирует WARP-ключ, позволяет выбрать endpoint (см. ниже), пересоздаёт интерфейс, обновляет `/root/WARP.conf` и перезапускает splify. |
| **6** | Перезапустить splify | Полный цикл: `splify-disable` → включение служб `splify`/`splify-agent` → отключение телеметрии → `restart` для обеих служб → `splify-apply`. |
**Выбор endpoint** (используется в пунктах 1 и 5): либо стандартный `engage.cloudflareclient.com:4500`, либо автоматический подбор — скрипт пингует ~100 случайных IP из известных подсетей Cloudflare WARP, определяет географию через `trace.cloudflare.com`, выбирает адрес с минимальным пингом (исключая колокацию DME).
В меню также отображается статус: версия splify, наличие splify2, установлен ли AmneziaWG, создан ли интерфейс, настроен ли firewall.
---
## Меню Mixomo
Пункт 4 главного меню — управление связкой **Mihomo** (клиент прокси/подписок, бывший Clash Meta) + **MagiTrickle** (маршрутизация по доменам через веб-интерфейс) + **HevSocks5Tunnel**.
| Пункт | Действие | Результат |
|---|---|---|
| **1** | Установить Mixomo | Скачивает и запускает официальный установочный скрипт из репозитория проекта (устанавливает Mihomo, MagiTrickle, HevSocks5Tunnel и связанные пакеты). |
| **2** | Удалить Mixomo | Запускает официальный деинсталлятор, дополнительно чистит cron-задание автоперезапуска Mihomo; рекомендуется перезагрузить роутер после удаления. |
| **3** | Сменить список MagiTrickle | Выбор одного из трёх готовых списков доменов/сервисов для маршрутизации через MagiTrickle: **ITDog**, **Internet Helper #1**, **Internet Helper #2** — скачивает выбранный YAML в `/etc/magitrickle/state/config.yaml`, перезапускает службу. |
| **4** | Интегрировать/сменить VPN подписку в Mihomo | Запрашивает ссылку на подписку (http/https), либо обновляет `url:` в уже существующем `proxy-providers` блоке конфига Mihomo, либо (если подписки ещё нет) генерирует полноценный `config.yaml` «с нуля» с готовыми группами прокси («Сервер для YouTube» / «Сервер для остального трафика»), sniffer-настройками и правилом маршрутизации YouTube через отдельный rule-provider. |
| **5** | Сгенерировать WARP | То же самое, что и в меню splify (регистрация ключа + выбор endpoint), но результат сохраняется только в `/root/WARP.conf`, без создания системного интерфейса. |
| **6** | Интегрировать `/root/WARP.conf` в Mihomo | Запускает скрипт, который добавляет ранее сгенерированный WARP-конфиг как proxy-провайдера/outbound в конфигурацию Mihomo. |
| **7** | Выбрать и установить панель для Mihomo | Подменю **1** Zashboard / **2** MetaCubeXD — скачивает и распаковывает выбранный веб-интерфейс в `/etc/mihomo/ui`, доступен по адресу `http://<IP роутера>:9090/ui`. |
| **8** | Включить/выключить автоперезапуск Mihomo | Подменю: **1** — каждые N часов (2,4,…,22), **2** — ежедневно в конкретный час; создаёт cron-задание `/etc/init.d/mihomo restart`. Повторный вызов при уже включённом расписании — отключает его. |
| **9** (появляется, если доступно обновление) | Обновить MagiTrickle | Скачивает и устанавливает новый пакет MagiTrickle под архитектуру устройства. |
В шапке меню отображается статус служб `mihomo`, `magitrickle`, `hev-socks5-tunnel`, используемый список MagiTrickle, наличие `/root/WARP.conf`, расписание автоперезапуска и адреса веб-интерфейсов (`:9090/ui` для Mihomo, `:8080` для MagiTrickle).
---
## Меню NetShift
Пункт 5 главного меню (проект — преемник Podkop) — маршрутизация трафика через VPN/прокси по спискам сообщества (geoblock, youtube, discord, tiktok и т.д.), а также локальный DPI-обход через ByeDPI и AmneziaWG.
| Пункт | Действие | Результат |
|---|---|---|
| **1** | Установить / Обновить / Удалить NetShift | Проверяет свободное место (минимум ~20 МБ на overlay), проверяет отсутствие конфликтующего `https-dns-proxy`, скачивает и устанавливает `netshift` + `luci-app-netshift` + русскую локализацию. При недостатке места при обновлении — предлагает удалить старую версию перед установкой новой. |
| **2** | Установить / Удалить ByeDPI | Скачивает и ставит пакет `byedpi` под архитектуру устройства, включает автозапуск службы. |
| **3** | Установить / Удалить AmneziaWG | Скачивает `kmod-amneziawg`, `amneziawg-tools`, `luci-proto-amneziawg` и русскую локализацию под версию OpenWrt/архитектуру. Удаление блокируется, если AmneziaWG используется splify. |
| **4** | Установить / Удалить интерфейс AWG | Создаёт (или удаляет) отдельный сетевой интерфейс `AWG` типа `amneziawg` в LuCI — далее пользователю нужно вручную загрузить `.conf`-файл конфигурации через `Network → Interfaces → AWG → Edit → Load configuration`. |
| **5** | Интегрировать / сменить VPN подписку в NetShift | Запрашивает ссылку на подписку и полностью формирует конфиг `/etc/config/netshift` в режиме `proxy` (тип `subscription`) с преднастроенным набором community-списков и фильтрами исключения (LTE, мобильные тарифы и т.п.), затем запускает и перезапускает службу. |
| **6** | Интегрировать AWG в NetShift | Формирует конфиг `/etc/config/netshift` в режиме `vpn` через интерфейс `AWG`, с полным набором community-списков (geoblock, порно, новости, аниме, YouTube, Discord, соцсети, HDrezka, TikTok, Telegram, Cloudflare, облачные провайдеры и т.д.). |
| **7** | Интегрировать ByeDPI в NetShift | Отключает локальный DNS роутера, перенастраивает стратегию ByeDPI на конкретный набор параметров split/desync, формирует конфиг NetShift с outbound-типом socks (127.0.0.1:1080) и списком YouTube, требует перезагрузку роутера для полноценной работы. |
| **8** (появляется, если ByeDPI установлен) | Изменить стратегию ByeDPI | Показывает текущую строку параметров `cmd_opts` ByeDPI и позволяет ввести новую вручную. |
В шапке меню — версия/статус NetShift, статус ByeDPI (и его текущая стратегия), статус AmneziaWG и интерфейса AWG.
---
## Меню TG WS Proxy
Пункт 6 главного меню — набор из четырёх независимых реализаций WebSocket-прокси для обхода блокировки Telegram.
| Пункт | Действие | Результат |
|---|---|---|
| **1** | Меню sTGWS | Открывает [подменю sTGWS](#подменю-stgws) — самобалансирующийся прокси с автоподбором домена. |
| **2** | Установить / Обновить / Удалить TG WS Proxy SOCKS5 | Скачивает бинарник `tg-ws-proxy-go` под архитектуру, создаёт `init.d`-сервис (порт 2080, флаги `--cf-proxy --cf-proxy-first --cf-balance`), запускает. |
| **3** | Установить / Обновить / Удалить TG WS Proxy Rust | Скачивает и распаковывает архив `tg-ws-proxy-rs` под архитектуру, создаёт `init.d`-сервис (порт 2443, генерируется случайный `secret`, флаги `--default-domains --cf-balance --cf-priority`), запускает. |
| **4** | Установить / Обновить / Удалить TG WS Proxy MTProto | Устанавливает через `opkg`/`apk` официальный пакет `tg-ws-proxy` (spatiumstas), генерирует и сохраняет `SECRET` в `/etc/tg-ws-proxy/secret.conf`, включает и запускает службу. |
| **5** | Удалить все TG WS Proxy | Останавливает/отключает все четыре реализации разом и полностью зачищает их файлы, конфиги и пакеты. |
| **6** | Перезапустить все TG WS Proxy | Перезапускает все установленные `init.d`-службы TG-прокси разом и показывает итоговый статус (какие именно запущены). |
После установки любой из реализаций скрипт выводит готовую строку подключения для Telegram (`tg://proxy?server=...` / `tg://socks?server=...`) с реальным IP роутера, портом и секретом/ключом.
#### Подменю sTGWS
| Пункт | Действие | Результат |
|---|---|---|
| **1** | Установить / Обновить / Переустановить | Запускает официальный установщик sTGWS (`gitlab.com/xyzmean/brb`), затем до 60 секунд ожидает подбора рабочего домена и сообщает выбранный домен. |
| **2** | Удалить | Останавливает и отключает службу `tgws`, удаляет пакет и конфигурацию. |
| **3** | Перезапустить | Перезапускает службу `tgws` и выводит текущий подобранный домен. |
| **4** | Перенастроить домен | Запускает `tgws pick` — принудительный подбор нового рабочего домена, перезапускает службу. |
---
## Меню DNS over HTTPS
Пункт 7 главного меню — управление пакетом `https-dns-proxy` и готовыми пресетами DoH-серверов (полезно как дополнение к обходу блокировок и для сокрытия DNS-запросов от DPI/провайдера).
| Пункт | Действие | Результат |
|---|---|---|
| **1** | Установить / Удалить DNS over HTTPS | Ставит (или полностью удаляет, включая связанные записи в `dhcp`-конфиге) пакеты `https-dns-proxy` + `luci-app-https-dns-proxy`. Установка блокируется, если обнаружен конфликтующий NetShift. |
| **2** | Настроить Xbox | Резолвер `xbox-dns.ru`. |
| **3** | Настроить Comss | Резолвер `dns.comss.one` со своими bootstrap-адресами. |
| **4** | Настроить Google | Резолвер `dns.google` (8.8.8.8/8.8.4.4). |
| **5** | Настроить Quad 9 | Резолвер `dns.quad9.net` (9.9.9.9). |
| **6** | Настроить XyZ DNS | Резолвер `dns.yo1nk.app`. |
| **7** | Настроить GeoHide | Подменю выбора региона сервера: **RU** / **EU** / **US**. |
| **8** | Настроить Cloudflare | Резолвер `cloudflare-dns.com` (1.1.1.1/1.0.0.1). |
| **9** | Настроить dns.dns-ai.ru | Российский DoH-резолвер. |
| **10** | Настроить dns.malw.link | Альтернативный резолвер. |
| **11** | Настроить dns.astracat.ru | Альтернативный резолвер. |
| **12** | Настроить dns.mafioznik.xyz | Альтернативный резолвер. |
| **13** | Настроить dns.malw.link (CloudFlare) | Тот же malw.link, но через Cloudflare Gateway. |
| **14** | Настроить dns.nullsproxy.com | Резолвер Supercell-совместимого прокси. |
| **15** | Вернуть настройки по умолчанию | Возвращает стандартную конфигурацию с двумя резолверами: Cloudflare (порт 5053) + Google (порт 5054). |
Каждая настройка полностью перезаписывает файл `/etc/config/https-dns-proxy`, применяя единый набор базовых опций (форс DNS через порты 53/853, канареечные DNS-запросы Apple/Mozilla, слушающий адрес 127.0.0.1) плюс выбранный резолвер, после чего перезапускает `https-dns-proxy` и `dnsmasq`.
---
## Меню управления доменами в hosts
Пункт 8 главного меню — точечное «прошивание» IP-адресов проблемных сервисов напрямую в `/etc/hosts`, в обход DNS-блокировок/резолва.
| Пункт | Действие | Результат |
|---|---|---|
| **0** | nalog.ru | Добавляет/удаляет IP личного кабинета налоговой (`lkfl2.nalog.ru`, `lknpd.nalog.ru`). |
| **1** | rutor.info | Добавляет/удаляет IP торрент-трекера RuTor. |
| **2** | ntc.party | Добавляет/удаляет IP форума ntc.party. |
| **3** | Instagram & Facebook | Добавляет/удаляет большой блок IP основных доменов Meta*. |
| **4** | lib.rus.ec | Добавляет/удаляет IP библиотеки Флибуста-подобного сервиса. |
| **5** | AI сервисы | Добавляет/удаляет крупный блок IP для ChatGPT, Gemini, Grok, Claude, Copilot, DeepL, ElevenLabs, Windsurf, Manus, Notion, AI Studio и др. (через общий IP `45.155.204.190`). |
| **6** | Twitch | Добавляет/удаляет IP `usher.ttvnw.net`/`gql.twitch.tv`. |
| **7** | Telegram Web | Добавляет/удаляет большой блок IP веб-версии Telegram. |
| **8** | Spotify | Добавляет/удаляет базовый блок IP Spotify. |
| **9** | Spotify extended | Расширенный блок IP Spotify (больше доменов CDN/аналитики). |
| **10** | Supercell | IP для игр Clash of Clans/Royale, Brawl Stars, Squad Busters и др. |
| **11** | githubusercontent.com | IP для `raw.githubusercontent.com`, `objects.githubusercontent.com`, `avatars*.githubusercontent.com` и т.д. |
| **12** | github.com | IP для основного домена и статики GitHub. |
| **13** | Ubisoft | IP игровых/лаунчер-серверов Ubisoft. |
| **14** | tapeop.dev | IP небольшого нишевого сайта. |
| **15** | картинки Roblox | IP CDN картинок Roblox (`tr.rbxcdn.com`). |
| **16** | updates.discord.com | IP серверов обновлений Discord. |
| **17** | Добавить/удалить **все** домены | Массовое включение/выключение сразу нескольких основных блоков (`AI`, Instagram, ntc.party, lib.rus.ec, TelegramWeb, Twitch, Supercell, Spotify). |
| **18** | Заменить hosts на GeoHide hosts | Подменю выбора региона: **RU** / **EU** / **US** — полностью заменяет `/etc/hosts` готовым списком проекта GeoHideDNS под выбранный регион. |
| **19** | Заменить hosts на Mafioznik hosts | Полная замена `/etc/hosts` готовым списком проекта Mafioznik. |
| **20** | Заменить hosts на Malw.link hosts | Полная замена `/etc/hosts` готовым списком проекта Malw.link. |
| **21** | Восстановить hosts | Полностью очищает `/etc/hosts` и возвращает минимальный стандартный файл (localhost, ip6-loopback и т.д.). |
Каждый переключаемый пункт помечается зелёным (●) — если добавлен, автоматически определяется через сверку строк файла. После любого изменения перезапускается `dnsmasq`, чтобы правки вступили в силу.
---
## Системное меню
Пункт **m** главного меню — вспомогательные и диагностические функции роутера, напрямую не относящиеся к DPI-обходу.
| Пункт | Действие | Результат |
|---|---|---|
| **1** | Системная информация | Выводит подробный отчёт: модель роутера, архитектура, версия OpenWrt, свободное место в `/tmp` и `/root`, список пользовательских пакетов (сгруппированных по базовому имени), состояние Flow Offloading (SW/HW/FIX), настроенные DoH-резолверы (или проверку доступности GitHub API, если DoH не установлен), проверку доступности провайдера/IPv4/IPv6 (пинг google.com), текущую применённую стратегию Zapret, содержимое NFQWS-портов, список доменов в `hosts`, и итоговую проверку доступности ~35 контрольных доменов (двумя колонками). |
| **2** | Активировать / Удалить доступ к скрипту из браузера | Устанавливает (или удаляет) пакет `ttyd` + `luci-app-ttyd`, перенастраивает его команду запуска на автоматический вход в это же меню (`sh /usr/bin/zms`), после чего меню доступно по адресу `http://<IP роутера>:7681` прямо из браузера, без SSH. |
| **3** | Включить / Отключить блокировку QUIC | Добавляет (или удаляет) firewall-правила `Block_UDP_80`/`Block_UDP_443`, полностью блокирующие исходящий UDP-трафик на порты 80/443 — форсирует браузеры откатываться на TCP (обход некоторых видов DPI, которые лучше блокируют QUIC). |
| **4** | Меню выбора зеркала OpenWrt | Список из 9 региональных зеркал репозитория пакетов (Infra OpenWrt, Бразилия, Китай, Франция, Италия, Марокко, США, Германия, зеркало по умолчанию) — проверяет доступность выбранного зеркала, подменяет адрес в `distfeeds.conf`/`repositories.d`, тестово обновляет список пакетов; при ошибке — автоматически откатывает изменение. |
| **5** | Запустить blockcheck | Останавливает Zapret и запускает встроенный диагностический скрипт `blockcheck.sh` из комплекта Zapret — интерактивный подбор рабочих параметров DPI-обхода «с нуля» на основе живого сетевого теста; по завершении Zapret снова запускается. |
| **6** | Удалить Zapret & Zapret2 | Полная деинсталляция **обоих** движков сразу: останавливает и убивает все связанные процессы (в т.ч. `nfqws`), удаляет пакеты, конфиги, временные файлы, логи, резервные копии, cron-записи и таблицы nftables `zapret`/`zapret2`. |
| **7** | Сделать / Удалить резервную копию настроек Zapret | Архивирует папку `/opt/zapret` и файл конфигурации в `/opt/zapret_backup/zapret.tar.gz`, сохраняет дату и размер бэкапа. Если бэкап уже существует — пункт превращается в «Удалить резервную копию». |
| **8** (появляется, если есть бэкап) | Восстановить настройки Zapret из резервной копии | Останавливает Zapret, полностью пересобирает `/opt/zapret` и конфиг из сохранённого архива, перезапускает службу. |
| **9** (условный) | Включить / Выключить IPv6 в Zapret | Если IPv6 сейчас включён в конфиге — выключает его. Если выключен — сначала проверяет реальную доступность IPv6 (`ping -6 google.com`); включает опцию только при успешной проверке, иначе отговаривает пользователя (пункт не появится в меню, если IPv6 недоступен). |
| **0** (условный, появляется при включённом Flow Offloading) | Применить / Отключить FIX для Flow Offloading | Модифицирует шаблон правил firewall4 (`ruleset.uc`), добавляя условие `ct original packets ge 30` перед аппаратной разгрузкой соединений — без этого исправления быстрая аппаратная разгрузка «обходит» Zapret и блокировка возвращается после нескольких пакетов. |
| **i** | Меню исключений IP из Zapret | Открывает [Exclusions_menu](#меню-исключений-ip) — точечное отключение обработки Zapret для конкретных устройств локальной сети. |
| **e** | Включить / Выключить expert mode | Снимает ограничение «нельзя иметь Zapret и Zapret2 одновременно», открывает доступ к раздельному запуску/остановке (`s1`/`s2` в главном меню) обоих движков сразу. |
| **y** | Установить пакеты из `/root/` | Открывает [PAKET_INSTALL](#установка-пакетов-из-root) — ручную установку локально размещённых `.ipk`/`.apk`-файлов в заданном пользователем порядке. |
### Меню исключений IP
Позволяет **исключить** конкретные устройства сети из обработки Zapret (например, IP-камеры, консоли, IoT-устройства, которые ломаются от DPI-обхода).
- Автоматически сканирует таблицу DHCP-аренд (`/tmp/dhcp.leases`) и ARP-таблицу (`/proc/net/arp`) для интерфейса LAN, показывает список найденных устройств с их IP и (по возможности) сетевым именем.
- Устройства, уже добавленные в исключения, помечаются красным индикатором, остальные — зелёным.
- **Ввод номера(ов)** через пробел — переключает статус исключения для выбранных устройств.
- **a** — добавить IP вручную (для устройств, которых нет в текущей DHCP/ARP таблице).
- **c** — очистить все исключения разом.
- **r** — принудительно пересканировать сеть (ping-сканирование всей подсети `/24`) и обновить список обнаруженных устройств.
Технически список исключённых IP записывается в собственный `custom.d`-скрипт Zapret (`20-script.sh`), который добавляет `nft`-правило, помечающее пакеты от указанных адресов специальной меткой, — Zapret не обрабатывает такие пакеты.
### Установка пакетов из /root/
- Сканирует `/root` на файлы `*.ipk` (или `*.apk` — в зависимости от системы пакетов роутера) и выводит их пронумерованный список.
- Пользователь вводит порядок установки числами через пробел (например `2 1 3`) — пакеты ставятся именно в указанной последовательности (важно для зависимостей).
- Пункт **0** переключает подробный вывод процесса установки (`ВКЛ`/`ВЫКЛ`) — по умолчанию установка идёт «тихо».
---
## Прочие пункты главного меню
- **f — Удалить → установить → настроить Zapret**: комплексная функция «под ключ» (`zapret_key`). Выполняет: 1) удаление текущей установки Zapret, 2) чистую установку последней версии, 3) применение автовыбранной актуальной стратегии (`STR_VERSION_AUTOINSTALL`), 4) массовое добавление проблемных доменов в `/etc/hosts` (все блоки из `ALL_BLOCKS`), 5) автоматическую настройку Discord-обхода со скриптом `50-stun4all`, 6) настройку игровой стратегии — всё без единого дополнительного вопроса.
- **m — Системное меню**: см. раздел [Системное меню](#системное-меню).
- **s / s1 / s2 — Запуск/остановка**: мгновенный toggle службы (служб) без переустановки — полезно, если нужно временно вернуть «чистый» интернет без DPI-обхода (например, для диагностики).
- **Enter — Выход**: завершает выполнение скрипта, ничего не меняя.
---
## Дисклеймер
Скрипт предназначен для образовательных и диагностических целей на устройствах, находящихся в собственности или под управлением пользователя. Все действия (изменение сетевых правил, DNS, firewall, установка сторонних пакетов) выполняются **на свой страх и риск**...