プロキシプロトコルを選ぶとき、多くの人は「使えるか?」しか問いません。しかしステルス性能・スループット・設定の複雑さには大きな差があります。この記事ではClash/Mihomoがサポートする主要プロトコルを基本原理から比較し、ネットワーク環境に合った最良の選択ができるよう解説します。

VMess:V2Rayのフラッグシッププロトコル

VMess はV2Rayプロジェクトが設計した暗号化トランスポートプロトコルで、Clashで最も早くから広く使われてきたプロトコルの一つです。VMess は認証情報としてUUIDを使用し、タイムスタンプチェック(サーバーとクライアントの時刻差が90秒以内)を組み込むことでリプレイ攻撃を効果的に防ぎます。

VMess はパケットヘッダーを難読化するため、プロトコル単体でもある程度のトラフィックフィンガープリント耐性があります。ws + TLS(WebSocket over TLS)やgrpc + TLSトランスポートと組み合わせると、通常のHTTPSとほぼ見分けがつかなくなります。主な欠点は、高レイテンシ環境ではQUICベースのプロトコルと比較してヘッダー暗号化オーバーヘッドがやや高いことと、時刻同期要件がサーバー側のオペレーション負担を若干増加させることです。

VMess + WS + TLS 設定例
proxies:
  - name: vmess-ws
    type: vmess
    server: example.com
    port: 443
    uuid: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
    alterId: 0           # 0でAEAD暗号化を有効化(推奨)
    cipher: auto
    tls: true
    network: ws
    ws-opts:
      path: /api/v1/ws
      headers:
        Host: example.com

VLESS:軽量な後継プロトコル

VLESSはVMessの軽量化された後継です。VMessの対称暗号化レイヤーを削除し、すべての暗号化責任を外側のTLSに委ねることで、CPUオーバーヘッドの削減とスループットの向上を実現します。XTLS Visionフロー制御と組み合わせると、VLESSは内部TLSデータをそのまま通過させることができ、二重TLSのパフォーマンスコストを回避できます。高帯域幅シナリオで最強の選択肢です。

注意:VLESSはTLSなしで使用すべきではありません。セキュリティは完全に外側のTLSレイヤーに依存しています。またalterIdはサポートしておらず、認証はUUIDのみで行われます。

Trojan:TLS自体を偽装に使う

TrojanはVMess/VLESSとはまったく異なる設計思想を持ちます。トラフィックを「HTTPSに見せかける」のではなく、本物のTLS上で直接動作します。TLSハンドシェイク後、クライアントは認証のためにパスワードを送信します。パスワードが正しくないリクエストは実際のWebサーバー(例:Nginx)に転送されるため、ファイアウォールやDPIシステムのアクティブプローブには正規のHTTPS応答が返されます。

Trojanのアクティブプローブ耐性は際立った特徴です。たとえ検査者がTrojanサーバーに直接接続しようとしても、正しいパスワードがなければプローブトラフィックは実際のWebバックエンドに転送され、検査者はそれがプロキシであることを判別できません。トレードオフとして、セットアップがより複雑(実際のドメイン名と有効な証明書が必要)で、VLESS+XTLSと比較して単一接続のスループットがやや低くなります。

Trojan 設定例
proxies:
  - name: trojan-node
    type: trojan
    server: example.com
    port: 443
    password: your-password
    sni: example.com
    skip-cert-verify: false   # 本番環境では絶対にtrueにしない
    udp: true

Hysteria2:QUIC时代のスピードチャンピオン

Hysteria2はQUIC(UDP上の多重化・信頼性のあるトランスポート)上に構築され、BBR輻輳制御と積極的な帯域幅利用戦略を採用しています。高パケットロス・高レイテンシのリンクでは、Hysteria2はすべてのTCPベースプロトコルを大幅に上回るパフォーマンスを発揮します。テストでは、30%パケットロス環境でHysteria2はほぼフル帯域幅を維持できる一方、TCPベースプロトコルは10%以下に落ちることが確認されています。

トレードオフ:Hysteria2のUDPトラフィックはより特徴的なフィンガープリントを持ち、UDPを積極的に制限するネットワーク(一部のキャンパスや企業ネットワーク)ではスロットリングまたはブロックされる可能性があります。また輻輳アルゴリズムが大量のアップストリーム帯域幅を消費するため、アップリンク容量が限られたVPSインスタンスには適さない場合があります。

Hysteria2のヒント:updownフィールドには実際の帯域幅(Mbps)を設定してください。高すぎる値を設定すると輻輳アルゴリズムが過剰に積極的になり、かえってパフォーマンスが低下します。まず実際の帯域幅を計測してください。
Hysteria2 設定例
proxies:
  - name: hy2-node
    type: hysteria2
    server: example.com
    port: 443
    password: your-password
    up: 50 Mbps
    down: 200 Mbps
    sni: example.com
    skip-cert-verify: false

プロトコル選択早見表

プロトコルトランスポートステルス性高レイテンシ性能設定複雑さ適したシナリオ
VMess+WS+TLSTCP★★★★☆中程度中程度汎用・幅広い互換性
VLESS+XTLSTCP★★★★★中程度やや高高帯域幅・パフォーマンス優先
TrojanTCP★★★★★中程度中程度アクティブプローブ耐性・自己ホスト
Hysteria2UDP/QUIC★★★☆☆最強高パケットロス・高レイテンシ環境

一つの設定に複数プロトコルを混在させる

Clashでは異なるプロトコルのノードを同じプロキシグループに混在させることができます。実践的なアプローチ:Hysteria2ノードとTCPプロトコルノードをurl-testグループに追加します。Clashが自動的にベンチマークして最速を選択します。ネットワーク環境がQUICに有利な場合はHysteria2が選ばれ、UDPが制限されているときは自動的にTrojanやVMessにフォールバックします。