zapret-openwrt-guide
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseZapret-OpenWrt: Полная справка
Zapret-OpenWrt:完整指南
Что такое Zapret
什么是Zapret
Zapret — это Anti-DPI (Deep Packet Inspection) утилита для OpenWrt роутеров. Это не VPN — zapret не меняет IP-адрес и не скрывает трафик. Вместо этого он модифицирует сетевые пакеты, чтобы обойти системы глубокой инспекции пакетов (DPI).
Репозиторий: https://github.com/remittor/zapret-openwrt
Upstream: https://github.com/bol-van/zapret
Текущая версия: v72.20260226
Zapret是一款适用于OpenWrt路由器的Anti-DPI(深度包检测)工具。它不是VPN——zapret不会更改IP地址或隐藏流量,而是通过修改网络数据包来绕过深度包检测(DPI)系统。
代码仓库: https://github.com/remittor/zapret-openwrt
上游项目: https://github.com/bol-van/zapret
当前版本: v72.20260226
Архитектура проекта
项目架构
Проект состоит из двух пакетов:
| Пакет | Назначение |
|---|---|
| Основной пакет: демон nfqws, конфиги, скрипты, ipset-списки |
| Веб-интерфейс для управления через LuCI |
项目包含两个包:
| 包 | 用途 |
|---|---|
| 主包:nfqws守护进程、配置文件、脚本、ipset列表 |
| 通过LuCI进行管理的Web界面 |
Структура на роутере
路由器上的目录结构
/opt/zapret/
├── nfq/nfqws # Основной демон DPI desync
├── ip2net/ip2net # Конвертер IP в подсети
├── mdig/mdig # DNS-утилита
├── config # Рабочий конфиг (runtime)
├── config.default # Шаблон по умолчанию
├── def-cfg.sh # Стратегии и дефолты
├── sync_config.sh # Синхронизация UCI -> config
├── restore-def-cfg.sh # Сброс настроек
├── update-pkg.sh # Обновление пакетов
├── dwc.sh # DPI-чекер
├── comfunc.sh # Общие функции
├── init.d.sh # Init-скрипт (procd)
├── ipset/ # Списки хостов и IP
│ ├── zapret-hosts-google.txt
│ ├── zapret-hosts-user.txt
│ ├── zapret-hosts-user-exclude.txt
│ ├── zapret-hosts-auto.txt
│ ├── zapret-ip-exclude.txt
│ ├── zapret-ip-user.txt
│ ├── zapret-ip-user-exclude.txt
│ └── cust[1-4].txt
├── files/fake/ # Шаблоны поддельных пакетов (.bin)
└── init.d/openwrt/custom.d/ # Пользовательские скрипты хуки
├── 10-script.sh
├── 20-script.sh
├── 50-script.sh # Пример: Discord/STUN
├── 60-script.sh
└── 90-script.sh/opt/zapret/
├── nfq/nfqws # 核心DPI desync守护进程
├── ip2net/ip2net # IP转子网转换器
├── mdig/mdig # DNS工具
├── config # 运行时配置文件
├── config.default # 默认配置模板
├── def-cfg.sh # 策略与默认值定义
├── sync_config.sh # 同步UCI配置至核心配置
├── restore-def-cfg.sh # 重置配置至默认值
├── update-pkg.sh # 包更新脚本
├── dwc.sh # DPI检测工具
├── comfunc.sh # 通用函数库
├── init.d.sh # Procd初始化脚本
├── ipset/ # 主机与IP列表
│ ├── zapret-hosts-google.txt
│ ├── zapret-hosts-user.txt
│ ├── zapret-hosts-user-exclude.txt
│ ├── zapret-hosts-auto.txt
│ ├── zapret-ip-exclude.txt
│ ├── zapret-ip-user.txt
│ ├── zapret-ip-user-exclude.txt
│ └── cust[1-4].txt
├── files/fake/ # 伪造数据包模板文件(.bin)
└── init.d/openwrt/custom.d/ # 用户自定义钩子脚本
├── 10-script.sh
├── 20-script.sh
├── 50-script.sh # 示例:Discord/STUN配置
├── 60-script.sh
└── 90-script.shКонфигурационная система
配置系统
Zapret использует двойную систему конфигурации:
- UCI конфиг () — хранит настройки, редактируемые через LuCI
/etc/config/zapret - Основной конфиг () — используется демоном nfqws
/opt/zapret/config
При каждом старте/рестарте вызывается , который синхронизирует значения из UCI в основной конфиг.
sync_config.shZapret采用双重配置系统:
- UCI配置文件 () — 存储可通过LuCI编辑的设置
/etc/config/zapret - 核心配置文件 () — nfqws守护进程使用的配置
/opt/zapret/config
每次启动/重启服务时,会调用脚本,将UCI中的配置值同步到核心配置文件中。
sync_config.shБыстрый старт
快速开始
- Установить пакеты и
zapretluci-app-zapret - Открыть LuCI: Services -> Zapret -> Service
- Нажать Reset settings и выбрать стратегию (рекомендуется или
v6_by_StressOzz)v7_by_StressOzz - Нажать Enable и Start
- Проверить работу через Diagnostics -> Sites check
- 安装和
zapret包luci-app-zapret - 打开LuCI界面:Services -> Zapret -> Service
- 点击Reset settings并选择策略(推荐或
v6_by_StressOzz)v7_by_StressOzz - 点击Enable和Start启动服务
- 通过Diagnostics -> Sites check验证服务运行状态
Safety Notes
安全注意事项
- Zapret меняет системные конфиги и сервисы роутера, поэтому перед обновлением или сменой стратегии нужен backup и план отката.
- Данные, скачиваемые updater/dwc-скриптами из GitHub и внешних диагностических источников, считай недоверенным вводом до проверки.
- Для production предпочитай pinned release/tag и ручную валидацию артефактов, а не слепое обновление “до последнего”.
- Если нужна максимальная предсказуемость, скачивай release-артефакты и hostlists на доверенной машине, проверяй checksums/содержимое и только потом переноси их на роутер.
- Zapret会修改路由器的系统配置和服务,因此在更新或更换策略前需做好备份和回滚计划。
- updater/dwc脚本从GitHub和外部诊断源下载的数据,在验证前请视为不可信输入。
- 生产环境中建议使用固定版本/标签并手动验证工件,而非盲目更新至“最新版本”。
- 如果需要最高可预测性,请在可信机器上下载版本工件和主机列表,校验校验和/内容后再传输到路由器。
Конфигурация
配置说明
Подробная справка по всем параметрам конфигурации: прочитай файл в директории этого скилла.
references/config.mdКлючевые группы параметров:
- Firewall: FWTYPE, POSTNAT, FLOWOFFLOAD, INIT_APPLY_FW
- Сеть: DISABLE_IPV4, DISABLE_IPV6, FILTER_TTL_EXPIRED_ICMP
- NFQWS: NFQWS_ENABLE, NFQWS_PORTS_TCP/UDP, NFQWS_OPT, connbytes (PKT_OUT/IN)
- Фильтрация: MODE_FILTER (hostlist/autohostlist), FILTER_MARK
- AutoHostList: RETRANS_THRESHOLD, FAIL_THRESHOLD, FAIL_TIME
- Логирование: DAEMON_LOG_ENABLE, DAEMON_LOG_SIZE_MAX, DAEMON_LOG_FILE
- Прочее: WS_USER, DISABLE_CUSTOM, DESYNC_MARK
所有配置参数的详细说明:请查看本技能目录下的文件。
references/config.md关键参数组:
- 防火墙:FWTYPE, POSTNAT, FLOWOFFLOAD, INIT_APPLY_FW
- 网络:DISABLE_IPV4, DISABLE_IPV6, FILTER_TTL_EXPIRED_ICMP
- NFQWS:NFQWS_ENABLE, NFQWS_PORTS_TCP/UDP, NFQWS_OPT, connbytes (PKT_OUT/IN)
- 过滤规则:MODE_FILTER (hostlist/autohostlist), FILTER_MARK
- AutoHostList:RETRANS_THRESHOLD, FAIL_THRESHOLD, FAIL_TIME
- 日志:DAEMON_LOG_ENABLE, DAEMON_LOG_SIZE_MAX, DAEMON_LOG_FILE
- 其他:WS_USER, DISABLE_CUSTOM, DESYNC_MARK
Стратегии DPI-обхода
DPI绕过策略
Подробное описание всех стратегий: прочитай файл в директории этого скилла.
references/strategies.mdДоступные стратегии (определены в ):
def-cfg.sh| Стратегия | Порты TCP | Порты UDP | Особенности |
|---|---|---|---|
| empty | 80,443 | 443 | Пустая, без desync |
| v1_by_StressOzz | 80,443 | 443 | fake,multidisorder + QUIC fake |
| v2_by_StressOzz | 80,443 | 443 | fake,fakeddisorder + seqovl |
| v3_by_StressOzz | 80,443 | 443 | Как v2, другой TLS-шаблон (t2.bin) |
| v4_by_StressOzz | 80,443 | 443 | fake,multisplit + 3 секции --new |
| v5_by_StressOzz | 80,443 | 443 | ip-id=zero + multisplit |
| v6_by_StressOzz | 80,443,2053,2083,2087,2096,8443 | 443,19294-19344,50000-50100 | Discord + STUN поддержка |
| v7_by_StressOzz | 80,443,2053,2083,2087,2096,8443 | 443,19294-19344,50000-50100 | Улучшенная v6, больше repeats |
| v9_by_StressOzz | 80,443,2053,2083,2087,2096,8443 | 443,19294-19344,50000-50100 | hostfakesplit вариант |
| ALT7_by_Flowseal | 80,443 | 443 | ip-id=zero, multisplit + seqovl |
| TLS_AUTO_ALT3_by_Flowseal | 80,443 | 443 | fooling=ts, больше repeats |
Стратегия по умолчанию:
v6_by_StressOzz所有策略的详细说明:请查看本技能目录下的文件。
references/strategies.md可用策略(定义在中):
def-cfg.sh| 策略 | TCP端口 | UDP端口 | 特点 |
|---|---|---|---|
| empty | 80,443 | 443 | 空策略,无desync处理 |
| v1_by_StressOzz | 80,443 | 443 | fake,multidisorder + QUIC伪造 |
| v2_by_StressOzz | 80,443 | 443 | fake,fakeddisorder + seqovl |
| v3_by_StressOzz | 80,443 | 443 | 同v2,使用不同TLS模板(t2.bin) |
| v4_by_StressOzz | 80,443 | 443 | fake,multisplit + 3段--new参数 |
| v5_by_StressOzz | 80,443 | 443 | ip-id=zero + multisplit |
| v6_by_StressOzz | 80,443,2053,2083,2087,2096,8443 | 443,19294-19344,50000-50100 | 支持Discord + STUN |
| v7_by_StressOzz | 80,443,2053,2083,2087,2096,8443 | 443,19294-19344,50000-50100 | v6优化版,增加重复处理 |
| v9_by_StressOzz | 80,443,2053,2083,2087,2096,8443 | 443,19294-19344,50000-50100 | hostfakesplit变体 |
| ALT7_by_Flowseal | 80,443 | 443 | ip-id=zero, multisplit + seqovl |
| TLS_AUTO_ALT3_by_Flowseal | 80,443 | 443 | fooling=ts,增加重复处理 |
默认策略:
v6_by_StressOzzВеб-интерфейс LuCI
LuCI Web界面
Подробная справка по UI: прочитай файл в директории этого скилла.
references/ui.mdLuCI-интерфейс доступен по пути Services -> Zapret и содержит 5 страниц:
- Service () — управление сервисом, статус, кнопки enable/disable/start/stop/restart/reset, диагностика, обновление
service.js - Settings () — настройки в 5 вкладках: Main settings, NFQWS options, AutoHostList, Host lists, custom.d
settings.js - Log () — просмотр логов демонов в реальном времени (polling каждую секунду)
dmnlog.js - Diagnostics () — DPI check и Sites check через
diagnost.jsdwc.sh - Updater () — проверка и установка обновлений с GitHub
updater.js
UI详细说明:请查看本技能目录下的文件。
references/ui.mdLuCI界面入口为Services -> Zapret,包含5个页面:
- Service () — 服务管理、状态查看、启用/禁用/启动/停止/重启/重置按钮、诊断、更新
service.js - Settings () — 配置页面,分为5个标签页:主设置、NFQWS选项、AutoHostList、主机列表、custom.d
settings.js - Log () — 实时查看守护进程日志(每秒轮询)
dmnlog.js - Diagnostics () — 通过
diagnost.js进行DPI检测和站点验证dwc.sh - Updater () — 检查并从GitHub安装更新
updater.js
Скрипты
脚本说明
Подробная справка по скриптам: прочитай файл в директории этого скилла.
references/scripts.md| Скрипт | Назначение |
|---|---|
| Общие функции: пути, PID, валидация конфига, init_before_start |
| Procd init-скрипт (START=21, USE_PROCD=1) |
| UCI -> config синхронизация при start/restart |
| Определения стратегий и дефолтных значений |
| Сброс конфигурации к умолчаниям |
| Обновление пакетов с GitHub (опции: -c, -p, -u, -f, -t) |
| DPI-чекер (TCP 16-20 тест, проверка сайтов) |
| Запуск скриптов в фоне с логированием |
| Обновление конфига при загрузке |
| Создание UCI-конфига при установке |
所有脚本的详细说明:请查看本技能目录下的文件。
references/scripts.md| 脚本 | 用途 |
|---|---|
| 通用函数:路径定义、PID管理、配置验证、init_before_start |
| Procd初始化脚本(START=21, USE_PROCD=1) |
| 启动/重启时同步UCI配置至核心配置 |
| 策略与默认值定义 |
| 重置配置至默认值 |
| 从GitHub更新包(参数:-c, -p, -u, -f, -t) |
| DPI检测工具(TCP 16-20测试、站点验证) |
| 后台运行脚本并记录日志 |
| 系统启动时更新配置 |
| 安装时创建UCI配置 |
Списки хостов и IP
主机与IP列表
| Файл | Назначение | Формат |
|---|---|---|
| YouTube/Google домены (дефолт) | По одному домену на строку |
| Пользовательские домены | По одному домену на строку |
| Исключения из обработки | По одному домену на строку |
| Автоматически обнаруженные хосты | Заполняется при autohostlist |
| Исключаемые IP-адреса/подсети | IP или CIDR (128.199.0.0/16) |
| Пользовательские IP | IP или CIDR |
| Исключаемые пользовательские IP | IP или CIDR |
| Кастомные файлы (до 4 штук) | Произвольный |
| 文件 | 用途 | 格式 |
|---|---|---|
| YouTube/Google域名(默认) | 每行一个域名 |
| 用户自定义域名 | 每行一个域名 |
| 排除处理的域名 | 每行一个域名 |
| 自动检测到的主机 | 由autohostlist功能填充 |
| 排除的IP地址/子网 | IP或CIDR格式(如128.199.0.0/16) |
| 用户自定义IP | IP或CIDR格式 |
| 用户自定义排除IP | IP或CIDR格式 |
| 自定义文件(最多4个) | 任意格式 |
Плейсхолдеры в NFQWS_OPT
NFQWS_OPT中的占位符
- — подставляет
<HOSTLIST>и--hostlistиз стандартных списков, работает в режимах hostlist и autohostlist--hostlist-exclude - — то же, но
<HOSTLIST_NOAUTO>добавляется как обычный (не авто) списокzapret-hosts-auto.txt
- — 自动插入标准列表的
<HOSTLIST>和--hostlist参数,适用于hostlist和autohostlist模式--hostlist-exclude - — 同上,但
<HOSTLIST_NOAUTO>作为普通列表而非自动列表添加zapret-hosts-auto.txt
Custom.d скрипты
Custom.d钩子脚本
Хуки выполняются при старте/стопе сервиса в порядке номера:
- — ранний init
10-script.sh - — ранняя основная фаза
20-script.sh - — основная фаза (пример: Discord/STUN4ALL)
50-script.sh - — поздняя основная фаза
60-script.sh - — финальная фаза
90-script.sh
Включаются через параметр (в UI: вкладка custom.d -> "Use custom.d scripts").
DISABLE_CUSTOM=0钩子脚本按编号顺序在服务启动/停止时执行:
- — 早期初始化阶段
10-script.sh - — 早期核心阶段
20-script.sh - — 核心阶段(示例:Discord/STUN4ALL配置)
50-script.sh - — 后期核心阶段
60-script.sh - — 最终阶段
90-script.sh
通过参数启用(UI路径:custom.d标签页 -> "Use custom.d scripts")。
DISABLE_CUSTOM=0Сборка и CI/CD
构建与CI/CD
Сборка выполняется через GitHub Actions ():
.github/workflows/build.yml- Триггер: push тега или ручной запуск
v[0-9]+* - Матрица: 30+ архитектур (ARM, MIPS, x86_64, RISC-V)
- Две ветки OpenWrt: IPK (v24.10.x) и APK (v25.12.x)
- Релизы публикуются на gh-pages как JSON для автообновления
构建通过GitHub Actions执行():
.github/workflows/build.yml- 触发条件:推送标签或手动触发
v[0-9]+* - 架构矩阵:30+种架构(ARM、MIPS、x86_64、RISC-V)
- OpenWrt分支:IPK(v24.10.x)和APK(v25.12.x)
- 发布版本以JSON格式托管在gh-pages,用于自动更新
Решение проблем
问题排查
Подробный troubleshooting: прочитай файл в директории этого скилла.
references/troubleshooting.mdБыстрые проверки:
- Статус сервиса: LuCI -> Services -> Zapret -> Service (или )
service zapret status - DPI-проверка: Diagnostics -> DPI check
- Логи: включить DAEMON_LOG_ENABLE=1, смотреть на вкладке Log
- Проверка сайтов: Diagnostics -> Sites check с выбором DNS
详细故障排除指南:请查看本技能目录下的文件。
references/troubleshooting.md快速检查步骤:
- 服务状态:LuCI -> Services -> Zapret -> Service(或执行)
service zapret status - DPI检测:Diagnostics -> DPI check
- 日志:开启DAEMON_LOG_ENABLE=1,查看Log标签页
- 站点验证:Diagnostics -> Sites check并选择DNS
Для разработчиков
开发者指南
Структура исходников
源码结构
zapret-openwrt/
├── zapret/ # Основной пакет
│ ├── Makefile # OpenWrt SDK build
│ ├── config.default # Шаблон конфига
│ ├── *.sh # Shell-скрипты
│ ├── custom.d/ # Хуки custom.d
│ ├── files/fake/ # .bin шаблоны пакетов
│ ├── ipset/ # Списки хостов/IP
│ └── patches/ # Патчи для upstream
└── luci-app-zapret/ # LuCI пакет
├── Makefile
├── htdocs/luci-static/resources/view/zapret/
│ ├── env.js # Пути и константы
│ ├── tools.js # Утилиты, RPC, диалоги
│ ├── service.js # Страница управления сервисом
│ ├── settings.js # Страница настроек
│ ├── diagnost.js # Диагностика
│ ├── updater.js # Обновление
│ ├── dmnlog.js # Просмотр логов
│ └── styles.css # Стили
└── root/usr/share/
├── luci/menu.d/ # Определение меню
└── rpcd/acl.d/ # ACL-правилаzapret-openwrt/
├── zapret/ # 主包
│ ├── Makefile # OpenWrt SDK构建脚本
│ ├── config.default # 配置模板
│ ├── *.sh # Shell脚本
│ ├── custom.d/ # custom.d钩子
│ ├── files/fake/ # .bin数据包模板
│ ├── ipset/ # 主机/IP列表
│ └── patches/ # 上游项目补丁
└── luci-app-zapret/ # LuCI包
├── Makefile
├── htdocs/luci-static/resources/view/zapret/
│ ├── env.js # 路径与常量定义
│ ├── tools.js # 工具函数、RPC调用、对话框
│ ├── service.js # 服务管理页面
│ ├── settings.js # 配置页面
│ ├── diagnost.js # 诊断页面
│ ├── updater.js # 更新页面
│ ├── dmnlog.js # 日志查看页面
│ └── styles.css # 样式文件
└── root/usr/share/
├── luci/menu.d/ # 菜单定义
└── rpcd/acl.d/ # ACL权限规则Добавление новой стратегии
添加新策略
- Добавить блок в
if [ "$strat" = "имя_стратегии" ]def-cfg.sh - Определить порты TCP/UDP и NFQWS_OPT с параметрами desync
- Стратегия автоматически появится в UI на странице Service -> Reset settings
- 在中添加
def-cfg.sh代码块if [ "$strat" = "策略名称" ] - 定义TCP/UDP端口和带desync参数的NFQWS_OPT
- 策略会自动出现在UI的Service -> Reset settings选项中
Ключевые файлы для UI-разработки
UI开发关键文件
- — все пути, имена файлов, URL-ы (загружается первым)
env.js - — RPC-вызовы, POLLER, fileEditDialog, longstrEditDialog, decode_svc_info
tools.js - Каждая страница — отдельный view, наследующий или
view.extend()baseclass.extend()
- — 所有路径、文件名、URL定义(最先加载)
env.js - — RPC调用、POLLER、fileEditDialog、longstrEditDialog、decode_svc_info
tools.js - 每个页面为独立view,继承或
view.extend()baseclass.extend()