TLS — sing-box
هر ورودی و خروجی sing-box یک بلوک tls: { ... } را از طریق InboundTLSOptionsContainer / OutboundTLSOptionsContainer تعبیه میکند. همان بلوک، زیربلوکهای REALITY، ECH و uTLS را بهعنوان گزینههای تودرتو حمل میکند — اینها ویژگیهای جداگانهٔ سطح بالا نیستند.
tls ورودی
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
enabled | bool | false | true | false | کلید اصلی. وقتی false باشد، بقیهٔ بلوک نادیده گرفته میشود. |
server_name | string | (inferred from SNI) | <hostname> | نام سرور مورد انتظار برای تأمین ACME. در صورت تنظیم `acme` لازم است. |
insecure | bool | false | true | false | رد کردن تأیید TLS. فقط آزمایش. |
alpn | badoption.Listable[string] | [] | <ALPN string> | فهرست ALPN ارائهشده به کلاینتها. |
min_version | string | 1.2 | 1.0 | 1.1 | 1.2 | 1.3 | حداقل نسخهٔ TLS قابلقبول. |
max_version | string | 1.3 | 1.0 | 1.1 | 1.2 | 1.3 | حداکثر نسخهٔ TLS قابلقبول. |
cipher_suites | badoption.Listable[string] | (library default) | <cipher> | بازنویسی فهرست مجموعهٔ رمز (فقط TLS 1.2). |
curve_preferences | badoption.Listable[CurvePreference] | (library default) | P256 | P384 | P521 | X25519 | X25519MLKEM768 | فهرست اولویت منحنی تبادل کلید. |
certificate | badoption.Listable[string] | [] | <PEM block> | PEM گواهی سرور درونخطی. شکل فهرستی از زنجیرهٔ کامل پشتیبانی میکند. |
certificate_path | string | (unset) | <PEM file path> | مسیر گواهی سرور. |
client_authentication | ClientAuthType | no | no | request | require-any | verify-if-given | require-and-verify | خطمشی احراز هویت کلاینت TLS متقابل. به مقادیر ClientAuthType از crypto/tls گو نگاشت میشود. |
client_certificate | badoption.Listable[string] | [] | <PEM block> | ریشههای گواهی کلاینت مورد اعتماد (mTLS). |
client_certificate_path | badoption.Listable[string] | [] | <PEM file path> | ریشههای کلاینت مورد اعتماد به شکل مسیر. |
client_certificate_public_key_sha256 | badoption.Listable[[]byte] | [] | <SHA-256 bytes> | پینکردن گواهی کلاینت بر اساس SHA-256 کلید عمومی. هنگام صدور گواهیهای کلاینت یکبارمصرف مفید است. |
key | badoption.Listable[string] | [] | <PEM block> | کلید خصوصی سرور درونخطی. |
key_path | string | (unset) | <file path> | مسیر کلید خصوصی سرور. |
kernel_tx | bool | false | true | false | KTLS لینوکس — برونسپاری رمزگذاری TLS به هسته برای ترافیک خروجی. به پشتیبانی هسته از TLS و ماژولهای رمزنگاری صحیح نیاز دارد. |
kernel_rx | bool | false | true | false | KTLS لینوکس برای ترافیک ورودی. |
acme | *InboundACMEOptions | (unset) | InboundACMEOptions | تأمین خودکار گواهی Let's Encrypt. با `certificate`/`key` صریح متقابلاً انحصاری است. |
ech | *InboundECHOptions | (unset) | InboundECHOptions | پیکربندی Encrypted Client Hello. |
reality | *InboundRealityOptions | (unset) | InboundRealityOptions | پیکربندی سرور REALITY. با TLS عادی متقابلاً انحصاری است — REALITY دستدهی TLS را جایگزین میکند. |
منبع: option/tls.go:12-34 · ثابتشده در v1.13.11 (553cfa1)
tls خروجی
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
enabled | bool | false | true | false | کلید اصلی. |
disable_sni | bool | false | true | false | حذف کامل افزونهٔ SNI از ClientHello. |
server_name | string | (server address) | <hostname> | SNI ارسالشده به سرور، و نامی که در برابر گواهی برگ تأیید میشود. |
insecure | bool | false | true | false | رد کردن تأیید گواهی سرور. |
alpn | badoption.Listable[string] | [] | <ALPN string> | فهرست ALPN ارائهشده به سرور. |
min_version | string | 1.2 | 1.0 | 1.1 | 1.2 | 1.3 | حداقل نسخهٔ TLS قابلقبول. |
max_version | string | 1.3 | 1.0 | 1.1 | 1.2 | 1.3 | حداکثر نسخهٔ TLS قابلقبول. |
cipher_suites | badoption.Listable[string] | (library default) | <cipher> | بازنویسی فهرست مجموعهٔ رمز. |
curve_preferences | badoption.Listable[CurvePreference] | (library default) | <see inbound> | اولویت منحنی تبادل کلید. |
certificate | badoption.Listable[string] | [] | <PEM block> | گواهیهای CA مورد اعتماد افزودهشده به انبار ریشهٔ سیستم. برای سرورهای خودامضا با `insecure: false` استفاده شود. |
certificate_path | string | (unset) | <file path> | CAهای مورد اعتماد به شکل مسیر. |
certificate_public_key_sha256 | badoption.Listable[[]byte] | [] | <SHA-256 bytes> | پینکردن گواهی سرور بر اساس SHA-256 کلید عمومی. |
client_certificate | badoption.Listable[string] | [] | <PEM block> | گواهی کلاینت (mTLS). |
client_certificate_path | string | (unset) | <file path> | گواهی کلاینت به شکل مسیر. |
client_key | badoption.Listable[string] | [] | <PEM block> | کلید خصوصی کلاینت. |
client_key_path | string | (unset) | <file path> | کلید خصوصی کلاینت به شکل مسیر. |
fragment | bool | false | true | false | تکهتکهسازی دستدهی در سطح TCP. ClientHello را در میان بستهها میشکند تا از DPI مبتنی بر SNI فرار کند. |
fragment_fallback_delay | badoption.Duration | 500ms | <duration> | اگر دستدهی تکهتکهشده تا این مهلت کامل نشود، بدون تکهتکهسازی دوباره تلاش میکند. |
record_fragment | bool | false | true | false | تکهتکهسازی لایهٔ رکورد TLS (تهاجمیتر از `fragment` — درون جریان رکورد TLS تقسیم میکند، نه فقط بستههای TCP). |
kernel_tx | bool | false | true | false | KTLS لینوکس برای ترافیک خروجی. |
kernel_rx | bool | false | true | false | KTLS لینوکس برای ترافیک ورودی. |
ech | *OutboundECHOptions | (unset) | OutboundECHOptions | پیکربندی ECH. وقتی تنظیم نشود، ECH استفاده نمیشود (مگر اینکه از طریق رکوردهای HTTPS بهطور خودکار کشف شود). |
utls | *OutboundUTLSOptions | (unset) | OutboundUTLSOptions | تقلید ClientHello کلاینت uTLS. |
reality | *OutboundRealityOptions | (unset) | OutboundRealityOptions | پیکربندی کلاینت REALITY. با TLS عادی متقابلاً انحصاری است. |
منبع: option/tls.go:97-122 · ثابتشده در v1.13.11 (553cfa1)
utls
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
enabled | bool | false | true | false | روشن کردن uTLS. |
fingerprint | string | chrome | chrome | firefox | safari | ios | android | edge | 360 | qq | random | randomized | اثرانگشت مرورگر برای تقلید. کل ClientHello (مجموعهٔ رمز، افزونهها، امضاها) را راهبری میکند. |
منبع: option/tls.go:229-232 · ثابتشده در v1.13.11 (553cfa1)
مثالها
ورودی با تأمین ACME:
json
{
"inbounds": [{
"type": "vless",
"listen_port": 443,
"users": [{ "uuid": "..." }],
"tls": {
"enabled": true,
"server_name": "example.com",
"alpn": ["h2", "http/1.1"],
"acme": {
"domain": ["example.com"],
"email": "admin@example.com"
}
}
}]
}خروجی با اثرانگشت کروم uTLS و پنهانسازی SNI با TCP-fragment:
json
{
"outbounds": [{
"type": "vless",
"server": "example.com",
"server_port": 443,
"uuid": "...",
"tls": {
"enabled": true,
"server_name": "example.com",
"utls": { "enabled": true, "fingerprint": "chrome" },
"fragment": true,
"fragment_fallback_delay": "500ms"
}
}]
}TLS متقابل — سرور به گواهیهای کلاینت نیاز دارد:
json
{
"inbounds": [{
"type": "http",
"listen_port": 8443,
"tls": {
"enabled": true,
"certificate_path": "/etc/ssl/cert.pem",
"key_path": "/etc/ssl/key.pem",
"client_authentication": "require-and-verify",
"client_certificate_path": ["/etc/ssl/clients-ca.pem"]
}
}]
}نکات
- پنج مقدار
client_authenticationبهطور مستقیم بهcrypto/tls.ClientAuthTypeگو نگاشت میشوند:no— بدون گواهی کلاینت (پیشفرض).request— درخواست کن، بدون آن بپذیر.require-any— درخواست کن اما اعتبارسنجی نکن.verify-if-given— در صورت ارائه، اعتبارسنجی کن.require-and-verify— mTLS سختگیرانه.
fragmentوrecord_fragmentدو لایهٔ متفاوت هستند:fragmentبستههای TCP حامل دستدهی TLS را میشکند.record_fragmentخود رکوردهای TLS را میشکند (رکوردهایHandshakeدر چندین قطعهٔ کوچکتر ارسال میشوند). اول ازfragmentاستفاده کنید؛ فقط در صورتیrecord_fragmentرا فعال کنید که DPI مبتنی بر SNI همچنان اتصال را طبقهبندی میکند.
kernel_tx/kernel_rxلینوکس KTLS را برای AES-GCM و CHACHA20-POLY1305 فعال میکنند. هسته باید ماژولtlsرا بارگذاری کرده و ماژولهای رمزنگاری مناسب را ثبت کرده باشد.acmeباcertificate/keyصریح متقابلاً انحصاری است. با ACME، sing-box از کلاینت autocert تعبیهشده استفاده میکند — برای گزینههای ارائهدهندهٔ ACME به اسناد بالادست بنگرید.- REALITY (زیربلوک
reality) دستدهی TLS را بهطور کامل جایگزین میکند — بنگرید به REALITY — sing-box. - ECH (زیربلوک
ech) به همان دستدهی متصل میشود — بنگرید به ECH — sing-box.
نکات بینهستهای
- Xray-core از
streamSettings.tlsSettingsبهجای یک بلوکtlsتعبیهشده استفاده میکند. نامهای فیلد camelCase هستند (serverName،cipherSuites). اثرانگشت uTLS یک فیلد سطح بالا است، نه یک زیربلوک. بنگرید به TLS — Xray-core. - mihomo هیچ بلوک TLS تجمیعشدهای ندارد — هر آداپتور پراکسی فیلدهای TLS را بهصورت درونخطی حمل میکند (
tls،sni،alpn،skip-cert-verify، …). بنگرید به TLS — mihomo.
منبع: option/tls.go:12-238 · v1.13.11 (553cfa1)
