Skip to content

ترابرد — mihomo

mihomo گزینه‌های ترابرد را در بلوک‌های *-opts روی هر ورودی پراکسی توزیع می‌کند. هیچ ساختار یکپارچهٔ ترابرد وجود ندارد: انتخاب ترابرد از طریق فیلد network پراکسی است و بلوک گزینه‌های متناظر خوانده می‌شود.

انتخابگر network

هر پراکسی mihomo که قادر به TLS است دارای فیلد network: است. مقادیر:

مقدارمعنا
tcp (پیش‌فرض)TCP ساده؛ همهٔ بلوک‌های *-opts نادیده گرفته می‌شوند.
wsWebSocket — ws-opts را می‌خواند.
httpاستتار HTTP ساده (بدون upgrade) — http-opts را می‌خواند.
h2HTTP/2 — h2-opts را می‌خواند.
grpcgRPC روی HTTP/2 — grpc-opts را می‌خواند.
xhttpframing مبتنی بر XTLS HTTP (سازگار با Xray) — xhttp-opts را می‌خواند.

چند پروتکل گزینه‌های اضافی دارند (مثلاً Trojan فقط از ws و grpc پشتیبانی می‌کند؛ VMess http و h2 را اضافه می‌کند). ماتریس در هر پروتکل مستند شده است.

ws-opts

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
pathstring//<path>مسیر WebSocket. پارامتر کوئری `?ed=N` برای دادهٔ زودهنگام (0-RTT) پشتیبانی می‌شود و با قرارداد Xray مطابقت دارد.
headersmap[string]string{}{<header>: <value>}هدرهای HTTP اضافی روی درخواست upgrade.
max-early-dataint0<bytes>حداکثر بایت‌های دادهٔ زودهنگام (0-RTT) که قبل از تکمیل دست‌دهی WS بافر می‌شوند.
early-data-header-namestring(unset)<header name>هدر مورد استفاده برای حمل دادهٔ زودهنگام کدگذاری‌شده با base64 وقتی سرور آن را زیر یک نام سفارشی انتظار دارد.
v2ray-http-upgradeboolfalsetrue | falseاز ترابرد HTTP-upgrade سبک V2Ray به‌جای WebSocket واقعی استفاده می‌کند — سربار framing پس از دست‌دهی را صرفه‌جویی می‌کند.
v2ray-http-upgrade-fast-openboolfalsetrue | falseبار کلاینت را روی خود درخواست HTTP-upgrade سوار می‌کند تا یک RTT صرفه‌جویی شود.

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

http-opts — استتار HTTP

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
methodstringGET<HTTP method>متد HTTP مورد استفاده توسط ترابرد استتار.
path[]string[/][/<path>]لیستی از مسیرها برای چرخش بین آن‌ها. کلاینت برای هر درخواست یکی را انتخاب می‌کند.
headersmap[string][]string{}{<header>: [<value>]}نگاشت نام هدر به لیستی از مقادیر. کلاینت برای هر درخواست یک مقدار را انتخاب می‌کند.

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

h2-opts — HTTP/2

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
host[]string[][<hostname>]لیست مقادیر هدر Host. کلاینت برای هر درخواست به‌صورت تصادفی یکی را انتخاب می‌کند.
pathstring//<path>مسیر HTTP.

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

grpc-opts

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
grpc-service-namestring(required)<service name>مسیر نام سرویس gRPC.
grpc-user-agentstring(unset)<UA string>بازنویسی User-Agent کلاینت gRPC.
ping-intervalint0<seconds>بازهٔ فریم PING در HTTP/2. ۰ غیرفعال می‌کند.
max-connectionsint0<int>حداکثر کانال‌های هم‌زمان gRPC (پخش‌شدگی mux).
min-streamsint0<int>حداقل جریان‌ها در هر کانال قبل از تخصیص کانال جدید.
max-streamsint0<int>حداکثر جریان‌ها در هر کانال.

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

xhttp-opts

بلوک XHTTP دارای ۲۳ فیلد متناظر با SplitHTTP در Xray است. پرکاربردترین آن‌ها path, host, mode به‌علاوهٔ فیلدهای x-padding-* و فیلدهای مرتبط با نشست برای شکل‌دهی ترافیک است. تنظیمات استفادهٔ مجدد در زیربلوک تو در توی reuse-settings و پیکربندی نامتقارن دانلود در download-settings قرار دارد. برای ساختار کامل به صفحهٔ VLESS — mihomo مراجعه کنید (بین VLESS و دیگر پراکسی‌های دارای XHTTP مشترک است).

مثال‌ها

WebSocket — شکل معمول VMess:

yaml
proxies:
  - name: vmess-ws
    type: vmess
    server: example.com
    port: 443
    uuid: <UUID>
    cipher: auto
    network: ws
    tls: true
    servername: example.com
    ws-opts:
      path: /vm
      headers:
        Host: example.com
      max-early-data: 2048
      early-data-header-name: Sec-WebSocket-Protocol

gRPC + REALITY (VLESS):

yaml
proxies:
  - name: vless-grpc-reality
    type: vless
    server: example.com
    port: 443
    uuid: <UUID>
    flow: xtls-rprx-vision
    tls: true
    servername: www.cloudflare.com
    client-fingerprint: chrome
    network: grpc
    reality-opts:
      public-key: <base64>
      short-id: <hex>
    grpc-opts:
      grpc-service-name: GunService

V2Ray HTTP-upgrade (جایگزین WS، با مصرف CPU کمتر):

yaml
proxies:
  - name: vmess-httpupgrade
    type: vmess
    server: example.com
    port: 443
    uuid: <UUID>
    cipher: auto
    network: ws
    tls: true
    servername: example.com
    ws-opts:
      path: /up
      v2ray-http-upgrade: true
      v2ray-http-upgrade-fast-open: true

نکات

  • network: ws در mihomo هم WebSocket استاندارد و هم ترابرد HTTP-upgrade به سبک V2Ray را پوشش می‌دهد (از طریق کلید v2ray-http-upgrade در ws-opts). مقدار جداگانه‌ای به نام network: httpupgrade وجود ندارد.
  • network: http همان استتار HTTP میراثی V2Ray است (HTTP/1.1 ساده با متدهای جعلی). با network: h2 (HTTP/2 واقعی) یا network: xhttp (framing مدرن XTLS در Xray) اشتباه نگیرید.
  • http-opts.path و http-opts.headers برای هر درخواست تصادفی‌سازی می‌شوند — mihomo برای هر اتصال جدید یک مقدار از هر لیست انتخاب می‌کند.
  • ws-opts.v2ray-http-upgrade-fast-open با ارسال بار کلاینت در کنار درخواست upgrade یک RTT صرفه‌جویی می‌کند. سرورهایی که قبل از پاسخ، کل upgrade را بافر می‌کنند (برخی load balancerها) آن را رد می‌کنند؛ قبل از استقرار هر دو حالت را آزمایش کنید.
  • xhttp-opts مسیر سازگار با Xray برای کلاینت‌هایی است که باید با سرورهای network: splithttp در Xray صحبت کنند. نام فیلدها دقیقاً با SplitHTTP در Xray مطابقت دارد (با kebab-case).

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

  • Xray-core از streamSettings.network به‌علاوهٔ یک بلوک *Settings در هر ترابرد استفاده می‌کند. گونه‌های TCP-with-header-obfs, mKCP و SplitHTTP دارد که mihomo تحت آن نام‌ها آن‌ها را آشکار نمی‌کند. به Transport — Xray-core مراجعه کنید.
  • sing-box از بلوک چندریختی transport: { type, ... } تعبیه‌شده روی هر پراکسی استفاده می‌کند. به Transport — sing-box مراجعه کنید.

منبع: adapter/outbound/vmess.go:74-101 · v1.19.24 (a847246)

Core Tutorial اثر Argsment