VPN 流量混淆(obfuscation)是在加密隧道之外,改变数据包的外形、长度或握手外观,使旁观者更难单凭指纹认定这是某种已知 VPN。它改的是可观察特征,不提高密码强度,也不能保证连接不被阻断。
定义:外形与密钥各管一件事
一个可独立引用的定义句:流量混淆是对隧道流量可观察特征的改写,目的是降低被动观察者用已知指纹把它认成某种 VPN 协议的概率;机密性与完整性仍由隧道的加密与认证负责。
VPN 是什么 里的加密,解决的是「旁观者能否读懂内容」。混淆解决的是另一句:「旁观者能否凭握手字节、包长或节拍,把这条流归类为已知隧道。」内容已经是密文时,分类仍可能发生,因为目标 IP、端口、包长、方向和时序通常还在。这个分层在 抗封锁技术演进 里有更长的背景;本文只讨论「混淆」这个词在厂商说明里通常指什么,以及它能支持哪一句结论。
厂商说法通常在改哪一个观察面
据各客户端与协议的公开说明,界面上的 Stealth、Obfuscation、Scramble 等名称并不互等。下面按观察面归类,不按商品排名。本文不写如何打开这些选项。
| 常见说法 | 设计上多在做什么 | 观察者侧的直接变化 | 仍然留着的特征 |
|---|---|---|---|
| 打乱、异或、Scramble | 改写明文头部或固定魔数 | 针对该魔数的静态签名可能不再命中 | 高熵、长连接、数据中心地址 |
| 填充、包长整形 | 把包长拉进更宽或更常见的区间 | 包长直方图被抹平一部分 | 总流量变大;时序未必变 |
| 时序扰动 | 推迟发送或插入掩护包 | 过于整齐的保活节拍变弱 | 额外延迟与带宽 |
| 套上 TLS | 外层变成 TLS 记录 | 被动方向上看见一次 TLS 会话 | 指纹未必像浏览器;主动探测未必像普通网站 |
| 随机化握手长度 | 避免固定大小的首包 | 单一长度签名变弱 | 后续包的统计与目标地址 |
去掉魔数之后,流量仍可能呈现「高熵 UDP、持续时间很长、对端位于数据中心」这些另外的特征。静态签名失效,只说明那一条签名失效。
「套上 TLS」与「看起来像真实浏览器访问真实网站」也不是同一标准。前者是记录层外形;后者还要求握手指纹、证书行为、失败时的回退和流量节奏一起说得通。为何「像 HTTPS」仍可能被分开,见 NaiveProxy 协议科普 对指纹与真实网络栈的讨论。那篇文章描述的是一种更严格的伪装思路,不是本文推荐的配置。
外层改用 TCP/443,有时只是为了换一条传输路径,与混淆是否改变了指纹无关。传输层选择见 VPN 用 TCP 还是 UDP。
「已混淆」最多能证明什么
证明要带范围。混淆能够支持的结论,都限定在某个观察面、某条签名、某一次对照上。
| 你手上的材料 | 它支持的结论 | 它到不了的结论 |
|---|---|---|
| 协议文档写明会去掉某固定魔数 | 设计意图覆盖了这一观察面 | 实际网络已经放行这条流 |
| 按钮名叫「混淆 / Stealth」 | 界面提供了一个选项 | 选项的算法、强度或效果 |
| 同路径对照:旧签名命中,开启后不命中 | 这一条签名在该次测试中失效 | 其他分类器、其他网络、下一次策略更新 |
| 外层抓包看见 TLS | 被动方向上存在 TLS 记录层 | 指纹等于浏览器,或主动探测得到普通网站响应 |
| 厂商文案写「难以识别」 | 这是一句宣传 | 对未公开的分类器不可区分 |
一次对照若要被引用,需要写明日期、网络类型和「用的是哪条签名」。没有对照时,文档只能证明设计意图。按钮本身连设计意图都证明不了,因为不同年份的同一名称可能指向不同实现。
填充和时序扰动还有公开的代价:填充消耗带宽,扰动增加延迟,掩护流量改变空闲时段的体积。这些代价说明方法在起作用的同时,也制造新的可观察量。据公开的流量分析讨论,过度整齐的随机本身也可以成为特征。因此「加更多噪声」不是单调变好的过程。
它不能保证什么
| 常见说法 | 混淆并不提供 |
|---|---|
| 无法被识别 | 对未知分类器、对统计模型的不可区分 |
| 像普通上网 | 包长、时序、目标 IP 与真实浏览一致 |
| 更安全 | 更强的算法、更完整的前向保密 |
| 匿名 | 对出口运营方隐藏目标,或对网站隐藏出口 |
| 不会被封地址 | 服务器 IP、网段或域名信誉被单独拒绝 |
| 长期有效 | 签名、探测方式和地址列表更新之后的结果 |
| 打开即可 | 与加密、路由、DNS 无关的整机隐私 |
地址是独立观察面。混淆改的是包的外形,不改「对端 IP 是谁」。对端若已在地址策略里,外形再变,连接仍可能在到达应用数据之前被拒绝。主动探测则看服务器如何回答陌生人:认证失败时若返回独特报错,外形伪装盖不住这句回答。这些都是概念边界,不是操作步骤。
可用性同样不能从「已混淆」推出来。分类规则、地址列表和主动探测都会变。任何固定外形都不带「持续可用」的属性。
和加密、多跳、无日志各管哪一句
| 概念 | 它回答的问题 | 它不回答的问题 |
|---|---|---|
| 加密与认证 | 内容能否被读懂、包能否被篡改 | 流量像不像已知 VPN |
| 混淆 | 已知指纹是否还在 | 密钥强度、出口是否看见目标 |
| 多跳 | 来源与目标是否拆给不同节点 | 每一跳的外形是否可被分类 |
| 无日志声明 | 运营方声称保存什么 | 连接进行时技术上看得见什么 |
算法选择(例如 AEAD 用哪一种)属于加密那一行,见 AES-GCM 与 ChaCha20。运营记录属于声明与审计,见 无日志政策。把「混淆」写成这三行的替代品,会让无法被一起验证的结论叠在同一个按钮上。
常见误解
误解 1:密文已经足够隐藏协议。
加密隐藏载荷内容。握手外形、包长和目标地址仍可被用来分类。
误解 2:叫 Stealth 的选项都是同一种技术。
名称跨产品、跨年份不一致。能核对的是它改哪一个观察面,而不是按钮文案。
误解 3:套了 TLS 就等于浏览器流量。
TLS 记录层只说明外层是 TLS。指纹、证书、失败行为和流量节奏可以仍然不像浏览器。
误解 4:混淆失败就说明加密失败。
分类成功只说明外形或地址被认出。它不意味着密钥被解开,也不意味着页面正文被读到。
误解 5:混淆可以代替整机路由或泄漏检查。
外形与「DNS、IPv6、未进隧道的应用是否直连」是不同层。混淆不改变路由覆盖范围。
读宣传语时先问三句
不同地区对隧道的规定不同。上文只解释公开概念,不构成法律意见,也不提供规避网络管理的步骤。
看到「混淆 / 抗识别 / Stealth」时,先把结论收成三句:
- 改的是哪一个观察面:魔数、包长、时序、TLS 外形,还是服务器地址;
- 证据是设计说明还是一次对照:对照需要日期、网络类型和被比对的那条签名;
- 明确不覆盖什么:未知分类器、主动探测、地址策略、出口可见性与密钥强度。
三句都能回答时,「已混淆」才是一句有范围的技术陈述。回答不了时,它仍只是界面上的一个名字。