版本由认证字段决定
TUIC 运行在 QUIC 和 TLS 1.3 上。当前内核没有单独的 version 字段,而是根据认证字段选择协议分支:存在非空 token 时使用 v4,否则使用 v5。
两种版本都需要名称、type: tuic、服务器和端口。v4 再填写 token,v5 再填写 UUID 和密码。客户端版本必须与服务端一致。
| 协议版本 | 必须填写 | 必须省略 | 当前实现的选择条件 |
|---|---|---|---|
| TUIC v4 | token | uuid、password | token 非空 |
| TUIC v5 | uuid、password | token | token 为空 |
name必填- 节点名称,用于策略组和规则引用。
type: tuic必填- 选择 TUIC 出站。
server / port必填- 填写服务端地址与单个 UDP 监听端口。
tokenTUIC v4- v4 的用户标识。使用 v5 时不得填写。
uuid / passwordTUIC v5- v5 的用户 UUID 与密码。使用 v4 时不得填写。
服务器地址与 TLS 校验
TUIC 使用 TLS 1.3,未指定 sni 时以 server 作为服务器名称,未指定 alpn 时客户端使用 h3。连接地址、SNI 与证书名称可以分别控制,但应保持可解释的一致关系。
ip可选- 覆盖 server 的 DNS 解析结果,只改变实际连接 IP,不改变默认 SNI。
sniTLS- 设置 TLS Server Name;连接 IP 与证书域名不同时尤其重要。
alpn默认 h3- 填写服务端支持的 ALPN 列表,通常无需覆盖默认值。
skip-cert-verify风险- 跳过证书校验,只应在明确理解风险时启用。
name-cert-verifyTLS- 单独指定证书名称校验目标。
fingerprintTLS- 固定服务端证书指纹。
certificate / private-keymTLS- 服务端要求客户端证书时成对填写。
ech-opts当前未生效- TUIC 选项可以解析该字段,但当前拨号实现没有把它应用到 TLS 握手;不要把填写它当作已经启用 ECH。
disable-sni高风险- 清空 TLS Server Name;当前实现还会强制跳过证书校验,不只是隐藏 SNI。
QUIC 建连与连接生命周期
TUIC 的延迟选项会改变 QUIC 握手、超时和并发流行为。默认值已经覆盖普通场景,只有服务端或排障结果给出依据时才应覆盖。
heartbeat-interval默认 10000 毫秒- 发送 QUIC 保活心跳的间隔。单位是毫秒,不是秒。
reduce-rtt0-RTT- 允许 QUIC 0-RTT 以降低建连时间,但早期数据可能面临重放风险。
request-timeout默认 8000 毫秒- 建立 TUIC 代理请求的超时;当前实现仅由 v4 客户端分支读取,v5 会忽略。
congestion-controller可选- 可选 cubic、new_reno 或 bbr;省略时保留 QUIC 库的默认行为。
bbr-profile仅 BBR- 为 BBR 选择 standard、conservative 或 aggressive 预设。
max-open-streams默认 100- 限制同时打开的 QUIC 流数量,过大可能增加内存和调度压力。
fast-open可选- 减少代理请求建立等待,当前 TUIC v4 客户端分支直接使用该字段。
UDP 中继与数据包大小
TUIC 同时支持 TCP 流和 UDP 中继。UDP 中继模式必须与服务端实现兼容,包大小应服从路径 MTU,不应把更大数值理解为更高吞吐。
udp-relay-mode默认 native- 可选 native 或 quic;除明确填写 quic 外,当前实现使用 native。
max-udp-relay-packet-size默认 1252- UDP 中继负载上限,客户端还会按 QUIC Datagram 上限和 v4/v5 头部开销调整。
max-datagram-frame-size高级- 控制 QUIC Datagram 帧上限,当前实现最大限制为 1400 字节。
disable-mtu-discovery高级- 禁用路径 MTU 探测,仅在确认链路存在 MTU 问题时使用。
recv-window-conn / recv-window高级- 分别控制单流与连接级 QUIC 接收窗口,通常保留默认值。
端口、混淆与会话边界
TUIC 与 Hysteria2 都使用 QUIC,但可配置能力并不相同。不要把另一个协议的字段按名称猜测后复制过来。
| 能力 | TUIC 边界 | 不要使用 |
|---|---|---|
| 端口 | 单个 port | Hysteria2 的 ports、hop-interval |
| 混淆 | 没有协议专属 obfs 字段 | salamander、gecko、obfs-password |
| 连接保活 | heartbeat-interval 与 QUIC 流 | AnyTLS 的 idle-session-* |
| 认证 | v4 token 或 v5 UUID 加密码 | Hysteria 的 auth-str |
v5 与 v4 配置示例
下面同时给出两个独立节点。实际使用时只保留与服务端版本一致的一组认证字段。
- v5 节点误留 token,当前实现会按 v4 分支创建客户端。
- UUID 格式无效,解析结果不能通过 v5 服务端认证。
- 把 heartbeat-interval 当成秒填写 10,实际会变成 10 毫秒。
- 启用 disable-sni 却仍以为证书会被正常校验,当前实现会同时跳过证书验证。
proxies:
- name: tuic-v5
type: tuic
server: server.example.com
port: 10443
uuid: 00000000-0000-0000-0000-000000000001
password: replace-with-v5-password
sni: server.example.com
alpn:
- h3
udp-relay-mode: native
- name: tuic-v4
type: tuic
server: server.example.com
port: 10443
token: replace-with-v4-token
sni: server.example.com
alpn:
- h3
udp-relay-mode: native