mcpField
Z
zapret-openwrt-guide

zapret-openwrt-guide

github.com/nordz0r云与 DevOps849 次安装5 天前更新
代码仓库

关于 zapret-openwrt-guide

zapret-openwrt-guide 是面向 OpenWrt 路由器上 Zapret 配置与维护的参考技能,涵盖 DPI 混淆策略、LuCI 管理、配置、脚本和故障排查。文档明确说明 Zapret 不是 VPN。

主要功能

  1. 01OpenWrt 上 Zapret 的架构与安装指南
  2. 02DPI 绕过策略参考
  3. 03LuCI 服务与设置概览
  4. 04配置参数及主机/IP 列表
  5. 05脚本与 custom.d 钩子参考
  6. 06诊断与故障排查指引

适用场景

  1. 01为 OpenWrt 路由器选择 Zapret 策略
  2. 02更改服务设置前查阅 LuCI 控件
  3. 03排查 DPI 检查、站点检查或守护进程日志
  4. 04通过回滚与验证规划软件包更新

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/nordz0r/skills --skill zapret-openwrt-guide

安装后在 Claude Code 中输入/zapret-openwrt-guide确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

agents/
openai.yaml
references/
config.md
README.ru.md
scripts.md
strategies.md
troubleshooting.md
ui.md

详细介绍

Zapret-OpenWrt:完整指南

Zapret 是什么

Zapret 是一款用于 OpenWrt 路由器的反 DPI(深度包检测)工具。它不是 VPN——zapret 不会更改你的 IP 地址,也不会隐藏流量。它通过修改网络数据包来绕过深度包检测系统。

仓库: https://github.com/remittor/zapret-openwrt 上游: https://github.com/bol-van/zapret 当前版本: v72.20260307(2026-03-07;nfqws/tpws 来自 bol-van/zapret 提交 ef637c4,位于 v72.10 和 v72.12 之间)。zapret2 版本:v0.9.20260307(bol-van/zapret2 d3b3011)。已于 2026-10-15 验证。 分支: zap1(默认)——zapret + luci-app-zapret;master——zapret2 + luci-app-zapret2。 此后(截至 2026-10-15,尚未在 remittor 中发布): 更新程序使用 apk add --force-non-repository(2026-04-22)、修复了 Image Builder 初始化问题,并刷新了 ipset 排除列表。上游 bol-van v72.12(修复 armv7 崩溃)、v72.13(2026-07-21:在 init.d 中添加 Discord 媒体端口范围)、nfqws 部分 root 修复(2026-10-04)尚未打包;bol-van/zapret2 已更新至 v1.0.5.2(2026-09-15),而 remittor 仍提供 0.9.20260307。

项目架构

项目由两个软件包组成:

软件包用途
zapret主软件包:nfqws 守护进程、配置、脚本、ipset 列表
luci-app-zapret通过 LuCI 管理的 Web 界面
路由器上的目录布局
/opt/zapret/
├── nfq/nfqws              # Main DPI desync daemon
├── ip2net/ip2net           # IP-to-subnet converter
├── mdig/mdig               # DNS utility
├── config                  # Working config (runtime)
├── config.default          # Default template
├── def-cfg.sh              # Strategies and defaults
├── sync_config.sh          # UCI -> config sync
├── restore-def-cfg.sh      # Reset settings
├── update-pkg.sh           # Package updates
├── dwc.sh                  # DPI checker
├── comfunc.sh              # Shared functions
├── init.d.sh               # Init script (procd)
├── ipset/                  # Host and IP lists
│   ├── 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/             # Fake packet templates (.bin)
└── init.d/openwrt/custom.d/  # User hook scripts
    ├── 10-script.sh
    ├── 20-script.sh
    ├── 50-script.sh        # Example: Discord/STUN
    ├── 60-script.sh
    └── 90-script.sh
配置系统

Zapret 使用双配置系统:

  1. UCI 配置(/etc/config/zapret)——存储通过 LuCI 编辑的设置
  2. 主配置(/opt/zapret/config)——供 nfqws 守护进程使用

每次启动/重启时都会运行 sync_config.sh,将 UCI 值同步到主配置中。


快速开始

  1. 安装 zapret 和 luci-app-zapret 软件包
  2. 打开 LuCI:服务 -> Zapret -> 服务
  3. 点击重置设置并选择一种策略(推荐 v6_by_StressOzz 或 v7_by_StressOzz)
  4. 点击启用和启动
  5. 通过诊断 -> 网站检查进行验证

安全注意事项

  • Zapret 会更改路由器系统配置和服务,因此更新或更改策略前需要备份并制定回滚方案。
  • 在验证之前,应将更新程序/dwc 脚本从 GitHub 和外部诊断来源下载的数据视为不可信输入。
  • 在生产环境中,优先使用固定的发行版/标签并手动验证构件,不要盲目“更新到最新版本”。
  • 为获得最大的可预测性,请在可信任的设备上下载发行版构件和主机列表,验证校验和/内容,然后再将其传输到路由器。

配置

所有配置参数的完整参考,请阅读此技能目录中的 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
  • 自动主机列表:RETRANS_THRESHOLD、FAIL_THRESHOLD、FAIL_TIME
  • 日志记录:DAEMON_LOG_ENABLE、DAEMON_LOG_SIZE_MAX、DAEMON_LOG_FILE
  • 其他:WS_USER、DISABLE_CUSTOM、DESYNC_MARK

DPI 绕过策略

所有策略的完整说明:请阅读此技能目录中的 references/strategies.md。

可用策略(定义于 def-cfg.sh):

策略TCP 端口UDP 端口备注
empty80,443443空策略,不进行 desync
v1_by_StressOzz80,443443fake,multidisorder + QUIC fake
v2_by_StressOzz80,443443fake,fakeddisorder + seqovl
v3_by_StressOzz80,443443与 v2 类似,使用不同的 TLS 模板(t2.bin)
v4_by_StressOzz80,443443fake,multisplit + 3 个 --new 区段
v5_by_StressOzz80,443443ip-id=zero + multisplit
v6_by_StressOzz80,443,2053,2083,2087,2096,8443443,19294-19344,50000-50100支持 Discord + STUN
v7_by_StressOzz80,443,2053,2083,2087,2096,8443443,19294-19344,50000-50100改进版 v6,重复次数更多
v9_by_StressOzz80,443,2053,2083,2087,2096,8443443,19294-19344,50000-50100hostfakesplit 变体
ALT7_by_Flowseal80,443443ip-id=zero,multisplit + seqovl
TLS_AUTO_ALT3_by_Flowseal80,443443fooling=ts,重复次数更多

默认策略: v6_by_StressOzz

LuCI 网页界面

完整界面参考:请阅读此技能目录中的 references/ui.md。

LuCI 界面位于 服务 -> Zapret,包含 5 个页面:

  1. 服务(service.js)— 服务控制、状态、启用/禁用/启动/停止/重启/重置按钮、诊断、更新
  2. 设置(settings.js)— 分为 5 个选项卡的设置:主设置、NFQWS 选项、AutoHostList、主机列表、custom.d
  3. 日志(dmnlog.js)— 实时守护进程日志(每秒轮询一次)
  4. 诊断(diagnost.js)— 通过 dwc.sh 进行 DPI 检查和站点检查
  5. 更新器(updater.js)— 检查并安装来自 GitHub 的更新

脚本

完整脚本参考:请阅读此技能目录中的 references/scripts.md。

脚本用途
comfunc.sh共享函数:路径、PID、配置验证、init_before_start
init.d.shProcd 初始化脚本(START=21,USE_PROCD=1)
sync_config.sh启动/重启时将 UCI 同步到配置
def-cfg.sh策略定义和默认值
restore-def-cfg.sh将配置重置为默认值
update-pkg.sh从 GitHub 更新软件包(选项:-c、-p、-u、-f、-t)
dwc.shDPI 检查器(TCP 16-20 测试、站点检查)
script-exec.sh在后台运行脚本并记录日志
renew-cfg.sh启动时刷新配置
uci-def-cfg.sh安装时创建 UCI 配置

主机和 IP 列表

文件用途格式
zapret-hosts-google.txtYouTube/Google 域名(默认)每行一个域名
zapret-hosts-user.txt用户域名 <HOSTLIST>每行一个域名
zapret-hosts-user-exclude.txt排除项每行一个域名
zapret-hosts-auto.txt自动检测到的主机由 autohostlist 填充
zapret-ip-exclude.txt排除的 IP/子网IP 或 CIDR(128.199.0.0/16)
zapret-ip-user.txt用户 IPIP 或 CIDR
zapret-ip-user-exclude.txt排除的用户 IPIP 或 CIDR
cust[1-4].txt自定义文件(最多 4 个)自由格式
NFQWS_OPT 中的占位符
  • <HOSTLIST> — 展开为标准列表中的 --hostlist 和 --hostlist-exclude;适用于主机列表和自动主机列表模式
  • <HOSTLIST_NOAUTO> — 用法相同,但会将 zapret-hosts-auto.txt 作为常规(非自动)列表添加

Custom.d 脚本

钩子会在服务启动/停止时按数字顺序运行:

  • 10-script.sh — 早期初始化
  • 20-script.sh — 主阶段早期
  • 50-script.sh — 主阶段(示例:Discord/STUN4ALL)
  • 60-script.sh — 主阶段后期
  • 90-script.sh — 最终阶段

通过 DISABLE_CUSTOM=0 启用(界面:custom.d 选项卡 -> “使用 custom.d 脚本”)。

构建与 CI/CD

构建由 GitHub Actions 运行(.github/workflows/build.yml):

  • 触发条件:推送 v[0-9]+* 标签或手动运行
  • 矩阵:30+ 种架构(ARM、MIPS、x86_64、RISC-V)
  • 两条 OpenWrt 分支:IPK(v24.10.x SDK)和 APK(自 v72.20260307 起使用 v25.12.0 SDK)
  • 发布内容以 JSON 形式发布到 gh-pages,供自动更新使用

故障排除

完整的故障排除指南:请阅读此技能目录中的 references/troubleshooting.md。

快速检查:

  1. 服务状态:LuCI -> Services -> Zapret -> Service(或 service zapret status)
  2. DPI 检查:Diagnostics -> DPI check
  3. 日志:启用 DAEMON_LOG_ENABLE=1,查看 Log 选项卡
  4. 网站检查:在 Diagnostics -> Sites check 中选择 DNS 进行检查

面向开发者

源码结构
zapret-openwrt/
├── zapret/                     # Main package
│   ├── Makefile                # OpenWrt SDK build
│   ├── config.default          # Config template
│   ├── *.sh                    # Shell scripts
│   ├── custom.d/               # custom.d hooks
│   ├── files/fake/             # .bin packet templates
│   ├── ipset/                  # Host/IP lists
│   └── patches/                # Patches for upstream
└── luci-app-zapret/            # LuCI package
    ├── Makefile
    ├── htdocs/luci-static/resources/view/zapret/
    │   ├── env.js              # Paths and constants
    │   ├── tools.js            # Utilities, RPC, dialogs
    │   ├── service.js          # Service page
    │   ├── settings.js         # Settings page
    │   ├── diagnost.js         # Diagnostics
    │   ├── updater.js          # Updater
    │   ├── dmnlog.js           # Log viewer
    │   └── styles.css          # Styles
    └── root/usr/share/
        ├── luci/menu.d/        # Menu definition
        └── rpcd/acl.d/         # ACL rules
添加策略
  1. 将 if [ "$strat" = "strategy_name" ] 代码块添加到 def-cfg.sh
  2. 定义 TCP/UDP 端口和包含 desync 参数的 NFQWS_OPT
  3. 该策略会自动显示在 UI 的 Service -> Reset settings 下
UI 开发关键文件
  • env.js — 所有路径、文件名和 URL(最先加载)
  • tools.js — RPC 调用、POLLER、fileEditDialog、longstrEditDialog、decode_svc_info
  • 每个页面都是单独的视图,扩展自 view.extend() 或 baseclass.extend()

路由信号:zapret openwrt dpi desync nfqws hostlist autohostlist luci uci firewall nftables 故障排除 反审查 路由器

俄语版本:references/README.ru.md。

评论

支持 Markdown