Skip to content

ECH — mihomo

mihomo 在每个支持 TLS 的代理适配器上以 ech-opts 块暴露 ECH。同一 3 字段结构体被 VLESS、VMess、Trojan、Hysteria2、TUIC、AnyTLS 与 obfs 风格的 Shadowsocks 变体复用。

ech-opts

字段类型默认值允许值描述
enableboolfalsetrue | false为该代理启用 ECH。为 false 时块内其他字段被忽略。
configstring(auto-discover)<base64 ECHConfigList>锚定的 ECH 配置列表(标准 padding 的 base64)。未设置时 mihomo 查询服务端名称的 HTTPS DNS 记录自动发现。
query-server-namestring(server name)<hostname>覆盖 ECH HTTPS 记录查询所用的域名。默认为代理的 `sni` / `servername` / `server`。当伪装主机名与真实目标不同时有用。

源码: adapter/outbound/ech.go:12-17 · 锚定版本 v1.19.27 (5184081)

同一结构体也用作混淆插件的 ECH 块(shadowsocksv2ray-plugingost-pluginplugin-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 上的直接字段 (echServerKeysechConfigListechForceQueryechSockopt)。 参见 ECH — Xray-core
  • sing-box 在入站 / 出站上使用嵌套的 tls.ech 块,字段名为 snake_case。参见 ECH — sing-box

源码: adapter/outbound/ech.go:12-17 · v1.19.27 (5184081)

由 Argsment 出品的 Core Tutorial