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_controlstring(QUIC default) | TBBR | B2ON | QBIC | RENOАлгоритм управления перегрузкой QUIC, передаваемый стеку quiche. Принимаются четыре 4-буквенных кода: TBBR (BBRv1), B2ON (BBRv2), QBIC (CUBIC), RENO.

Исходный код: option/naive.go:19-25 · зафиксировано на v1.13.15 (3708fa1)

Структура встраивает 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(QUIC default) | TBBR | B2ON | QBIC | RENOКонтроллер перегрузки QUIC для клиентской стороны.
quic_session_receive_window*byteformats.MemoryBytes(stack default)<bytes / MiB / GiB>Окно управления потоком QUIC на сессию (а не на поток).

Исходный код: option/naive.go:27-40 · зафиксировано на v1.13.15 (3708fa1)

Встраивает 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": "B2ON",
      "quic_session_receive_window": "16MiB",
      "tls": {
        "enabled": true,
        "server_name": "example.com",
        "alpn": ["h3", "h2", "http/1.1"]
      }
    }
  ]
}

Примечания

  • Четыре кода управления перегрузкой — чувствительные к регистру 4-буквенные метки, используемые стеком quiche:
    • TBBR — BBR v1
    • B2ON — BBR v2
    • QBIC — CUBIC
    • RENO — New 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:19-40 · v1.13.15 (3708fa1)

Core Tutorial от Argsment