Skip to content

ECH — sing-box

sing-box ECH را در هر دو سمت به‌عنوان یک زیربلوک تودرتو از بلوک tls: پیاده‌سازی می‌کند. ساختارها کلیدهای منسوخ‌شدهٔ PQ-signature را که از فاز پیش‌نویس آزمایشی TLS 1.3 باقی مانده‌اند به اشتراک می‌گذارند — هر دو در ساخت‌های فعلی بدون اثر هستند.

tls.ech ورودی

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
enabledboolfalsetrue | falseروشن کردن ECH برای این ورودی.
keybadoption.Listable[string][]<base64 ECH key>بستهٔ کلید ECH درون‌خطی. یک رشته یا فهرستی از رشته‌ها (یک بلوک به سبک PEM در هر ورودی) را می‌پذیرد.
key_pathstring(unset)<file path>مسیر یک فایل بستهٔ کلید ECH. با `key` متقابلاً انحصاری است.
pq_signature_schemes_enabledboolfalsetrue | falseمنسوخ‌شده. طرحواره‌های امضای پسا-کوانتومی توسط کتابخانهٔ استاندارد گو پشتیبانی نمی‌شوند.
dynamic_record_sizing_disabledboolfalsetrue | falseمنسوخ‌شده. تنظیم این حتی وقتی پشتیبانی می‌شد هیچ اثری نداشت.

منبع: option/tls.go:206-215 · ثابت‌شده در v1.13.11 (553cfa1)

tls.ech خروجی

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
enabledboolfalsetrue | falseروشن کردن ECH برای این خروجی.
configbadoption.Listable[string][]<base64 ECHConfigList>فهرست پیکربندی ECH پین‌شده. وقتی تنظیم نشود، sing-box به‌طور خودکار از طریق رکوردهای HTTPS DNS کشف می‌کند.
config_pathstring(unset)<file path>پیکربندی پین‌شده به شکل مسیر.
query_server_namestring(server_name)<hostname>نام میزبان استفاده‌شده برای پرس‌وجوی DNS رکورد HTTPS هنگام کشف خودکار ECH. به‌طور پیش‌فرض `tls.server_name` خروجی است.
pq_signature_schemes_enabledboolfalsetrue | falseمنسوخ‌شده.
dynamic_record_sizing_disabledboolfalsetrue | 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-opts per-proxy با همان سه فیلد رو به کاربر (enable، config، query-server-name) استفاده می‌کند. بنگرید به ECH — mihomo.

منبع: option/tls.go:206-227 · v1.13.11 (553cfa1)

Core Tutorial اثر Argsment