随着深度包检测(DPI)技术的不断升级,传统的代理协议逐渐暴露出特征,其中最棘手的问题之一便是 TLS in TLS(嵌套 TLS)指纹识别。为了应对这一审查机制,AnyTLS 应运而生,并在近年迅速发展成为了科学上网和隐蔽通信领域的新星。
本文将为您全面解析 AnyTLS 协议的核心原理,并提供基于 2026 年最新生态的高性能服务端部署与 sing-box 客户端配置指南。
一、 AnyTLS 协议是什么?
在传统的 HTTPS 代理或某些基于 TLS 的隧道(如 Vmess over TLS / Trojan)中,客户端会在外部的 TLS 加密隧道内部,再发起一次或多次内部的 TLS 握手(例如浏览器访问 HTTPS 网站)。这种“双重握手”会在数据包的长度、时序和数量上产生极具辨识度的统计学特征,使得防火墙(GFW)能够在不破解加密内容的情况下,精准识别并阻断代理流量。
AnyTLS 本身不负责重度的数据加密,而是将底层安全托付给标准的 TLS,其主要职责是流量混淆、分包填充与连接复用。目前,官方提供了 anytls-go 作为参考实现,而社区则开发了 anytls-rs(Rust 实现)作为适合生产环境部署的高性能服务端。主流代理客户端(如 sing-box、Shadowrocket、Stash、Loon 等)均已提供原生支持。
二、 AnyTLS 的核心原理
AnyTLS 并不是简单地给数据套上一层壳,而是通过以下三个核心机制来抹除代理特征:
-
灵活的分包与填充策略 (Padding Scheme)
这是 AnyTLS 击破 TLS in TLS 封锁的核心武器。由于 TLS 握手包(如 Client Hello)具有特定的数据长度,AnyTLS 在代理层对这些关键数据包进行重新分割(分包)并注入随机数据(填充)。这使得外部网络抓包时,看到的数据包长度和时序完全随机化,彻底破坏了嵌套 TLS 握手所暴露的统计学特征。 -
高效的 TCP 连接复用 (Multiplexing)
AnyTLS 的网络层级为:TCP Proxy -> Stream -> Session -> TLS -> TCP。
它强制客户端实现会话层(Session)复用。在创建新会话前,协议会优先检查并重用当前空闲的会话,在同一个 TLS 隧道内承载多个并发的代理请求。这不仅极大降低了代理的握手延迟,也减少了频繁建立新连接引起的主动审查注意。 -
主动探测防御与回退机制 (Fallback)
AnyTLS 服务端会对每一个接入的 TLS 连接读取首个数据包(包含完整的 padding)以校验认证信息。一旦密码不匹配或格式错误,服务端会直接阻断连接,或者无缝“回退(Fallback)”到任意合法的七层(L7)应用(如一个伪装的个人博客页面)。这种机制有效防御了审查者的主动探测(Active Probing)。
2025/2026 协议演进: 在 v2 版本的协议更新中,AnyTLS 引入了 cmdSYNACK 和主动心跳包机制,显著增强了应对隧道卡住或网络劣化时的恢复能力。
三、 服务端部署指南 (基于 anytls-rs)
对于生产环境,强烈建议使用基于 Rust 开发的 anytls-rs。它具备极高的性能、极低的资源占用,并且支持 TLS 证书热重载和灵活的日志分层策略。 -
环境准备
确保您的服务器(VPS)已开放对应的端口(如 8443 或 443),并已准备好您的域名及其 TLS 证书(例如通过 acme.sh 申请的 cert.crt 和 private.key)。 -
下载与运行 anytls-rs
由于 anytls-rs 提供了编译好的二进制文件,您可以直接下载运行,或者通过 Cargo 安装:# 假设您已将编译好的 anytls-server 二进制文件放入 /usr/local/bin/
anytls-server \
-l 0.0.0.0:8443 \
-p your_strong_password \
--cert /path/to/your/domain.crt \
--key /path/to/your/domain.key \
--watch-cert \
--expiry-warning-days 7 \
-L info \
-I 30 -T 120 -M 1
参数解析:
-l: 监听的地址和端口。
-p: AnyTLS 认证密码(需与客户端一致)。
--cert / --key: TLS 证书及私钥路径。
--watch-cert: 证书热重载(强烈推荐开启),当证书更新时无需重启服务,实现零停机更新。
-L info: 日志级别,生产环境使用 info 可减少不必要的 I/O 开销。-I / -T / -M: 分别对应空闲检查间隔(30s)、超时时间(120s)和最小保持空闲会话数(1)。
您可以将其写入 Systemd 服务文件中,以实现开机自启和后台守护。
四、 客户端配置指南 (基于 sing-box)
sing-box 是目前支持 AnyTLS 最完善的通用代理平台。以下是配置 AnyTLS 作为 outbound(出站规则)的标准 JSON 配置示例。
sing-box outbounds 配置示例
打开您的 sing-box 配置文件(通常为 config.json),在 outbounds 数组中添加 AnyTLS 节点:
```json
{
"outbounds": [
{
"type": "anytls",
"tag": "AnyTLS-Node",
"server": "your_domain.com",
"server_port": 8443,
"password": "your_strong_password",
"idle_session_check_interval": "30s",
"idle_session_timeout": "30s",
"min_idle_session": 1,
"tls": {
"enabled": true,
"server_name": "your_domain.com",
"utls": {
"enabled": true,
"fingerprint": "chrome"
}
}
}
]
}
iOS / 移动端说明: 如果您使用的是 Shadowrocket、Stash 等移动端工具,直接在添加节点选项中选择 AnyTLS 类型,填入对应的域名、端口、密码即可,多数 App 已经将复杂的连接复用参数在底层做好了适配。
五、 总结
AnyTLS 代表了抗审查代理协议发展的一个重要方向——放弃发明新加密,专注于解决流量特征。通过精妙的分包填充策略和高效的复用机制,AnyTLS 在保持极低资源消耗的同时,完美绕开了 TLS in TLS 的统计学审查。结合现代化的 anytls-rs 部署与 sing-box 客户端,它是 2026 年构建稳定代理网络的绝佳选择。


