nzapret — автономный и легковесный модуль для Android-устройств с root-доступом. Модуль работает на базе zapret2, используя локальный движок nfqws2 и правила iptables/ip6tables для обхода DPI, а также встроенный прокси nztg для разблокировки Telegram.
Бинарники nfqws2, пейлоады и списки маршрутизации взяты из оригинального апстрима, прокси-сервер nztg собран на базе собственной Go-реализации, а весь код обвязки написан с нуля под Android — с удобным Web-интерфейсом и без лишнего мусора в системе.
- ✨ Ключевые возможности
- 🚧 Ограничения и известные проблемы
- 🚀 Быстрый старт
- 🏗 Архитектура и структура
- 🛠 Сборка модуля
- 📄 Лицензия
- Встроенный WebUI: Удобный и красивый графический интерфейс прямо в менеджере модулей KernelSU.
- Мощный CLI: Полное управление модулем через терминал.
- Умный роутинг: Перехват трафика в цепочках
OUTPUTиFORWARDдля IPv4 и IPv6. - Авто-стек IPv4/IPv6: Модуль сам поднимает перехват для IPv4 и, если работает
ip6tables, для IPv6 — без ручного выбора режима. - Обход Telegram: Встроенный локальный MTProto-прокси (
nztgproxy) с мостом через WebSocket и Cloudflare-фолбэком, управляемый из той же кнопки Старт. - Управление Private DNS: Автоматическая инициализация DNS и возможность переключения провайдера из WebUI/CLI.
- Персональный
list-user: Собственный список доменов пользователя, редактируемый напрямую из интерфейса. - VPN-совместимость: Поддержка совместной работы с большинством популярных VPN-клиентов.
- Автономность: Модуль использует локальные данные и не требует сети при загрузке.
⚙️ Подробная логика работы сети, DNS и Telegram (для гиков)
- Сетевой стек: Модуль всегда поднимает перехват DPI для IPv4, а для IPv6 — когда на устройстве работает
ip6tables(таблица mangle). Отдельного выбора режима нет и он не нужен: холостые IPv6-правила ничего не стоят при отсутствии IPv6-трафика и уже готовы защитить IPv6, который поднимается позже (после загрузки или при смене Wi-Fi/сотовой сети). Это исключает старую проблему, когда в «режиме только IPv4» трафик (например, YouTube или Instagram) уходил по IPv6 мимо обхода и попадал под DPI. - Private DNS: Инициализируется один раз при первом старте службы. Если в системе уже настроен валидный сторонний DNS-провайдер в режиме "Имя хоста", он сохраняется. В остальных случаях (режимы "Отключено", "Авто" или пусто) принудительно выставляется значение по умолчанию —
xbox-dns.ru(необходимо для обхода DNS-блокировок ИИ-сервисов вроде ChatGPT, Gemini и др.). Ручные изменения DNS через CLI или WebUI фиксируются и не сбрасываются при последующих запусках. - Telegram-прокси (nztgproxy): Локальный MTProto-прокси, написанный на Go (статический, CGO-free бинарник
nztg). Он принимает входящие MTProto-соединения от клиента Telegram, декодирует обфусцированное рукопожатие (handshake) и транслирует (бриджит) трафик до оригинальных датацентров Telegram поверх протокола WSS (WebSocket-over-TLS) для обхода DPI-блокировок по IP-адресам. Поддерживает прямой TCP-откат, а также Cloudflare Worker / CDN fronting (CF-прокси) для маршрутизации трафика через сеть Cloudflare, если прямые адреса WebSocket-серверов Telegram заблокированы провайдером.
Note
Telegram: Модуль включает встроенный локальный MTProto-прокси (nztgproxy) для обхода блокировок Telegram. После старта модуля откройте вкладку Telegram в WebUI и нажмите «Открыть в Telegram» (или скопируйте ссылку/введите 127.0.0.1:1443 и Secret вручную). Если IP Telegram заблокированы провайдером, трафик автоматически идёт через Cloudflare-прокси. Если не грузятся медиа — уберите строку 2:149.154.167.220 в настройках датацентров.
Note
Баг WebUI в KernelSU: Из-за особенностей менеджера KernelSU процессы nfqws2 и nztg, запущенные вручную кнопкой Start из WebUI, могут завершаться системой после смахивания KernelSU из недавних приложений. В KernelSU-Next этот баг уже исправлен (см. issue #1180)! Для обычного KernelSU рекомендуется использовать кнопку Action в списке модулей или команду nzapret start в терминале.
- Скачайте готовый
ZIP-архивсо страницы релизов (Releases). - Прошейте стандартным способом через Magisk или KernelSU.
- Перезагрузите устройство.
- Откройте вкладку модулей в KernelSU для доступа к WebUI. (Пользователям Magisk потребуется приложение KsuWebUI для работы с интерфейсом).
Для управления через CLI требуются root-права (su). Если команда nzapret не найдена в PATH, используйте полный путь: /data/adb/modules/nzapret/system/bin/nzapret.
| Команда | Описание |
|---|---|
nzapret start |
Инициализировать правила iptables и запустить nfqws2 |
nzapret stop |
Остановить процессы службы и очистить цепочки фаервола |
nzapret restart |
Полный перезапуск с применением измененных настроек |
| Команда | Описание |
|---|---|
nzapret status |
Посмотреть текущее состояние и статус службы |
nzapret status --json |
Вывод статуса в формате JSON (для WebUI) |
nzapret log |
Просмотр системного лога службы |
nzapret diagnose |
Сбор подробной диагностической информации для отладки |
| Команда | Описание |
|---|---|
nzapret update |
Скачать и обновить списки обхода (hostlists) |
nzapret network status |
Показать активный стек фаервола (IPv4 / IPv4 + IPv6) |
nzapret dns status |
Показать текущее состояние Android Private DNS |
nzapret dns set default |
Установить DNS по умолчанию (xbox-dns.ru) |
nzapret dns set auto |
Вернуть системный автоматический режим DNS |
nzapret dns set off |
Полностью отключить системный Private DNS |
nzapret dns set hostname <host> |
Установить собственный хост DNS-провайдера |
| Команда | Описание |
|---|---|
nzapret list-user status |
Показать статус списка и количество доменов |
nzapret list-user show |
Отобразить текущее содержимое списка |
nzapret list-user add <domains...> |
Добавить один или несколько доменов в список |
nzapret list-user remove <domains...> |
Удалить указанные домены из списка |
nzapret list-user replace <domains...> |
Перезаписать список новыми доменами |
nzapret list-user clear |
Полностью очистить пользовательский список |
| Команда | Описание |
|---|---|
nzapret tg status |
Показать состояние прокси, secret и ссылку |
nzapret tg status --json |
Состояние в формате JSON (для WebUI) |
nzapret tg link |
Вывести tg://-ссылку для подключения |
nzapret tg open |
Открыть Telegram с настроенным прокси |
nzapret tg regen-secret |
Сгенерировать новый secret |
nzapret tg cf-test |
Проверить доступность Cloudflare-прокси |
nzapret tg set host <ip> |
Задать адрес прослушивания |
nzapret tg set port <n> |
Задать порт |
nzapret tg set cf <on|off> |
Включить/выключить Cloudflare-фолбэк |
nzapret tg set cf-domain <domain> |
Задать свой CF-домен (пусто — сбросить) |
nzapret tg set dc <"n:IP.."> |
Задать правила датацентров (по строке на правило) |
Служба Telegram запускается и останавливается вместе с модулем (
start/stop/restart). Изменения настроек применяются после перезапуска.
| Файл / Директория | Описание |
|---|---|
| ⚙️ service.sh | Системный скрипт автозапуска. Настраивает правила фаервола и запускает nfqws2. |
| 🧠 system/bin/nzapret | Управляющий CLI-интерфейс. Отвечает за команды старта, стопа, сбор метрик для WebUI. |
| Локальный MTProto-прокси для Telegram (Go, статический бинарник). Запускается вместе с nfqws2. | |
| 🎨 webroot/ | Код WebUI (HTML, CSS, JS) для интеграции в KernelSU. |
| 📁 profiles/ | Конфигурационные профили с аргументами для nfqws2. |
| 📁 lists/ | Списки доменов для маршрутизации (включая пользовательский list-user.txt). |
| 📁 payloads/ | Бинарные фейковые пакеты (TLS/QUIC) для обхода DPI. |
| 🛠 customize.sh | Инсталлятор модуля (определение архитектуры устройства, распаковка и настройка прав). |
Если вы хотите собрать модуль самостоятельно, у вас в системе (Linux/WSL) должны быть установлены базовые утилиты: bash, zip, sed, mktemp.
Процесс сборки запускается всего одной командой:
bash build.shНа выходе в корневой директории появится готовый к прошивке архив nzapret-vX.Y.Z.zip. Собирать можно прямо на устройстве (например, в Termux) или на ПК.
Этот проект распространяется под лицензией MIT. Подробную информацию можно найти в файле LICENSE.