DPI 绕过工具:zapret 与 GoodbyeDPI,以及它们为什么不能当 VPN
两个知名的 DPI 规避工具的原理与用法,顺带讲清一个常见误会——为什么它们能救活一部分被墙的网站,却救不了 Google,也换不来能用 Claude 的身份。
先把结论摆前面:这两个工具是「DPI 规避」工具,不是代理、不是 VPN。它们能对付的是防火墙里「检查你在跟谁说话、说了什么」的那一层;对付不了「你根本连不上那个 IP」和「对面嫌你是中国 IP 不接客」这两种情况。搞混这点,就会指望它们干它们干不了的事。
下面先讲清楚封锁到底分几种,再说这两个工具各自怎么用,最后回答标题里的问题。
一、封锁其实不是一件事,是三件事
GFW(以及任何一套审查系统)拦你的手段,粗分是三层,越往下越难绕:
| 层次 | 防火墙怎么拦 | 靠什么绕 |
|---|---|---|
| DNS 污染 | 你查 google.com 的 IP,给你返回一个假的/错的 | 换加密 DNS(DoH/DoT)、写 hosts |
| DPI / SNI 阻断 | 放你连,但在你发出的包里读到敏感域名/关键词,就注入 RST 把连接掐断,或直接丢包 | zapret、GoodbyeDPI 就是干这个的 |
| IP 封锁 | 直接封掉目标 IP 段,去往那个 IP 的包一律不通 | 只能换条路走——代理 / VPN |
关键在于理解 DPI 这一层的工作方式。你访问一个 HTTPS 网站,握手的第一个包(TLS ClientHello)里有个字段叫 SNI,明文写着你要访问的域名——这是为了让一台服务器上的多个网站能被正确分发。防火墙不用解密你的流量,光读这个明文 SNI 就知道你要去哪,够它下手了。HTTP 则更直白,Host 头明文写着域名。
DPI 规避的全部思路就一句话:把这个包切碎、打乱、掺假,让防火墙的解析器认不出里面的域名,但对面真正的服务器还能正常拼回来。 防火墙和真服务器对「畸形包」的容忍度不一样,工具就钻这个缝。
二、zapret(bol-van/zapret)
跨平台的那个,也是目前功能最全、社区最活跃的。
能跑在哪: Linux(主战场,尤其 OpenWrt 路由器)、Windows、FreeBSD/OpenBSD、macOS(部分)、Android,甚至华为随身 wifi 的固件。
主要组件:
| 组件 | 干什么 |
|---|---|
nfqws | 核心。Linux 上挂在 NFQUEUE 上改包,做包级别的「desync」攻击 |
winws | Windows 版的 nfqws,靠 WinDivert 驱动截包 |
tpws | 透明代理,做流级别(而非单包级别)的改写 |
dvtws | BSD 版的 nfqws |
ip2net / mdig | 维护 IP 列表、批量 DNS 查询的辅助工具 |
它用的花招(desync 家族):
1、split / multisplit——把 ClientHello 在 SNI 中间切成几个 TCP 段发出去,防火墙按单包解析就拼不出完整域名。 2、fake——先发一个「假包」,内容能骗过 DPI(让它以为连接是别的东西),但用极低的 TTL 让这个假包在到达真服务器之前就在路上「过期」死掉,只有真包能到。 3、disorder——故意打乱 TCP 段的顺序发送。 4、IP 分片 / 错误校验和 / 乱序序列号——各种让防火墙状态机错乱的手段。
Windows 上怎么用(最常见场景):
去 Releases 下载 zapret-winws 压缩包,解压后里面是一堆 .bat 脚本(general.bat、preset_russia.bat 之类)。以管理员身份双击一个预设脚本,它会装好 WinDivert 驱动并常驻在后台改包。你不用改 IP、不用设代理,浏览器照常直连——包在出网卡之前已经被 winws 处理过了。选哪个预设要试,因为不同地区、不同运营商的 DPI 实现不一样,能生效的花招组合也不同。
Linux / OpenWrt: git clone 之后跑 install_easy.sh,脚本会交互式地帮你选策略、生成 nftables/iptables 规则、装成 systemd 服务。路由器上装一次,全内网设备受益。
三、GoodbyeDPI(ValdikSS/GoodbyeDPI)
只管 Windows,出现得更早,胜在简单、开箱即用。
平台: Windows 7 到 11,需要管理员权限。 驱动: 同样是 WinDivert(基于 Windows Filtering Platform 截包重定向到用户态)。
它用的花招:
1、TCP 分片——切分首包和长连接里的数据。
2、Host 头大小写混淆——把 Host 改成 hoSt,把 test.com 改成 tEsT.cOm。很多 DPI 的关键词匹配是大小写敏感的,服务器却不在乎,一混淆就漏过去了。
3、头部空格戏法——删掉 Host: 后面的空格,或在请求行 method 和 URI 之间多塞一个空格。
4、假包注入——发低 TTL、错校验和、错序列号的诱饵包。
5、SNI 前分片——专门在 TLS 包的 SNI 值前面切一刀。
6、被动 DPI 拦截——过滤掉那种 IP ID 为 0x0000/0x0001 的重定向包(被动式 DPI 常用它来抢答一个假响应)。
怎么用: 下载 Release,里面有一堆现成的 .cmd 脚本,比如 1_russia_blacklist_dnsredir.cmd、2_any_country_dnsredir.cmd。双击运行即可,一个黑窗口常驻后台。命令行直接调 goodbyedpi.exe 也行,带 -1 到 -9 的预设:-1 最保守、兼容性最好,-9 是默认、最激进最快。同样是「哪个能用试出来」。
两者的关系可以这么记:GoodbyeDPI 是 Windows 上的轻量老将,zapret 是全平台的重装瑞士军刀。 zapret 的 desync 手段更丰富、对新型 DPI 更能打,但配置也更劝退。
四、核心问题:为什么它们不能当 VPN?
前面反复强调「它们不改 IP、不建隧道」,这句话就是全部答案的根。把它拆成你标题里那两个具体现象。
现象一:Google 连不上,光靠 DPI 绕过救不回来
有人会问:Google 不就是域名被封吗,我把 SNI 藏好不就行了?
问题在于,对 Google 这种目标,GFW 是三层一起上的:DNS 给你返污染结果,SNI 被 DPI 识别掐断,而且承载 Google 服务的 IP 段本身也被封了。DPI 绕过只解决了中间那一层——就算你把 ClientHello 切得再碎、把域名藏得再好,你的包目的地写着的还是 Google 那个 IP,而去往那个 IP 的路,防火墙在网络层就给你堵死了。
打个比方:DPI 绕过像是把信封上的收件人名字用暗语写,让邮局分拣员看不懂你要寄给谁。但如果整条通往那个城市的路都被封了,你名字写得再隐蔽也没用——信根本出不了城。IP 封锁发生在比 DPI 更底层的地方,改包内容对它毫无作用。
这时唯一的办法是「换条路走」:把流量先加密发给一台墙外的服务器(代理/VPN),由它替你去连 Google。你的包在国内这段,目的地是那台自己的服务器(一个没被封的 IP),到了墙外才展开去访问 Google。这就是隧道,是 zapret / GoodbyeDPI 结构上就没有的东西。
所以经验规律是:被封网站里,凡是「域名被墙但 IP 还通」的(早年很多网站属于此类),DPI 绕过就能救活;凡是「IP 都被封死」的(Google、部分被重点关照的服务),就必须上代理。 前者这几年在变少,这也是为什么纯 DPI 绕过越来越只能当辅助。
现象二:换不来一个能用 Claude 的身份
这是另一个方向的问题,甚至更根本。
Claude、以及很多受限的 App / 服务,是在它们自己那一侧拒绝中国 IP 的——这叫地理封锁(geo-blocking),是服务商的合规选择,跟 GFW 无关。它们看到请求来自一个中国 IP,直接不接客。
而 zapret / GoodbyeDPI 完整保留你的真实中国 IP 不变。它们做的只是把出境的包改个形状骗过 GFW,你在对面服务器眼里仍然是一个原原本本的中国 IP。于是就算你靠 DPI 绕过「连上了」Claude 的服务器,Claude 一看来源国家,照样把你挡在门外。
VPN 能解决这个,恰恰是因为它做了 DPI 绕过工具不做的那件事:让你的流量从墙外某台机器「出口」,对面看到的是那台机器的外国 IP。你借用了别人的身份,所以能进。
一张表收尾
| zapret / GoodbyeDPI | VPN / 代理 | |
|---|---|---|
| 本质 | 规避——把直连的包改形状骗过 DPI | 隧道——加密转发,从别处出口 |
| 你的包发往哪 | 还是目标的真实 IP(直连) | 先发给自己的墙外服务器 |
| 对面看到的来源 IP | 你的真实中国 IP | 墙外服务器的外国 IP |
| 能破 DNS 污染 | 否(需另配加密 DNS) | 能 |
| 能破 SNI/DPI 阻断 | 能,这是它的强项 | 能 |
| 能破 IP 封锁(如 Google) | 不能 | 能 |
| 能换个身份用受限服务(如 Claude) | 不能 | 能 |
| 加密你的流量 | 否 | 是 |
| 速度损耗 | 几乎没有(直连) | 有(绕远路 + 加密开销) |
五、那它们到底适合谁
看完上面别觉得这俩没用——它们的定位很清晰:
1、目标是「域名/SNI 被墙,但 IP 还通」的网站,DPI 绕过能以近乎零延迟的代价直连救活它,比挂 VPN 舒服得多(不绕路、不掉速、不折腾服务器)。 2、可以和代理分工:DPI 绕过处理那些「只是被 SNI 阻断」的站,把宝贵的代理流量省给真正需要换 IP 出口的场景。 3、俄罗斯用户对这俩尤其熟——当地的封锁大量是 DPI/SNI 式的(这也是为什么两个项目的作者和默认预设都带浓厚的俄区色彩)。中国的封锁 IP 层用得更狠,所以纯 DPI 绕过在国内的「独立可用面」要窄一些。
一句话记住它们的边界:DPI 绕过改的是「包长什么样」,改不了「包发去哪」和「你是谁」。 后两件事,才是 VPN 存在的理由。
评论
评论加载中……