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

VMess・VLESS・Trojan・Shadowsocksの暗号化、ハンドシェイク、通信方式、クライアント対応を比較。ネットワーク環境や端末に合うプロトコルを選べます。

この記事の要点

サブスクリプションのノードを選び、PCとAndroid端末で同じサービスを使いたい方に向けた解説です。まずプロトコル、通信方式、安全レイヤーを整理し、4種類の認証・暗号化の特徴を比較します。そのうえで、クライアントの対応状況を確認し、同じ条件でのテスト結果からメインノードを選びます。プロトコル名だけで速度は決まりません。サーバー回線、設定全体、実際に使うコアの対応状況が、接続結果を大きく左右します。

1. ノード名を分解する:プロトコル・通信方式・安全レイヤー

サブスクリプションでよく見かける「VLESS + WebSocket + TLS」は、互いに置き換えられる3つのプロトコルではありません。VLESSはプロキシ要求とユーザー認証を担い、WebSocketはデータを運び、TLSは接続を保護します。先頭のVLESSだけを見て、ノードが速い、または安全だと判断すると、接続を左右する設定を見落とします。

クライアントとコアも分けて考える必要があります。v2rayN、v2rayNG、v2flyNGは設定を操作するクライアントで、実際の接続処理はコアが実行します。V2RayとXrayでは対応範囲が異なります。同じVLESS表記のノードでも、特定の通信方式やセキュリティ機能が必要な場合があります。

2. 4種類のプロトコル:暗号化と認証の違い

4種類はいずれもプロキシ接続に使えますが、データの保護方法は異なります。以下では一般的で互換性の高い設定を取り上げます。新しい拡張機能や特定のコア設定を使う場合は、サーバー側の要件と使用するコアの対応状況を確認してください。

プロトコル 認証方式 暗号化と保護範囲 よくある設定
VMess UUIDによるユーザー認証。現在の設定ではAEAD認証を使用 プロトコル内の暗号化機能を備え、実際の動作はsecurity設定によります。TLSを重ねて使用することもできます TCP;WebSocket + TLS
VLESS 通常はUUIDを使用 一般的なencryption=none設定では、プロトコル内でペイロードを暗号化しません。TLSやREALITYなどによる保護が必要です TCP + TLS;WebSocket + TLS;TCP + REALITY + Vision
Trojan 共有パスワード 従来の構成では、認証とプロキシ通信の保護にTLSを使用します。証明書を正しく検証することが重要です TCP + TLS
Shadowsocks 共有鍵。入力形式は暗号化方式によって異なります 選択した暗号方式でプロキシデータを保護します。従来のAEADと2022シリーズは区別が必要です ネイティブのTCP / UDP、またはサーバー指定の拡張構成

VMess:まずAEADを確認し、次に通信設定をチェック

VMessは「古いノードだから使えない」とは限りません。適切に保守されたAEADノードは、現在も利用する価値があります。古い設定にあるalterIdは混乱のもとになりがちです。現在一般的な設定では通常0で、AEADを使用することを示します。自分で大きな値に変更しないでください。VMessの認証は時刻にも関係するため、PCやスマートフォンのシステム時刻を正確に保ちましょう。

VLESS:一般的な設定では暗号化を外側に任せる

VLESSの一般的なencryption=none設定でも、接続全体が暗号化されていないとは限りません。外側のTLSやREALITYで接続を保護できます。一方、VLESS + TCPだけで安全レイヤーがない場合、アクセス先がHTTPSだからといって、プロキシ経路全体も同じように保護されるわけではありません。一部の新しい実装には追加の暗号化拡張がありますが、すべてのクライアントで使えるわけではありません。

TrojanとShadowsocks:パスワードの役割の違い

Trojanでは共有パスワードを認証に使い、TLSで接続を保護します。Shadowsocksではパスワードまたは鍵と暗号化方式の組み合わせによって接続の可否が決まります。たとえばaes-128-gcmとchacha20-ietf-poly1305は任意に入れ替えられません。2022シリーズには特定の鍵形式も必要です。古いパスワードをそのまま使い、methodだけ変更することはできません。

3. ハンドシェイクと速度:プロトコルに固定の順位はない

Webページを初めて開くまでの時間には、DNS名前解決、サーバーへの接続、外側の安全な接続のハンドシェイク、プロキシ認証、接続先サイトへの接続が含まれます。WebSocketではHTTP Upgradeが行われることが多く、gRPCはHTTP/2に依存します。TLSセッションを再利用するかどうかでも接続確立のコストは変わります。こうした組み合わせを、特定のプロトコルなら常に「ハンドシェイクが1回少ない」と一括りにはできません。

スループットは別の指標です。サーバーの帯域、夜間の混雑、パケットロス、端末の処理能力がボトルネックになることがあります。適切な条件ではVLESS + Visionにより暗号化関連の重複処理を減らせますが、すべてのVLESSノードで使える機能ではなく、どの回線でも他のプロトコルより速いとは限りません。

443
HTTPSでよく使われ、TLSノードにも使われるポートです。ポート番号だけではTLSの有効化を確認できません
1080
SOCKSでよく使われるポート番号ですが、現在のクライアントの実際の待ち受けポートとは限りません
8388
Shadowsocksの設定例でよく見かけるポートです。インポートしたノードでは、サーバーから指定された値を使ってください

ここで挙げたポートは接続レイヤーの違いを示すためのもので、速度測定の結果ではありません。サーバー側のポートと端末側のプロキシポートは別物です。ブラウザーは端末の待ち受けポートに接続し、コアがサブスクリプションで指定されたサーバーポートへ接続します。サーバーの443を端末のSOCKS設定に入力しても、自動的にプロキシ接続が確立するわけではありません。

  1. 同じ端末、同じネットワーク、同じ時間帯にテストし、可能なら同じサーバー回線で提供されている異なるプロトコルのノードを比べます。
  2. 各候補ノードで同じページを5回初回読み込みし、さらに同じダウンロードを30秒ずつ3回行って記録します。1回だけの最高速度を長期的な速度と見なさないでください。
  3. テスト前にシステムプロキシまたはVPNの適用状態とルーティングルールを固定し、対象の通信が現在のノードを経由していることを確認します。直接接続の結果が混ざらないようにしてください。
  4. タイムアウト回数、読み込み時間の中央値、安定したダウンロード速度を記録します。TCPの遅延だけでは、Webページ、動画、UDPアプリが使えるかどうかは判断できません。

4. 用途に合わせた選び方:まずサーバー側の条件を確認

サーバー側に対応する設定がなければ、クライアント上でVMessをVLESSに切り替えるだけでは使えません。以下の推奨は、サービス提供元が該当する設定一式のノードを用意していることが前提です。安定して使えているノードを移行するメリットは、名前の新旧ではなく実測で判断してください。

VLESS + REALITY + Vision

おすすめ

接続する両端が対応し、サーバー設定が揃っていれば、Xray環境のメイン候補として利用できます。公開鍵、サーバー名、shortId、flowを確認してください。通常のVLESSノードにない値を、自分で補うことはできません。

おすすめ:Xrayコアを使い、サーバーからREALITYの設定一式を受け取っているデスクトップ端末やAndroid端末。

VMess + WebSocket + TLS

既存のサブスクリプションでよく使われる構成です。AEAD、WebSocketのパス、Host、TLSのサーバー名を確認してください。サーバー側が対応していれば、WebSocket転送が必要な環境にも使えます。

おすすめ:適切に保守されているVMessサービスを継続利用する場合、またはWebSocket転送の設定がすでにある場合。

Trojan + TLS

認証と通信の設定は比較的わかりやすいものの、有効な証明書と正しいサーバー名が必要です。従来のTrojanがTLSを使うからといって、あらゆる転送サービスに対応するわけではありません。一般的なHTTPリバースプロキシをTCP転送の代わりにはできません。

おすすめ:ドメインとTLSをすでに設定済みで、パスワード認証を使いたいサービス。

Shadowsocks AEAD

一般的な設定では、アドレス、ポート、暗号化方式、パスワードを指定します。UDPが必要な場合は、サーバー、クライアント、現在の通信制御方式のすべてを確認してください。TCPに対応していても、UDPが使えるとは限りません。

おすすめ:対応する暗号化方式のサービスをすでに利用している場合、またはネイティブのTCP / UDPプロキシ方式を使いたい場合。

5. v2rayN・v2rayNG・v2flyNGの使い分け

互換性を判断するときは、クライアント名だけでなく「クライアントのバージョン + コアのバージョン + プロトコル構成全体」を確認します。v2rayNはデスクトップクライアントで、配布パッケージや設定によって異なるコアを使用できます。v2rayNGはXrayコア、v2flyNGはV2Flyコアを使用します。名前が似ているからといって、後者2つですべてのノードを相互に使えるわけではありません。

PCとAndroidで使う:同じサブスクリプションを共有し、コアと通信制御を個別に確認

デスクトップ:v2rayN
  • Windows、macOS、Linuxに合った配布パッケージを選びます。
  • REALITY / Visionノードを使う前に、実際にその組み合わせに対応したXrayコアが動作していることを確認します。
  • ノードを選んで接続を開始し、システムプロキシまたはTUNの状態とルーティングルールを確認します。
  • 端末側の待ち受けポートは現在の設定で確認し、別の端末の値を流用しないでください。
Android:v2rayNG / v2flyNG
  • v2rayNGはXrayの機能に対応したノード向けですが、インストール済みのバージョンも確認が必要です。
  • v2flyNGではV2Flyコアの対応範囲に合わせてノードを選びます。Xray専用の構成に標準対応しているとは限りません。
  • 同じサブスクリプションをインポートしたら、ノードの設定値を確認し、システムVPNの使用を許可します。
  • アプリごとのプロキシ設定を確認し、テスト対象のアプリがプロキシから除外されていないことを確認します。

同じサブスクリプションからノード情報は共有できますが、端末側のポート、ルーティングルール、DNS、アプリ別設定まで自動で同期されるわけではありません。

v2rayNの従来型インターフェースを例にすると、「サブスクリプショングループ」→「サブスクリプショングループ設定」でサブスクリプションを管理し、「設定」→「パラメーター設定」で端末側の設定を確認できます。デスクトップのクロスプラットフォーム版では項目名が異なる場合があるため、現在の画面を確認してください。Androidではメイン画面の追加メニューから共有リンクをインポートし、選択したノードの編集画面を確認します。バージョンが異なる画面でボタンの位置をそのまま当てはめないでください。

6. プロトコル設定の確認:接続できないときに見る項目

設定を変更する前に、サービス提供元の元の設定を比較用に保存してください。根拠のある項目を一度に1つだけ変更し、接続を再起動してログを確認します。ポート、SNI、通信方式をまとめて変更すると、原因を特定しにくくなります。

ノードの種類 まず確認する項目 よくある誤操作
VMess UUID、alterId、security、システム時刻、通信パス 古い解説にあるゼロ以外のalterIdを、現在のAEADノードに設定する
VLESS + TLS UUID、encryption、サーバー名、通信方式、flow WebSocketノードにVisionを無理に追加する、またはTLSを設定し忘れる
VLESS + REALITY UUID、公開鍵、shortId、サーバー名、フィンガープリント、flow 別のノードから公開鍵をコピーする、または安全方式だけをREALITYに変更する
Trojan パスワード、ポート、TLSサーバー名、証明書の検証 接続先がIPアドレスなら、サーバー名にも同じIPを入力する必要があると思い込む
Shadowsocks method、パスワードまたは鍵、ポート、UDP対応 2022シリーズと従来のAEADで鍵形式を混同する

TLSノードのサーバー名は通常、証明書に含まれるドメイン名を指定します。接続先アドレスと異なる場合もあります。WebSocketのHostはHTTPレイヤーの項目で、TLSのSNIとは別々にサーバー側で設定できますが、どちらもサーバーの要件に合わせる必要があります。証明書エラーが出た場合は、システム時刻、ドメイン名、証明書チェーンを確認してください。allowInsecureを常用の修正手段にしないでください。

ログに接続成功と表示されているのに一部のサイトを開けない場合は、DNS、ルールの適用、接続先サイトへの通信を中心に確認します。プロトコルを切り替えたことで別の回線につながり、結果的に改善することはありますが、元のプロトコルに問題があった証拠にはなりません。基本的な確認手順はトラブル対処を、用語がわからない場合は用語クイックガイドを参照してください。

7. プロトコル選びでよくある質問

VLESSのencryptionがnoneです。暗号化方式に変更すべきですか?

自分で変更しないでください。まずノードの編集画面で、サーバー側が要求するTLSまたはREALITYが設定済みか確認します。一般的なVLESS設定ではnoneを使い、外側のレイヤーで接続を保護します。暗号化拡張を追加するには、接続する両端が明示的に対応している必要があり、クライアント側だけで有効にはできません。

Trojanにパスワードを設定したのに、ハンドシェイクに失敗するのはなぜですか?

まずポートとTLSサーバー名を確認し、次にシステム時刻と証明書のエラーを調べます。パスワード認証より前にTLSハンドシェイクが失敗している可能性があり、その場合はパスワードを何度も変えても解決しません。サーバー名はノード提供元の設定に従い、ノードの表示名から推測しないでください。

ShadowsocksでWebページは開けるのに、ゲームに接続できないのはなぜですか?

ゲームがUDPを使うか確認し、サーバー側のUDP転送、端末側の通信制御方式、アプリ別ルールを調べます。一般的なHTTPプロキシでは、あらゆるUDPアプリを通せるわけではありません。デスクトップでTUNを使う場合は設定が正しいか、AndroidではゲームがVPNの適用対象から除外されていないかも確認してください。

同じサブスクリプションなのに、v2flyNGで使えるノードがいくつか表示されません。どうすればよいですか?

表示されないノード、または接続に失敗するノードの構成全体を確認してください。XrayのREALITY / Vision機能が必要なら、その組み合わせに対応したv2rayNGを使うか、V2Fly対応ノードをサービス提供元に問い合わせます。対応していない安全方式をTLSに変更しないでください。

遅延が最も低いプロトコルを選べばよいですか?

まず、測定しているのがTCP接続なのか、実際のプロキシ通信なのかを確認します。前述の同じ条件でテストを繰り返し、Webページの読み込み、継続的なダウンロード、タイムアウト回数を比較してください。プロトコル名の順に並べるより、安定して使えるメインノードと、動作確認済みの予備ノードを1つずつ確保するほうが確実です。

最終的な選び方は3段階です。まずサーバー側で何が提供されているかを確認し、次にクライアントとコアが構成全体に対応しているかを確認し、最後に現在のネットワークで実際の性能を比べます。VMess、VLESS、Trojan、Shadowsocksはいずれも設定の整合が必要です。プロトコル名を変えるだけでルーティング、DNS、回線品質の問題が自動的に解決するわけではありません。

v2rayN をダウンロード