ECH — mihomo
mihomo 在每个支持 TLS 的代理适配器上以 ech-opts 块暴露 ECH。同一 3 字段结构体被 VLESS、VMess、Trojan、Hysteria2、TUIC、AnyTLS 与 obfs 风格的 Shadowsocks 变体复用。
ech-opts
| 字段 | 类型 | 默认值 | 允许值 | 描述 |
|---|---|---|---|---|
enable | bool | false | true | false | 为该代理启用 ECH。为 false 时块内其他字段被忽略。 |
config | string | (auto-discover) | <base64 ECHConfigList> | 锚定的 ECH 配置列表(标准 padding 的 base64)。未设置时 mihomo 查询服务端名称的 HTTPS DNS 记录自动发现。 |
query-server-name | string | (server name) | <hostname> | 覆盖 ECH HTTPS 记录查询所用的域名。默认为代理的 `sni` / `servername` / `server`。当伪装主机名与真实目标不同时有用。 |
源码: adapter/outbound/ech.go:12-17 · 锚定版本 v1.19.27 (5184081)
同一结构体也用作混淆插件的 ECH 块(shadowsocks 中 v2ray-plugin 与 gost-plugin 的 plugin-opts 下),因此每个字段 同时带 proxy: 与 obfs: 标签。
示例
出站 —— 带机会性 ECH 的 VLESS:
yaml
proxies:
- name: vless-ech
type: vless
server: example.com
port: 443
uuid: <UUID>
tls: true
servername: example.com
network: tcp
ech-opts:
enable: true出站 —— 锚定 ECH 配置(base64):
yaml
proxies:
- name: vless-ech-pinned
type: vless
server: example.com
port: 443
uuid: <UUID>
tls: true
servername: example.com
ech-opts:
enable: true
config: <base64 ECHConfigList>
query-server-name: cover.example.com说明
- mihomo 的
config值是 带 padding 的标准 base64,不是 URL 安全 base64。如果你的值是 URL 安全形式,请先转换。 - 自动发现使用 mihomo 的
ProxyServerHostResolver—— 用于解析代理 主机名的解析器。该解析器自身遵循顶层dns:块(含 DoH / DoT 设置)。 - 支持 ECH 的 mihomo 监听器入站(VLESS / VMess / Trojan / Hysteria2 / TUIC / AnyTLS)在监听器的
ech-key字段中接受 ECH 密钥包 —— 详见对应入站页面。没有集中化的ech-config入站 块。
跨内核说明
- Xray-core 把 ECH 作为
tlsSettings上的直接字段 (echServerKeys、echConfigList、echForceQuery、echSockopt)。 参见 ECH — Xray-core。 - sing-box 在入站 / 出站上使用嵌套的
tls.ech块,字段名为 snake_case。参见 ECH — sing-box。
源码: adapter/outbound/ech.go:12-17 · v1.19.27 (5184081)
