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:79-84 · ثابت‌شده در v1.13.11 (553cfa1)

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 زیرین پس از این میزان سکوت. مقدار ۰ غیرفعال می‌کند.
ping_timeoutbadoption.Duration0<duration>مهلت پاسخ کاوشگر PING HTTP/2. مقدار ۰ PINGها را غیرفعال می‌کند.

منبع: option/v2ray_transport.go:70-77 · ثابت‌شده در v1.13.11 (553cfa1)

ترابرد HTTP به‌طور پیش‌فرض روی HTTP/2 اجرا می‌شود. با tls.alpn: ["h3"] روی بلوک TLS پیرامون، ترابرد به‌جای آن از 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:88-94 · ثابت‌شده در v1.13.11 (553cfa1)

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:96-100 · ثابت‌شده در v1.13.11 (553cfa1)

مثال‌ها

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/3 (ترابرد HTTP روی h3):

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

نکات

  • sing-box ترابرد جداگانهٔ SplitHTTP / XHTTP عرضه نمی‌کند. نزدیک‌ترین معادل، type: "http" روی HTTP/3 است (با تنظیم tls.alpn: ["h3"]) که بیشتر همان ویژگی‌های ضد-DPI را ارائه می‌دهد.
  • idle_timeout: 0 و ping_timeout: 0 با هم پینگ‌های keepalive را به‌طور کامل غیرفعال می‌کنند. برای اتصالات طولانی‌مدت پشت 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:11-100 · v1.13.11 (553cfa1)

Core Tutorial اثر Argsment