Skip to content

TUIC — sing-box

sing-box реализует TUIC v5 — современную форму с UUID и паролем. Историческая форма v4 с «token» не поддерживается. TUIC всегда работает поверх QUIC, поэтому встроенный блок tls обязателен.

Входящий

Входящий type: "tuic":

ПолеТипПо умолчаниюДопустимые значенияОписание
users[]TUICUser[][TUICUser]Принимаемые пользователи. Каждый несёт пару UUID + пароль.
congestion_controlstringcubiccubic | new_reno | bbrАлгоритм управления перегрузкой QUIC. Установка здесь меняет только серверное исходящее направление; клиенты выбирают свой алгоритм сами.
auth_timeoutbadoption.Duration3s<duration>Сколько ждать, пока клиент завершит кадр аутентификации, прежде чем закрыть QUIC-соединение.
zero_rtt_handshakeboolfalsetrue | falseПринимать 0-RTT TLS-рукопожатия. Даёт чуть более быстрое подключение ценой устойчивости к replay-атакам в окне первой 0-RTT-нагрузки.
heartbeatbadoption.Duration10s<duration>Интервал между кадрами QUIC PING, которые сервер отправляет для поддержания NAT-привязок.

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

Структура встраивает ListenOptions и InboundTLSOptionsContainer. Конфигурация TLS обязательна.

users[]

ПолеТипПо умолчаниюДопустимые значенияОписание
namestring(unset)<string>Отображаемое имя, используемое в статистике и журналах.
uuidstring(required)<UUID>UUID клиента.
passwordstring(required)<string>Пароль клиента.

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

Исходящий

Исходящий type: "tuic":

ПолеТипПо умолчаниюДопустимые значенияОписание
uuidstring(required)<UUID>UUID пользователя, принимаемый сервером.
passwordstring(required)<string>Пароль пользователя.
congestion_controlstringcubiccubic | new_reno | bbrАлгоритм управления перегрузкой QUIC для направления клиент → сервер.
udp_relay_modestringnativenative | quicКак туннелируются UDP-пакеты. `native` использует QUIC-датаграммы; `quic` оборачивает каждый UDP-пакет в отдельный QUIC-поток. `native` быстрее; `quic` переживает промежуточные узлы, отбрасывающие QUIC-датаграммы.
udp_over_streamboolfalsetrue | falseИспользовать кадрирование UDP-over-stream, введённое для TUIC-клиентов, работающих с QUIC-стеками без поддержки датаграмм. Согласуется; должно быть включено с обеих сторон.
zero_rtt_handshakeboolfalsetrue | falseИспользовать 0-RTT TLS-рукопожатие при переподключении.
heartbeatbadoption.Duration10s<duration>Интервал QUIC PING.
networkNetworkList(tcp+udp)tcp | udp | Ограничение только TCP или только UDP.

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

Встраивает DialerOptions, ServerOptions и OutboundTLSOptionsContainer.

Примеры

Входящий:

json
{
  "inbounds": [
    {
      "type": "tuic",
      "tag": "tuic-in",
      "listen": "::",
      "listen_port": 443,
      "users": [
        { "name": "alice", "uuid": "a3482e88-686a-4a58-8126-99c9df64b7bf", "password": "<password>" }
      ],
      "congestion_control": "bbr",
      "auth_timeout": "3s",
      "heartbeat": "10s",
      "tls": {
        "enabled": true,
        "alpn": ["h3"],
        "certificate_path": "/etc/ssl/cert.pem",
        "key_path": "/etc/ssl/key.pem"
      }
    }
  ]
}

Исходящий:

json
{
  "outbounds": [
    {
      "type": "tuic",
      "tag": "tuic-out",
      "server": "example.com",
      "server_port": 443,
      "uuid": "a3482e88-686a-4a58-8126-99c9df64b7bf",
      "password": "<password>",
      "congestion_control": "bbr",
      "udp_relay_mode": "native",
      "zero_rtt_handshake": false,
      "heartbeat": "10s",
      "tls": { "enabled": true, "server_name": "example.com", "alpn": ["h3"] }
    }
  ]
}

Примечания

  • udp_relay_mode: native — рекомендуемое значение по умолчанию. Переключайтесь на quic, только если трафик проходит через промежуточный узел, который отбрасывает QUIC-датаграммы средствами DPI.
  • zero_rtt_handshake: true включает 0-RTT при переподключении. Первое соединение всё равно выполняет полное рукопожатие. Выигрыш заметнее всего в мобильных сетях, которые часто заново разрешают адреса и переподключаются.
  • auth_timeout применяется на сервере. Если входящий не увидит кадр аутентификации в этом окне, QUIC-соединение закрывается молча.
  • udp_over_stream — ручка совместимости: отклонения от серверной спецификации TUIC здесь нет, обе стороны просто должны договориться.

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

  • Xray-core не поддерживает TUIC. См. TUIC — Xray-core.
  • mihomo использует имена полей в kebab-case (congestion-controller, udp-relay-mode), поддерживает старую форму token для совместимости и предоставляет больше ручек тонкой настройки QUIC (размеры окон, обнаружение MTU, профиль BBR). У него также есть уникальный корневой блок tuic-server как альтернативный способ объявить входящий. См. TUIC — mihomo.

Исходный код: option/tuic.go:5-33 · v1.13.15 (3708fa1)

Core Tutorial от Argsment