Skip to content

ECH — mihomo

mihomo ECH را به‌صورت بلوک ech-opts روی هر آداپتور پراکسی که TLS صحبت می‌کند آشکار می‌سازد. همین ساختار ۳-فیلدی در VLESS, VMess, Trojan, Hysteria2, TUIC, AnyTLS و گونه‌های مبتنی بر obfs در Shadowsocks استفاده می‌شود.

ech-opts

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
enableboolfalsetrue | falseECH را برای این پراکسی فعال می‌کند. وقتی false باشد، بقیهٔ بلوک نادیده گرفته می‌شود.
configstring(auto-discover)<base64 ECHConfigList>لیست پیکربندی ECH پین‌شده (با کدگذاری base64 و padding استاندارد). وقتی تنظیم نشده باشد، mihomo رکورد DNS از نوع HTTPS مربوط به نام سرور را پرس‌وجو می‌کند تا پیکربندی را خودکار کشف کند.
query-server-namestring(server name)<hostname>دامنهٔ مورد استفاده برای پرس‌وجوی رکورد HTTPS مربوط به ECH را بازنویسی می‌کند. به‌طور پیش‌فرض از `sni` / `servername` / `server` پراکسی استفاده می‌کند. وقتی نام میزبان پوششی با هدف واقعی متفاوت است مفید است.

منبع: adapter/outbound/ech.go:12-17 · ثابت‌شده در v1.19.24 (a847246)

همین ساختار به‌عنوان بلوک 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 استاندارد (با padding) است، نه base64 امن برای URL. اگر مقداری به‌صورت URL-safe-base64 دارید، ابتدا آن را تبدیل کنید.
  • کشف خودکار از ProxyServerHostResolver در mihomo استفاده می‌کند — حل‌کننده‌ای که برای حل نام‌های میزبان پراکسی به‌کار می‌رود. آن حل‌کننده نیز از بلوک dns: سطح بالا، از جمله هر تنظیم DoH/DoT، تبعیت می‌کند.
  • شنونده‌های ورودی mihomo که از ECH پشتیبانی می‌کنند (VLESS / VMess / Trojan / Hysteria2 / TUIC / AnyTLS) بستهٔ کلید ECH را در فیلد ech-key شنونده می‌پذیرند — به صفحات ورودی مربوطه مراجعه کنید. هیچ بلوک ورودی یکپارچهٔ 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.24 (a847246)

Core Tutorial اثر Argsment