代理協定 · Clash文件

TUIC

Clash 生態系的 TUIC 出站設定參考,以目前 Mihomo 欄位為準,區分 v4 與 v5 驗證,並涵蓋 TLS、QUIC、UDP 中繼及連線參數。

  • uuid
  • password
  • TLS
  • QUIC
  • UDP
代理協定

版本由認證欄位決定

TUIC 執行在 QUIC 和 TLS 1.3 上。目前核心沒有單獨的 version 欄位,而是根據認證欄位選擇協議分支:存在非空 token 時使用 v4,否則使用 v5。

兩種版本都需要名稱、type: tuic、伺服器和連接埠。v4 再填寫 token,v5 再填寫 UUID 和密碼。用戶端版本必須與伺服器端一致。

TUIC v4 與 v5 認證欄位
協議版本必須填寫必須省略目前實作的選擇條件
TUIC v4tokenuuidpasswordtoken 非空
TUIC v5uuidpasswordtokentoken 為空
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 不支援的跨協議欄位
能力TUIC 邊界不要使用
連接埠單個 portHysteria2 的 portshop-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 卻仍以為憑證會被正常驗證,目前實作會同時跳過憑證驗證。
YAML
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