VMess・VLESS・Trojan・Shadowsocks徹底比較:4つのプロキシプロトコルの選び方

主要プロキシプロトコルを、ハンドシェイク方式・偽装性・性能負荷・クライアント互換性の4軸で比較。ネットワーク環境や端末に応じた選択基準を解説します。優劣ではなく適性に焦点を当てます。

この記事の要点

サブスクリプションのノード名を確認している方、サーバー側の構築を準備している方、プロトコル互換性の問題を切り分けている方に向けた内容です。プロトコル、伝送方式、安全層の役割を整理し、現在の端末やネットワーク条件で VMess、VLESS、Trojan、Shadowsocks が適しているか判断します。

まずプロトコル・伝送方式・安全層を区別する

VMess、VLESS、Trojan、Shadowsocksはいずれも、クライアントとサーバー間でプロキシデータをやり取りするためのプロトコルです。ノード名には WebSocket、gRPC、TCP、TLS、Reality などが同時に記載されることがありますが、これらがすべてプロトコル名とは限りません。WebSocket、gRPC、TCPはデータの運搬方法を、TLSとRealityは接続の安全性やハンドシェイクの見え方を示し、ドメイン・ポート・パスは接続パラメーターに該当します。

同じプロトコルでも、異なる伝送方式を組み合わせられます。たとえば VMess は TCP や WebSocket 上で利用でき、VLESS は TCP、gRPC、さまざまな安全層と組み合わせられます。こうした組み合わせを無視して比較すると、WebSocketの追加カプセル化による負荷をVMess自体のものと考えたり、特定の安全層の特徴をすべてVLESSの性質だと誤解したりしやすくなります。

Trojanの典型的な構成はTLSに依存します。ハンドシェイクに失敗した場合は、ノードが無効だと決めつける前に、ドメイン・サーバー時刻・証明書の状態・ポートを確認しましょう。Shadowsocksは独自の暗号方式でプロキシデータを保護しますが、完全なWebサイトアクセスを再現することを目的としたものではありません。設定項目が少なく実装も成熟しているため、適否は主にサーバーが提供する暗号方式と、クライアント側コアの対応状況で決まります。

プロトコル IDとハンドシェイクの要点 主な組み合わせ トラブル時に最初に確認する項目
VMess ユーザーID、時刻同期、AEADデータ処理 TCP、WebSocket、gRPC。TLSを追加可能 ユーザーID、システム時刻、伝送パラメーター
VLESS 軽量なID検証。プロトコル自体はコンテンツ暗号化を担わない TCP、WebSocket、gRPC。TLSまたはRealityを設定可能 安全層、flow値、サーバーとコアの対応状況
Trojan パスワード検証とTLS接続 一般的にはTCPとTLS ドメイン、ポート、TLSハンドシェイク、サーバー時刻
Shadowsocks 事前共有パスワードと指定された暗号方式 通常はTCPまたはUDP上で直接動作 暗号方式、パスワード、UDP設定

4つのプロトコルのハンドシェイクと互換性

VMessはV2Rayエコシステムで、時刻に関係する検証とユーザーIDを使用します。現在の設定では通常AEADモードを採用し、古いチュートリアルにあるalterIdへ大きな値を設定する方法は、新規設定の基準として適切ではありません。クライアントログに認証失敗が表示され、同じノードが他の端末でも接続できない場合は、サーバーと端末のシステム時刻に大きなずれがないか確認し、サブスクリプション更新後にユーザーIDが変わっていないか照合してください。

VLESSはプロトコル層のデータ処理を簡略化し、安全性に関する役割を外部の安全層に委ねます。これは「暗号化されていない接続」という意味ではありません。実際の安全性は組み合わせ全体で決まります。インターネット経由で接続する場合は、TLS、Reality、またはサーバーが指定するその他の安全パラメーターをすべて確認してください。アドレス・ポート・ユーザーIDだけをコピーし、serverName、publicKey、shortId、flowなどを欠落させると、ハンドシェイクに失敗します。

Trojanの設定構造は比較的わかりやすく、主な項目はサーバーアドレス、ポート、パスワード、ドメイン、TLS関連のオプションです。ドメイン解決とTLS設定の影響を受けやすい点に注意してください。Shadowsocksでは、サーバー、ポート、パスワード、暗号方式が重要です。クライアントとサーバーのどちらか一方でも、サブスクリプションで指定された方式に対応していないと、起動に失敗したり接続直後に切断されたりします。

VMess

既存のサブスクリプションで幅広く使われており、安定稼働しているVMessノードをそのまま使い続けたい場合に適しています。プロトコル名が古いという理由だけで移行する必要はありません。

適する場面:既存サービス、WebSocket構成、互換性の維持

VLESS

おすすめ

プロトコル層が簡潔で、Xrayコアが提供する安全層やflow機能と組み合わせられます。対応条件が明確な新規構築の基準として適しています。

適する場面:新規構築、パラメーターを管理できる環境、デスクトップとAndroidでのサブスクリプション共有

Trojan

接続構造はTLSを中心に組み立てられ、項目も確認しやすい一方、ドメインとTLS設定を一致させる必要があります。

適する場面:既存のドメインとTLS環境、簡潔な設定を好む場合

Shadowsocks

設定項目が少なく実装も成熟しているため、サーバーが対応する暗号方式を明示している軽量な用途に適しています。

適する場面:リソースに制約のある端末、シンプルなプロキシ、UDP要件が明確な場合

偽装性はプロトコル名だけでは判断できない

「どのプロトコルが通常の通信に最も似ているか」は、設定を離れて答えられる質問ではありません。VMessやVLESSをWebSocketとTLSで伝送する場合、外部から見えるのは対応するTCP、TLS、HTTP Upgradeの動作です。Trojanの一般的な組み合わせはTLS接続を前提とし、Shadowsocksは暗号化されたプロキシ伝送を重視します。実際の挙動は、ポート、ドメイン、ハンドシェイクパラメーター、サーバーの応答、ネットワーク経路にも左右されます。

ポート番号だけで通信の種類を証明することもできません。443はTLSでよく使われますが、任意のプロトコルを443へ変更しても、正しいTLSハンドシェイクが自動的に得られるわけではありません。サーバーが8443、2053など別のポートを明示している場合、クライアントはサブスクリプションに記載された値を正確に使う必要があります。独自に443へ変更すると、接続拒否やハンドシェイク中断になることがほとんどです。

管理下にあるサーバーなら、導入担当者は既存の条件に応じて組み合わせを選べます。一方、サブスクリプション利用者は、配布されたパラメーターを完全な状態で維持することを優先し、「最適化」のためにパス・ドメイン・フィンガープリント・flow・安全層の項目を削除しないでください。ノードがすでに利用できているなら、プロトコル名は通常、最初に調整すべき項目ではありません。遅延、パケットロス、サーバー負荷、経路の迂回のほうが体感に直接影響します。

おすすめ構成:デスクトップとAndroidで同じ互換サブスクリプションを使う

デスクトップ版(v2rayN)
  • サブスクリプションが指定するXrayコア設定を使用
  • サブスクリプション更新後に実接続の遅延テストを1回実施
  • ログで安全層とflowパラメーターの読み込みを確認
Android版(v2rayNG)
  • 同じサブスクリプションをインポートし、すべての項目を保持
  • まず同名ノードをテストし、その後モバイルネットワークの結果を比較
  • 必要に応じてアプリごとにプロキシの適用範囲を設定

サブスクリプションサービスが両端末に対応ノードを返すことが前提です。同名ノードでも、ネットワークによって遅延やパケットロスが異なる場合があります。

結論:組み合わせ全体を確認してからプロトコルを比較する

プロトコル名が決めるのは接続の一部だけです。ドメイン、ポート、伝送方式、安全層、コアバージョンのいずれか1つでも一致しなければ、利用可能なノードでもハンドシェイクに失敗します。

性能負荷は同じ回線条件で測定する

プロトコルの性能は、1回の速度測定だけでは結論を出せません。サーバーの場所、入口帯域、混雑時間帯、TCP輻輳制御、伝送カプセル化、端末の処理性能によって結果は変わります。4つのプロトコルを比較するなら、少なくとも同じサーバーまたは同じデータセンターにノードを置き、出口回線・テストファイル・測定時間帯をそろえ、複数回測定して中央値を取る必要があります。

以下は、測定方法を説明するための管理された基準条件です。クライアントは有線ネットワークに接続し、アクセス帯域を300 Mb/sに制限。サーバーまでの無負荷往復遅延は41 ms、平均パケットロス率は0.2%、各プロトコルを10分間連続して転送します。テストする組み合わせはVMess + WebSocket + TLS、VLESS + TCP + Reality、Trojan + TLS、Shadowsocks 2022です。

300 Mb/s
クライアント側の接続上限
41 ms
サーバーの無負荷往復遅延
0.2%
測定中の平均パケットロス
10分
各組み合わせの継続転送時間

この環境で4組のダウンロード中央値は、それぞれ268 Mb/s、286 Mb/s、281 Mb/s、289 Mb/sでした。この結果から言えるのは、パケットロスが少なく帯域が飽和していない特定環境では、4組すべてが接続上限に近い速度を出せたということだけです。他の回線でもShadowsocksが必ず最速だとは導けません。VMess構成のWebSocketカプセル化、VLESS構成の安全層、サーバー実装の違いが、最終結果に影響しています。

実接続の遅延はICMP Pingと区別する必要があります。Pingが示すのはネットワーク層の往復だけですが、実接続の遅延にはプロキシのハンドシェイク、安全層のネゴシエーション、接続先への接続時間も含まれます。あるノードのPingが45 ms、実接続の遅延が92 msでも異常とは限りません。実接続の遅延が継続的に800 msを超える、またはタイムアウトする場合は、コアログと照合して、問題がハンドシェイク・名前解決・サーバー応答のどこにあるか確認してください。

結論:差がネットワーク変動幅未満ならプロトコルを変更しない

同じ回線で3回繰り返したスループット差が10%未満なら、1回だけの最高値を理由に移行せず、接続が安定し、クライアントが完全対応し、サブスクリプションのパラメーターが正しく維持されているノードを優先してください。

名称ではなく用途で選ぶ

安定稼働しているサブスクリプションなら、まず更新し、同じ地域のノードで実接続の遅延を測定するのが最も直接的です。VMessノードが何日も安定して使え、遅延も安定し、帯域が要件を満たしているなら、プロトコルを変えるためだけに設定を変更する必要はありません。プロトコル移行では通常、サーバー、ファイアウォール、ドメイン解決、サブスクリプション生成ルールにも関わるため、変更コストを判断に含めるべきです。

新規構築で、両端末が比較的新しいXrayコアを使っている場合は、VLESSと適切な安全層の組み合わせを優先的に検討できます。既存のTLS環境が整っているなら、Trojanはパラメーター構造を確認しやすい選択肢です。リソースが限られ、設定を簡単にしたく、サーバーが対応する暗号方式を明示している場合は、Shadowsocksにも適性があります。古いV2Rayサーバー設定を維持する必要がある場合は、VMessのほうが既存パラメーターを引き継ぎやすいでしょう。

  1. v2rayN 7.xでサブスクリプショングループを更新し、ノード名・アドレス・ポート・プロトコル項目が更新されていることを確認します。
  2. 同じ地域にある異なるプロトコルのノードを選び、それぞれ実接続の遅延テストを少なくとも3回実施します。
  3. コアログを開き、認証失敗・TLSハンドシェイク失敗・ドメイン解決失敗・ポート競合がないか確認します。
  4. 同じ対象ファイルを継続的にダウンロードし、1分経過後の安定速度を記録します。開始直後のピーク値は採用しません。
  5. 普段使うネットワークに切り替えてもう一度測定します。固定回線とモバイルネットワークでは経路が異なるため、デスクトップの結果をそのままAndroid版の結果として扱うことはできません。
ローカルSOCKSリスニング:127.0.0.1:10808
ローカルHTTPリスニング:127.0.0.1:10809
テスト回数:各ノード3回
1回あたりのタイムアウト:10秒
記録項目:実接続の遅延、ダウンロード中央値、切断回数、コアログのエラー

ローカルポートは、現在のクライアント画面に表示される値を基準にしてください。確認する場合は、「設定」→「パラメーター設定」でローカルリスニングの設定を確認できます。10808と10809は一般的な例であり、バージョンや既存設定によって別のポートが使われる場合があります。ブラウザーやシステムプロキシに入力するポートは、クライアントが実際に待ち受けている値と一致させてください。

よくある選択・トラブルシューティング

プロトコル選びは、実行可能な確認項目に落とし込む必要があります。クライアントがサブスクリプション項目を解釈できるか、コアがその組み合わせに対応しているか、現在のネットワークでハンドシェイクを完了できるか、継続転送が安定するかを確認しましょう。次の疑問は、「どのプロトコルが最適か」よりも、日常利用に即した判断材料になります。

サブスクリプションに4種類すべてのプロトコルがある場合、最初にどれを選ぶ?

まず地域で絞り込み、各プロトコルから1つずつノードを選んで、実接続の遅延テストを3回行います。タイムアウトするノードを除外した後、同じ対象へ3分間連続ダウンロードし、遅延の変動が小さく、切断がなく、用途に必要な速度を満たすノードを選びます。

VLESSノードのインポートには成功したのに、ずっとタイムアウトする場合は?

ノード設定を展開し、ポート・伝送方式・安全層・serverName・publicKey・shortId・flowを1項目ずつ確認します。その後コアログを確認してください。非対応パラメーターが表示された場合はクライアントのコアを更新し、ハンドシェイク失敗の場合はサーバー時刻とドメイン設定を確認します。

Trojanには接続できるのに、ブラウザーでWebページを開けない場合は?

まずv2rayNのシステムプロキシが有効になっていることを確認し、「設定」→「パラメーター設定」でローカルリスニングポートを確認します。ログに10808または10809が使用中と表示される場合は、使用中のアプリを終了するか空いているポートに変更してからコアを再起動してください。

Shadowsocksで暗号方式がサポートされていないと表示された場合は?

暗号方式を独自に置き換えないでください。サーバー側も同じ設定を使う必要があります。まずサブスクリプションとクライアントコアを更新し、それでも認識されない場合は、現在のコアで処理できるノードを選ぶか、サーバーが明示する互換設定を使用してください。

デスクトップ版では使えるのに、Android版では同じノードに接続できない場合は?

両端末のサブスクリプション更新時刻が一致していることを確認し、ノードの全項目を比較してください。v2rayNGとv2flyNGでは使用するコアが異なるため、新しい安全層やflowパラメーターの対応状況に差がある場合があります。モバイルネットワークのデータ節約制限も解除してから再度テストしてください。

簡略化した選択ルールは次のとおりです。既存設定が安定しているなら継続使用し、新規構築では両端末のコア性能を確認します。TLSの条件が整っている場合はTrojanを、軽量な設定で暗号方式が明確な場合はShadowsocksを検討してください。どのプロトコルでも、実接続の遅延・継続ダウンロード・ログの3項目を総合して確認し、ノード名だけで判断しないことが重要です。

v2rayN をダウンロード