机场推荐网

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

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

更新于 9 分钟读完作者 阿量参考了 18 份一手资料

飞猫云 2026 年 7 月那份订阅有 49 个节点,类型一栏清一色是 AnyTLS。手里的客户端不认这个协议,这份订阅导进去一个节点也不剩。本站资料里写明用 AnyTLS 的机场还有一家星岛梦,它以 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 那篇里用五个包讲过。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 的回落说明。认证通过以后,双方在 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 官方客户端要 1.12.0 以上。iPhone 上的 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 两列全空。两家机场、两条测试线路、两个日子,放在一起只能说明各家当时部署得怎么样。几种协议放在一起的对照,见协议总览

常见问题

升级客户端以后,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 秒回收。把最少保留数调大,等于常备几条热连接,省掉新建连接的握手,代价是空着也占资源。

参考来源

  1. anytls-go 项目 README
  2. anytls-go 协议文档 protocol.md
  3. anytls-go 用户常见疑问 faq.md
  4. anytls-go 文档 client-name.md,写于 2026-08-03
  5. anytls-go 发布页,v0.0.5 到 v0.0.13
  6. sing-box 文档,AnyTLS 出站
  7. sing-box 文档,AnyTLS client metadata
  8. sing-box v1.12.0 发布页,2025-08-04
  9. sing-box v1.13.16 发布说明,2026-08-03
  10. mihomo 文档,AnyTLS 节点
  11. mihomo v1.19.3 发布说明,加入 AnyTLS 客户端与服务端
  12. mihomo v1.19.30 发布说明,client-metadata 默认不发送
  13. Surge 手册,AnyTLS 策略
  14. Loon 文档,节点格式
  15. Quantumult X 官方 GitHub 项目,示例配置 sample.conf
  16. Xray 文档,出站协议列表
  17. 本站飞猫云测速与解锁截图,2026-07-08 与 07-09
  18. 本站星岛梦解锁测试截图,2026-06-27

更新记录

  • 首次发布