Skip to content

TLS در mihomo — نمای کلی

برخلاف Xray و sing-box، mihomo بلوک TLS یکپارچه‌ای ندارد. هر آداپتور پراکسی و هر شنوندهٔ ورودی مجموعهٔ خود از فیلدهای مرتبط با TLS را مستقیماً روی شیء پراکسی حمل می‌کند. این صفحه مجموعه فیلدهای پرتکرار را مستند می‌کند تا مجبور نشوید در هر صفحهٔ پروتکل دوباره آن‌ها را کشف کنید.

مجموعه فیلدهای مشترک TLS

این فیلدها تقریباً در هر خروجی mihomo که TLS صحبت می‌کند ظاهر می‌شوند (VLESS, VMess, Trojan, Hysteria2, TUIC, AnyTLS, HTTP, SOCKS, Shadowsocks ساده از طریق پلاگین‌ها):

فیلدنوعپیش‌فرضتوضیحات
tlsboolfalseکلید اصلی — جریان را در TLS بسته‌بندی می‌کند. برخی پروتکل‌ها (Hysteria2, TUIC, AnyTLS) به TLS نیاز دارند و این پرچم را نادیده می‌گیرند.
snistring(نام سرور)Server Name Indication در TLS. به‌طور پیش‌فرض از فیلد server گرفته می‌شود.
servernamestring(sni)نام جایگزین (آداپتورهای قدیمی‌تر). معادل sni است.
alpn[]string(هیچ)لیست ALPN ارائه‌شده در حین دست‌دهی TLS. مقادیر معمول: [h2, http/1.1] برای VLESS/VMess/Trojan؛ [h3] برای پروتکل‌های HTTP/3.
skip-cert-verifyboolfalseغیرفعال‌سازی راستی‌آزمایی گواهی. فقط برای آزمایش استفاده کنید.
fingerprintstring(تنظیم‌نشده)پین کردن گواهی سرور به یک اثرانگشت SHA-256 (هگز با حروف کوچک، بدون دونقطه).
certificatestring(تنظیم‌نشده)گواهی کلاینت برای mTLS.
private-keystring(تنظیم‌نشده)کلید خصوصی متناظر با certificate.
client-fingerprintstring(سراسری)اثرانگشت client-hello مبتنی بر uTLS. در صورت تنظیم‌نشدن، به global-client-fingerprint سطح بالا بازمی‌گردد.

مجموعهٔ متناظر در سمت شنوندهٔ ورودی کمی متفاوت است:

فیلدنوعپیش‌فرضتوضیحات
certificatestring(الزامی)گواهی سرور (مسیر یا PEM درون‌خطی).
private-keystring(الزامی)کلید خصوصی سرور.
client-auth-typestringno-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-certstring(تنظیم‌نشده)بستهٔ CA پذیرفته‌شده به‌عنوان ریشه‌های کلاینت وقتی client-auth-type راستی‌آزمایی را الزامی می‌کند.
ech-keystring(تنظیم‌نشده)مواد پیکربندی ECH. به ECH مراجعه کنید.

مقادیر client-fingerprint

پیاده‌سازی uTLS در mihomo این مقادیر را می‌پذیرد:

مقدارتقلید می‌کند
chromeChrome 100+
firefoxFirefox 102+
safariSafari 16+
iosiOS Safari 16+
androidAndroid Chrome
edgeEdge Chromium
360360 Secure Browser
qqQQ 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 تنظیم کنیم

سه مکان را در نظر داشته باشید:

  1. هر خروجی — مستقیماً روی ورودی پراکسی در proxies:. این مکان معمول برای TLS سمت کلاینت است.
  2. هر ورودی — روی ورودی شنونده در listeners:. جفت certificate / private-key به‌علاوهٔ فیلدهای اختیاری mTLS.
  3. بلوک 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 مراجعه کنید.

Core Tutorial اثر Argsment