协议边界与最小配置
AnyTLS 是当前 Mihomo 内核提供的 TLS over TCP 出站类型,不使用 QUIC,也没有端口跳跃字段。最小节点由通用的名称、类型、服务器、端口和服务端密码组成。
password 应与服务端用户配置一致。udp 为 true 时,客户端通过 UDP over TCP 承载 UDP 请求,它不表示底层连接改为 UDP。
name必填- 节点名称,在策略组和规则中用于识别该出站。
type: anytls必填- 选择 Mihomo 的 AnyTLS 出站实现,原版 Clash 不识别该类型。
server / port必填- 填写服务端主机与监听端口,端口为单个整数。
password认证- 填写服务端为该用户设置的密码,空值只有在服务端明确允许时才可能工作。
udp可选- 启用 UDP 请求支持,实际由 AnyTLS 连接内的 UDP over TCP 承载。
TLS、SNI 与证书校验
AnyTLS 始终建立 TLS 连接。未填写 sni 时,客户端使用 server 作为 TLS Server Name;如果 server 是 IP,通常需要按服务端证书填写域名形式的 SNI。
sniTLS- 设置握手中的服务器名称;省略时回退到 server。
alpnTLS- 填写服务端支持的 ALPN 列表,例如 h2 与 http/1.1,不能凭客户端偏好自行改动。
client-fingerprintTLS- 选择客户端 TLS 指纹,例如 chrome;它与证书指纹校验不是同一个字段。
skip-cert-verify风险- 为 true 时跳过常规证书校验,只应在明确理解风险时使用。
name-cert-verifyTLS- 单独指定证书名称校验目标,不等同于改变连接地址。
fingerprintTLS- 固定服务端证书指纹,用于证书钉扎。
certificate / private-keymTLS- 服务端要求客户端证书时成对填写。
ech-opts可选- 使用 ECH 隐藏 ClientHello 中的真实 SNI,具体字段遵循当前内核的通用 TLS 配置。
Reality 与安全封装的边界
AnyTLS 可以搭配 ECH、ShadowTLS、ResTLS 或 JLS 处理 TLS 暴露特征,但这些能力不是 Reality 的别名。
shadow-tls-opts封装- 填写 ShadowTLS 的 version 与 password,必须与服务端一致。
restls-opts封装- 填写 ResTLS 的 password,可按服务端提供 version-hint。
jls-opts封装- 填写 JLS 的 username 与 password。
- 互斥规则重要
- ShadowTLS、ResTLS 与 JLS 在当前实现中最多选择一种,同时填写会拒绝创建节点。
空闲会话参数
AnyTLS 会在一条或多条 TLS 连接上复用流。三个会话参数以秒为单位控制检查和回收,不是 QUIC 窗口,也不影响 TLS 证书校验。
idle-session-check-interval默认 30 秒- 两次空闲会话检查之间的间隔。
idle-session-timeout默认 30 秒- 检查时关闭空闲时间超过该值的会话。
min-idle-session默认 0- 检查时至少保留的空闲会话数量;提高该值会保留更多连接。
最小可用示例
先使用服务端实际提供的密码、SNI 与 ALPN 建立连接,再按需要增加 ECH 或一种安全封装。会话字段已有默认值,通常无需重复填写。
proxies:
- name: anytls-node
type: anytls
server: server.example.com
port: 443
password: replace-with-server-password
udp: true
sni: server.example.com
client-fingerprint: chrome
alpn:
- h2
- http/1.1常见误配
配置能够被 YAML 解析,不代表协议参数可以互换。AnyTLS 连不上时应先收缩到最小配置。
- 从 VLESS 节点复制
reality-opts,导致使用了当前内核明确不支持的组合。 server填写 IP,却没有填写证书对应的sni,造成证书名称校验失败。- 同时启用 ShadowTLS、ResTLS 与 JLS 中的两种或更多封装,节点会在创建阶段报错。
- 把会话检查参数当作性能倍率盲目调大,反而保留更多空闲连接。
