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 握手。换取略快的连接建立,但首个 0-RTT 载荷窗口缺少重放攻击防护。 |
heartbeat | badoption.Duration | 10s | <duration> | 服务端发送 QUIC PING 帧以保持 NAT 映射的间隔。 |
源码: option/tuic.go:5-13 · 锚定版本 v1.13.11 (553cfa1)
该结构体内嵌 ListenOptions 与 InboundTLSOptionsContainer。必须 配置 TLS。
users[]
| 字段 | 类型 | 默认值 | 允许值 | 描述 |
|---|---|---|---|---|
name | string | (unset) | <string> | 统计与日志中使用的显示名。 |
uuid | string | (required) | <UUID> | 客户端 UUID。 |
password | string | (required) | <string> | 客户端密码。 |
源码: option/tuic.go:15-19 · 锚定版本 v1.13.11 (553cfa1)
出站
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 | 使用为不支持数据报的 QUIC 栈引入的 UDP-over-stream 帧。需协商;两端必须一致。 |
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.11 (553cfa1)
同时内嵌 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是推荐默认。只有在跨越会用 DPI 丢弃 QUIC 数据报的中间盒时才切到quic。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 profile)。它还提供顶层tuic-server块作为声明入站的替代方式。参见 TUIC — mihomo。
源码: option/tuic.go:5-33 · v1.13.11 (553cfa1)
