VMessとVLESSの違いを解説|暗号化・設定・選び方

VMessとVLESSの暗号化、時刻認証、通信方式の違いを解説。v2rayNGへのノードのインポート時に確認したい設定も紹介します。

この記事の要点

VMessとVLESSはプロキシプロトコルであり、クライアントやノードの通信速度を示すものではありません。VMessはプロトコル層でデータを暗号化でき、端末の時刻が正確である必要があります。一般的なVLESS設定では、TLSまたはREALITYが通信を保護します。利用できるサブスクリプションがある場合は、提供されたプロトコルと設定をそのまま使いましょう。手動でインポートする場合は、UUID、通信方式、セキュリティ層、サーバー名を確認してください。

1分で比較:プロトコル・暗号化・時刻

v2rayNとv2rayNGは、設定を管理し、コアを使って接続するクライアントです。VMessとVLESSは接続に使うプロトコルです。ノード設定にはサーバーアドレス、ポート、通信方式、セキュリティ設定も含まれます。そのため、「VLESS」という名前だけでは、使用中のクライアントで動作するか判断できません。

比較項目VMessVLESS
認証情報通常はUUIDを使用。現在一般的な設定ではAEAD認証を採用通常はUUIDを使用。サーバー側でユーザー認証を実施
データの暗号化プロトコル自体でデータを暗号化できる一般的な設定ではencryption=noneを使用し、外側の層で通信を保護
時刻要件認証に時刻を使用するため、通常はサーバーとの誤差を約120秒以内にする必要があるVMessのようなタイムスタンプ認証は不要。ただし、外側の証明書検証には正確な時刻が必要
一般的な構成VMess + WebSocket + TLSVLESS + WebSocket + TLS、または VLESS + TCP + REALITY
インポート時の確認項目UUID、暗号化方式、通信設定、旧設定との互換性UUID、TLSまたはREALITY、flow、対応する通信設定

表の構成はよく使われる組み合わせであり、固定の組み合わせではありません。WebSocketは通信方式、TLSはセキュリティ層、REALITYは別のセキュリティ機構です。これらを同じ種類の選択肢として自由に置き換えることはできません。サーバーが対応する構成に合わせて、クライアントも設定してください。

確認の順序:まず構成全体を確認

ノードの編集画面を開き、まず「プロトコル+通信方式+セキュリティ層」の3項目を控えてから、UUIDと追加設定を確認します。VMessとVLESSの名前だけを比べても、接続失敗の原因は特定できません。

暗号化の違い:VLESSのnoneとは

VMessの認証方式とデータの暗号化は別のものです。クライアントに表示されるAEADは、一般にVMessの現行の認証方式を指します。データの暗号化方式には、auto、aes-128-gcm、chacha20-poly1305などが表示されることがあります。「AEADを使う」からといって、特定の暗号化アルゴリズムを手動で指定する必要があるわけではありません。

一般的なVLESSノードのencryption=noneは、VLESSの層ではデータを暗号化しないという意味です。接続全体が必ず平文で送信されるということではありません。TLSを使う場合はクライアントとサーバー間の通信がTLSで保護され、REALITYを使う場合は必要なパラメーターを正しく設定します。反対に、すべてのVLESSノードに自動的な保護があるとも限りません。実際の設定を確認してください。

時刻認証:VMessで接続できないときは端末の時刻を確認

VMessの認証には時刻が関係します。スマートフォンやパソコンの時刻が数分ずれていると、アドレスとUUIDが正しくても認証に失敗することがあります。約120秒は時刻の許容範囲を理解するための目安であり、手動で限界値に合わせるものではありません。端末の自動時刻設定を有効にし、時刻を正確に保ちましょう。

  1. Android:システムの「設定」→「システム」→「日付と時刻」を開き、自動設定を有効にします。機種によっては「その他の設定」にあります。
  2. Windows:「設定」→「時刻と言語」→「日付と時刻」を開き、「時刻を自動的に設定する」を有効にしてから「今すぐ同期」を実行します。
  3. 再テスト:時刻を合わせたら、クライアントの接続を停止して再起動します。認証エラーやハンドシェイクエラーが続くか確認し、サブスクリプション全体を先に削除する必要はありません。

タイムゾーンの表示が異なっていても、システム時刻が誤っているとは限りません。プロトコルで重要なのは実際のタイムスタンプです。VLESSにはVMessと同じ時刻認証の仕組みはありませんが、端末の日付が大幅にずれていると、TLS証明書が「まだ有効ではない」「期限切れ」と判定される場合があります。そのため、「VLESSなら時刻合わせは不要」とは言えません。

通信構成:動作中の設定を保ち、対応範囲に合わせて選ぶ

プロトコルの選択欄を変更しても、サーバー上のVMessサービスをVLESSに変換することはできません。クライアントとサーバーで同じプロトコルを使う必要があります。サブスクリプションに複数の接続先がある場合は、特定のプロトコルが必ず速いと決めつけず、構成全体と実際の動作を比べてください。

サブスクリプションにある、動作確認済みの完全な設定

推奨

提供元が作成したプロトコル、通信方式、セキュリティ設定をそのまま使いましょう。VMessノードが安定して使えているなら、プロトコル名が違うというだけで変更する必要はありません。VLESSノードの場合も、意味が分からないからといってflowやREALITYの項目を削除しないでください。

おすすめ:サブスクリプション利用、日常的な接続、手入力ミスの防止

VMess + WebSocket + TLS

WebSocketのパス、Host、TLSのサーバー名をそれぞれ確認します。パスは大文字と小文字を区別することが多く、接続先から通常のWebページが表示されても、プロキシのハンドシェイク設定が正しいとは限りません。

おすすめ:サーバーがこの構成を導入済みで、既存の接続先を使い続けたい場合

VLESS + TCP + REALITY

該当機能に対応したコアが必要です。サーバーでxtls-rprx-visionが指定されている場合は、flowも一致させてください。この設定をWebSocketノードにそのままコピーしないでください。

おすすめ:提供元が完全な設定を明示しており、クライアントのコアがその構成に対応している場合

v2rayNGはXrayコアを使用します。v2rayNの実際の機能は、選択中のコアによって異なります。v2flyNGはv2flyコアを使用するため、特定のVLESS設定を扱えるからといって、Xrayのすべての拡張機能に対応しているとは限りません。互換性を判断する際は、プロトコル、通信方式、セキュリティ機構、コアの対応範囲をあわせて確認してください。

クライアントへのインポート:UUID・SNI・flowを個別に確認

完全な共有リンクまたはサブスクリプションからのインポートをおすすめします。VMessの共有リンクは通常vmess://で始まり、設定をエンコードした形式が一般的です。VLESSの共有リンクはvless://で始まり、追加設定は通常クエリ部分に含まれます。リンクが長いのはサーバーアドレス以外の情報も含むためです。ドメインとポートだけをコピーしないでください。

インポート時の確認:デスクトップ版とAndroid版

デスクトップ版:v2rayN
  • 共有リンク全体をコピーし、「クリップボードから共有リンクをインポート」を選択します。一般的なショートカットキーはCtrl+Vです。
  • サブスクリプションURLは「サブスクリプショングループ設定」に登録し、保存後に更新します。単一ノードのリンクとして貼り付けないでください。
  • ノードの編集画面でプロトコル、ポート、セキュリティ層を確認します。REALITYを使う場合は、対応するコアが選択されていることを確認してください。
Android版:v2rayNG
  • 右上の「+」→「クリップボードからインポート」をタップするか、完全な設定を含むQRコードを読み取ります。
  • サブスクリプションはサイドメニューの「サブスクリプショングループ設定」から追加し、「サブスクリプションを更新」を実行します。メニュー名はバージョンによって異なる場合があります。
  • ノードを編集するときにTLSまたはREALITYの設定を確認し、接続を開始したらシステムの案内に従ってVPN接続を許可します。

同じサブスクリプションを両方の端末で設定確認に使えますが、一覧が一致するかどうかは提供元の応答内容と各端末の互換性によります。見た目をそろえるためにプロトコルを手動変更しないでください。

サーバーアドレス、SNI、WebSocket Hostはそれぞれ別の項目です。サーバーアドレスは接続先を指定し、SNIは通常TLSハンドシェイクで使うサーバー名を示します。WebSocket HostはHTTPリクエストに関する設定です。値が同じ場合も異なる場合もあるため、提供元の設定に従い、すべてを接続先アドレスに置き換えないでください。

よくある質問:接続できない・速度の見方

VMessでは接続できるのに、VLESSに変えたらつながらないのはなぜ?

元の設定に戻してください。プロトコル名はクライアント側だけで切り替えられるものではなく、サーバー側でVLESSが提供され、対応する設定が割り当てられている必要があります。切り替える場合は、提供元から完全なリンクを再取得し、別のノードとしてインポートしてください。

VLESSの表示がnoneなのは、パスワードの入力漏れ?

まず、それがセキュリティ層ではなくencryptionの項目であることを確認してください。一般的なVLESS設定ではnoneを使い、UUIDで認証しながらTLSまたはREALITYで通信を保護します。セキュリティ層が元のリンクと一致しているかを確認し、VMessの暗号化方式に変更しないでください。

インポートできたのにハンドシェイクに失敗する場合、まず何を確認する?

インポートが成功したのは、設定を読み込めたという意味にすぎません。まず端末の時刻を合わせ、次にアドレス、ポート、UUID、SNI、通信設定を順に確認してください。REALITYでは公鍵とshort IDも確認します。ログに証明書エラーが表示された場合は、サーバー名またはサーバー証明書を修正し、検証を無効にして回避しないでください。

VLESSはVMessより必ず速い?

プロトコルだけでは判断できません。同じネットワーク、近い時間帯、同じテスト先で繰り返し測定し、Webページの読み込み、接続の安定性、ダウンロードの動作を比較しましょう。サーバーの負荷、回線の混雑、通信構成は、プロトコル自体より結果に影響することがあります。1回の遅延が低くても、継続的な通信速度が高いとは限りません。

ノードのテストは正常なのに、ブラウザーでページを開けないのはなぜ?

まず、通信がクライアントを経由しているか確認してください。v2rayNではシステムプロキシの設定を、v2rayNGではVPNサービスが起動しているか、アプリごとの対象範囲を確認します。次にルーティングとDNSを確認してください。通信をどこまでクライアントが処理しているか確かめる前に、VMessやVLESSの設定を何度も変更しないでください。

対処の基本:変更する項目は一度に1つ

元のノードを残し、調査用に複製してください。確認できた不一致を1項目ずつ修正し、その都度テストします。サーバーが利用できない場合は、サブスクリプションを更新するか提供元に問い合わせてください。暗号化、flow、通信設定を次々に推測で変更するのは避けましょう。

クライアントをダウンロードOSとアーキテクチャを選択