プロキシプロトコル · Clash ドキュメント

TUIC

現在の Mihomo フィールドに基づく Clash 系 TUIC アウトバウンド設定です。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-profileBBR のみ
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