sing-box 新增 TLS spoof(SNI 欺骗):原理、配置,以及它对 GFW 到底有没有用
GFW 这几年从"封链路"走向"识别特征",按 SNI(你要访问的域名)做过滤是其中一种手段。社区里最近在传 sing-box 的一个新功能——TLS spoof(SNI 欺骗),号称能"骗过审查"。
它确实是个有意思的新东西,但也最容易被自媒体吹过头。这篇按官方文档把它讲清楚:原理、怎么配、需要什么权限,以及最该泼盆冷水的一点——它对 GFW 到底有没有用。
30秒先看完
- 它干嘛的:在你发真实 TLS 握手之前,sing-box 先发一个伪造的 ClientHello——内容是真包的副本,只把 SNI 换成一个"审查白名单里的域名",并故意作废这个伪造段的 TCP 头。真实服务器会丢弃它,而按 SNI 放行的中间盒会把它当成合法会话放行,随后真握手就过去了。
- 它不是 tls fragment:和 sing-box 早就有的
fragment(TLS 分片)是两回事,别混。 - 现状:首次引入是 1.14.0-alpha.13(2026-04),alpha.21 又做了扩展;1.14 至今仍是 alpha 预览版,没有稳定版。仅客户端侧,且需要较高权限。
- 对 GFW 有没有用? 它源自伊朗那种"白名单放行"网络的思路。GFW 不是纯白名单模型,它对 GFW 的实际效果目前没有可靠公开结论——当个值得关注的实验方向看,别当"翻墙新神技"。
一、它解决的是什么场景
有些审查网络的逻辑是"白名单放行":只有 SNI(握手里明文的目标域名)在允许列表里,连接才放行,其它一律掐断。
spoof 的思路就是钻这个空子。官方文档对 spoof 字段的描述是(原文):
Inject a forged TLS ClientHello carrying a whitelisted SNI before the real one, to fool SNI-filtering middleboxes that permit specific hostnames.
拆开看这个过程:
- 先发伪造段:一个真实 ClientHello 的逐字副本,只把 SNI 改成白名单里的域名,并让它的 TCP 头/状态是"作废"的。
- 两边的反应不同:按 SNI 过滤的中间盒一看是白名单域名,放行;真实服务器因为 TCP 头无效,直接丢弃这个伪造段。
- 再发真握手:随后发真正的 ClientHello(真实 SNI),它穿过已经"放行了这条会话"的中间盒,与真实服务器完成握手。
- 因为伪造段除了 SNI 之外和真包完全一致,靠 TLS 指纹很难把它和正常握手区分开。
二、它和 tls fragment 不是一回事
这点必须单独拎出来,因为最容易搞混:
fragment(TLS 分片,sing-box 1.12.0 起):把 TLS record 切成小段发送,让简单 DPI 拼不出完整的 SNI。spoof(SNI 欺骗,1.14 起):注入一个带白名单 SNI、TCP 头作废的伪造握手去骗中间盒。
两者机制完全不同。顺带说一个常见误传:网上有人把"本功能用于绕过基于明文包匹配的简单防火墙,不应用于规避真正的审查"这句免责声明安到 spoof 头上——其实那句话是 fragment 字段的说明,不是 spoof 的。别张冠李戴。
三、怎么配
方式一:写在出站的 tls 里
"tls": {
"enabled": true,
"server_name": "your.real.domain",
"spoof": "whitelisted.sni.example",
"spoof_method": "wrong-sequence"
}spoof:伪造 ClientHello 携带的白名单 SNI。spoof_method:作废伪造段的方式,默认wrong-sequence(可省略)。可选值:spoof_method 平台限制 wrong-sequence(默认)—— wrong-checksum—— wrong-ack—— wrong-md5—— wrong-timestamp仅 Linux / Windows,macOS 不支持
方式二:用路由规则动作(不动出站 TLS)
{
"action": "route-options",
"tls_spoof": "whitelisted.sni.example",
"tls_spoof_method": "wrong-sequence"
}这是 route-options 这一非最终(non-final)动作,可以在不给出站单独设 TLS 的情况下,按规则对命中的流量做 SNI 欺骗。
四、权限和平台限制(别忽略)
spoof 要直接构造原始数据包,所以需要较高权限,且只在客户端侧生效:
| 平台 | 要求 |
|---|---|
| Linux | 需 CAP_NET_RAW;并因要经 TCP_REPAIR 读取发送序列号而额外需要 CAP_NET_ADMIN |
| macOS | 需 root(raw socket 访问) |
| Windows x64 | 首次使用需管理员安装内置的 WinDivert 内核驱动 |
| Windows on ARM64 | 不支持 |
几个容易写错/用错的点
- 它是 alpha:1.14 至今没有稳定版,字段名、默认值、权限要求在正式版里都可能微调。
- 只排除 Windows on ARM64:官方只说"Windows on ARM64 不支持",并没有说 Linux/macOS 的 ARM64 不行。
- 它要特权:不是普通勾选项,按上表准备好权限,否则起不来。
wrong-timestamp在 macOS 不可用,跨平台部署时注意。
五、最该说清楚的:它对 GFW 有没有用?
这功能的源头,是社区里针对伊朗那种"白名单放行"网络的 SNI 欺骗思路(来自 sing-box 的一个提案讨论)。在"只放行白名单 SNI"的环境里,骗中间盒"以为你在访问白名单域名"是说得通的。
但 GFW 不是纯白名单模型——它更多是黑名单 + 主动探测 + 多种特征识别的组合。spoof 这种"伪装成白名单 SNI"的把戏,对 GFW 是否有效、在什么线路下有效,目前没有可靠的公开测试结论。
所以请这样看它:
- ✅ 它是一个有意思、值得关注的实验性方向,原理清晰、官方已实现。
- ❌ 它不是"骗过 GFW 的新神技"。看到这么宣传的,基本是没搞清它的适用前提。
- 想现在就上手,得接受"装 alpha 预览版 + 配高权限 + 效果不保证"这三件事。
小结
- sing-box 的 TLS spoof 是在真握手前注入一个带白名单 SNI、TCP 头作废的伪造 ClientHello,骗过按 SNI 过滤的中间盒。
- 它不是 tls fragment;那句"不应用于规避真正审查"的免责声明属于
fragment,别安错。 - 配置看
tls.spoof/spoof_method(默认wrong-sequence)或路由动作tls_spoof;需要 root/管理员级权限,仅客户端侧,Windows ARM64 不支持。 - 1.14 仍是 alpha,且它针对的是"白名单放行"型网络,对 GFW 的效果没有公开定论——理性尝鲜,别神化。
免责声明
本文基于 sing-box 官方文档(testing 分支)与公开 release note 整理,相关字段与权限要求对应 1.14 的预览版本,正式发布时可能调整。请在遵守当地法律法规的前提下,合理使用相关网络工具。
与其押注一个还在 alpha 的混淆功能,不如先把协议选对。这篇分场景讲清抗封锁、速度与客户端支持。
还不会用 sing-box 导入机场订阅?这篇手把手带你装客户端、导入订阅、处理格式不匹配与高频报错。
想知道 GFW 现在到底用什么手段识别流量、哪些说法是自媒体夸大?这篇帮你把事实、泄露和传言分开,理解 spoof 这类功能针对的是什么。