Skip to content

ترابرد — sing-box ​

گزینه‌های ترابرد sing-box در بلوک transport تعبیه‌شده روی هر ورودی و خروجی توانمند به TLS قرار دارند. این بلوک چندریختی است: فیلد type یکی از پنج نوع ترابرد را انتخاب می‌کند، و زیرمجموعهٔ متناظر از فیلدها اعمال می‌شود.

json
"transport": { "type": "<ws|http|grpc|quic|httpupgrade>", ...variant fields }

type: "ws" ​

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
pathstring//<path>مسیر WebSocket.
headersbadoption.HTTPHeader{}{<header>: <value or list>}هدرهای درخواست ارتقاء اضافی.
max_early_datauint320<bytes>حداکثر بایت‌های داده‌های اولیهٔ 0-RTT بافرشده پیش از تکمیل دست‌دهی WS. مقدار ۰ غیرفعال می‌کند.
early_data_header_namestringSec-WebSocket-Protocol<header name>هدر HTTP حامل داده‌های اولیهٔ کدشده با base64 وقتی سرور آن را زیر نامی غیراستاندارد انتظار دارد.

منبع: option/v2ray_transport.go:94-99 · ثابت‌شده در v1.14.2 (af6e64c)

type: "http" (HTTP/2) ​

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
hostbadoption.Listable[string][][<hostname>]فهرست مقادیر هدر Host. سرور از فهرست برای تطبیق SNI استفاده می‌کند؛ کلاینت در هر درخواست یکی را به‌طور تصادفی انتخاب می‌کند.
pathstring//<path>مسیر HTTP.
methodstringPUT<HTTP method>روش HTTP. ترابرد استاندارد از PUT استفاده می‌کند تا کش‌ها را دلسرد کند.
headersbadoption.HTTPHeader{}{<header>: <value or list>}هدرهای درخواست اضافی.
idle_timeoutbadoption.Duration0<duration>سرور: کلاینت‌های HTTP/2 که این مدت بیکار بمانند بسته می‌شوند (GOAWAY). کلاینت: پس از این مدت بدون دریافت هیچ فریمی، یک PING برای بررسی سلامت فرستاده می‌شود. 0 هر دو را غیرفعال می‌کند.
ping_timeoutbadoption.Duration15s<duration>کلاینت HTTP/2: مدت انتظار برای پاسخ PING پیش از بستن اتصال. 0 یعنی پیش‌فرض 15s؛ PING فقط وقتی idle_timeout تنظیم شده باشد فرستاده می‌شود.

منبع: option/v2ray_transport.go:85-92 · ثابت‌شده در v1.14.2 (af6e64c)

وقتی بلوک TLS پیرامون فعال باشد، ترابرد HTTP از HTTP/2 استفاده می‌کند؛ TLS اجباری نیست و بدون آن ترابرد به HTTP/1.1 ساده بازمی‌گردد. حالت HTTP/3 وجود ندارد.

type: "grpc" ​

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
service_namestring(required)<service path>نام سرویس gRPC.
idle_timeoutbadoption.Duration0<duration>مهلت بیکاری. مقدار ۰ غیرفعال می‌کند.
ping_timeoutbadoption.Duration0<duration>مهلت پینگ keepalive. مقدار ۰ PINGها را غیرفعال می‌کند.
permit_without_streamboolfalsetrue | falseاجازهٔ PINGها بدون جریان فعال.

منبع: option/v2ray_transport.go:103-109 · ثابت‌شده در v1.14.2 (af6e64c)

type: "quic" ​

ساختار ترابرد QUIC هیچ فیلد رو به کاربر ندارد — فقط { "type": "quic" } است. تمام تنظیم QUIC در لایهٔ پروتکل اتفاق می‌افتد (Hysteria2 / TUIC پشته‌های QUIC بومی خود را دارند).

type: "httpupgrade" ​

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
hoststring(server address)<hostname>هدر HTTP Host.
pathstring//<path>مسیر HTTP.
headersbadoption.HTTPHeader{}{<header>: <value or list>}هدرهای درخواست اضافی.

منبع: option/v2ray_transport.go:111-115 · ثابت‌شده در v1.14.2 (af6e64c)

مثال‌ها ​

WebSocket + TLS:

json
{
  "outbounds": [{
    "type": "vless",
    "server": "example.com",
    "server_port": 443,
    "uuid": "...",
    "tls": {
      "enabled": true,
      "server_name": "example.com"
    },
    "transport": {
      "type": "ws",
      "path": "/vl",
      "headers": { "Host": "example.com" }
    }
  }]
}

gRPC + REALITY:

json
{
  "outbounds": [{
    "type": "vless",
    "server": "example.com",
    "server_port": 443,
    "uuid": "...",
    "tls": {
      "enabled": true,
      "server_name": "www.cloudflare.com",
      "utls": { "enabled": true, "fingerprint": "chrome" },
      "reality": { "enabled": true, "public_key": "...", "short_id": "..." }
    },
    "transport": {
      "type": "grpc",
      "service_name": "GunService",
      "idle_timeout": "60s",
      "ping_timeout": "20s",
      "permit_without_stream": true
    }
  }]
}

HTTP/2 (ترابرد HTTP روی TLS):

json
{
  "outbounds": [{
    "type": "vless",
    "server": "example.com",
    "server_port": 443,
    "uuid": "...",
    "tls": {
      "enabled": true,
      "server_name": "example.com",
      "alpn": ["h2"]
    },
    "transport": {
      "type": "http",
      "host": ["example.com"],
      "path": "/h2",
      "method": "PUT"
    }
  }]
}

نکات ​

  • sing-box ترابرد جداگانهٔ SplitHTTP / XHTTP عرضه نمی‌کند. نزدیک‌ترین معادل type: "http" است (HTTP/2 روی TLS)؛ ترابرد HTTP حالت HTTP/3 ندارد.
  • پینگ‌های keepalive فقط با idle_timeout کنترل می‌شوند: 0 (پیش‌فرض) هیچ پینگی نمی‌فرستد و ping_timeout: 0 فقط به معنای پیش‌فرض 15s است. برای اتصالات طولانی‌مدت پشت NAT، idle_timeout را روی چیزی مانند "30s" تنظیم کنید تا اتصال TCP زیرین فعالیت دوره‌ای ببیند.
  • فیلد host در type: "http" یک فهرست است. سرور از آن برای تطبیق SNI استفاده می‌کند (هر مقدار تطبیق می‌یابد)؛ کلاینت در هر درخواست یکی را به‌طور تصادفی انتخاب می‌کند، که وقتی متعادل‌کنندهٔ بار بالادست بر اساس هدر Host مسیریابی می‌کند مفید است.
  • early_data_header_name در WebSocket به‌طور پیش‌فرض روی Sec-WebSocket-Protocol است — همان هدری که V2Ray استفاده می‌کند. فقط زمانی بازنویسی کنید که پراکسی بالادست آن هدر را حذف می‌کند.

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

  • Xray-core از streamSettings.network + یک بلوک per-transport *Settings استفاده می‌کند، با انواع TCP، mKCP و SplitHTTP/XHTTP که sing-box ندارد. بنگرید به ترابرد — Xray-core.
  • mihomo تنظیمات ترابرد را در میان بلوک‌های per-protocol *-opts در هر ورودی پراکسی توزیع می‌کند. بنگرید به ترابرد — mihomo.

منبع: option/v2ray_transport.go:85-115 · v1.14.2 (af6e64c)

Core Tutorial اثر Argsment