ECH — Xray-core
Encrypted Client Hello (ECH) نام SNI را با رمزنگاری ClientHello با کلید عمومی منتشرشدهٔ سرور از دید ناظران مسیر پنهان میسازد. Xray ECH را بهصورت چهار فیلد روی بلوک استاندارد tlsSettings ارائه میکند — بدون ساختار ECH جداگانه.
پیکربندی
ECH در streamSettings.tlsSettings قرار میگیرد:
| فیلد | سمت | نوع | پیشفرض | مجاز | توضیح |
|---|---|---|---|---|---|
echServerKeys | ورودی | string | (تنظیمنشده) | base64 ECH key bundle | مجموعه کلید ECH سرور. کنار گواهی TLS خود تولید کنید. |
echConfigList | خروجی | string | (تنظیمنشده) | base64 ECHConfigList | یک لیست پیکربندی مشخص را ثابت کنید. وقتی تنظیم نشود، کلاینت بهطور خودکار از طریق رکوردهای HTTPS DNS کشف میکند. |
echForceQuery | خروجی | string | (آبشاری) | hkdf, dns | یک مکانیسم کشف خاص را اجبار میکند. |
echSockopt | خروجی | SocketConfig | (تنظیمنشده) | socket options | گزینههای سوکت اعمالشده به درخواست DNS کشف ECH. |
مثالها
ورودی — ECH را در کنار TLS معمولی ارائه دهید:
json
{
"streamSettings": {
"security": "tls",
"tlsSettings": {
"serverName": "example.com",
"certificates": [{ "certificateFile": "/etc/ssl/cert.pem", "keyFile": "/etc/ssl/key.pem" }],
"echServerKeys": "<base64 ECHConfigList + private keys>"
}
}
}خروجی — کشف خودکار ECH از طریق HTTPS DNS:
json
{
"streamSettings": {
"security": "tls",
"tlsSettings": {
"serverName": "example.com",
"alpn": ["h2", "http/1.1"]
}
}
}ECH فرصتطلبانه است — وقتی echConfigList صریحی تنظیم نشود، Xray رکورد HTTPS DNS برای serverName را پرسوجو میکند و در صورت وجود از پیکربندی منتشرشده استفاده میکند.
خروجی — یک پیکربندی ECH خاص را ثابت کنید:
json
{
"streamSettings": {
"security": "tls",
"tlsSettings": {
"serverName": "example.com",
"echConfigList": "<base64 ECHConfigList>",
"echForceQuery": "dns"
}
}
}نکات
- ECH به TLS 1.3 نیاز دارد. اگر میخواهید در لایهٔ پروتکل اجبار کنید،
minVersion: "1.3"را تنظیم کنید. - مقدار
serverNameدر ECH (در بالاexample.com) نام عمومی است — SNI قابل مشاهده روی سیم. مقدارinnerServerName (که ECH رمزنگاری میکند) از مقصد واقعی درخواست استخراج میشود. echConfigListرا فقط زمانی ثابت کنید که هر دو سمت را کنترل میکنید. کشف خودکار قویتر است چون پیکربندی منتشرشده میتواند بدون تنظیم مجدد کلاینت چرخش کند.echForceQuery: "dns"کش HKDF در حافظه را رد میکند و یک جستوجوی DNS تازه را اجبار میکند. وقتی کلیدها بهسرعت چرخش میکنند مفید است.
نکات بینهستهای
- sing-box ساختارهای اختصاصی
InboundECHOptionsوOutboundECHOptionsرا زیرtls.echدارد. ببینید ECH — sing-box. - mihomo یک بلوک
ech-optsدر سطح هر پراکسی با سه فیلد (enable,config,query-server-name) ارائه میکند. ببینید ECH — mihomo.
منبع: infra/conf/transport_internet.go:663-666 · v1.260327.0 (d2758a0)
