VMessとVLESSの違いは?設定項目と互換性を1分で解説

VMessとVLESSの暗号化、設定項目、クライアント互換性の違いをわかりやすく解説。サブスクリプションのプロトコルを見分け、迷わずインポートするためのポイントを紹介します。

この記事の要点

VMessとVLESSはプロキシプロトコルであり、クライアントアプリではありません。VMessでは一般的に、プロトコル自体がデータを暗号化します。一方、よく使われるVLESSの設定では、TLSやREALITYが通信を保護します。まずはサブスクリプションの設定をそのままインポートし、プロトコル、トランスポート、安全設定を確認するのが、手動でプロトコルを変更するより確実です。この記事では、ノードの見分け方からインポート失敗時の確認方法まで、設定を一致させるべき項目と流用できない項目を解説します。

1分でわかる:プロトコル、トランスポート、安全レイヤーの違い

v2rayNのノード編集画面には、VMess、VLESS、WebSocket、TLSが同時に表示されることがあります。これらは同じレイヤーの設定ではありません。VMessとVLESSはプロキシプロトコル、TCPやWebSocketなどは通信方法を決めるトランスポート、TLSやREALITYは通信の保護と認証を担います。どれか一つの名前だけ見ても、ノード全体の設定は判断できません。

比較項目VMessVLESS
認証情報通常はUUIDを使用通常はUUIDを使用
一般的な暗号化設定一般的にはautoなどの選択肢があり、実装側が適切なアルゴリズムを選択従来型の一般的な設定ではencryptionはnone。TLSまたはREALITYを別途設定
追加で確認する項目暗号化方式、旧設定のalterId安全レイヤー、flow、REALITYで必要なパラメーター
そのまま相互に切り替えられるかできません。サーバーとクライアントのプロトコルを一致させる必要があります

UUIDは、サーバーがユーザーを識別するための認証情報の一つです。ただし、それだけで設定が完結するわけではありません。UUIDが同じでも、ポート、プロトコル、トランスポートのパスが異なれば、互いに置き換えることはできません。また、プロトコル名だけで回線品質は決まりません。通信事業者間の接続、混雑状況、サーバー負荷などが、使用感に大きく影響します。

暗号化の違い:VLESSのnoneは通信全体が平文という意味ではない

一般的なVMess設定では、プロキシデータをプロトコルレイヤーで暗号化します。現在の設定では、VMess AEADがよく使われます。さらに外側にTLSを重ねて、通信を保護することもできます。VMessのデータ暗号化設定とTLSの有効・無効は、処理するレイヤーが異なるため、混同しないでください。

従来型の一般的なVLESS設定にあるencryption=noneは、VLESS自体のレイヤーについて示す値であり、TLSやREALITYが無効だという意味ではありません。通信が保護されているかを判断するには、安全レイヤーの設定も確認してください。VLESSを通常のTCPで使用し、通信保護を別途設定していない場合は、VLESS + TLSと同じ安全性があると考えてはいけません。

確認の基本:設定の組み合わせ全体を見てから、個別項目を確認

VLESSのnoneが表示されたら、まずTLSまたはREALITYの設定を確認します。VMessのautoも同様に、トランスポートとサーバー側の要件を確認してください。「安全ではない」と見える表示を消すために、サブスクリプションの設定を勝手に変更しないでください。

設定項目の確認:ポート、UUID、alterId、flow

インポート失敗と接続失敗は別の問題です。前者は、リンク形式の非対応やデータの不足が主な原因です。後者は、ノードが一覧に追加された後に起こることが多くあります。手動で確認するときは、まずアドレス、ポート、UUIDを確認し、次にプロトコル固有の項目、最後にトランスポートと安全レイヤーを確認してください。

443
TLSでよく使われるサーバーポート(固定ではありません)
0
現行のVMess AEAD設定で一般的なalterIdの値
10808
ローカルプロキシポートの例(クライアントの表示を優先)

この3つの数値は、それぞれ異なる設定項目です。443はリモートサーバーが待ち受ける可能性のあるポート、10808はローカルアプリがプロキシに接続するときの入口として使われる可能性のあるポート、alterIdはVMessの旧来の設定項目です。ブラウザーの設定が10808だからといって、ノードのリモートポートまで10808に変更してはいけません。現行のVMess AEAD設定では、alterIdは通常0です。古い解説に0以外の値が記載されている場合は、新しいノードに流用せず、まず提供元に確認してください。

  1. アドレスとポート:提供元が指定した値を省略せず入力します。TLSを使うノードが必ず443番ポートとは限りません。ほかのポートでもTLSを利用できます。
  2. UUID:余分な空白が入らないよう、値全体をコピーします。サブスクリプションのトークンをユーザーID欄に入力しないでください。
  3. VMessの暗号化:サブスクリプションの設定をそのまま使います。VLESSのencryptionの値を流用しないでください。
  4. VLESSのflow:サーバー側で指定されている場合のみ入力します。例:xtls-rprx-vision。すべてのVLESSノードがVisionを使うわけではありません。
  5. トランスポートと安全レイヤー:パス、Host、サーバー名などを確認します。REALITYのパラメーターを通常のTLSノードに流用してはいけません。

クライアントの互換性:アプリ名だけでなく、コアの対応状況を確認

v2rayNはデスクトップクライアントで、実際の接続処理は呼び出されるコアが担います。v2rayNGはXrayコアを使うAndroidクライアント、v2flyNGはv2flyコアを使います。基本的なVLESSに対応していても、VLESSのあらゆる拡張設定に対応するとは限りません。特に、REALITY、Vision、新しいトランスポートが利用できるとは判断できません。

サブスクリプションの設定をそのままインポート

おすすめ

提供元が指定したプロトコルと安全レイヤーを維持し、現在のクライアントコアが設定全体に対応しているか確認します。すでに使えるノードがあるなら、プロトコル名だけを理由に設定を組み替える必要はありません。

おすすめの用途:初回設定、日常利用、複数デバイスへのインポート

ノードを手動で作成

すべての設定情報がそろっている場合に限り、手動で入力します。VMessもVLESSもサーバー側の設定が必要です。クライアントのメニューでプロトコルを切り替えるだけでは、移行できません。

おすすめの用途:自前サーバーの構築、不足項目の特定、インポート結果の確認

インポートする前に、クライアントの「バージョン情報」画面でコアのバージョンを確認します。ログに特定の項目、flow、トランスポートが非対応と表示された場合は、UUIDを何度も変えるのではなく、バージョンと選択中のコアを確認してください。Xray固有の設定については、v2flyNGがVLESSという名前を認識するだけで互換性があると判断できません。

デスクトップとAndroidの確認方法:同じサブスクリプションを使い、各端末の対応状況を個別に確認

デスクトップ:v2rayN
  • 「サブスクリプショングループ」→「サブスクリプショングループの設定」でサブスクリプションURLを保存します。
  • サブスクリプションを更新したら、ノード編集画面を開いてプロトコルと安全レイヤーを確認します。
  • REALITYなどを使用する場合は、実際に呼び出されるコアとそのバージョンが対応しているか確認します。
Android:v2rayNGまたはv2flyNG
  • まず、現在のアプリがサブスクリプションの返却形式に対応しているか確認します。
  • v2rayNGはXrayの対応状況を、v2flyNGはv2flyの対応状況を確認します。
  • それぞれでサブスクリプションを更新し、ノード数と主要な設定項目を確認します。自動同期されるとは限りません。

メニュー名はバージョンによって異なる場合があります。同じサブスクリプションでも、リクエスト元のクライアントに応じて内容が変わることがあるため、両方の端末で個別に確認してください。

サブスクリプションのインポートと接続確認:まず形式、次にログ

単一ノードの共有リンクとサブスクリプションURLは用途が異なります。前者には通常、1つのノードの設定が含まれ、vmess://やvless://で始まります。後者は通常、複数のノードを取得するためのネットワーク上のURLです。単一ノードの編集画面にサブスクリプションURLを入力したり、Webページの内容全体を共有リンクとして扱ったりすると、インポートに失敗することがあります。

  1. 入力の種類を確認します。単一ノードのリンクはクリップボードからインポートします。サブスクリプションURLはサブスクリプショングループに追加してから更新します。サブスクリプション管理ページのURLを、サブスクリプション用の接続先と取り違えないでください。
  2. インポート結果を確認します。ノード編集画面を開き、メモから推測するのではなくプロトコルを確認します。その後、ポート、トランスポート、安全レイヤーを確認してください。
  3. 起動後にログを確認します。まず設定の解析エラーを確認し、その後、接続タイムアウト、認証失敗、証明書検証エラーを調べます。エラーの種類に応じて対処してください。
  4. 最後にアプリのプロキシ設定を確認します。デスクトップのブラウザーでは、通常、システムプロキシまたは個別のプロキシ設定が必要です。アプリがプロキシを使っていない場合、ノードが使える状態でも通信が経由しているとは限りません。

速度テストの数値が示すのは、特定の条件下での結果にすぎず、VLESSがVMessより常に速いことの証明にはなりません。プロトコルを変えると、サーバー、トランスポート、回線も同時に変わることが多く、プロトコル単体の負荷を比較するのは困難です。現在のVMessノードが安定しているなら、そのまま使いましょう。提供元が現在のクライアントに対応したVLESSノードを用意している場合は、Webページの表示、連続ダウンロード、ネットワーク切り替え後の復旧を個別にテストしてください。

よくある質問:ノード名が似ていても設定を流用できない理由

VMessをVLESSに変更すれば、そのまま接続できますか?

できません。提供元からVLESSの設定を入手するか、自前のサーバーに対応するインバウンドを追加して、新しいノードをインポートしてください。テスト失敗後に元に戻せるよう、現在使えているVMessノードは上書きしないでください。

VLESSにnoneと表示されます。autoに変更すべきですか?

従来型の一般的なVLESS設定では、encryptionはnoneのままにし、TLSまたはREALITYが提供元の指定どおりか確認します。autoはVMessの暗号化設定で使われることが多く、別のプロトコルに流用できません。

同じサブスクリプションがパソコンでは使えるのに、Androidでは使えない場合は?

まず両方の端末でサブスクリプションを更新し、ノードのプロトコル、トランスポート、安全レイヤーを確認してから、各端末のコアのバージョンを調べます。接続できないノードがREALITYやVisionを必要とする場合は、Android側のコアが対応しているか重点的に確認してください。ノードのメモだけを比べても解決しません。

接続タイムアウトが表示されたら、プロトコルとポートのどちらを変えるべきですか?

どちらも安易に変更しないでください。まずサブスクリプションの有効期限、アドレス、ポートを確認し、次にサーバーへ接続できるネットワークか調べます。提供元が予備のポートや別プロトコルの設定を明示している場合に限り、新しいノードを追加してテストしてください。

v2rayNをダウンロード