# AnyTLS 协议，填充方案、连接复用和 client 字段的争议

> 来源 https://jichangtuijianweb.co/kepu/anytls-xieyi/，更新于 2026 年 9 月 20 日。机场推荐网（https://jichangtuijianweb.co/）原创内容。
> 分类 协议与内核。

AnyTLS 在一条 TLS 连接里跑多路代理请求，头几次写入按服务端下发的方案切包、填充，想打乱里层 TLS 握手的包长规律。飞猫云的订阅全是它，内核太旧的客户端一个节点也导不进。

[飞猫云](https://jichangtuijianweb.co/pingce/flycat/) 2026 年 7 月那份订阅有 49 个节点，类型一栏清一色是 AnyTLS。手里的客户端不认这个协议，这份订阅导进去一个节点也不剩。本站资料里写明用 [AnyTLS](https://jichangtuijianweb.co/cidian/#anytls) 的机场还有一家[星岛梦](https://jichangtuijianweb.co/pingce/xingdaomeng/)，它以 VLESS 为主，2026-06-27 那份订阅 70 个节点里有 10 个 AnyTLS。

这个协议很新。参考实现项目在 GitHub 上建于 2025-02-09，README 的第一句话说它是一个试图缓解嵌套 TLS 握手指纹的代理协议。十一天后，sing-box 就合并了支持它的代码，sing-box 自己的文档把那一天记作 2025-02-20。mihomo 在 2025-03-03 的 v1.19.3 里跟上，提交者就是 anytls 项目的账号。

## 填充方案只管头 8 次写入

用代理打开一个 HTTPS 网站，连接里套着两层 TLS，外层加密遮得住内容，遮不住里层握手那几个包的长短和先后。这个问题在 [REALITY 与 Vision](https://jichangtuijianweb.co/kepu/vless-reality-vision/) 那篇里用五个包讲过。VLESS 的 Vision 流控用填充对付它，AnyTLS 的办法是在外层 TLS 上面加一层会话，由会话层决定头几次写入切成多大、垫多少。项目里带的默认方案是这样。

```
stop=8
0=30-30
1=100-400
2=400-500,c,500-1000,c,500-1000,c,500-1000,c,500-1000
3=9-9,500-1000
4=500-1000
5=500-1000
6=500-1000
7=500-1000
```

计数单位是对 TLS 的写入次数，stop=8 表示只处理第 0 到第 7 次，之后原样发送。第 0 次是认证，内容是密码的 SHA256 值，32 字节，接着 2 字节的长度和一段填充，协议文档算过，认证部分的固定开销是 34 字节，默认方案再垫 30 字节。第 1 次里装的是 cmdSettings 和第一条代理请求的目标地址，垫到 100 到 400 字节。

第 2 次最要紧，协议文档说这里应该是用户的第一个数据包，比如 TLS ClientHello。默认方案把它切成最多 5 片，头一片 400 到 500 字节，后面每片 500 到 1000 字节。中间的 c 是检查点，上一片发完用户数据已经没了，就到此为止，不再补后面的填充片。数据不够填满一片时，用一种叫 cmdWaste 的帧补齐，对方收到直接丢掉。

方案由服务端做主。客户端每开一个新会话，都要先发 cmdSettings，里面带着自己手里那份方案的 MD5。服务端发现对不上，就用 cmdUpdatePaddingScheme 把自己的方案推过去，客户端之后新建的会话一律改用新方案。协议文档讲了这么设计的用意，默认方案的特征哪天被列进黑名单，客户端也只在头一条连接里用一次默认方案，收到服务端的更新就换掉。FAQ 说得更直接，默认方案只是个示例，项目没法保证它不被墙，所以做了一套能随时改流量特征的机制。

## 一条 TLS 连接上跑很多条请求

认证过不去，服务器可以直接关连接，也可以回落到任意一个正常的网站服务，协议文档在这里直接链了 [Trojan](https://jichangtuijianweb.co/kepu/trojan-xieyi/) 的回落说明。认证通过以后，双方在 TLS 里跑会话层，每一帧是 1 字节命令、4 字节流 ID、2 字节长度，后面跟数据。

复用是协议的硬要求，文档用粗体写着客户端必须实现。结构是一条条代理请求作为流，挂在会话上，会话跑在 TLS 上，TLS 跑在 TCP 上。开新请求之前先看有没有空闲会话，有就挑序号最大、也就是最新的那条用，没有才新建。请求结束，会话回到空闲池，定期检查，闲得太久的关掉。节点配置里那三项 idle-session 管的就是这个，mihomo 和 sing-box 的默认值都是 30 秒检查一次、闲置 30 秒就关、最少保留 0 条。Surge 另有一个 reuse 开关，默认开着。

复用省掉的是握手。每条新 TLS 连接都要完整握一次手，挂在已有会话上的请求不用。AnyTLS 的 UDP 也不单独走，它借用 sing-box 的 UDP over TCP 第 2 版，把 UDP 包装进一条流里。

协议出过一次大改。2025 年 4 月的 v0.0.8 带来了协议版本 2，文档说主要为了解决隧道连接卡住的问题。版本 2 里服务器会在出站连接建好以后回一个 cmdSYNACK，双方还能互发心跳，客户端长时间收不到回应，就能早点关掉卡住的连接。版本号由双方协商，只有两头都是 2 才启用这些特性。

服务器也有拒绝的权利。协议文档写着，没有正确实现填充更新和连接复用的客户端，或者版本太旧、有已知问题的客户端，服务器可以拒绝，但必须先发一条 cmdAlert 说明原因，客户端要把这段文字打进日志。

## 2026 年 8 月，client 字段的默认值被改掉了

cmdSettings 里除了版本号和方案的 MD5，还有一项 client，写的是客户端软件的名字和版本。围绕这一项，2026 年夏天闹过一场争议，两边的说法都有公开文档。

sing-box 在一篇专门的说明里排了时间线。2025-02-20 合并 AnyTLS 时，他们以为这一项不算隐私。2025-04-05，AnyTLS 的协议文档加上了要求，第三方实现得填真实的软件名和版本，还说伪装没有任何意义。2026-08-03，sing-box 发布 1.13.16 和 1.14.0-beta.5，AnyTLS 请求里的 client 默认留空，另加了 client_metadata 选项让用户自己填。理由写在说明里。他们收到报告，有商业代理服务商拿这一项认出 sing-box 用的那个 AnyTLS 官方库，把这类连接拦下来，据说起因是有滥用的用户拿 sing-box 连他们的服务器。

AnyTLS 项目在同一天发了回应。文档把 client 比作 HTTP 的 User-Agent，说它位于加密连接内部，普通的被动观察者读不到，内容只有软件名和版本。文档承认之前那句伪装没有意义说得过于绝对，也承认已知有部分服务商直接按这一项做了限制，并在结尾点名，部分机场只凭一个能伪造的字段限制特定客户端，识别效果有限，还容易误伤。它同时批评 sing-box 没经过充分讨论就把这一项默认关掉，仍建议客户端默认上报真实名称和版本。

十三天后，mihomo 在 2026-08-16 的 v1.19.30 里也加了 client-metadata 选项，默认不发送。

放到用户这头，这一项在加密连接里面，路上的被动观察者读不到，看得到它的只有机场的服务器。哪些机场按它做了限制，公开资料里没有名单，本站也不知道。升级内核以后 AnyTLS 节点突然全连不上，先翻日志找有没有服务器发来的警告文字，再去问机场。

## 客户端版本够新才认得它

| 客户端或内核 | 从哪个版本起支持 | 要留意的 |
|---|---|---|
| sing-box | 1.12.0，2025-08-04 发布 | 1.13.16 起 client 默认留空 |
| mihomo | v1.19.3，2025-03-03 发布 | v1.19.30 起 client 默认不发，不支持配 REALITY |
| Shadowrocket | 2.2.65 | AnyTLS 项目点名的 iOS 实现 |
| Surge | iOS 5.17.0，Mac 6.4.3 | reuse 开关默认开 |
| Stash、Loon | 文档已列 | Loon 的节点文档里有 REALITY 参数 |
| Quantumult X | 官方示例配置里有 anytls | 示例里有带 REALITY 的写法 |

Xray 的出站协议列表里没有 AnyTLS，用 Xray 内核的 v2rayNG 连不上这类节点。电脑上用 mihomo 内核的 Clash Verge Rev、FlClash 都行，[sing-box 官方客户端](https://jichangtuijianweb.co/kehuduan/sing-box/)要 1.12.0 以上。iPhone 上的 [Shadowrocket](https://jichangtuijianweb.co/kehuduan/shadowrocket/) 现在的版本早就过了 2.2.65。AnyTLS 项目在兼容列表下面加了一句，这些客户端的实现细节和协议规范贴合到什么程度，由各自的维护团队负责，AnyTLS 项目没有验证过。

mihomo 在 AnyTLS 和 REALITY 的组合上态度最硬，文档写明不支持，以后也不会支持，要藏 SNI 就用 ECH，或者搭 ShadowTLS、ResTLS、JLS。机场如果给 AnyTLS 节点配了 REALITY，Clash 系客户端就用不了这批节点。

## 作者自己列了十条弱点

FAQ 末尾有一节已知弱点，开头交代这些问题眼下未必会招致被墙，修了又会破坏兼容性，所以第一版没处理。里面有几条和用户能感觉到的东西有关。填充方案的语法只能给单个包指定一个固定长度，或者一个区间里的随机长度，头 8 次写入之后剩下的数据只能直接发。TLS 套 TLS 的开销会让包变大，小包变少，还会让包持续超过 MTU。它也不是一台 HTTP 服务器，仍可能招来主动探测。还有两条作者直说不清楚，一条是客户端用默认方案发出的那几条连接会不会影响整体统计，另一条是墙会跟踪一条 TLS 连接多久。

同一份 FAQ 还劝人别拿它和 Hysteria 这类 UDP、QUIC 协议比速度，两边底层的拥塞控制不同，运营商施加的 QoS 策略也不同，放不到一起比。问速度慢，FAQ 的回答是速度跟线路质量有关。

本站手里的 AnyTLS 数据也印证不了协议好坏。飞猫云 2026-07-08 在长沙电信 2Gbps 上那一轮，49 个 AnyTLS 节点全部测出了速度。星岛梦 2026-06-27 那一轮，名字带电信的 10 个 AnyTLS 节点有 4 个连延迟都没测出来，Disney+ 和 OpenAI 两列全空。两家机场、两条测试线路、两个日子，放在一起只能说明各家当时部署得怎么样。几种协议放在一起的对照，见[协议总览](https://jichangtuijianweb.co/kepu/daili-xieyi-zonglan/)。

## 常见问题

### 升级客户端以后，AnyTLS 节点连不上了怎么查

先看日志。协议规定服务器拒绝客户端时要发 cmdAlert 写明原因，客户端要把它记进日志。2026 年 8 月起，sing-box 1.13.16 和 mihomo v1.19.30 默认不发 client 字段，都留了自定义选项。一连就断、日志空白的，FAQ 说常见原因是密码错误，先更新订阅。

### v2rayNG 能用 AnyTLS 节点吗

按官方资料不能。Xray 文档的出站协议列表里没有 AnyTLS，AnyTLS 项目列的兼容软件只有 sing-box、mihomo 两个内核和几款 iOS 客户端。安卓上换 FlClash 这类 mihomo 内核客户端，或者 sing-box 官方客户端。

### 机场的 AnyTLS 节点带 REALITY 参数，Clash 系客户端能用吗

mihomo 内核用不了。它的文档写明不支持 AnyTLS 配 Reality，今后也不打算支持，想隐藏 SNI 的人它推荐换 ECH，或搭 ShadowTLS、ResTLS、JLS。Quantumult X 示例配置和 Loon 节点文档里有这种写法，iPhone 上可以试。

### iPhone 上哪些 App 能导入 AnyTLS 节点

AnyTLS 项目点名 Shadowrocket 从 2.2.65 起支持，Stash、Loon 已经跟进。Surge 手册写的是 iOS 5.17.0 起，Quantumult X 的官方示例配置里也有 anytls 的写法。几款的版本号、价格和系统要求，本站在 iPhone 客户端那篇里核对过。

### AnyTLS 节点里 idle-session 那几项要不要改

一般不用改。mihomo 和 sing-box 的默认值都是每 30 秒检查一次空闲会话，闲置超过 30 秒就关，最少保留 0 个。协议文档自己举的例子是 30 秒检查、60 秒回收。把最少保留数调大，等于常备几条热连接，省掉新建连接的握手，代价是空着也占资源。

## 参考来源

- [anytls-go 项目 README](https://github.com/anytls/anytls-go)
- [anytls-go 协议文档 protocol.md](https://github.com/anytls/anytls-go/blob/main/docs/protocol.md)
- [anytls-go 用户常见疑问 faq.md](https://github.com/anytls/anytls-go/blob/main/docs/faq.md)
- [anytls-go 文档 client-name.md，写于 2026-08-03](https://github.com/anytls/anytls-go/blob/main/docs/client-name.md)
- [anytls-go 发布页，v0.0.5 到 v0.0.13](https://github.com/anytls/anytls-go/releases)
- [sing-box 文档，AnyTLS 出站](https://sing-box.sagernet.org/configuration/outbound/anytls/)
- [sing-box 文档，AnyTLS client metadata](https://sing-box.sagernet.org/manual/misc/anytls-client-metadata/)
- [sing-box v1.12.0 发布页，2025-08-04](https://github.com/SagerNet/sing-box/releases/tag/v1.12.0)
- [sing-box v1.13.16 发布说明，2026-08-03](https://github.com/SagerNet/sing-box/releases/tag/v1.13.16)
- [mihomo 文档，AnyTLS 节点](https://wiki.metacubex.one/config/proxies/anytls/)
- [mihomo v1.19.3 发布说明，加入 AnyTLS 客户端与服务端](https://github.com/MetaCubeX/mihomo/releases/tag/v1.19.3)
- [mihomo v1.19.30 发布说明，client-metadata 默认不发送](https://github.com/MetaCubeX/mihomo/releases/tag/v1.19.30)
- [Surge 手册，AnyTLS 策略](https://manual.nssurge.com/policies/anytls.html)
- [Loon 文档，节点格式](https://nsloon.app/docs/Node/)
- [Quantumult X 官方 GitHub 项目，示例配置 sample.conf](https://github.com/crossutility/Quantumult-X/blob/master/sample.conf)
- [Xray 文档，出站协议列表](https://xtls.github.io/config/outbound.html)
- 本站飞猫云测速与解锁截图，2026-07-08 与 07-09
- 本站星岛梦解锁测试截图，2026-06-27
