Транспорт — sing-box
Параметры транспорта sing-box располагаются в блоке transport, встроенном в каждый входящий и исходящий с поддержкой TLS. Блок полиморфный: поле type выбирает один из пяти вариантов транспорта, и применяется соответствующее подмножество полей.
"transport": { "type": "<ws|http|grpc|quic|httpupgrade>", ...variant fields }type: "ws"
| Поле | Тип | По умолчанию | Допустимые значения | Описание |
|---|---|---|---|---|
path | string | / | /<path> | Путь WebSocket. |
headers | badoption.HTTPHeader | {} | {<header>: <value or list>} | Дополнительные заголовки запроса upgrade. |
max_early_data | uint32 | 0 | <bytes> | Максимум байт ранних данных 0-RTT, буферизуемых до завершения WS-рукопожатия. 0 отключает. |
early_data_header_name | string | Sec-WebSocket-Protocol | <header name> | HTTP-заголовок, несущий ранние данные в base64, когда сервер ожидает их под нестандартным именем. |
Исходный код: option/v2ray_transport.go:79-84 · зафиксировано на v1.13.15 (3708fa1)
type: "http" (HTTP/2)
| Поле | Тип | По умолчанию | Допустимые значения | Описание |
|---|---|---|---|---|
host | badoption.Listable[string] | [] | [<hostname>] | Список значений заголовка Host. Сервер использует список для сопоставления SNI; клиент выбирает одно случайно на каждый запрос. |
path | string | / | /<path> | HTTP-путь. |
method | string | PUT | <HTTP method> | HTTP-метод. Стандартный транспорт использует PUT, чтобы препятствовать кэшированию. |
headers | badoption.HTTPHeader | {} | {<header>: <value or list>} | Дополнительные заголовки запроса. |
idle_timeout | badoption.Duration | 0 | <duration> | Тайм-аут простоя — закрыть нижележащее HTTP-соединение после такого периода тишины. 0 отключает. |
ping_timeout | badoption.Duration | 0 | <duration> | Тайм-аут ответа на пробный HTTP/2 PING. 0 отключает PING. |
Исходный код: option/v2ray_transport.go:70-77 · зафиксировано на v1.13.15 (3708fa1)
HTTP-транспорт по умолчанию работает поверх HTTP/2. С tls.alpn: ["h3"] в объемлющем TLS-блоке транспорт использует HTTP/3.
type: "grpc"
| Поле | Тип | По умолчанию | Допустимые значения | Описание |
|---|---|---|---|---|
service_name | string | (required) | <service path> | Имя gRPC-сервиса. |
idle_timeout | badoption.Duration | 0 | <duration> | Тайм-аут простоя. 0 отключает. |
ping_timeout | badoption.Duration | 0 | <duration> | Тайм-аут keepalive-пингов. 0 отключает PING. |
permit_without_stream | bool | false | true | false | Разрешить PING без активного потока. |
Исходный код: option/v2ray_transport.go:88-94 · зафиксировано на v1.13.15 (3708fa1)
type: "quic"
Структура QUIC-транспорта не имеет пользовательских полей — это просто { "type": "quic" }. Вся настройка QUIC происходит на уровне протокола (у Hysteria2 / TUIC собственные нативные QUIC-стеки).
type: "httpupgrade"
| Поле | Тип | По умолчанию | Допустимые значения | Описание |
|---|---|---|---|---|
host | string | (server address) | <hostname> | Заголовок HTTP Host. |
path | string | / | /<path> | HTTP-путь. |
headers | badoption.HTTPHeader | {} | {<header>: <value or list>} | Дополнительные заголовки запроса. |
Исходный код: option/v2ray_transport.go:96-100 · зафиксировано на v1.13.15 (3708fa1)
Примеры
WebSocket + TLS:
{
"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:
{
"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):
{
"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+ блок*Settingsдля каждого транспорта, с вариантами TCP, mKCP и SplitHTTP/XHTTP, которых нет в sing-box. См. Транспорт — Xray-core. - mihomo распределяет настройки транспорта по блокам
*-optsдля каждого протокола в каждой записи прокси. См. Транспорт — mihomo.
Исходный код: option/v2ray_transport.go:70-100 · v1.13.15 (3708fa1)
