ECH — mihomo
mihomo предоставляет ECH как блок ech-opts на каждом адаптере прокси, работающем по TLS. Одна и та же структура из трёх полей используется в VLESS, VMess, Trojan, Hysteria2, TUIC, AnyTLS и obfs-вариантах Shadowsocks.
ech-opts
| Поле | Тип | По умолчанию | Допустимые значения | Описание |
|---|---|---|---|---|
enable | bool | false | true | false | Включить ECH для этого прокси. При false остальная часть блока игнорируется. |
config | string | (auto-discover) | <base64 ECHConfigList> | Закреплённый список конфигураций ECH (в base64, со стандартным заполнением). Если не задан, mihomo запрашивает HTTPS-запись DNS для имени сервера, чтобы обнаружить конфигурацию автоматически. |
query-server-name | string | (server name) | <hostname> | Переопределяет домен, используемый для запроса HTTPS-записи ECH. По умолчанию берётся `sni` / `servername` / `server` прокси. Полезно, когда «обложечное» имя хоста отличается от фактической цели. |
Исходный код: adapter/outbound/ech.go:12-17 · зафиксировано на v1.19.29 (e26714a)
Та же структура переиспользуется как ECH-блок обфусцирующих плагинов (в plugin-opts shadowsocks для v2ray-plugin и gost-plugin) — поэтому у каждого поля есть и тег proxy:, и тег obfs:.
Примеры
Исходящий — VLESS с оппортунистическим ECH:
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Примечания
- Значение
configв mihomo — стандартный base64 (с заполнением), а не URL-безопасный base64. Если у вас значение в URL-безопасном base64, сначала конвертируйте его. - Автообнаружение использует
ProxyServerHostResolvermihomo — резолвер, применяемый для разрешения имён хостов прокси. Он, в свою очередь, подчиняется верхнеуровневому блокуdns:, включая любые настройки DoH/DoT. - Входящие слушатели mihomo с поддержкой ECH (VLESS / VMess / Trojan / Hysteria2 / TUIC / AnyTLS) принимают связку ключей ECH в поле слушателя
ech-key— см. страницы соответствующих входящих. Консолидированного входящего блокаech-configне существует.
Сравнение с другими ядрами
- Xray-core предоставляет ECH как поля непосредственно на
tlsSettings(echServerKeys,echConfigList,echSockopt). См. ECH — Xray-core. - sing-box использует вложенный блок
tls.echна входящих и исходящих с именами в snake_case. См. ECH — sing-box.
Исходный код: adapter/outbound/ech.go:12-17 · v1.19.29 (e26714a)
