跳到主要内容

AnyTLS

AnyTLS 是 sing-box 1.12.0 起支持的新型代理协议。其核心创新在于通过复用 TLS 会话来对抗基于流量统计特征的检测,是目前设计思路最为新颖的代理协议之一。

设计背景

现有的基于 TLS 的代理协议(如 Trojan、VLESS + TLS)虽然在加密层面足够安全,但它们都面临一个共同的问题:代理连接的流量模式与正常的 HTTPS 浏览存在可测量的统计差异。

正常的 HTTPS 浏览行为:

用户打开网页
→ 浏览器建立 TLS 连接
→ 发送 HTTP 请求,接收响应
→ 连接在短时间内关闭或复用(HTTP/2 多路复用)

代理连接的典型行为:

代理客户端建立 TLS 连接
→ 连接长时间保持(隧道保持打开)
→ 大量数据持续双向流动
→ 连接生命周期远长于正常浏览

这种"长连接 + 持续大流量"的模式即使在 TLS 加密之下也可以被流量分析系统通过统计特征识别。AnyTLS 的设计目标正是消除这种可识别的模式。

核心设计:TLS 会话复用

AnyTLS 的核心思路是将代理流量伪装成正常的 TLS 会话生命周期模式:

传统代理的 TLS 模式

[TLS 握手] → [长时间保持的隧道连接] → [大量持续流量] → [连接关闭]

AnyTLS 的 TLS 模式

[TLS 握手] → [短暂的请求/响应交换] → [连接暂停/复用]
→ [新的短暂交换] → [连接暂停/复用]
→ [新的短暂交换] → ...

AnyTLS 通过在 TLS 层之上实现一个自定义的多路复用协议,将代理流量分割成多个短暂的、符合正常 TLS 会话模式的交互单元,而不是维持一个持续的隧道连接。

填充机制

为了进一步对抗基于数据包大小和时间间隔的流量分析,AnyTLS 引入了随机填充机制:

  • 数据包大小会被随机填充至不同的长度,消除固定大小模式
  • 发送时间间隔引入随机抖动,防止通过时序特征识别代理行为
  • 填充的具体策略可以通过配置进行调整

这些设计使得 AnyTLS 的流量统计特征与正常的 HTTPS 流量高度相似,大幅提升了对抗流量分析检测的能力。

与其他 TLS 代理协议的对比

对比维度AnyTLSTrojanVLESS + TLSVLESS + Reality
流量模式伪装模拟正常 TLS 会话行为标准 TLS,模式固定标准 TLS,模式固定Reality 伪装
数据包填充有(随机)
需要域名
需要证书
抗流量分析极强较强较强
多路复用内置有限有限有限
协议成熟度较新(2025)成熟(2017)成熟(2020)成熟(2023)
客户端支持较新,部分支持广泛广泛广泛

AnyTLS-Reality

AnyTLS 也可以与 Reality 类 TLS 握手机制组合使用。它将 AnyTLS 的流量模式伪装能力与 Reality 的无需域名特性相结合:

  • 不需要域名和 TLS 证书
  • 同时具备 AnyTLS 的流量行为伪装
  • 支持情况取决于客户端是否同时实现 AnyTLS 与 Reality 类 TLS 参数
AnyTLS-Reality 的现状

目前 sing-box 文档中的 TLS 共享配置已经包含 Reality 字段,Quantumult X 官方示例也列出了 anytls 搭配 reality-base64-pubkey 的写法;其他客户端是否支持需以各自版本说明为准。如果你的客户端不支持,可以使用标准的 AnyTLS(需要域名)作为替代。

优缺点

优点缺点
流量统计特征伪装能力极强,对抗流量分析协议发布时间较短,社区积累和文档相对有限
随机填充机制消除数据包大小特征客户端支持不如 Trojan、VLESS 广泛
内置多路复用,连接效率高需要域名和 TLS 证书(AnyTLS-Reality 除外)
基于 TLS,利用现有的 TLS 生态填充机制带来额外的带宽开销
sing-box 原生支持,配置简单被检测和分析的历史案例尚少,长期抗性有待验证
同时支持 TCP 和 UDP 代理

适用场景

推荐使用 AnyTLS 的场景:

  • 对流量分析型检测有顾虑,希望流量模式更接近正常 HTTPS
  • 已有域名和证书,希望尝试比 Trojan 更先进的协议设计
  • 使用 sing-box 作为代理核心,AnyTLS 是 sing-box 的原生协议
  • 对新协议有探索兴趣,希望使用前沿的技术方案
  • 作为 VLESS + Reality 的补充,提供额外的流量模式伪装

需要谨慎考虑的场景:

  • 需要广泛的客户端兼容性(多种设备同时使用同一节点)
  • 客户端不支持 AnyTLS,需要先确认你的客户端版本
  • 极端稳定性要求的生产环境(新协议可能有尚未发现的边缘情况)

服务端部署参考

前置条件

  • 一台公网 VPS,已开放 TCP 443 端口
  • 一个指向服务器 IP 的域名(AnyTLS-Reality 变体则无需)
  • 有效的 TLS 证书(可使用 acme.sh 或 Caddy 自动申请)
  • 已安装 sing-box(需要 1.12.0 或更高版本)

安装 sing-box

# 使用官方安装脚本(Debian/Ubuntu)
bash <(curl -fsSL https://sing-box.app/deb-install.sh)

# 或手动从 GitHub Releases 下载
wget https://github.com/SagerNet/sing-box/releases/latest/download/sing-box-1.x.x-linux-amd64.tar.gz
tar -xzf sing-box-*.tar.gz
mv sing-box /usr/local/bin/

申请 TLS 证书

curl https://get.acme.sh | sh

~/.acme.sh/acme.sh --issue -d your.domain.com --webroot /var/www/html

~/.acme.sh/acme.sh --install-cert -d your.domain.com \
--cert-file /etc/sing-box/cert.crt \
--key-file /etc/sing-box/private.key \
--reloadcmd "systemctl restart sing-box"

生成 UUID

sing-box generate uuid

服务端配置(/etc/sing-box/config.json)

{
"log": {
"level": "warn"
},
"inbounds": [
{
"type": "anytls",
"tag": "anytls-in",
"listen": "::",
"listen_port": 443,
"users": [
{
"name": "user1",
"password": "your-uuid-or-password"
}
],
"tls": {
"enabled": true,
"certificate_path": "/etc/sing-box/cert.crt",
"key_path": "/etc/sing-box/private.key"
},
"padding_scheme": "recommended"
}
],
"outbounds": [
{
"type": "direct",
"tag": "direct"
}
]
}

配置字段说明:

字段说明
users用户列表,每个用户有独立的 namepassword
tls.certificate_path / tls.key_pathTLS 证书和私钥路径
padding_scheme填充策略,recommended 使用推荐的默认策略

多用户配置示例:

{
"inbounds": [
{
"type": "anytls",
"tag": "anytls-in",
"listen": "::",
"listen_port": 443,
"users": [
{
"name": "alice",
"password": "password-for-alice"
},
{
"name": "bob",
"password": "password-for-bob"
}
],
"tls": {
"enabled": true,
"certificate_path": "/etc/sing-box/cert.crt",
"key_path": "/etc/sing-box/private.key"
}
}
],
"outbounds": [
{
"type": "direct"
}
]
}

启动服务

systemctl enable sing-box
systemctl start sing-box
systemctl status sing-box

# 查看日志
journalctl -u sing-box -f

验证配置语法

sing-box check -c /etc/sing-box/config.json

AnyTLS-Reality 服务端配置

如果不想使用域名和证书,可以使用 AnyTLS-Reality 变体:

生成 Reality 密钥对

sing-box generate reality-keypair

输出:

PrivateKey: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
PublicKey: yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy

服务端配置

{
"inbounds": [
{
"type": "anytls",
"tag": "anytls-reality-in",
"listen": "::",
"listen_port": 443,
"users": [
{
"name": "user1",
"password": "your-password"
}
],
"tls": {
"enabled": true,
"reality": {
"enabled": true,
"handshake": {
"server": "www.apple.com",
"server_port": 443
},
"private_key": "your-private-key-here",
"short_id": [
"a1b2c3d4"
]
}
}
}
],
"outbounds": [
{
"type": "direct"
}
]
}

short_id 可以使用 openssl rand -hex 4 生成。

客户端配置参考

sing-box 客户端配置(标准 AnyTLS)

{
"type": "anytls",
"tag": "anytls-node",
"server": "your.domain.com",
"server_port": 443,
"password": "your-password",
"tls": {
"enabled": true,
"server_name": "your.domain.com",
"utls": {
"enabled": true,
"fingerprint": "chrome"
}
}
}

sing-box 客户端配置(AnyTLS-Reality)

{
"type": "anytls",
"tag": "anytls-reality-node",
"server": "your.server.ip",
"server_port": 443,
"password": "your-password",
"tls": {
"enabled": true,
"server_name": "www.apple.com",
"utls": {
"enabled": true,
"fingerprint": "chrome"
},
"reality": {
"enabled": true,
"public_key": "your-public-key-here",
"short_id": "a1b2c3d4"
}
}
}

utls.fingerprint 用于模拟真实浏览器的 TLS 指纹,推荐使用 chromefirefox

客户端支持

AnyTLS 是 2025 年推出的新协议,目前客户端支持尚在快速扩展中:

平台客户端支持状态备注
Windows / macOS / Linuxsing-box支持原生设计,支持最完整
Windows / macOS / LinuxMihomo支持需要较新版本
iOSStash支持(TestFlight)通过 TF 测试版支持
iOSQuantumult X支持App Store 1.6.0+
iOSShadowrocket暂不支持
iOS / macOSSurge支持需要较新版本
iOSLoon支持(TestFlight)通过 TF 测试版支持
AndroidNekoBox支持需要较新版本
AndroidHusi支持sing-box 内核
AndroidExclave支持
Linuxdae支持
关于客户端支持

由于 AnyTLS 协议发布时间较短,不同客户端的实现进度不一。在使用前,请确认你的客户端版本是否已支持 AnyTLS。若客户端显示协议不支持,通常升级到最新版即可解决。

常见问题

Q:AnyTLS 和 VLESS + Reality 怎么选?

两者各有侧重:

  • VLESS + Reality 在 TLS 握手阶段的伪装能力更强(真正复用目标网站的 TLS 握手流程)
  • AnyTLS 在握手后的流量行为模式伪装上更有优势(随机填充和会话模式模拟)
  • 两者并不冲突,可以同时部署并根据场景切换
  • 如果你没有域名,优先选 VLESS + Reality;如果有域名且使用 sing-box,AnyTLS 值得尝试

Q:AnyTLS 的随机填充会增加多少流量消耗?

填充开销取决于所选的填充策略。使用 recommended 策略时,额外流量开销通常在 5–15% 之间。对于多数使用场景而言,这个开销是可以接受的。如果对流量消耗非常敏感,可以适当调整填充参数。

Q:服务端使用 sing-box,客户端可以使用 Mihomo 吗?

可以。AnyTLS 是一个开放协议规范,只要客户端和服务端均遵循同一规范实现,即可互通。目前 sing-box 和 Mihomo 均遵循相同的 AnyTLS 协议规范。

Q:padding_scheme 有哪些可选值?

目前 sing-box 的文档中 recommended 是推荐的默认策略,代表使用当前版本中预设的最佳实践填充方案。随着协议发展,未来可能会有更多可配置选项。建议关注 sing-box 官方文档获取最新的配置参考。

Q:AnyTLS 稳定吗,能用于日常使用吗?

AnyTLS 在 sing-box 1.12.0 及以后的版本中可用,适合有明确需求的用户测试和日常使用。然而由于协议历史较短,社区的大规模实际使用案例积累有限。建议将其与一个成熟的备选方案(如 VLESS + Reality)并行部署,以防万一。

延伸阅读