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

Trojan

現在の Mihomo フィールドに基づく Clash 系 Trojan アウトバウンド設定です。パスワード、必須 TLS、SNI、証明書、Reality、UDP、トランスポートを確認できます。

  • password
  • TLS
  • SNI
  • Reality
  • UDP
プロキシプロトコル

Trojan アウトバウンドのフィールド

このページでは、Clash エコシステムのクライアントにある proxies 配列内の Trojan アウトバウンドフィールドです。Trojan はパスワード認証を使い、TLS を常に有効にします。クライアントでは、サーバーのアドレス、ポート、パスワード、TLS 名をすべてサーバー側と一致させる必要があります。

最小構成は、四つの共通必須フィールドと password で構成されます。SNI は空欄にして server アドレスへフォールバックできますが、ドメイン証明書、CDN、Reality を使う場合は、通常は明示的な指定が必要です。

name必須
ノード名です。同じ設定内で重複させることはできません。
type必須
固定値 trojan
server必須
Trojan サーバーのドメインまたは IP アドレスです。
port必須
サーバーの待受ポートです。一般的には 443 ですが、サーバー設定を基準にしてください。
password必須
Trojan サーバーのパスワードです。サーバーから割り当てられた値と完全に一致させる必要があります。

TLS、SNI、証明書の検証

現在のコアでは Trojan の TLS が常に有効になるため、 tls: true によって TLS ノードへ切り替える必要はありません。以下のフィールドで、ハンドシェイク名、ALPN、クライアントフィンガープリント、証明書の検証方法を指定します。

sni任意
TLS のサーバー名です。空欄の場合は server アドレスを使用します。ドメイン証明書や CDN を使う場合は、通常は明示的に一致させる必要があります。
alpn任意
TLS のアプリケーション層プロトコル一覧です。サーバー側および選択したトランスポート層と互換性が必要です。
client-fingerprint任意
uTLS のクライアントフィンガープリントです。例: chrome または random。証明書のフィンガープリントではありません。
fingerprint任意
サーバー証明書の SHA-256 フィンガープリントです。 client-fingerprint とは意味が異なります。
skip-cert-verify慎重に使用
次の値に設定すると true は証明書の検証を省略します。恒久的なトラブルシューティング手段として使用しないでください。
name-cert-verify任意
証明書の DNSName 検証対象だけを変更し、送信する SNI は変更しません。
certificate / private-key任意
両方を指定するとクライアント mTLS が有効になります。通常の Trojan ノードでは一般に必要ありません。

Reality とその他の TLS キャリア

Reality、ShadowTLS、Restls、JLS は、いずれも TLS 接続層の拡張です。サーバー側で対応する機能が明示的に有効な場合にだけ追加し、互いに競合する複数の接続層設定を同時に有効にしないでください。

reality-opts.public-keyReality
サーバーの Reality 秘密鍵に対応する公開鍵です。
reality-opts.short-idReality
サーバーで許可された short ID のいずれかを指定します。
reality-opts.support-x25519mlkem768任意
X25519-MLKEM768 鍵交換への対応を宣言します。サーバー側も対応している必要があります。
shadow-tls-optsサーバー側の設定に従う
サーバー側で ShadowTLS を使っている場合に限り、バージョンとパスワードを指定し、引き続き sni をハンドシェイク名として使用します。
restls-optsサーバー側の設定に従う
サーバー側で Restls を使っている場合に限り、パスワードと TLS バージョンヒントを指定します。
jls-optsサーバー側の設定に従う
サーバー側で JLS を使っている場合に限り、ユーザー名とパスワードを指定します。

Trojan のトランスポート層を選ぶ

現在、Trojan で任意に選択できるトランスポート層として記載されているのは WebSocket と gRPC だけです。 network を指定しない場合、または別の値を指定した場合は TCP として処理されます。

Trojan で現在選択できるトランスポート層
network関連フィールド用途
tcp専用の opts はありませんデフォルトのトランスポート層
wsws-optsWebSocket のパス、Host、Early Data
grpcgrpc-optsgRPC サービス名と接続パラメーター
network任意
使用できるのは ws または grpcだけです。その他の値は TCP として処理されます。
ws-optsWebSocket
パス、Host、Early Data の各フィールドを、サーバーまたはリバースプロキシと一致させる必要があります。
grpc-optsgRPC
grpc-service-name と接続パラメーターをサーバー側と一致させる必要があります。
smuxTCP のみ
汎用の sing-mux は TCP トランスポートにだけ適用されます。gRPC 固有の多重化と混同しないでください。

UDP と trojan-go の AEAD 拡張

UDP スイッチと、trojan-go の Shadowsocks AEAD 拡張は互いに独立しています。通常の Trojan ノードでは ss-opts

udp任意
共通フィールドです。デフォルトは falseです。UDP をプロキシする場合は trueは必要ありません。サーバー側が対応していることも確認してください。
ss-opts.enabled任意
trojan-go サーバーで Shadowsocks AEAD 拡張が有効な場合に限り、次の値に設定します: true
ss-opts.methodデフォルトは aes-128-gcm
使用可能 aes-128-gcmaes-256-gcm または chacha20-ietf-poly1305
ss-opts.password有効時は必須
trojan-go AEAD 拡張のパスワードは空にできず、トップレベルの password

基本設定とエラーチェック

この例は、通常の Trojan over TLS ノードを示しています。サーバー側で WebSocket、gRPC、Reality、または ss-opts が有効でない場合は、これらのフィールドを推測で追加しないでください。

  • 設定項目 networkh2を指定し、 alpn: [h2] と同じ設定だと誤解しています。
  • SNI、証明書の検証名、リバースプロキシのドメインが一致せず、TLS ハンドシェイクに失敗しています。
  • 次だけを指定し、 ss-opts.passwordトップレベルで必須の Trojan の password
  • が抜けています。サーバー側が gRPC なのにクライアントがデフォルトの TCP で接続しているか、 grpc-service-name が一致していません。
YAML
proxies:
  - name: trojan-tls
    type: trojan
    server: edge.example.com
    port: 443
    password: your-trojan-password
    sni: origin.example.com
    alpn:
      - h2
      - http/1.1
    client-fingerprint: chrome
    udp: true
    network: tcp