AnyTLS 协议是什么:原理、sing-box 配置与客户端支持
AnyTLS 是少数几个「为了解决一个明确问题」而设计的新协议。这个问题叫 TLS-in-TLS:你通过 Trojan 或 VLESS + TLS 这类协议访问一个 HTTPS 网站时,外层是代理的 TLS,内层是网站的 TLS,两次握手套在一起,包长序列有可识别的统计模式。研究表明这种模式可以被机器学习分类器识别,哪怕内容全部加密。AnyTLS 的做法是把包长和时序打乱,让嵌套特征消失。
它解决的问题
传统伪装协议的逻辑是「让流量看起来像 HTTPS」。但「看起来像」只在握手层面成立,一旦开始传数据,代理流量里嵌套的第二次 TLS 握手会表现为固定长度的几个包(ClientHello、ServerHello、证书……),这在普通 HTTPS 里不会出现。XTLS-Vision 用「内层 TLS 直通」的办法绕过,AnyTLS 则用主动填充的办法掩盖。
工作方式
- 传输仍然是标准 TLS 1.3,服务端需要证书(可以是自签,客户端配置跳过验证,但伪装效果会打折扣)。
- 客户端与服务端协商一套填充方案(padding scheme),决定每个包补多少字节、何时拆包。方案可以按会话动态变化。
- 多路复用:多个请求共用一条 TLS 连接,减少握手次数。
- 认证用预共享密码,哈希后在首包发送。
对用户来说这些都是透明的,你只需要客户端支持。
与其他协议的对比
| 对比 | AnyTLS | VLESS + Reality | Trojan |
|---|---|---|---|
| 解决 TLS-in-TLS | 是(填充) | 需配合 XTLS-Vision | 否 |
| 需要域名证书 | 是(自签也可) | 否 | 是 |
| 多路复用 | 内置 | 可选 | 可选(Trojan-Go) |
| 客户端覆盖 | 少 | 中 | 广 |
| 成熟度 | 新 | 较成熟 | 成熟 |
完整对比见 机场协议区别。
客户端支持现状
- sing-box:原生支持(1.12 以后版本),全平台。
- mihomo(Clash Meta)内核:支持,对应 Clash Verge Rev、Clash Meta for Android、Clash Mi 的新版本。
- Shadowrocket:较新版本支持。
- v2rayN / v2rayNG:通过 sing-box 核心支持。
- Xray:不支持(Xray 走的是 XTLS 路线)。
如果你的客户端导入订阅后 AnyTLS 节点不显示或报错,先升级。见 sing-box 使用教程。
sing-box 客户端配置示例
机场一般直接下发订阅,不需要你手写。如果机场只给了参数,sing-box 的 outbound 写法大致如下(字段以你的客户端版本文档为准):
{
"type": "anytls",
"tag": "anytls-hk",
"server": "节点地址",
"server_port": 443,
"password": "机场提供的密码",
"tls": {
"enabled": true,
"server_name": "节点域名"
}
}
mihomo 的 YAML 写法:
- name: anytls-hk
type: anytls
server: 节点地址
port: 443
password: 机场提供的密码
sni: 节点域名
一次 AnyTLS 连接的过程
- 客户端与节点建立标准 TLS 1.3 连接,SNI 为节点域名。
- 首个应用数据包:客户端发送密码的 SHA256 哈希 + 填充长度字段 + 填充字节。填充长度由当前「填充方案」决定,每个会话不同。
- 节点校验密码。通过后双方进入多路复用模式:一条 TLS 连接里开多个逻辑流,每个流对应一个代理目标。
- 服务端可以在会话中下发新的填充方案(
UpdatePaddingScheme命令),客户端随之调整后续包的分包与填充规则。 - 空闲时会话保持若干分钟供复用,减少重复握手。
与 Trojan 的本质区别在第 2 步和第 4 步:Trojan 的首包长度固定、后续包长完全跟随内层应用,AnyTLS 的包长分布是「被设计过的」,内层 TLS 握手那几个特征包会被切开或补齐。
与相邻协议的对比表
| 对比 | AnyTLS | Trojan | VLESS + XTLS-Vision | ShadowTLS v3 |
|---|---|---|---|---|
| 核心思路 | 填充打乱包长 | 真实 TLS 网站 | 内层 TLS 直通 | 借用真实站点握手 |
| TLS-in-TLS 对策 | 有 | 无 | 有 | 无(但握手伪装强) |
| 需要自己的证书 | 是(可自签) | 是 | 是 / Reality 不需要 | 否 |
| 多路复用 | 内置 | 可选 | 否 | 否 |
| 额外流量 | 填充 1%–10% | 几乎无 | 几乎无 | 几乎无 |
| 成熟度 | 新 | 高 | 中高 | 中 |
客户端支持矩阵
| 客户端 | AnyTLS | 最低版本(大致) | 备注 |
|---|---|---|---|
| Clash Verge Rev(mihomo) | 支持 | mihomo 1.19.x 以后 | 升级到最新版即可 |
| Clash Meta for Android | 支持 | 同上 | |
| Shadowrocket | 支持 | 2025 年中以后版本 | 旧版本节点不显示 |
| sing-box | 支持 | 1.12 以后 | 原生实现 |
| v2rayN | 支持 | 需 sing-box 核心 | Xray 核心不支持 |
| v2rayNG | 支持 | 需 sing-box 核心 | 同上 |
| Clash Mi | 支持 | 新版 | |
| Stash | 视版本 | — | 以官方更新日志为准 |
封锁高峰期的表现与切换策略
AnyTLS 针对的是被动流量分析,所以它的价值在「TLS 类节点能连上、但大流量时被限速或间歇断流」的场景,这正是 TLS-in-TLS 被识别的典型表现。如果你的 Trojan / VLESS 节点在高峰期出现这种症状而机场提供 AnyTLS 节点,切过去试一次。
反过来,节点 IP 被直接封(延迟测试全部超时)时,AnyTLS 和其他协议一样无效,只能等机场换 IP。切换顺序:同地区 TLS 节点 → AnyTLS 节点 → Hysteria2 节点 → 换地区 → 看机场公告。顺序背后的判断方法见 机场晚高峰很慢怎么办 和 订阅更新失败怎么办。
本站机场的情况
本站 17 家机场的品牌资料均未标注 AnyTLS,2026-08 测速批次 的截图中也没有出现(截图里只有 Shadowsocks 和 VLESS,见 Shadowsocks 还能用吗)。它目前在少数机场作为备用协议提供。如果你所在地区 TLS 类协议在封锁高峰期频繁异常,可以在购买前问客服是否提供 AnyTLS 或 Hysteria2 节点;封锁期的切换思路见 机场晚高峰很慢怎么办。
常见问题
AnyTLS 比 Reality 更安全吗?
两者针对的威胁不同:Reality 针对主动探测(有人连你的节点看是不是网站),AnyTLS 针对被动流量分析(统计包长序列)。理论上二者可以互补,但目前没有「AnyTLS + Reality」的标准组合。
AnyTLS 速度怎么样?
填充会带来少量额外流量(通常个位数百分比),多路复用减少握手,整体与 Trojan 相当。线路仍是决定因素,见 线路类型判断。
自签证书的 AnyTLS 节点安全吗?
加密强度不变,但「跳过证书验证」意味着客户端不校验服务器身份,理论上存在中间人风险,伪装效果也弱于正规证书。正规机场应该用有效证书。
AnyTLS 会被封吗?
没有协议是不可封的。AnyTLS 的目标是降低被动识别概率,节点 IP 被标记仍然会失效。
AnyTLS 节点和 Trojan 节点同一台服务器,速度会不一样吗?
不会有可感知差别。填充带来的额外流量在个位数百分比,线路相同则速度相同。差别只在被动识别场景下的稳定性。