TLS در mihomo — نمای کلی
برخلاف Xray و sing-box، mihomo بلوک TLS یکپارچهای ندارد. هر آداپتور پراکسی و هر شنوندهٔ ورودی مجموعهٔ خود از فیلدهای مرتبط با TLS را مستقیماً روی شیء پراکسی حمل میکند. این صفحه مجموعه فیلدهای پرتکرار را مستند میکند تا مجبور نشوید در هر صفحهٔ پروتکل دوباره آنها را کشف کنید.
مجموعه فیلدهای مشترک TLS
این فیلدها تقریباً در هر خروجی mihomo که TLS صحبت میکند ظاهر میشوند (VLESS, VMess, Trojan, Hysteria2, TUIC, AnyTLS, HTTP, SOCKS, Shadowsocks ساده از طریق پلاگینها):
| فیلد | نوع | پیشفرض | توضیحات |
|---|---|---|---|
tls | bool | false | کلید اصلی — جریان را در TLS بستهبندی میکند. برخی پروتکلها (Hysteria2, TUIC, AnyTLS) به TLS نیاز دارند و این پرچم را نادیده میگیرند. |
sni | string | (نام سرور) | Server Name Indication در TLS. بهطور پیشفرض از فیلد server گرفته میشود. |
servername | string | (sni) | نام جایگزین (آداپتورهای قدیمیتر). معادل sni است. |
alpn | []string | (هیچ) | لیست ALPN ارائهشده در حین دستدهی TLS. مقادیر معمول: [h2, http/1.1] برای VLESS/VMess/Trojan؛ [h3] برای پروتکلهای HTTP/3. |
skip-cert-verify | bool | false | غیرفعالسازی راستیآزمایی گواهی. فقط برای آزمایش استفاده کنید. |
fingerprint | string | (تنظیمنشده) | پین کردن گواهی سرور به یک اثرانگشت SHA-256 (هگز با حروف کوچک، بدون دونقطه). |
certificate | string | (تنظیمنشده) | گواهی کلاینت برای mTLS. |
private-key | string | (تنظیمنشده) | کلید خصوصی متناظر با certificate. |
client-fingerprint | string | (سراسری) | اثرانگشت client-hello مبتنی بر uTLS. در صورت تنظیمنشدن، به global-client-fingerprint سطح بالا بازمیگردد. |
مجموعهٔ متناظر در سمت شنوندهٔ ورودی کمی متفاوت است:
| فیلد | نوع | پیشفرض | توضیحات |
|---|---|---|---|
certificate | string | (الزامی) | گواهی سرور (مسیر یا PEM درونخطی). |
private-key | string | (الزامی) | کلید خصوصی سرور. |
client-auth-type | string | no-client-cert | حالت احراز هویت کلاینت در mutual-TLS. پنج مقدار: no-client-cert, request-client-cert, require-any-client-cert, verify-client-cert-if-given, require-and-verify-client-cert. |
client-auth-cert | string | (تنظیمنشده) | بستهٔ CA پذیرفتهشده بهعنوان ریشههای کلاینت وقتی client-auth-type راستیآزمایی را الزامی میکند. |
ech-key | string | (تنظیمنشده) | مواد پیکربندی ECH. به ECH مراجعه کنید. |
مقادیر client-fingerprint
پیادهسازی uTLS در mihomo این مقادیر را میپذیرد:
| مقدار | تقلید میکند |
|---|---|
chrome | Chrome 100+ |
firefox | Firefox 102+ |
safari | Safari 16+ |
ios | iOS Safari 16+ |
android | Android Chrome |
edge | Edge Chromium |
360 | 360 Secure Browser |
qq | QQ Browser |
random | بهصورت تصادفی یکی از موارد بالا را برای هر اتصال انتخاب میکند |
randomized | برای هر اتصال یک اثرانگشت تصادفی مصنوعی تولید میکند |
اگر نه client-fingerprint در سطح هر پراکسی و نه global-client-fingerprint سطح بالا تنظیم شده باشد، mihomo یک ClientHello استاندارد Go با crypto/tls میفرستد (که توسط DPI بهعنوان «مرورگر نیست» قابل تشخیص است).
زیربلوکهای حامل TLS
وقتی پروتکلی به تنظیماتی فراتر از مجموعه فیلدهای مسطح نیاز دارد، mihomo آنها را در زیربلوکهای نامگذاریشده تو در تو قرار میدهد. رایجترینها:
reality-opts— پیکربندی REALITY سمت کلاینت.ech-opts— پیکربندی Encrypted Client Hello.ws-opts.tls,grpc-opts.tls,h2-opts.tls— کلیدهای TLS لایهٔ ترابرد درون یک بلوک ترابرد. اکثر کاربران بهجای آنtls: trueدر سطح پروتکل را تنظیم میکنند و اینها را دستنخورده میگذارند.
کجا TLS را در mihomo تنظیم کنیم
سه مکان را در نظر داشته باشید:
- هر خروجی — مستقیماً روی ورودی پراکسی در
proxies:. این مکان معمول برای TLS سمت کلاینت است. - هر ورودی — روی ورودی شنونده در
listeners:. جفتcertificate/private-keyبهعلاوهٔ فیلدهای اختیاری mTLS. - بلوک
tls:سطح بالا — به TLS مراجعه کنید. فقط توسطexternal-controller-tls(نقطهٔ پایانی Clash API) استفاده میشود. این پیشفرضی برای آداپتورهای پراکسی نیست.
نکات بینهستهای
- Xray-core همه چیز را زیر
streamSettings.tlsSettings(هر اتصال) وstreamSettings.security: "tls"یکپارچه میکند. به TLS — Xray-core مراجعه کنید. - sing-box از یک بلوک تعبیهشدهٔ واحد
tls: { ... }روی هر ورودی و خروجی استفاده میکند، با REALITY / ECH / uTLS بهعنوان زیرفیلدها. به TLS — sing-box مراجعه کنید.
