ECH — sing-box
sing-box ECH را در هر دو سمت بهعنوان یک زیربلوک تودرتو از بلوک tls: پیادهسازی میکند. ساختارها کلیدهای منسوخشدهٔ PQ-signature را که از فاز پیشنویس آزمایشی TLS 1.3 باقی ماندهاند به اشتراک میگذارند — هر دو در ساختهای فعلی بدون اثر هستند.
tls.ech ورودی
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
enabled | bool | false | true | false | روشن کردن ECH برای این ورودی. |
key | badoption.Listable[string] | [] | <base64 ECH key> | بستهٔ کلید ECH درونخطی. یک رشته یا فهرستی از رشتهها (یک بلوک به سبک PEM در هر ورودی) را میپذیرد. |
key_path | string | (unset) | <file path> | مسیر یک فایل بستهٔ کلید ECH. با `key` متقابلاً انحصاری است. |
pq_signature_schemes_enabled | bool | false | true | false | منسوخشده. طرحوارههای امضای پسا-کوانتومی توسط کتابخانهٔ استاندارد گو پشتیبانی نمیشوند. |
dynamic_record_sizing_disabled | bool | false | true | false | منسوخشده. تنظیم این حتی وقتی پشتیبانی میشد هیچ اثری نداشت. |
منبع: option/tls.go:206-215 · ثابتشده در v1.13.11 (553cfa1)
tls.ech خروجی
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
enabled | bool | false | true | false | روشن کردن ECH برای این خروجی. |
config | badoption.Listable[string] | [] | <base64 ECHConfigList> | فهرست پیکربندی ECH پینشده. وقتی تنظیم نشود، sing-box بهطور خودکار از طریق رکوردهای HTTPS DNS کشف میکند. |
config_path | string | (unset) | <file path> | پیکربندی پینشده به شکل مسیر. |
query_server_name | string | (server_name) | <hostname> | نام میزبان استفادهشده برای پرسوجوی DNS رکورد HTTPS هنگام کشف خودکار ECH. بهطور پیشفرض `tls.server_name` خروجی است. |
pq_signature_schemes_enabled | bool | false | true | false | منسوخشده. |
dynamic_record_sizing_disabled | bool | false | true | false | منسوخشده. |
منبع: option/tls.go:217-227 · ثابتشده در v1.13.11 (553cfa1)
مثالها
ورودی — سرو ECH با استفاده از یک فایل کلید:
json
{
"inbounds": [{
"type": "vless",
"listen_port": 443,
"users": [{ "uuid": "..." }],
"tls": {
"enabled": true,
"server_name": "example.com",
"certificate_path": "/etc/ssl/cert.pem",
"key_path": "/etc/ssl/key.pem",
"ech": {
"enabled": true,
"key_path": "/etc/sing-box/ech.key"
}
}
}]
}خروجی — ECH فرصتطلبانه (کشف خودکار):
json
{
"outbounds": [{
"type": "vless",
"server": "example.com",
"server_port": 443,
"uuid": "...",
"tls": {
"enabled": true,
"server_name": "example.com",
"ech": { "enabled": true }
}
}]
}خروجی — پیکربندی ECH پینشده:
json
{
"outbounds": [{
"type": "vless",
"server": "example.com",
"server_port": 443,
"uuid": "...",
"tls": {
"enabled": true,
"server_name": "example.com",
"ech": {
"enabled": true,
"config": ["<base64 ECHConfigList>"],
"query_server_name": "cover.example.com"
}
}
}]
}نکات
- ECH به TLS 1.3 نیاز دارد. اگر میخواهید آن را اعمال کنید
tls.min_version: "1.3"را تنظیم کنید؛ روی1.2افزونهٔ ECH خاموش انداخته میشود. - فیلد
keyورودی یک فهرست را میپذیرد چون اپراتورها کلیدهای ECH را بهطور مکرر میچرخانند — فهرستکردن کلید جدید در کنار قدیمی به کلاینتهای دارای حالت HKDF کششده اجازه میدهد آخرین درخواستهای خود را پیش از تعویض به اتمام برسانند. - کشف خودکار (خروجی
enabled: trueباconfigخالی) رکورد HTTPS DNS را برایquery_server_name(یاtls.server_nameدر صورت خالی بودن بازنویسی) پرسوجو میکند. زنجیرهٔ حلکننده از پیکربندی DNS استاندارد sing-box پیروی میکند. - دو فیلد منسوخشده (
pq_signature_schemes_enabled،dynamic_record_sizing_disabled) برای سازگاری پارسر نگه داشته شدهاند اما هیچ اثر زمان اجرایی ندارند — میتوانید آنها را از پیکربندیهای موجود حذف کنید.
نکات بینهستهای
- Xray-core ECH را بهعنوان چهار فیلد مستقیماً روی
tlsSettingsدر دسترس قرار میدهد و نه بهعنوان یک زیربلوک. بنگرید به ECH — Xray-core. - mihomo از یک بلوک
ech-optsper-proxy با همان سه فیلد رو به کاربر (enable،config،query-server-name) استفاده میکند. بنگرید به ECH — mihomo.
منبع: option/tls.go:206-227 · v1.13.11 (553cfa1)
