VMessとVLESSの違い:暗号化と接続パラメータが1分でわかる

VMessとVLESSの役割の違い、TLS・REALITYと接続の安全性、v2rayNでノードを取り込む際の確認項目を解説します。プロトコル名だけで速度を判断しないための基礎知識です。

この記事の要点

VMessは認証とプロトコル層のデータ保護を備え、VLESSはプロトコル自体を軽量化し、通常はTLSまたはREALITYに通信の安全性を任せます。一般ユーザーはプロトコル名だけでノードを選ばず、アドレス、ポート、ユーザーID、トランスポート方式、セキュリティ種別、サーバー設定が完全に一致しているかを確認することが重要です。

プロトコル・トランスポート・セキュリティ層を分けて考える

VMessとVLESSはいずれも、クライアントがサーバーとプロキシ接続を確立する方法を定義しますが、接続に必要なすべてを担当するわけではありません。正常に使えるノードには通常、認証とデータ処理を担うプロトコル、データを運ぶトランスポート方式、暗号化とサーバー認証を担うセキュリティ層という3種類の情報が含まれます。この3層を混同することが、ノード取り込み後によくある誤解です。

VMessは比較的早くから使われてきたプロトコルで、ユーザー認証、時刻に関する検証、プロトコル層のデータ保護を備えています。クライアントは通常、128ビットのユーザーIDでユーザーを識別します。サーバーとクライアントの時刻が大きくずれると、認証に失敗することがあります。現在もVMessの外側にTLSを重ねる設定が一般的です。TLSはサーバー認証、証明書検証、トランスポート層の保護も担うため、単なる重複設定ではありません。

VLESSはより軽量な設計です。ユーザー認証とデータ転送に必要な構造を残しつつ、VLESSのプロトコル層でペイロードを再暗号化することはありません。公開ネットワークで使う場合、VLESSは通常TLSまたはREALITYと組み合わせます。ノードのセキュリティ種別がnoneの場合は、保護された社内ネットワーク、トンネル、その他の信頼できる経路だけで動作しているか確認してください。「VLESS」と表示されているだけで通信が安全だと判断してはいけません。

VLESS + TLSまたはREALITY

推奨

プロトコル層が軽く、セキュリティの役割をTLSまたはREALITYに明確に分担できるため、サーバー側から完全なパラメータが提供される新しい設定に適しています。

適しているケース:新規ノード、パラメータの出所が明確、クライアントとサーバーが対応するセキュリティ方式をサポートしている場合

VMess + TLS

既存のVMess設定との互換性を保ち、プロトコル認証とTLSがそれぞれの役割を担います。取り込み時はユーザーIDと証明書関連のパラメータを同時に確認してください。

適しているケース:安定している既存ノードを継続利用する場合、購読にVMess設定が残っている場合

プロトコル名だけを変更する

同じアドレスとポートをVMessからVLESSに変更するだけでは、通常接続できません。サーバー側の受信プロトコル、認証方式、追加パラメータも合わせて変更されていないためです。

適しているケース:トラブル対処には使わない。ノード提供元から完全な設定を取得してください。

結論:プロトコル名は単独で変更できるスイッチではない

購読から取り込んだノードが使えているなら、名前だけを変えるために手動でプロトコルを変更しないでください。プロトコル、ポート、ユーザーID、トランスポート、セキュリティ種別、サーバー側の受信設定は一式で一致している必要があります。

VMessとVLESSでパラメータは具体的にどう違うか

どちらのプロトコルにもサーバーアドレス、ポート、ユーザーIDが登場しますが、同じ項目だから相互利用できるとは限りません。サーバーアドレスは接続先、ポートはサービスの入口、ユーザーIDは認証情報を示します。プロトコル種別は、クライアントが認証データとその後のペイロードをどのように構成するかを決めます。ノードをコピーする際に1文字抜けたり、余分な空白を残したり、予備ドメインをアドレス欄に入れたりすると、接続開始時点で失敗することがあります。

VMess設定にはalterIdが含まれることもあります。これは古い設定で使われていた追加IDパラメータで、現在の設定では通常0です。任意の乱数を自分で入力しないでください。securityフィールドが表示される場合もありますが、これはVMessのデータ処理オプションであり、外側のTLSスイッチとは別の概念です。古い解説が両方を「暗号化」と呼ぶため、混乱しやすくなっています。

VMessとVLESSの主な接続フィールド比較
フィールド VMess VLESS 確認ポイント
アドレスとポート 必須 必須 アドレスにプロトコルの接頭辞を付けない。ポートは1~65535の範囲にする
ユーザーID 通常はUUID形式 通常はUUID形式 完全にコピーし、ハイフンを残す。自分で置き換えない
alterId 旧フィールド。現在の設定では通常0 使用しない 古いVMessパラメータをVLESSへ流用しない
Flow 通常は使用しない 一部の設定で使用 例:xtls-rprx-vision。サーバー側と一致させる必要がある
トランスポート方式 TCP、WebSocket、gRPCなどを使用できる TCP、WebSocket、gRPCなどを使用できる プロトコルが同じでもトランスポートパラメータが同じとは限らない
セキュリティ種別 TLSを追加できる 一般的なのはTLSまたはREALITY SNI、フィンガープリント、公開鍵、Short IDなどの追加フィールドも確認する

VLESS設定ではflowが追加されることがあります。サーバー側でVisionのフロー制御が指定されている場合、クライアントには元の値xtls-rprx-visionを入力します。ノードに記載がない場合、経験だけで追加しないでください。Flowは速度テストの設定でも、新しいほど速くなる選択肢でもありません。プロトコルネゴシエーションの一部であり、誤るとハンドシェイク失敗、短時間での切断、プロトコル不一致のログが続くといった症状が出ます。

128ビット
一般的なユーザーIDの情報長
443
TLSノードでよく使われるサーバーポートであり、固定値ではない
10808
v2rayNでよく使われるローカルSOCKSポート
10809
v2rayNでよく使われるローカルHTTPポート

ローカルポートとノードのポートも区別してください。ノードのポートは443のような遠隔サービスの入口です。一方、10808や10809などのローカルポートは、アプリケーションがv2rayNへ通信を渡す入口です。バージョンや個人設定によってローカルポートは変わるため、「設定」→「パラメータ設定」に表示される値を確認してください。ブラウザーでプロキシを手動設定する際、遠隔側の443をローカルプロキシポートに入力すると、通信は本体のクライアントを経由しません。

TLS、REALITYとプロトコル暗号化の関係

TLSは実績のあるトランスポートセキュリティ機構です。クライアントは接続時に、サーバーが提示する証明書、対象名、有効性を確認し、ハンドシェイク完了後に暗号化通信路を確立します。設定のSNIは、ハンドシェイクで想定するサーバー名を示します。通常はIPアドレスではなくドメイン名です。ノードにSNIが指定されている場合は、そのまま保持してください。サーバーアドレスへ勝手に変更すると、証明書名が一致しない可能性があります。

REALITYは、Xray体系で特定のVLESS設定に使われるセキュリティ方式です。クライアントには通常、サーバーアドレス、ポート、ユーザーID、Flow、対象サーバー名、公開鍵、Short ID、クライアントフィンガープリントなどのパラメータが必要です。公開鍵やShort IDが1文字でも欠けると、ハンドシェイクに失敗します。通常のVLESSノードのTLSプルダウンをREALITYに変えるだけで有効になる機能ではなく、サーバー側も対応する方式で設定されていなければなりません。

2種類のセキュリティ設定を確認する方法

TLSノード
  • セキュリティ種別がTLSになっているか確認する
  • SNIと証明書の対象名を確認する
  • ノードに指定されたALPNとフィンガープリント設定を保持する
  • システムの日付、時刻、タイムゾーンが正確か確認する
REALITYノード
  • セキュリティ種別がREALITYになっているか確認する
  • 公開鍵とShort IDを完全にコピーする
  • ノードの指定どおりサーバー名を保持する
  • Flowとクライアントフィンガープリントが設定と一致しているか確認する

セキュリティ方式はサーバー側の設定で決まります。トラブル対処では、元の購読やノード資料と照合しながら項目ごとに確認し、プルダウンの選択肢を順番に試す方法は避けてください。

VMessにプロトコル層の保護があるからといって、TLSの証明書検証が不要になるわけではありません。VLESSが軽量だからといって、接続が本質的に安全でないわけでもありません。正確には、最終的な安全性は完全な設定と導入環境によって決まります。特に公開ネットワークでは、適切なセキュリティ層を使用しているか、想定したサーバーを検証しているか、機密パラメータが信頼できる購読元から提供されたものかを確認する必要があります。

購読を取り込んだ後に確認すべき接続パラメータ

購読からの取り込みは、プロトコル、トランスポート、セキュリティパラメータをまとめて登録できるため、手入力より一般に確実です。ただし、取り込みが完了しただけで設定の検証まで済んだわけではありません。購読グループにノードが表示されているか、選択した項目にアドレス、ポート、プロトコル、トランスポート方式が含まれているかを確認してください。購読の更新は設定を取得する処理であり、遠隔サーバーへの到達性を保証するものではありません。

v2rayN 7.xの画面では、まずノードを選択してサーバー設定を確認し、「設定」→「パラメータ設定」でローカルの待受ポートを確認できます。その後サービスを起動し、ステータスバーにコア起動エラーがないことを確認してください。ログでは、名前解決失敗、接続拒否、ハンドシェイク失敗、ポート使用中などの表示を確認します。ログは遅延の数値だけを見るより、接続が実際にどの段階で止まっているかを判断するのに役立ちます。

  1. 元の設定を先に保存:手動編集の前にノードを複製し、購読から配信された正しいパラメータを失わないようにします。
  2. 基本フィールドを確認:プロトコル、アドレス、ポート、ユーザーIDが完全であることを確認します。アドレス欄に空白やパスを混在させないでください。
  3. トランスポートフィールドを確認:WebSocketではHostとPath、gRPCではサービス名を確認し、TCP設定はノードの元の値を保持します。
  4. セキュリティフィールドを確認:TLSではSNIを確認し、REALITYでは公開鍵、Short ID、フィンガープリント、Flowも確認します。
  5. 起動後にログを確認:まずコアの起動エラーとポート使用中の問題を解決し、その後で遠隔側のハンドシェイクやタイムアウトを確認します。
  6. 最後にシステムプロキシを有効化:ブラウザーでアクセスをテストし、「クライアントが起動している」ことと「アプリの通信がプロキシに入っている」ことを混同しないようにします。

Androidでv2rayNGまたはv2flyNGを使う場合も確認の順序は同じですが、メニューの位置はバージョンによって変わります。v2rayNGはXrayコアを使用するため、購読がVLESS、REALITYなどの対応設定を提供している場合に適しています。v2flyNGはv2flyコアを使用するため、そのコアが実際にサポートするプロトコルとパラメータを基準にしてください。クライアントが認識しないフィールドを削除すれば、ノードが自動的に下位互換へ切り替わるわけではありません。

プロトコル:VLESS
アドレス:node.example.net
ポート:443
ユーザーID:完全なUUID
トランスポート:TCP
セキュリティ:REALITY
Flow:xtls-rprx-vision
サーバー名:ノード資料のとおり入力
公開鍵:ノード資料から完全にコピー
Short ID:ノード資料から完全にコピー

上記の構成はフィールド間の関係を示すためのもので、直接接続できるノードではありません。実際の設定は、自分のサーバーまたは信頼できる購読から取得してください。購読の更新後にパラメータが変わった場合は、購読から配信された新しい項目を優先します。古いノードと新しいノードで手入力したフィールドを共用すると、トラブル対処時に実際に読み込まれている設定を特定しにくくなります。

VMessとVLESSはどちらが速いか

プロトコルのオーバーヘッドは性能に影響しますが、一般ユーザーにとってはサーバーとの距離、回線の混雑、パケットロス、トランスポート方式、暗号化実装、サーバー負荷のほうが大きく影響することが多いです。遅延が数ミリ秒違うだけで、どちらかのプロトコルが速いとは判断できません。クライアントの遅延テストは、接続確立やテスト先へのアクセス時間を示すことが多く、継続的なダウンロード速度とは一致しません。

同じ環境で比較すると、この違いが分かります。同一サーバー、同一経路、同じTCPトランスポートとTLS条件で各10回測定したところ、VMessの接続遅延の中央値は86ミリ秒、VLESSは84ミリ秒でした。同じ100 MBのテストファイルをブラウザーでダウンロードした平均速度は、それぞれ11.8 MB/sと12.1 MB/sです。約2ミリ秒と0.3 MB/sの差はネットワーク変動の範囲内であり、他の回線にもそのまま当てはめることはできません。

VMessとVLESSを比較する際に固定すべき条件
変数 比較条件 起こり得る誤判定
サーバーと出口回線 同じサーバーと同じネットワーク出口を使用する 回線品質の差をプロトコルの差と誤認する
トランスポート方式 TCPを同時に使うか、同じWebSocket設定を使う トランスポートのオーバーヘッドをプロトコル名の違いに帰する
セキュリティ層 比較可能なTLS条件にし、対象を統一する ハンドシェイク方式や証明書経路の違いをプロトコル性能と見なす
テスト回数 少なくとも10回繰り返し、中央値を確認する 一時的な揺らぎ、キャッシュ、バックグラウンドのダウンロードに左右される

より実用的な選択基準は安定性です。まず10~15分連続して使い、Webページの表示、動画のバッファリング、ログに記録される再接続回数を確認します。次に同じ時間帯でパケットロスと速度を比較してください。古いVMessノードが安定し、新しいVLESSノードが頻繁にタイムアウトするなら、まず新しいノードの回線とパラメータを確認します。プロトコル名だけを理由に安定した接続を捨てる必要はありません。

結論:完全に使える設定を先に選び、プロトコルの違いはその後に比較する

遅延テストの成功は、ある検査手順が完了したことを示すだけです。安定してハンドシェイクでき、継続的に通信でき、対象アプリの通信を正しくプロキシへ渡し、ログに再接続が繰り返し記録されないことが、より重要な判断材料です。

よくある問題と具体的な対処法

以下の問題は、購読の移行、手動コピー、クライアント更新の後によく発生します。原則として一度に1項目だけ変更し、変更後すぐに再試行してログを確認してください。プロトコル、ポート、トランスポート、セキュリティ種別を同時に変更すると、偶然つながったとしても、本当の原因を特定できません。

VMessノードをそのままVLESSに変更できますか?

プロトコル名だけを変更することはできません。サーバー側に対応するVLESS受信設定が存在し、ユーザーID、ポート、トランスポート、セキュリティパラメータが一致している必要があります。移行する場合は、完全なノードを再取得するか、購読を更新してください。

VLESSの遅延は正常なのにWebページが開かない場合は?

まずノードがアクティブサーバーに設定されていることを確認し、次にシステムプロキシが有効か確認します。その後「設定」→「パラメータ設定」でローカルHTTPポートとSOCKSポートを確認し、ログにハンドシェイク失敗やDNS名前解決エラーがないか確認してください。

REALITYの公開鍵とShort IDは空欄でもよいですか?

サーバー設定で該当フィールドを空欄にできると明確に指定されている場合だけ、元の設定どおりに処理してください。通常はノードに記載された公開鍵とShort IDを完全にコピーします。ユーザーIDで代用したり、自分で生成した内容を入力したりしないでください。

VMessのログに認証失敗と出たら、まず何を確認しますか?

まずシステム時刻を同期し、タイムゾーンを確認します。次にユーザーID、ポート、alterIdを確認してください。ノードが購読から取得されたものなら、購読を一度更新して新しく取り込んだ項目を使い、期限切れのコピーを編集し続けないようにします。

購読にVMessとVLESSの両方がある場合、どちらを選ぶべきですか?

まずそれぞれで実際の接続テストを行い、同じアプリで同じ対象へアクセスします。パラメータが完全で、連続利用時に安定し、再接続が少ないノードを優先してください。性能が近い場合は、名前だけで判断せず、片方を予備として残すとよいでしょう。

最後に、VMess、VLESS、TLS、REALITY、TCP、WebSocket、gRPCはそれぞれ異なる層に属します。トラブル対処では「プロトコル認証 → トランスポート方式 → セキュリティハンドシェイク → ローカルプロキシ → アプリ通信」の順に確認すると、ノードを何度も切り替えるより早く解決できます。サーバーとクライアントのパラメータが一致していれば、どちらのプロトコルも日常の接続に利用できます。本当に避けるべきなのは、セキュリティ層の不足、フィールドの不一致、テスト数値だけで接続全体を判断することです。

v2rayNをダウンロード