2026年9月9日 · プロトコル選び · 約10分

VMess・VLESS・Trojan・Shadowsocksを比較|用途別プロキシプロトコルの選び方

VMess・VLESS・Trojan・Shadowsocksを暗号化方式、接続時の負荷、トランスポート、クライアント対応状況から比較。REALITYやTLSの使い分けも解説します。

この記事の要点

まずサーバー側の設定一式を確認してから、クライアントのコアを選びましょう。安定して使えているVMessノードはそのまま利用できます。新規構築で両端がXrayに対応しているなら、VLESSとTLSまたはREALITYの組み合わせを検討できます。証明書やドメインの運用体制が整っている場合はTrojan、シンプルな暗号化プロキシ設定を求める場合はShadowsocksが候補です。サブスクリプション利用者とノードを自分で設定する方向けに、プロトコル・セキュリティ層・トランスポート・ルーティングの役割と、インポート後に接続できない場合の確認点を解説します。

1. 4つのプロトコルの違い:認証・暗号化・外側の保護

4つのプロトコルを単純に新旧で並べることはできません。VMessとShadowsocksにはデータの暗号化機能があります。一方、一般的なVLESS設定ではプロトコル層でペイロードを暗号化しないため、外側に安全な通信路が必要です。Trojanの一般的な構成はTLSに依存します。安全性を比較するときはプロトコルと外側の保護をセットで考え、保護のないVLESSと暗号化されたVMess接続をそのまま比べないでください。

プロトコル 認証・暗号化 一般的な構成 確認する項目
VMess UUIDで認証。現在の構成ではAEADを使用し、ペイロードの暗号化方式は設定によって異なる TCP;WebSocket + TLS UUID、暗号化方式、トランスポート設定。旧式のalterIdは通常0
VLESS UUIDで認証。一般的なencryptionはnoneで、TLSまたはREALITYが通信路を保護 TCP + TLS、TCP + REALITY。サーバーの指定に応じてVisionを有効化 UUID、flow、セキュリティ層、serverName。REALITYでは公開鍵とshortIdも確認
Trojan パスワード認証。通信路の暗号化とサーバー認証はTLSに依存 TCP + TLS パスワード、ポート、serverName、証明書の検証
Shadowsocks パスワードまたは鍵。指定した暗号化方式で保護 TCP/UDPを直接利用。拡張構成は実装によって異なる method、パスワードまたは鍵、UDP対応、2022シリーズかどうか

VMessのalterId: 0は、現在のAEAD設定でよく使われる互換用フィールドです。暗号化されていないという意味ではありません。Shadowsocksも「SS対応」というだけでは不十分です。従来のAEAD方式と2022シリーズでは、鍵の形式やコアのバージョン要件が異なります。コアが暗号化方式を認識しない場合、表示名を変更しても解決しません。

2. 用途に応じた選び方:まずサーバー側の条件を確認

サブスクリプションを利用するだけなら、通常は自分でプロトコルを変更する必要はありません。VMessサーバーのノード種別をVLESSに変えても、接続できるようにはなりません。自分で構築する場合は、証明書管理、ポート開放、トランスポート対応、クライアントのバージョンを含めて選びましょう。以下の推奨は、新規構築で両端を管理でき、対応する設定を利用できる場合のものです。あらゆるネットワーク環境における速度ランキングではありません。

VLESS + TLS / REALITY

おすすめ

対応するXray構成ではVisionを利用できます。TLSとREALITYは別のセキュリティ設定で、名前だけを切り替えて使えるものではありません。サーバーから指定されたパラメーターをすべて設定してください。

向いているケース:新規接続、両端の設定を管理できる、コアのバージョンを保守できる

VMess + WebSocket + TLS

既存の設定が安定しているなら、そのまま使うほうがトラブル対応の手間を抑えられます。リバースプロキシを経由する場合は、WebSocketのパス、Host、TLSのドメイン、バックエンドの待受アドレスも一致させてください。

向いているケース:既存のVMessノードを使い続ける、動作確認済みのリバースプロキシ設定を継続する

Trojan + TLS

設定の要点はパスワードとTLSです。ドメイン、有効な証明書、更新手順が整っていれば運用範囲を明確にできます。証明書の期限切れやドメインの不一致があると接続できません。

向いているケース:TLSの運用体制があり、パスワード認証を使いたい構成

Shadowsocks AEAD

基本パラメーターは少なめですが、暗号化方式を正確に確認する必要があります。UDPを使うアプリでは、サーバー、クライアント、中継ネットワークがUDP転送に対応しているかも確認してください。

向いているケース:対応する暗号化方式が指定されており、基本設定をシンプルに管理したい接続

まとめ:サーバー側の設定一式を確認してから移行を判断

ノードは「プロトコル + トランスポート + セキュリティ層 + flow」の形式で記録しましょう。例:「VLESS + TCP + REALITY + Vision」。移行する意味があるのは、使用するクライアントがこの組み合わせ全体に対応している場合だけです。「VLESS対応」という表示だけでは利用可能か判断できません。

3. 接続時の負荷と速度:常に最速のプロトコルはない

接続時の負荷は新規接続の確立時間に影響します。一方、継続的な通信速度は、回線帯域、パケットロス、サーバー負荷、端末性能に左右されます。TCP接続、TLSハンドシェイク、WebSocketのHTTP Upgradeはいずれも追加の通信往復が発生する場合があります。接続の再利用やTLSセッション再開の有無によっても実際の所要時間は変わるため、4つのプロトコルに一律のミリ秒値を当てはめることはできません。

一般的な設定のVLESSではプロトコル層のペイロード暗号化を重ねて行いませんが、それだけであらゆるVMessやShadowsocksのノードより速いとは限りません。異なるデータセンターや出口を使うノード同士の比較では、結果に回線の違いが大きく反映されます。Visionも「有効にすれば帯域が2倍になる」機能ではありません。役割と適用条件は、コアのドキュメントと両端の設定を確認してください。

  1. 測定条件をそろえる。可能な限り同じサーバー、出口、テスト先を使います。条件をそろえられない場合は、結果をノードの使用感の比較にとどめ、プロトコル自体の差と結びつけないでください。
  2. 接続確立とダウンロードを分けて測る。初回応答時間を記録し、30秒以上の継続転送で平均速度を確認します。1回の遅延テストだけでは、動画や大容量ファイルの使用感は判断できません。
  3. 各条件で3回測定する。中央値を使い、測定時刻、接続の再利用の有無、バックグラウンドダウンロードの有無を記録します。最良の結果だけでなく、失敗回数も残してください。
  4. ルーティング条件をそろえる。測定対象の通信が実際にテスト中のアウトバウンドを通っているか確認します。直結ルールに一致した通信の速度は、プロキシ接続の測定結果ではありません。

多重化も個別に評価してください。短時間の接続で負荷を減らせることがありますが、相性の悪い構成やパケットロスの多い環境では、接続同士の影響が大きくなる場合もあります。まずはクライアントとサーバーで動作確認済みの設定を維持し、問題が明確になってから個別に変更しましょう。プロトコル、多重化、DNSの設定を一度に変えるのは避けてください。

4. TLS・REALITY・トランスポート:それぞれ別の設定項目

TLSは通信路を保護し、サーバーの身元を検証します。WebSocketはトランスポートの一種です。REALITYはXrayが提供するセキュリティ機構で、5つ目のプロキシプロトコルではありません。TCP、WebSocket、セキュリティ層はそれぞれ異なる設定項目です。サーバー側がTCP + REALITYを指定している場合、WebSocket + TLSに変更しても接続できるとは限りません。

以下はXray JSONにおけるVLESS + TCP + TLSのアウトバウンド設定例です。example.netはドキュメント用の例示ドメインで、UUIDもサンプル値です。この設定で接続可能なノードを提供するものではありません。実際にはサーバーから割り当てられたアドレス、認証情報、証明書のドメインを使用してください。REALITYノードにこのTLS設定をそのまま適用することはできません。

{
  "outbounds": [
    {
      "tag": "proxy",
      "protocol": "vless",
      "settings": {
        "vnext": [
          {
            "address": "example.net",
            "port": 443,
            "users": [
              {
                "id": "6e7d180b-486c-4f4a-89c4-574ca70b83d2",
                "encryption": "none"
              }
            ]
          }
        ]
      },
      "streamSettings": {
        "network": "tcp",
        "security": "tls",
        "tlsSettings": {
          "serverName": "example.net",
          "allowInsecure": false
        }
      }
    }
  ]
}

ここに示すoutboundsはアウトバウンドのみの設定で、ローカルのインバウンドやルーティングは含まれていません。v2rayNでノードを管理する場合は、ノード編集画面でパラメーターを設定してください。クライアントが生成した実行時設定を直接上書きすると、次回の起動時やサブスクリプション更新時に再生成される可能性があります。各項目の役割はJSON設定ガイドを参照してください。

5. クライアントとコア:同じ名称でも対応構成は異なる

v2rayNはデスクトップクライアントです。利用できるプロトコル機能は、実際に呼び出すコアとそのバージョンによって異なります。Android版のv2rayNGはXrayコア、v2flyNGはV2Flyコアを使用します。Project V、V2Fly、Xrayには技術的なつながりがありますが、各プロジェクトの設定項目や拡張機能が同じとは限りません。特にREALITY、Vision、新しいトランスポートでは注意が必要です。

クライアント確認するポイント接続できないときの最初の確認事項
v2rayNノードに選択したコア、コアのバージョン、トランスポート、セキュリティ設定ノード編集画面で設定の組み合わせを確認し、起動ログでコアの情報を確認する
v2rayNGクライアントに同梱されているXrayのバージョンとノードの設定項目ノード編集画面でTLS/REALITYとflowを確認し、更新後はインポート内容も再確認する
v2flyNGV2Flyが対応するプロトコルとトランスポートREALITYなどXray固有の構成は、まず対応状況を確認し、リンクの内容を無理に書き換えない

サブスクリプションリンクはノードの設定を配布する手段であり、5つ目のプロキシプロトコルではありません。正常にインポートできても、サブスクリプション形式の変換で拡張項目が失われる場合があります。「同じノードが一方のクライアントでは使え、別のクライアントでは使えない」場合は、プロトコル、ポート、トランスポート、セキュリティ層、SNI、flow、認証情報を順に比較し、コアの対応機能に差があるか判断してください。

6. ポート・UDP・ルーティング:接続の各段階を切り分ける

サーバー側のポート、ローカルプロキシのポート、アプリが接続する宛先ポートは、それぞれ役割が異なります。以下の3つの数字は設定箇所を見分けるための例で、すべてのノードに共通する初期値でも、性能を推奨する値でもありません。実際の待受アドレスとポートは、クライアントの現在の設定を確認してください。

443
TLSサーバーの接続ポートの例
10808
ローカルSOCKSの待受ポートの例
8388
Shadowsocksサーバーのポートの例

サーバーのポートを443にしても、TLSが自動的に有効になるわけではありません。プロトコルのハンドシェイクとセキュリティ層を正しく設定する必要があります。また、ブラウザーからローカルのSOCKSポートに接続する段階と、クライアントがリモートの443番ポートに接続する段階は別です。システムプロキシが適用されるのは、その設定に従うアプリだけです。すべての通信がプロキシを経由している証明にはなりません。

まとめ:ウェブ・UDP・出口IPを分けて確認

まず通常のウェブページでTCP接続を確認し、次にUDPが必要なアプリをテストします。最後に対象の通信がどのルーティングルールに一致したかを確認してください。それぞれの結果を記録すれば、アプリがプロキシを使っていない問題をプロトコルの不具合と誤認しにくくなります。

7. よくある質問:インポート後に接続できない場合

VMessノードが使えていますが、すべてVLESSに移行すべきですか?

移行は必須ではありません。現在のVMessが新しいAEAD設定を使用しているか確認してください。旧式設定のalterIdは通常0にし、システム時刻も同期させます。サーバーから新しい設定一式が提供され、クライアントもその構成に対応している場合に限り、ノードを複製して比較テストしてください。元のノードのプロトコル種別を直接変更しないでください。

VLESSをインポートしてもタイムアウトします。まず何を確認すればよいですか?

まずリモートアドレスとポートに到達できることを確認し、次にノード編集画面でセキュリティ層を確認してください。REALITYでは公開鍵、shortId、serverName、flowを重点的に確認します。TLSでは証明書のドメインを確認してください。その後ログを見て、ネットワークのタイムアウト、認証失敗、ハンドシェイク失敗を切り分けます。「タイムアウト」という表示だけでUUIDの誤りとは判断できません。

Trojanで証明書エラーが出た場合、検証を無効にすればよいですか?

まず端末の日付とタイムゾーン、serverName、証明書の有効期限、サーバーの証明書チェーンを確認してください。IPアドレスで接続する場合も、サーバーの説明に従って証明書に対応するドメインを設定する必要があります。検証を無効にするとサーバー認証が弱まるため、日常的な解決策として使わないでください。

Shadowsocksのパスワードは正しいのに、接続できないのはなぜですか?

サーバーのポートとmethodの正式名称を確認してください。たとえばaes-128-gcmと2022シリーズは同じ設定ではありません。方式によっては、所定の長さにエンコードされた鍵が必要で、任意のパスワードでは代用できません。ログに暗号化方式が未対応と表示される場合は、使用中のコアのバージョンを確認し、ノードの提供元に対応する設定を問い合わせてください。

プロトコルを変えると、中国国内・国外の振り分けも自動で変わりますか?

変わりません。プロトコルは接続方式を決め、ルーティングは通信をどのアウトバウンドに送るかを決めます。v2rayNの「設定」→「ルーティング設定」で現在のルールを確認してください。メニュー名はバージョンによって異なる場合があります。システムプロキシの状態も確認し、ルールが特定のアウトバウンドタグを参照している場合は、そのタグが新しいノードを指しているか確認してください。

v2rayNをダウンロード