AnyTLS
AnyTLS 是一种于 2025 年 3 月发布的新型代理协议,由 sing-box 项目的核心开发者设计。其核心创新在于通过复用 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 代理协议的对比
| 对比维度 | AnyTLS | Trojan | VLESS + TLS | VLESS + Reality |
|---|---|---|---|---|
| 流量模式伪装 | 模拟正常 TLS 会话行为 | 标准 TLS,模式固定 | 标准 TLS,模式固定 | Reality 伪装 |
| 数据包填充 | 有(随机) | 无 | 无 | 无 |
| 需要域名 | 是 | 是 | 是 | 否 |
| 需要证书 | 是 | 是 | 是 | 否 |
| 抗流量分析 | 极强 | 较强 | 较强 | 强 |
| 多路复用 | 内置 | 有限 | 有限 | 有限 |
| 协议成熟度 | 较新(2025) | 成熟(2017) | 成熟(2020) | 成熟(2023) |
| 客户端支持 | 较新,部分支持 | 广泛 | 广泛 | 广泛 |
AnyTLS-Reality
2025 年 6 月,AnyTLS 推出了与 Reality 的结合版本 AnyTLS-Reality。它将 AnyTLS 的流量模式伪装能力与 Reality 的无需域名特性相结合:
- 不需要域名和 TLS 证书
- 同时具备 AnyTLS 的流量行为伪装
- 目前仅在 sing-box 的最新版本中支持
AnyTLS-Reality 的现状
AnyTLS-Reality 在 2025 年 6 月才推出,目前仅 sing-box 内置支持,其他客户端的支持尚在开发中。如果你的客户端不支持,可以使用标准的 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.11.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 | 用户列表,每个用户有独立的 name 和 password |
tls.certificate_path / tls.key_path | TLS 证书和私钥路径 |
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 指纹,推荐使用 chrome 或 firefox。
客户端支持
AnyTLS 是 2025 年推出的新协议,目前客户端支持尚在快速扩展中:
| 平台 | 客户端 | 支持状态 | 备注 |
|---|---|---|---|
| Windows / macOS / Linux | sing-box | 支持 | 原生设计,支持最完整 |
| Windows / macOS / Linux | Mihomo | 支持 | 需要较新版本 |
| iOS | Stash | 支持(TestFlight) | 通过 TF 测试版支持 |
| iOS | Shadowrocket | 暂不支持 | — |
| iOS / macOS | Surge | 支持 | 需要较新版本 |
| iOS | Loon | 支持(TestFlight) | 通过 TF 测试版支持 |
| Android | NekoBox | 支持 | 需要较新版本 |
| Android | Husi | 支持 | sing-box 内核 |
| Android | Exclave | 支持 | — |
| Linux | dae | 支持 | — |
关于客户端支持
由于 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.11.0 及以后的版本中已经进入稳定支持阶段,适合日常使用。然而由于协议历史较短,社区的大规模实际使用案例积累有限。建议将其与一个成熟的备选方案(如 VLESS + Reality)并行部署,以防万一。
延伸阅读
- VLESS 协议 — 了解与 AnyTLS-Reality 共用 Reality 机制的 VLESS 方案
- Trojan 协议 — 了解同样基于 TLS 的传统方案,客户端支持更广泛
- 代理协议总览 — 回到协议总览页面
- sing-box 仓库:github.com/SagerNet/sing-box
- sing-box 文档:sing-box.sagernet.org