· プロトコル解説 · 約9分

VMessとVLESSの違いとは?プロトコル選びで知っておきたいポイント

VMessとVLESSの暗号化、時刻認証、通信方式の違いを1分で解説。クライアントに表示されるノードの見方と選び方も紹介します。

この記事の要点

VMessとVLESSはどちらもプロキシプロトコルであり、クライアントの名前ではありません。VMessにはプロトコル層でのデータ暗号化オプションがあり、時刻に依存する認証方式を採用しています。VLESSの基本プロトコルはペイロードを暗号化せず、TLSやREALITYと組み合わせて使うのが一般的です。サブスクリプションを利用中なら、速度や安全性をプロトコル名だけで判断せず、まず設定全体をクライアントが認識できるか確認し、実際の接続状況を比べましょう。

プロトコル・通信方式・セキュリティ層の違い

V2Rayのプロトコルを選ぶ前に、まず3つの層を区別しましょう。VMessやVLESSはプロキシ要求とユーザー認証を担い、TCP、WebSocket、gRPCなどは接続を運ぶ通信方式です。TLSやREALITYは、それぞれに応じたセキュリティ保護を提供します。同じVLESSノードでも、通信方式やセキュリティ設定は異なる場合があります。プロトコルが同じでも、ほかのパラメーターを共用できるとは限りません。

V2Rayクライアントは設定の編集、サブスクリプションの管理、接続の制御を行う画面で、プロキシプロトコルを実行するのはコアです。v2rayNはデスクトップ向けクライアント、v2rayNGはXrayコアを使うAndroid向けクライアント、v2flyNGはV2Flyコアを使います。ノードに接続できるかどうかは、コアが設定全体の組み合わせに対応しているかで決まります。クライアント名に「v2ray」が含まれているかだけでは判断できません。

設定項目よくある表示値確認する内容
プロキシプロトコルVMess、VLESSプロトコルの種類、UUID、およびプロトコル固有の必須項目
接続先サーバーアドレス、ポートアドレスと接続先の待ち受けポート(提供元が指定する443など)
通信方式TCP、WebSocket、gRPCWebSocketのパスとHost、またはgRPCのサービス名
セキュリティ設定TLS、REALITYサーバー名と、対応する証明書またはREALITYのパラメーター
フロー制御空欄、xtls-rprx-visionサーバー側の設定で指定されているか(独自に追加しないこと)

たとえば「VLESS + TCP + REALITY + Vision」は設定一式です。Visionはフロー制御の設定であり、VLESSと並ぶ別のプロトコルではありません。REALITYもWebSocketの別名ではありません。サーバー側でこの設定が指定されている場合、通信方式をWebSocketに変えて元のパラメーターをそのまま使うことはできません。

VMessとVLESSの主な違い

VMessは、接続にUUIDを付けるだけのプロトコルではありません。独自の認証とデータ保護の仕組みがあり、よく使われるデータ暗号化方式にはauto、aes-128-gcm、chacha20-poly1305があります。設定によってはペイロードを暗号化しないこともあるため、「VMessのデータは必ずプロトコル層で暗号化される」という説明も正確ではありません。外側でTLSを使うかどうかは、別途セキュリティ設定を確認してください。

VLESSの基本プロトコルは、より軽量なリクエスト構造を採用しており、ペイロードを暗号化しません。一般的なノード設定にあるencryption=noneは通常の項目であり、接続全体が平文という意味ではありません。外側のTLSやREALITYで通信を保護できます。反対に、適切なセキュリティ層が何もない場合は、UUIDを設定しただけで通信が暗号化されると思わないでください。

比較項目VMessVLESSの基本プロトコル
ユーザー識別子通常はUUIDを使用通常はUUIDを使用
ペイロードの暗号化プロトコル層の暗号化オプションあり(設定による)なし。通常は外側のセキュリティ設定で保護
時刻への依存認証にはクライアントとサーバーの時刻が近いことが必要基本の認証方式にVMessのような時間枠はない
よくある組み合わせVMess + WebSocket + TLSVLESS + WebSocket + TLS、またはVLESS + TCP + REALITY
そのまま置き換えられるか不可。サーバー側とクライアント側のプロトコルを一致させる必要があります

現在のVMess設定では通常AEAD認証が使われ、alterIdは0が一般的です。古いオンライン記事にある0以外の値を、新しいノードにそのまま設定しないでください。VLESSには対応するalterId項目がなく、VMessの暗号化オプションを流用することもできません。サブスクリプションに正しい値が設定されているなら、項目ごとに推測して変更するより、そのまま使うほうが確実です。

時刻認証:VMessで接続できないときはシステム時計を確認

VMessの認証は時刻に依存します。一般的な実装では、クライアントとサーバーの時刻差を約120秒以内にする必要がありますが、詳しくは使用するコアの仕様を確認してください。PCのスリープ後に時計がずれる、自動時刻設定が無効になっている、サーバーの時刻に異常があるといった状況では、認証に失敗することがあります。こうした問題は、ノードのポートを443から80に変えても解決しません。

  1. Windows:「設定」→「時刻と言語」→「日付と時刻」を開き、「時刻を自動的に設定する」を有効にします。「今すぐ同期」を実行してから、もう一度接続してください。タイムゾーンだけを変えても、システム時刻そのもののずれは直らないことがあります。
  2. Android:システムの「設定」から「日付と時刻」を開き、自動設定を有効にします。項目の場所は機種によって異なり、「システム」や「その他の設定」の中にある場合もあります。
  3. 再テスト:元のVMessノードをいったん切断してから再接続し、コアのログで認証エラーが解消したか確認します。ほかのVMessノードは使えるのに特定のノードだけ失敗する場合は、提供元にサーバー時刻とアカウント設定を確認してもらいましょう。

VLESSには同じ仕組みのプロトコル認証の時間枠はありませんが、システム時刻を自由に設定してよいわけではありません。TLS証明書には有効期間があり、日付が大きくずれていると証明書の検証に失敗することがあります。ログに「証明書がまだ有効ではない」または「有効期限切れ」と表示されたら、まず日付を確認し、端末の時計とサーバー証明書のどちらに問題があるか切り分けてください。

通信方式の組み合わせ:ノード設定全体に対応するクライアントを選ぶ

VMess + WebSocket + TLSでもVLESS + WebSocket + TLSでも、パス、Host、TLSサーバー名を確認する必要があります。たとえば、提供元がパスに/proxyを指定しているなら、/に変更してはいけません。接続先アドレス、HTTP Host、TLSサーバー名はそれぞれ役割が異なり、同じ値の場合もあれば異なる場合もあります。ノード設定に従い、3つの項目に同じアドレスを機械的に入力しないでください。

REALITYノードでは、公開鍵、shortId、サーバー名が必要になる場合があります。Visionを有効にしたノードでは、対応するフロー制御の設定も必要です。項目が空欄だったり、値を誤って入力したり、サブスクリプション変換時に項目が失われたりすると、接続に影響します。プロトコル名がVLESSというだけでは、使用中のコアがこれらの拡張設定に対応しているとは限りません。

XrayコアとVLESS設定全体の対応

おすすめ

提供元がREALITYまたはVisionを明示的に指定しているノードでは、まずXrayコアが対応しているか確認しましょう。デスクトップでv2rayNを使う場合は選択中のコアを確認し、Androidではv2rayNGを使用できます。サブスクリプションに含まれる通信方式、セキュリティ、フロー制御の設定は変更せずに使ってください。

おすすめの用途:VLESS + REALITYを含むサブスクリプション、またはXrayの拡張機能が明示された設定を使う場合。

V2Flyコアと互換性のあるノード設定

VMess + WebSocket + TLSのノードをすでに使っている場合は、実際に使用するコアの対応状況を確認して利用できます。Android向けのv2flyNGはV2Flyコアを使用します。Xrayの拡張設定が必ず使えるとは限らないため、インポート後も項目とログを確認してください。

おすすめの用途:提供元がV2Fly対応を明示しており、現在のノード構成で動作確認が済んでいる場合。

確認の順番:プロトコル名より設定全体を優先

まずプロトコル、通信方式、セキュリティ層、フロー制御がすべて対応しているか確認し、その後に接続テストを行いましょう。VMessノードが安定して使えているなら、名前だけを理由にVLESSへ変更する必要はありません。サブスクリプションでREALITYが明示されている場合は、対応するコアを選んでください。

サブスクリプションのインポート:VMessを手動でVLESSに変更しない

サブスクリプションは複数のノード設定をまとめて配布する仕組みであり、3つ目のプロキシプロトコルではありません。VMessとVLESSの両方を含む場合も、どちらか一方だけの場合もあります。インポートすると、各ノードのプロトコル、サーバー、通信方式のパラメーターがクライアントに個別に保存されます。更新時に「非対応」と表示されたら、プロトコル選択欄を変更するのではなく、該当ノードの設定の組み合わせを確認してください。

設定手順:同じサブスクリプションで両方のクライアントを確認

デスクトップ:v2rayN
  • 「サブスクリプショングループの設定」で名前とURLを入力して保存し、サブスクリプションを更新します。
  • ノードの編集画面を開き、プロトコル、接続先ポート、通信方式、セキュリティ設定を確認します。
  • 使用するコアがそのノード構成に対応していることを確認し、接続先として選択します。
Android:v2rayNG
  • v2rayNGでサブスクリプションをインポートするには、サイドメニューの「サブスクリプショングループの設定」からURLを追加し、メイン画面のメニューで更新します。
  • VLESSノードのサーバー名、REALITYのパラメーター、フロー制御がすべて設定されているか確認します。
  • 接続を開始し、システムのVPN接続許可を確認してから、ブラウザーでアクセスをテストします。

両方のクライアントで同じサブスクリプションURLを使えますが、解析できる設定や更新のタイミングは異なる場合があります。ノード一覧が一致するかどうかは、更新後の結果で確認してください。

メニュー名はクライアントのバージョンによって変わることがあります。項目が見つからない場合は、「サブスクリプショングループ」と「サブスクリプションの更新」を目印に探してください。v2rayNGのダウンロード方法や初回接続の手順を知りたい場合は、クライアントのダウンロードページと入門ガイドをご覧ください。ノードの設定をすべて手作業で作り直す必要はありません。

V2Rayノードの速度測定:名前ではなく実際の通信を比較

VMessのプロトコル処理とVLESSの軽量な構造には違いがありますが、実際の使い心地は回線、サーバー負荷、通信方式、ネットワークのパケットロス、端末の性能にも左右されます。2つのノードで接続先の地域、経路、セキュリティ層が異なる場合、速度差のすべてをVMessとVLESSの違いに結び付けることはできません。測定条件のない速度差をパーセンテージで示すこともしません。

  1. 環境をそろえる:同じ端末、同じネットワーク、同じテスト先を使い、帯域を消費しているダウンロードは停止します。
  2. 経路をそろえる:テストの通信が現在のノードを経由し、ルーティングルールで直接接続されていないことを確認します。TCPポートに接続できても、入口への到達を確認できただけで、プロキシ認証の成功を意味するわけではありません。
  3. 複数回テストする:各ノードで最低3回測定し、成功回数、最初の1バイトが届くまでの時間、ダウンロード中の速度を記録します。1回だけ遅延が短かった結果で、何度も失敗した記録を無視しないでください。
  4. ログを確認する:認証エラー、TLSエラー、リクエストのタイムアウトをそれぞれ記録し、設定ミスを直してから性能を比較します。

ブラウザーのプロキシ設定による影響を切り分けるには、ローカルのSOCKSプロキシを明示してリクエストできます。以下の127.0.0.1:10808はローカル待ち受けポートの例です。クライアントに表示される実際のSOCKSポートまたは混合ポートに置き換えてください。ノードの接続先ポート443ではありません。

curl --proxy socks5h://127.0.0.1:10808 --connect-timeout 10 --max-time 30 --output /dev/null --write-out "HTTP=%{http_code} first_byte=%{time_starttransfer}s total=%{time_total}s\n" https://example.com/

このコマンドは、curlをインストール済みのUnix系ターミナルで使えます。Windowsではcurl.exeを使い、出力先の/dev/nullをNULに変更してください。socks5hを指定すると、接続先のドメイン名をSOCKSプロキシ経由で名前解決します。接続タイムアウト10秒、合計タイムアウト30秒は今回のテストでの上限であり、プロトコルの性能指標ではありません。例に使ったサイトもリクエスト確認用で、帯域測定の基準ではありません。

選び方:安定して接続できるノードを優先

同じ接続先へのリクエストを複数回行い、成功率が安定し、認証エラーや証明書エラーがログにないノードを優先します。条件が同程度の場合に限り、遅延とスループットを比較しましょう。問題を切り分けるには、一度に変更するパラメーターを1つにしてください。

よくある質問:プロトコルが正常でもアプリがプロキシを通らないことがある

ノードへの接続成功と、アプリの通信がプロキシを経由することは別の問題です。システムプロキシが影響するのは、主にシステムのプロキシ設定に従うソフトウェアです。v2rayNのTUNモードは仮想ネットワークインターフェース経由で通信を取り込みますが、対象範囲はルーティング設定や除外ルールにも左右されます。VMessとVLESSを切り替えても、ブラウザー拡張機能、ターミナルの環境変数、アプリごとのプロキシ設定が自動で直るわけではありません。

VLESSにnoneと表示されます。暗号化されていないのですか?

まずノードの編集画面でセキュリティ設定を確認してください。VLESSの基本設定にあるencryption=noneは、外側の通信保護がないという意味ではありません。設定でTLSまたはREALITYが必要な場合は、各項目が正しく設定されているか確認しましょう。noneという表示だけで判断しないでください。

VMessが急にすべて接続できなくなりました。まずプロトコルを変えるべきですか?

まずシステム時刻を同期し、元のノードに再接続してログを確認してください。ほかの接続は正常なのに、すべてのVMessノードが同時に失敗する場合は、時刻の問題を優先して調べましょう。元のノードをそのままVLESSに変更しても、サーバー側の設定は変わりません。

VLESSをインポートできても、接続すると失敗する場合はどうすればよいですか?

サブスクリプションに記載されたサーバーポート、通信方式、TLSサーバー名、REALITY公開鍵、shortId、フロー制御を1つずつ照合してください。コアが設定全体に対応していることを確認し、ログも調べましょう。「インポートできた」ことは解析が完了しただけで、設定が有効だとは限りません。

コマンドラインからは接続できるのに、ブラウザーで開けないのはなぜですか?

SOCKSを明示したリクエストが成功する場合は、まずブラウザーのプロキシ拡張機能とクライアントのシステムプロキシ設定を確認してください。次に、ルーティングルールによって接続先が直接接続に振り分けられていないか確認しましょう。特定のアプリだけで失敗しても、VMessやVLESSが使えないとは限りません。

TUNを有効にしたら、必ずVLESSを選ぶ必要がありますか?

必要ありません。TUNは端末上で通信を取り込む方式であり、接続先のプロトコルを限定しません。動作確認済みのノードを使い、仮想インターフェース、権限、DNS、ルーティングを確認してください。有効にする前に元の設定を控え、問題が起きたらTUNをオフにして再テストしましょう。

日常的なプロトコル選びは、クライアントとコアの互換性を確認し、サブスクリプションの設定全体を照合したうえで、時刻と証明書を確認し、最後にアプリの通信が実際にプロキシを通っているかテストする順に進めましょう。VMessとVLESSの違いは問題の切り分けに役立ちますが、この確認手順に代わるものではありません。アウトバウンドのタグ、DNS、ルーティングの照合をさらに確認したい場合は、設定ガイドをご覧ください。

クライアントをダウンロード4つのプラットフォーム向けリンクを確認