版本由認證欄位決定
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