Skip to content

Naive — sing-box ​

Naive — это прокси с мультиплексированием TCP/HTTP, спроектированный так, чтобы выглядеть как обычный трафик HTTPS или HTTP/3. sing-box реализует обе стороны и добавляет прямые ручки для контроллера перегрузки и окон управления потоком встроенного QUIC-стека quiche.

Входящий ​

type: "naive":

ПолеТипПо умолчаниюДопустимые значенияОписание
users[]auth.User[][{username, password}]Принимаемые пользователи.
networkNetworkList(tcp+udp)tcp | udp | Ограничение только TCP или только UDP.
quic_congestion_controlstringbbrbbr | 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":

ПолеТипПо умолчаниюДопустимые значенияОписание
usernamestring(unset)<string>Имя пользователя для аутентификации на вышестоящем прокси.
passwordstring(unset)<string>Пароль для аутентификации на вышестоящем прокси.
insecure_concurrencyint0<int>Число одновременных HTTP/2-потоков на соединение. 0 использует значение стека по умолчанию.
extra_headersbadoption.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-датаграммы.
quicboolfalsetrue | falseИспользовать HTTP/3 (QUIC) вместо HTTP/2 в качестве транспорта. Сервер должен поддерживать оба, чтобы клиенты корректно откатывались.
quic_congestion_controlstring(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):

json
{
  "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:

json
{
  "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}.

Сравнение с другими ядрами ​

Исходный код: option/naive.go:9-30 · v1.14.2 (af6e64c)

Core Tutorial от Argsment