Naive — sing-box
Naive — это прокси с мультиплексированием TCP/HTTP, спроектированный так, чтобы выглядеть как обычный трафик HTTPS или HTTP/3. sing-box реализует обе стороны и добавляет прямые ручки для контроллера перегрузки и окон управления потоком встроенного QUIC-стека quiche.
Входящий
type: "naive":
| Поле | Тип | По умолчанию | Допустимые значения | Описание |
|---|---|---|---|---|
users | []auth.User | [] | [{username, password}] | Принимаемые пользователи. |
network | NetworkList | (tcp+udp) | tcp | udp | | Ограничение только TCP или только UDP. |
quic_congestion_control | string | bbr | bbr | cubic | reno | Алгоритм управления перегрузкой для слушателя HTTP/3 (QUIC): bbr (по умолчанию; пустое значение означает bbr), cubic или reno. Любое другое значение — ошибка при запуске. |
Исходный код: option/naive.go:9-15 · зафиксировано на v1.14.2 (af6e64c)
Структура встраивает ListenOptions и InboundTLSOptionsContainer. Конфигурация TLS обязательна — на проводе Naive всегда обёрнут в TLS.
Исходящий
type: "naive":
| Поле | Тип | По умолчанию | Допустимые значения | Описание |
|---|---|---|---|---|
username | string | (unset) | <string> | Имя пользователя для аутентификации на вышестоящем прокси. |
password | string | (unset) | <string> | Пароль для аутентификации на вышестоящем прокси. |
insecure_concurrency | int | 0 | <int> | Число одновременных HTTP/2-потоков на соединение. 0 использует значение стека по умолчанию. |
extra_headers | badoption.HTTPHeader | {} | {<header>: <value or list>} | Дополнительные заголовки, добавляемые к каждому запросу. |
stream_receive_window | *byteformats.MemoryBytes | (stack default) | <bytes / MiB / GiB> | Окно управления потоком на каждый поток. Принимаются строки с суффиксами вроде "4MiB". |
udp_over_tcp | *UDPOverTCPOptions | (disabled) | UDPOverTCPOptions | Оборачивает UDP-пакеты внутри TCP-подобного потока Naive, когда апстрим не поддерживает QUIC-датаграммы. |
quic | bool | false | true | false | Использовать HTTP/3 (QUIC) вместо HTTP/2 в качестве транспорта. Сервер должен поддерживать оба, чтобы клиенты корректно откатывались. |
quic_congestion_control | string | (stack default) | bbr | bbr2 | cubic | reno | Алгоритм управления перегрузкой QUIC-стека клиента при quic: true: bbr (BBRv1), bbr2, cubic или reno. Пустое значение оставляет умолчание стека; любое другое — ошибка при запуске. |
quic_session_receive_window | *byteformats.MemoryBytes | (stack default) | <bytes / MiB / GiB> | Окно управления потоком QUIC на сессию (а не на поток). |
Исходный код: option/naive.go:17-30 · зафиксировано на v1.14.2 (af6e64c)
Встраивает DialerOptions, ServerOptions и OutboundTLSOptionsContainer.
Примеры
Входящий (HTTP/2 поверх TLS):
{
"inbounds": [
{
"type": "naive",
"tag": "naive-in",
"listen": "::",
"listen_port": 443,
"users": [{ "username": "alice", "password": "<password>" }],
"tls": {
"enabled": true,
"alpn": ["h2", "http/1.1"],
"certificate_path": "/etc/ssl/cert.pem",
"key_path": "/etc/ssl/key.pem"
}
}
]
}Исходящий с переключением на HTTP/3 и управлением перегрузкой BBRv2:
{
"outbounds": [
{
"type": "naive",
"tag": "naive-out",
"server": "example.com",
"server_port": 443,
"username": "alice",
"password": "<password>",
"quic": true,
"quic_congestion_control": "bbr2",
"quic_session_receive_window": "16MiB",
"tls": {
"enabled": true,
"server_name": "example.com",
"alpn": ["h3", "h2", "http/1.1"]
}
}
]
}Примечания
quic_congestion_controlпринимает имена в нижнем регистре. Исходящий (QUIC-клиент Cronet) принимаетbbr,bbr2,cubicиreno; входящий (слушатель HTTP/3) —bbr,cubicиreno, по умолчаниюbbr. 4-буквенные коды quiche (TBBR,B2ON,QBIC,RENO) не принимаются.stream_receive_windowиquic_session_receive_windowпринимают байтовые литералы с суффиксами через парсерbyteformats.MemoryBytes—"4MiB","16MiB","1GiB". Обычные целые числа трактуются как «сырые» байты.insecure_concurrency— экспериментальный многопоточный флаг оригинального клиента Naive. Значения выше ~8 обычно не дают дополнительного ускорения, но увеличивают расход памяти на соединение.- Форма
udp_over_tcpта же, что у вариантов Shadowsocks / TUIC —{enabled, version}.
Сравнение с другими ядрами
- Xray-core не реализует Naive. См. Naive — Xray-core.
- mihomo не реализует Naive. См. Naive — mihomo.
Исходный код: option/naive.go:9-30 · v1.14.2 (af6e64c)
