TUIC — sing-box
sing-box реализует TUIC v5 — современную форму с UUID и паролем. Историческая форма v4 с «token» не поддерживается. TUIC всегда работает поверх QUIC, поэтому встроенный блок tls обязателен.
Входящий
Входящий type: "tuic":
| Поле | Тип | По умолчанию | Допустимые значения | Описание |
|---|---|---|---|---|
users | []TUICUser | [] | [TUICUser] | Принимаемые пользователи. Каждый несёт пару UUID + пароль. |
congestion_control | string | cubic | cubic | new_reno | bbr | Алгоритм управления перегрузкой QUIC. Установка здесь меняет только серверное исходящее направление; клиенты выбирают свой алгоритм сами. |
auth_timeout | badoption.Duration | 3s | <duration> | Сколько ждать, пока клиент завершит кадр аутентификации, прежде чем закрыть QUIC-соединение. |
zero_rtt_handshake | bool | false | true | false | Принимать 0-RTT TLS-рукопожатия. Даёт чуть более быстрое подключение ценой устойчивости к replay-атакам в окне первой 0-RTT-нагрузки. |
heartbeat | badoption.Duration | 10s | <duration> | Интервал между кадрами QUIC PING, которые сервер отправляет для поддержания NAT-привязок. |
Исходный код: option/tuic.go:5-13 · зафиксировано на v1.13.15 (3708fa1)
Структура встраивает ListenOptions и InboundTLSOptionsContainer. Конфигурация TLS обязательна.
users[]
| Поле | Тип | По умолчанию | Допустимые значения | Описание |
|---|---|---|---|---|
name | string | (unset) | <string> | Отображаемое имя, используемое в статистике и журналах. |
uuid | string | (required) | <UUID> | UUID клиента. |
password | string | (required) | <string> | Пароль клиента. |
Исходный код: option/tuic.go:15-19 · зафиксировано на v1.13.15 (3708fa1)
Исходящий
Исходящий type: "tuic":
| Поле | Тип | По умолчанию | Допустимые значения | Описание |
|---|---|---|---|---|
uuid | string | (required) | <UUID> | UUID пользователя, принимаемый сервером. |
password | string | (required) | <string> | Пароль пользователя. |
congestion_control | string | cubic | cubic | new_reno | bbr | Алгоритм управления перегрузкой QUIC для направления клиент → сервер. |
udp_relay_mode | string | native | native | quic | Как туннелируются UDP-пакеты. `native` использует QUIC-датаграммы; `quic` оборачивает каждый UDP-пакет в отдельный QUIC-поток. `native` быстрее; `quic` переживает промежуточные узлы, отбрасывающие QUIC-датаграммы. |
udp_over_stream | bool | false | true | false | Использовать кадрирование UDP-over-stream, введённое для TUIC-клиентов, работающих с QUIC-стеками без поддержки датаграмм. Согласуется; должно быть включено с обеих сторон. |
zero_rtt_handshake | bool | false | true | false | Использовать 0-RTT TLS-рукопожатие при переподключении. |
heartbeat | badoption.Duration | 10s | <duration> | Интервал QUIC PING. |
network | NetworkList | (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)
