Skip to content

TUIC — mihomo

mihomo در هر دو سمت از TUIC v4 (مبتنی بر توکن) و TUIC v5 (UUID+password) پشتیبانی می‌کند. دو راه برای اعلام ورودی وجود دارد: ورودی استاندارد listeners:، یا بلوک سطح بالای tuic-server.

خروجی

ورودی تحت proxies: با type: tuic. BasicOption را جاسازی می‌کند.

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
namestring(required)<string>نام یکتای پراکسی.
serverstring(required)<host>میزبان یا IP سرور بالادست.
portint(required)<port>پورت سرور بالادست.
tokenstring(unset)<string>توکن قدیمی TUIC v4. با `uuid`+`password` (v5) ناسازگار.
uuidstring(required for v5)<UUID>UUID کاربر (TUIC v5).
passwordstring(required for v5)<string>گذرواژهٔ کاربر (TUIC v5).
ipstring(unset)<host>بازنویسی IP مقصد پس از تحلیل نام. زمانی به کار می‌آید که SNI / گواهی برای نامی متفاوت از IP واقعی سرور باشد.
heartbeat-intervalint10000<milliseconds>بازهٔ ضربان قلب QUIC. **میلی‌ثانیه**، نه ثانیه.
alpn[]string[h3]h3فهرست ALPN. TUIC به ALPN HTTP/3 نیاز دارد.
reduce-rttboolfalsetrue | falseاستفاده از دست‌دهی 0-RTT در اتصال مجدد.
request-timeoutint8000<milliseconds>زمان انتظار پاسخ سرور برای فریم connect. میلی‌ثانیه.
udp-relay-modestringnativenative | quicنحوهٔ تونل‌شدن بسته‌های UDP. `native` (دیتاگرام) سریع‌تر است؛ `quic` (جریان برای هر بسته) از طریق میان‌جعبه‌هایی که دیتاگرام را مسدود می‌کنند کار می‌کند.
congestion-controllerstringcubiccubic | new_reno | bbr | bbr_meta_v1 | bbr_meta_v2کنترل‌کنندهٔ ازدحام QUIC. `bbr` پیاده‌سازی v2 mihomo است. `bbr_meta_v1`/`bbr_meta_v2` گونه‌های قدیمی را برای سازگاری متقابل نگه می‌دارند.
disable-sniboolfalsetrue | falseحذف کامل افزونهٔ SNI از TLS Client Hello.
max-udp-relay-packet-sizeint1252<bytes>حداکثر اندازهٔ بار UDP پیش از قطعه‌بندی.
fast-openboolfalsetrue | falseارسال فریم proxy-request در همان پرواز با دست‌دهی QUIC.
max-open-streamsint100<int>حداکثر جریان‌های همزمان به ازای هر اتصال QUIC.
cwndint32<int>پنجرهٔ ازدحام اولیه برحسب بسته. پیش‌فرض ۳۲ است (`transport/tuic/common/congestion.go:17-19`).
bbr-profilestring(unset)default | aggressiveپروفایل تنظیم BBR هنگامی که `congestion-controller: bbr`.
skip-cert-verifyboolfalsetrue | falseغیرفعال‌سازی راستی‌آزمایی TLS (فقط آزمایش).
fingerprintstring(unset)<SHA256 hex>تثبیت اثرانگشت گواهی TLS سرور.
certificatestring(unset)<PEM file path>گواهی کلاینت (mTLS).
private-keystring(unset)<key file path>کلید خصوصی برای `certificate`.
recv-window-connint0<bytes>پنجرهٔ دریافت اولیه به ازای هر اتصال. ۰ پیش‌فرض quic-go را حفظ می‌کند.
recv-windowint0<bytes>پنجرهٔ دریافت اولیه به ازای هر جریان. ۰ پیش‌فرض quic-go را حفظ می‌کند.
disable-mtu-discoveryboolfalsetrue | falseصرف‌نظر از کشف MTU مسیر؛ در شبکه‌هایی که پروب‌ها را دور می‌اندازند مفید است.
max-datagram-frame-sizeint1252<bytes>حداکثر اندازهٔ فریم دیتاگرام QUIC.
snistring(server)<SNI>Server Name Indication در TLS.
ech-optsECHOptions(disabled)ECHOptionsپیکربندی Encrypted Client Hello.
udp-over-streamboolfalsetrue | falseاستفاده از قاب‌بندی UDP-over-stream به جای دیتاگرام‌های QUIC.
udp-over-stream-versionint11نسخهٔ قاب‌بندی. فقط ۱ تعریف شده است.

منبع: adapter/outbound/tuic.go:34-69 · ثابت‌شده در v1.19.24 (a847246)

ورودی (تحت listeners)

ورودی تحت listeners: با type: tuic. BaseOption را جاسازی می‌کند.

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
token[]string[][<string>]فهرست توکن قدیمی TUIC v4. خالی v4 را غیرفعال می‌کند.
usersmap[string]string{}{<uuid>: <password>}جدول کاربر TUIC v5. کلیدها UUID و مقادیر گذرواژه هستند.
certificatestring(required)<PEM file path>گواهی TLS سرور.
private-keystring(required)<key file path>کلید خصوصی TLS.
client-auth-typestring(none)no-client-cert | request-client-cert | require-any-client-cert | verify-client-cert-if-given | require-and-verify-client-certحالت احراز هویت متقابل TLS کلاینت.
client-auth-certstring(unset)<PEM file path>بستهٔ CA پذیرفته‌شده به‌عنوان ریشهٔ کلاینت.
ech-keystring(unset)<ECH config>مواد Encrypted Client Hello.
congestion-controllerstringcubiccubic | new_reno | bbr | bbr_meta_v1 | bbr_meta_v2کنترل‌کنندهٔ ازدحام QUIC در سمت سرور.
max-idle-timeint0<milliseconds>زمان بیکاری اتصال QUIC. ۰ پیش‌فرض QUIC را حفظ می‌کند.
authentication-timeoutint1000<milliseconds>حداکثر انتظار برای اینکه کلاینت فریم احراز هویت ارسال کند، بر حسب میلی‌ثانیه.
alpn[]string[h3]h3فهرست ALPN ارائه‌شده در دست‌دهی TLS.
max-udp-relay-packet-sizeint1252<bytes>حداکثر اندازهٔ بار UDP پذیرفته‌شده از کلاینت‌ها.
cwndint32<int>پنجرهٔ ازدحام اولیه برحسب بسته.
bbr-profilestring(unset)default | aggressiveپروفایل تنظیم BBR.
mux-optionMuxOption(disabled)MuxOptionتنظیمات چندسوسازی سبک sing.

منبع: listener/inbound/tuic.go:12-29 · ثابت‌شده در v1.19.24 (a847246)

ورودی (سطح بالا tuic-server)

بلوک سطح بالای tuic-server جایگزینی برای اعلام ورودی TUIC تحت listeners است. به دلایل قدیمی وجود دارد؛ برای پیکربندی‌های جدید شکل شنونده را ترجیح دهید (به‌طور طبیعی با بقیهٔ مدل ورودی همگن می‌شود).

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
enableboolfalsetrue | falseکلید اصلی ورودی TUIC در سطح بالا. وقتی false باشد بقیهٔ بلوک نادیده گرفته می‌شود.
listenstring127.0.0.1:0<host:port>آدرس شنود. همان نحو سایر جاهای mihomo.
token[]string[][<string>]فهرست توکن TUIC v4.
usersmap[string]string{}{<uuid>: <password>}جدول کاربر TUIC v5.
certificatestring(required)<PEM file path>گواهی TLS سرور.
private-keystring(required)<key file path>کلید خصوصی TLS.
congestion-controllerstringcubiccubic | new_reno | bbr | bbr_meta_v1 | bbr_meta_v2کنترل‌کنندهٔ ازدحام QUIC در سمت سرور.
max-idle-timeint0<milliseconds>زمان بیکاری QUIC.
authentication-timeoutint1000<milliseconds>زمان فریم احراز هویت کلاینت.
alpn[]string[h3]h3فهرست ALPN.
max-udp-relay-packet-sizeint1252<bytes>حداکثر اندازهٔ بار UDP.
cwndint32<int>پنجرهٔ ازدحام اولیه.

منبع: config/config.go:322-335 · ثابت‌شده در v1.19.24 (a847246)

مثال‌ها

خروجی — TUIC v5:

yaml
proxies:
  - name: tuic-v5
    type: tuic
    server: example.com
    port: 443
    uuid: a3482e88-686a-4a58-8126-99c9df64b7bf
    password: <password>
    udp-relay-mode: native
    congestion-controller: bbr
    sni: example.com
    alpn: [h3]
    heartbeat-interval: 10000
    reduce-rtt: true

خروجی — TUIC v4 (قدیمی):

yaml
proxies:
  - name: tuic-v4
    type: tuic
    server: example.com
    port: 443
    token: <token>
    udp-relay-mode: native
    sni: example.com
    alpn: [h3]

ورودی تحت listeners:

yaml
listeners:
  - name: tuic-in
    type: tuic
    listen: 0.0.0.0
    port: 443
    users:
      a3482e88-686a-4a58-8126-99c9df64b7bf: <alice password>
      6f4e6c2c-8b1d-4b4f-8e2e-1f2b5c9e0a3b: <bob password>
    certificate: /etc/mihomo/server.crt
    private-key: /etc/mihomo/server.key
    congestion-controller: bbr
    alpn: [h3]

tuic-server سطح بالا (شکل قدیمی):

yaml
tuic-server:
  enable: true
  listen: 0.0.0.0:443
  users:
    a3482e88-686a-4a58-8126-99c9df64b7bf: <password>
  certificate: /etc/mihomo/server.crt
  private-key: /etc/mihomo/server.key
  congestion-controller: bbr
  alpn: [h3]

نکات

  • خروجی TUIC در mihomo زمان‌ها و بازه‌ها را برحسب میلی‌ثانیه ارائه می‌دهد، نه ثانیه — heartbeat-interval: 10000 ده ثانیه است. هم request-timeout و هم authentication-timeout ورودی از همین قرارداد پیروی می‌کنند.
  • پنج کنترل‌کنندهٔ ازدحام در transport/tuic/common/congestion.go:20-53 سیم‌کشی شده‌اند. bbr پیاده‌سازی مدرن v2 است؛ bbr_meta_v1/ bbr_meta_v2 صرفاً برای سازگاری متقابل با کلاینت‌های قدیمی وجود دارند.
  • cwnd: 0 در زمان اجرا معادل 32 بسته است (transport/tuic/common/congestion.go:17-19).
  • بلوک سطح بالای tuic-server فقط می‌تواند یک ورودی TUIC اعلام کند. برای چند ورودی TUIC روی پورت‌های مختلف، از شکل listeners: استفاده کنید.

نکات بین‌هسته‌ای

  • Xray-core از TUIC پشتیبانی نمی‌کند. به TUIC — Xray-core مراجعه کنید.
  • sing-box فقط از TUIC v5 پشتیبانی می‌کند (بدون شکل توکن)، از نام‌های فیلد snake_case استفاده می‌کند (congestion_control، udp_relay_mode)، رشته‌های duration سبک Go ("3s") را برای زمان‌ها می‌پذیرد و مجموعهٔ کوچک‌تری از انتخاب‌های کنترل ازدحام (cubic، new_reno، bbr) دارد. به TUIC — sing-box مراجعه کنید.

منبع: adapter/outbound/tuic.go:34-69 · v1.19.24 (a847246)

Core Tutorial اثر Argsment