AnyTLS 是什么?AnyTLS 协议的设计与客户端支持

先说结论

AnyTLS 协议是试图缓解“TLS 嵌套 TLS”握手指纹的代理协议:在 TLS 连接内复用多个流,并用可由服务端更新的填充方案控制包长度。官方仓库只是参考实现,日常使用建议选第三方兼容软件。

AnyTLS 资料卡核验于 2026-10-09

来历
官方仓库 github.com/anytls/anytls-go:README 称它是该协议的参考实现,协议、常见问题与 URI 格式文档在仓库 docs 目录。页面未写明提出者姓名。
传输与加密
基于 TLS:握手完成后客户端立即发送 sha256(密码) 与随机填充;认证成功进入会话层,帧由命令、流 ID、数据长度和数据组成;认证失败时服务端关闭连接或回落到 HTTP 服务。协议版本号目前为 2。
官方文档写明支持的内核
sing-box(1.12.0 起)、Mihomo、anytls-go(参考实现)、Shadowrocket(2.2.65 起)、Stash、Loon

站内收录的客户端里,文档写明支持 AnyTLS 的

完整对照见协议 × 客户端支持矩阵。

这张卡片的资料来源(6 条)
  1. README:协议定位、特点、参考实现、示例的不安全默认配置、第三方兼容软件(sing-box、mihomo、Shadowrocket 2.2.65+、Stash、Loon)及其兼容度未经项目验证、URI 格式 v0.0.12 起可用(github.com)
  2. 协议文档:基于 TLS;sha256(密码)+填充认证;会话帧与命令;paddingScheme 下发机制;版本号 v=2;认证失败关闭连接或回落 HTTP(github.com)
  3. FAQ:已知弱点列表;默认 PaddingScheme 只是示例;协议名称由来(github.com)
  4. sing-box 文档:AnyTLS 自 1.12.0 起提供,含 idle_session_* 与 min_idle_session 参数(sing-box.sagernet.org)
  5. Mihomo 文档含 anytls 代理类型,并声明不支持 AnyTLS+Reality(wiki.metacubex.one)
  6. Xray 出站协议列表不含 AnyTLS(xtls.github.io)

AnyTLS 协议要处理的是一个很具体的麻烦:用 TLS 包着代理流量时,里面往往还有一层 TLS,两次握手叠在一起,包长度和握手往返都会露出特征。官方仓库把它描述为一个试图缓解“TLS 嵌套 TLS”握手指纹问题的代理协议,办法是在 TLS 之上复用连接,再用一套可由服务端更新的分包与填充方案控制数据包长度。下面依据官方仓库、协议文档和常见问题页,说清 anytls是什么、它的弱点,以及 anytls客户端怎么判断。

AnyTLS 协议是什么:三份官方文档各管一件事

官方仓库是 anytls/anytls-go,README 称它是这个协议的参考实现,协议、常见问题与 URI 格式文档放在仓库的 docs 目录。仓库页面没有写明协议提出者是谁,首次发布的时间也没有写,这部分资料待核实,梯子岛不去补。仓库状态会变化,以仓库页实际显示为准。

查 AnyTLS 的资料,去哪一份文档找什么,可以这样对照:

文档 里面有什么 适合什么时候看
README 定位与特点、示例的安全提示、第三方兼容软件、URI 格式 第一次了解协议,或想确认软件支持情况
协议文档 认证、会话帧、填充方案下发 想弄清一次连接里到底发生了什么
常见问题 已知弱点、默认填充方案的定位 想知道它不能做什么

三份里最值得先读的是常见问题页:一个协议愿意把弱点写在自己的文档里,对读者判断它的边界很有帮助。

“TLS 嵌套 TLS”是什么问题,别的做法怎么应对

你访问的 https 网站,本身就是一层 TLS。代理协议如果也用 TLS 做外壳,外层握手完成后,内层还要再握手一次,这就是“TLS 嵌套 TLS”。额外的握手往返和固定的包长度,是文档里指出的特征来源。

值得注意的是,AnyTLS 的常见问题页把“TLS 嵌套带来额外握手往返与包长度特征”也列在了自己的已知弱点里。所以更准确的说法是“缓解”,而不是“消除”。同一个问题,站内其他协议资料里有不同的回应:

做法 资料里的说法 站内详细资料
Trojan 协议加 Mux Xray 文档提到公网环境还需要 Mux,否则内层载荷本身是 TLS 时会形成 TLS in TLS Trojan 协议
REALITY README 不建议搭配 XTLS 以外的代理协议,理由是有明显的 TLS in TLS 特征 Reality 协议
AnyTLS 复用连接,并用可更新的填充方案控制包长度模式 本文

这张表只放文档的说法,不比较谁更有效。有没有效果、对哪种网络有效,需要大量实际测试,梯子岛没有这类数据。词典里的 TLS 和 多路复用 Mux 可以帮你补一下术语。

anytls的会话怎么走:认证、帧与填充方案

协议文档把一次连接写成几个阶段,对使用者的意义放在最右一列:

阶段 协议文档的写法 对使用者的意义
建连 基于 TLS TLS 相关设置要与节点一致
认证 握手完成后,客户端立即发送 sha256(密码) 与随机填充 密码要与服务端一致
认证失败 服务端关闭连接,或回落到 HTTP 服务 看到的可能是连接被断开,也可能是一个网页
会话层 帧由命令、流 ID、数据长度和数据组成,一条 TLS 连接内用 SYN、PSH、FIN 命令复用多个流 README 称这样可降低代理延迟,效果没有数据可引用
填充 用 paddingScheme 描述分包与填充,服务端可发 cmdUpdatePaddingScheme 下发新方案 方案不一定写死在客户端里
版本 协议文档里有版本号 客户端与节点的版本对不上时,先查各自的文档

“填充方案”用白话讲,就是一份规则:一次数据要拆成多大的包、在哪些位置补多少无意义的字节。常见问题页特别说明,默认的方案只是示例。所以没有必要去背某个具体的参数,更实用的认识是:这个协议把“包长度长什么样”做成了可以更换的部分。

sing-box 的 AnyTLS 出站还提供 idle_session_check_interval、idle_session_timeout、min_idle_session 这几个空闲会话管理参数。从名字看,分别管空闲会话的检查间隔、超时和最少保留数,具体含义以 sing-box 文档 为准。节点没有特别说明时,保持客户端默认即可。

AnyTLS 协议的弱点与不支持的组合

官方没有回避问题。常见问题页列出的已知弱点包括:

  • TLS 嵌套带来额外的握手往返与包长度特征。
  • 未处理下行流量。
  • 首个往返内几乎同时发出多个包。
  • 服务端不是 HTTP 服务器,仍可能存在主动探测问题。

README 另有一条提醒:示例的服务端与客户端默认采用不安全配置,假设不会遇到 TLS 中间人,示例项目的定位是演示协议,不是生产级客户端。再加上 Mihomo 文档声明不支持 AnyTLS 加 Reality 的组合、今后也不会支持,几条合起来,对使用者的含义很直接:

  1. 别把 anytls-go 的示例客户端当成日常工具。
  2. 别指望把 AnyTLS 和 Reality 叠在同一个节点里。
  3. 这些弱点是项目自己写的,梯子岛没有测试数据评估严重程度,也不会借此给它下任何“好”或“不好”的结论。

anytls客户端:谁写明支持,怎么判断

README 列出了第三方兼容软件,并说明这些软件的兼容程度没有经过项目验证。结合内核文档,可以得到下面这张表:

软件或内核 资料里怎么写 要留意什么
sing-box 文档有 AnyTLS 出站,较新的版本才提供 太旧的版本没有这个类型,先看 sing-box 档案 里的版本动态
Mihomo 文档有 anytls 代理类型 不支持与 Reality 组合,见 Mihomo 内核
Shadowrocket、Stash、Loon README 列为第三方兼容软件,Shadowrocket 的最低版本在 README 里有标注 闭源软件,以官方手册和商店页面为准
anytls-go 官方参考实现 示例默认配置不安全,定位是演示
Xray-core 出站协议列表不含 AnyTLS 只用 Xray 内核的客户端,先确认它有没有另带别的内核

读表时记住两层:内核有类型,不等于客户端界面开放了它;界面有入口,不等于你手里的版本够新。哪款客户端写明支持,查 协议支持矩阵,没填的格子就是资料待核实;还没选好客户端,用 客户端选择工具 按平台缩小范围,官方入口在 下载导航。

anytls节点链接怎么读,要注意什么

官方文档给出的 URI 格式是 anytls://password@host:port,密码在前,服务器地址和端口在后,README 称参考客户端的较新版本可以直接使用这种链接。这类写法为什么存在,可以看词典里的 节点链接 URI,逐段拆开的办法见 节点链接怎么读。

最需要警惕的是:链接里直接带着密码。所以:

  • 不要把完整链接发到公开的聊天群或评论区。
  • 转换格式时尽量在本机完成,在线转换站的风险见 订阅转换怎么做才安全。
  • 怀疑密码外泄,应当联系节点提供方更换,而不是继续使用。

导入 AnyTLS 节点后,怎么自己确认

  1. 在节点详情里确认类型显示为 AnyTLS,没有被转换成 Trojan 之类的别的类型。
  2. 确认客户端内核的版本够新,没有 AnyTLS 类型的旧内核不认识这条节点,具体表现因软件而异。
  3. 确认节点没有同时标注 Reality,Mihomo 不支持这种组合。
  4. 核对密码、服务器地址、端口,以及 TLS 相关设置,别带多余的空格。
  5. 连上后,用 IP 与 DNS 检测 看出口地区和 DNS 走向。梯子岛只教方法,不提供检测结果。
  6. 连不上时,按 梯子连不上怎么办 往下查,证书类报错优先看 证书错误与系统时间不对怎么办。

下一步:先查矩阵,再决定要不要换内核

面对 AnyTLS,比较稳妥的态度是:官方怎么写就怎么理解,资料没写的地方就写“待核实”,不要靠传言补全。

这篇没有覆盖的

  • 协议提出者是谁、首次发布是什么时候,官方页面没有写,资料待核实,本文不推测。
  • 第三方软件对 AnyTLS 的兼容程度,项目方并未逐一验证,具体以各软件自己的文档为准。
  • 官方示例项目只用于演示协议,本文不涉及搭建服务端,也不评价任何具体节点。

本文引用的官方来源

  1. anytls/anytls-go 仓库(github.com)
  2. AnyTLS 协议文档(github.com)
  3. AnyTLS 常见问题(含已知弱点)(github.com)
  4. sing-box 文档:AnyTLS(sing-box.sagernet.org)
  5. Mihomo 文档:AnyTLS(wiki.metacubex.one)

以上链接均为官方页面,梯子岛在 2026-10-09 核对过;个别网站会拦截自动化访问,用浏览器直接打开即可。平台规则可能随时调整,以官方页面当前内容为准。

AnyTLS 协议常见问题

AnyTLS 是什么?

AnyTLS 是一个试图缓解“TLS 嵌套 TLS”握手指纹问题的代理协议。它建立在 TLS 之上,一条连接里可以复用多个流,并用一套分包与填充方案来控制数据包的长度模式,这套方案可以由服务端下发更新。

AnyTLS 和 Trojan 有什么不同?

两者都把代理流量放进 TLS 里。Trojan 握手后发送密码哈希和类 SOCKS5 请求,AnyTLS 握手后发送密码的 sha256 和随机填充,并进入带命令的会话层,可复用多个流、可更新填充方案。哪个适合你,取决于客户端和节点实际提供什么。

AnyTLS 可以和 Reality 一起用吗?

Mihomo 文档明确声明不支持 AnyTLS 加 Reality 的组合,今后也不会支持。如果别处的教程把两者写在同一个节点里,先回到你所用内核的官方文档核对,不要照抄。需要 Reality 时,Mihomo 文档建议选择 VMess、VLESS 或 Trojan。

AnyTLS 有哪些已知弱点?

官方常见问题页自己列了几条,包括 TLS 嵌套带来的额外握手往返与包长度特征、未处理下行流量、首个往返内几乎同时发出多个包,以及因为服务端不是 HTTP 服务器,仍可能存在主动探测问题。这些是项目的自述,梯子岛没有测试数据去评估严重程度。

anytls-go 可以直接当日常客户端用吗?

不建议。README 说明它是协议的参考实现,示例的服务端与客户端默认采用不安全配置,假设不会遇到 TLS 中间人,定位是演示协议而不是生产级客户端。日常使用建议选第三方兼容软件,并以那款软件的文档为准。

anytls 节点的链接长什么样?

官方文档给出的 URI 格式是 anytls 加冒号斜杠斜杠,后面依次是密码、at 符号、服务器地址和端口。由于链接里直接包含密码,不要发到公开的地方,也不要随意放进来历不明的在线转换站,导入时只在自己的设备上操作。

接着读

文中出现的术语

相关专题

接下来去哪儿?

找官方入口去网址导航,想核对仓库和版本看GitHub 项目导航;需要现成的机场,机场目录收了 28 家的价格与线路资料,性价比机场、便宜机场、VPN 机场分别有专项页。