この記事の要点

VMessとVLESSはどちらもプロキシプロトコルで、クライアント名ではありません。VMessは通常、プロトコル層でデータを暗号化します。一方、一般的なVLESS設定ではencryption=noneとし、TLSやREALITYで通信経路を保護します。選ぶ際は、まずサーバーが対応する方式を確認し、伝送方式、認証項目、コアの対応状況を照合しましょう。クライアント側のプロトコル名だけを変更しても使えるようにはなりません。この記事は、サブスクリプションのインポートやノードの手動設定を行う方、VMessからVLESSへの移行を検討している方に向けた内容です。

1分で比較:プロトコル・暗号化・伝送方式の違い

ノード設定は、3つの要素に分けて考えるとわかりやすくなります。VMessまたはVLESSはプロキシ要求とユーザー認証を担当し、TCPやWebSocketなどがデータを運び、TLSやREALITYが通信の安全性を確保します。それぞれ役割が異なるため、VMess + WebSocket + TLSも、VLESS + TCP + REALITYも利用できます。

v2rayNはデスクトップ向けクライアント、v2rayNGはXrayコアを採用したAndroid向けクライアント、v2flyNGはv2flyコアを採用したAndroid向けクライアントです。クライアントでリンクをインポートできても、現在のコアがリンク内のすべての組み合わせに対応しているとは限りません。特にREALITYやフロー制御などは、コアの実装とバージョンを確認してください。

比較項目VMessVLESS
ユーザー認証通常はUUIDを使用通常はUUIDを使用
一般的なデータ暗号化プロトコル層でAES-GCM、ChaCha20-Poly1305などを使用可能一般的な設定はnone。外側のセキュリティ機能に依存
時刻への依存認証時に時刻関連のチェックがあるため、システム時刻を正確に保つ必要がある基本認証ではVMessの時間枠による仕組みを使用しない
追加設定項目security、alterIdなど。現在の設定では通常alterId=0encryption、flow、TLSまたはREALITY関連の項目
切り替えに必要な条件サーバー側に対応するプロトコルの接続口が必要。クライアントの種類だけを変更しても使えない

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

VMessのプロトコル層での暗号化と、外側のTLSは別の仕組みです。たとえばVMess + WebSocket + TLSでは、VMessがプロキシデータを暗号化し、TLSがクライアントからTLS終端までの通信を保護します。設定にセキュリティ関連の項目が2つあっても、同じパラメーターを重複して指定しているわけではありません。

一般的なVLESS設定のencryption=noneは、この層で追加のデータ暗号化を有効にしないという意味であり、TLSを無効にする設定ではありません。VLESS + TLSでは、サーバーアドレス、ポート、serverNameを正しく設定する必要があります。REALITYを使う場合は、サーバーから指定された公開鍵やshortIdなどを一致させてください。新しいバージョンでは暗号化機能が拡張されている場合もあるため、具体的な項目はサブスクリプションと双方のコアのドキュメントを確認しましょう。古い解説をすべてのバージョンに当てはめないでください。

設定の確認:プロトコル項目とセキュリティ項目を分ける

VMess + WebSocket + TLS
  • プロトコル層ではUUID、security、alterIdを確認します。
  • 伝送層ではWebSocketのpathとHostを確認します。
  • TLS層ではserverNameと証明書の有効性を確認します。
VLESS + TCP + REALITY
  • プロトコル層ではUUID、encryption、サーバーが要求するflowを確認します。
  • セキュリティ層ではserverName、公開鍵、shortIdを確認します。
  • 双方のコアがこの組み合わせに対応しているか確認し、WebSocket用の項目を流用しないでください。

サブスクリプションの内容を層ごとに確認しましょう。証明書やハンドシェイクのエラーが出た場合は、まずセキュリティ関連の設定を修正してください。証明書検証を無効にして問題を隠すのは避けましょう。

速度の違い:まず回線を比較し、次にプロトコルの処理負荷を確認

VLESSは基本的なプロトコル設計が軽く、一般的な設定ではVMessより一部のプロトコル処理や暗号化処理が少なくて済みます。ただし、実際のダウンロード速度はサーバー負荷、往復遅延、パケットロス、帯域上限、伝送方式の組み合わせ、端末の暗号処理能力にも左右されます。VLESSなら必ず何倍速いと断言することはできません。異なる地域のサーバー2台で測定した結果を、すべてプロトコルの差とみなすこともできません。

動作確認済みの設定をそのまま使う

おすすめ

現在のノードが安定していて速度にも問題がなければ、設定を維持しましょう。移行するかどうかは、サーバーの対応状況、運用方針、実際の比較結果をもとに判断してください。

おすすめのケース:利用可能なサブスクリプションがあり、日常的な安定接続を重視する方。

VLESSの接続口と比較テスト

サーバーが両方のプロトコルに対応している場合は、同じ端末、同じネットワーク、近い時間帯で比較します。伝送方式とセキュリティ方式の組み合わせを記録し、回線の違いをプロトコルの優位性と混同しないようにしましょう。

おすすめのケース:サーバーの管理権限がある方、または比較可能な2種類の接続口が用意されたサブスクリプションを使っている方。

  1. 同じファイルを使ってテストし、接続確立までの時間、ダウンロード中の速度、接続が切れるかどうかをそれぞれ記録します。
  2. 各設定を3回ずつ交互にテストし、テスト中はほかの大容量通信を停止してください。
  3. 一方の設定だけサーバー、伝送方式、ルーティングを変更した場合、結果は「設定一式の違い」として記録し、「プロトコル性能の違い」とは区別してください。

結論:安定しているノードはプロトコル名だけを理由に変更しなくてよい

比較テストで改善が繰り返し確認でき、新しい設定のセキュリティ項目とコアの互換性も確認できた場合に限り、普段使いの接続先を切り替えましょう。問題が起きたときに戻せるよう、古い設定も残してください。

設定項目の入力方法:alterId、ポート、flow

信頼できる提供元のサブスクリプションをインポートするほうが、項目を一つずつ手入力するよりミスを防ぎやすくなります。手動で設定する場合は、相手から提供された方式がVMessかVLESSかを確認してから、該当するノード編集画面を開いてください。クライアントのバージョンによって日本語メニューの表示は異なることがありますが、「プロトコル、アドレス、ポート、ユーザーID、伝送方式、セキュリティ」の対応関係は変わりません。

0
現在のVMess AEAD設定で一般的なalterIdの値
443
TLSでよく使われるサーバーポート。実際の値はノード設定を確認
10808
ローカルプロキシの待ち受けポートの例。リモート側のポートではない

上記の数値はそれぞれ用途が異なります。alterId=0は現在のVMess AEAD設定に関する値で、ポート番号ではありません。443はよく使われるリモート接続口のポートですが、別の値の場合もあります。127.0.0.1:10808は端末上のアプリがプロキシに接続するためのアドレス例にすぎず、実際の値はクライアントの待ち受け設定で確認してください。ローカルポートをリモートノードに入力してしまうのは、項目がそろっているように見えるのに接続できない原因の一つです。

サブスクリプションURL、共有リンク全体、UUIDはすべて機密情報として扱ってください。人に相談するときは、プロトコルの種類、伝送方式、エラーのキーワードを伝え、リンク全体やサブスクリプションのQRコードを公開しないでください。

時刻チェック:VMessの認証が突然失敗する原因

VMessの認証では時刻に関する情報が使われます。クライアントとサーバーの時刻が大きくずれていると、UUIDを変更していなくても認証に失敗することがあります。確認するのはタイムゾーンの表示だけではなく、システム上の実際の時刻です。タイムゾーンの表示が異なっても同じ時刻を示していれば、通常は問題ありません。時刻を手動で数分進めると、認証に影響する可能性があります。

VLESSの基本認証はVMessの時間枠による仕組みに依存しませんが、システム時刻を気にしなくてよいという意味ではありません。TLS証明書には有効期間があり、ほかのハンドシェイク方式でも時刻関連の情報を使う場合があります。端末の時刻を正確に合わせることは、どちらの設定でも基本的なトラブルシューティングです。

  1. Windows:「設定」→「時刻と言語」→「日付と時刻」を開き、時刻の自動設定を有効にして「今すぐ同期」を実行します。
  2. Android:システム設定で「日付と時刻」を検索し、自動設定を有効にします。メニューの場所は端末によって異なります。
  3. サーバー:管理権限がある場合は、時刻同期サービスが正常に動作しているか確認します。権限がない場合は、認証エラーが発生した時刻と状況をサービス提供元に伝えてください。
  4. 同期後に再テスト:同じノードに再接続し、クライアントのログを確認します。それでも失敗する場合は、UUID、サーバーポート、伝送方式の設定を確認してください。暗号化の項目を手当たり次第に変更するのは避けましょう。

よくある質問:サブスクリプションの移行と接続できない場合の対処

VMessノードをVLESSに変更するだけで使えますか?

いいえ。サーバー側でVLESSの接続口を設定し、対応するポート、ユーザー認証、伝送方式、セキュリティ関連の項目を用意する必要があります。サービス提供元から案内されたVLESSの共有リンクをインポートするか、サブスクリプションを更新してください。元のノードでプロトコルのプルダウンだけを切り替えても使えません。

VLESSをインポートできたのに接続できないのはなぜですか?

インポート成功は、クライアントが設定を読み込めたことを示すだけです。まずログで接続タイムアウト、証明書検証エラー、認証エラーの有無を確認し、リモートアドレスとポート、serverNameとセキュリティ設定、UUIDとflowをそれぞれ照合してください。REALITYを使う場合は、公開鍵とshortId、および現在のコアが対応しているかも確認します。

v2rayNGで使えるサブスクリプションは、v2flyNGでも必ず使えますか?

必ず使えるとは限りません。2つのクライアントは異なる系統のコアを採用しているため、サブスクリプションをインポートできることだけで機能の対応状況は判断できません。特にXray固有の組み合わせを使う場合は、先に使用するコアの対応状況を確認してください。v2flyNGでは、サービス提供元が案内し、コアが対応している設定を選びます。重要な項目を削除して無理に動かそうとしないでください。

接続済みなのにブラウザーでWebページを開けません。プロトコルの選択ミスですか?

必ずしもそうとは限りません。まず、必要に応じてシステムプロキシまたはTUNが有効になっているか確認します。次に、ブラウザーがプロキシを参照しているか、DNSが正常か、ルーティングで対象の通信が正しいアウトバウンドに送られているかを確認してください。ローカルの待ち受けポートが使用中とログに表示される場合は、先にポートの競合を解消します。通信がクライアントに届いていることを確認する前に、プロトコルを変更しないでください。

日常利用では、まず信頼できるサブスクリプションを選び、設定項目の不足がないこととコアの対応状況を確認してから、処理負荷や速度を比較しましょう。プロキシモードとルーティング設定の違いはクライアントの使い方ガイドをご覧ください。名前解決の失敗やアクセス異常が起きた場合は、DNSのトラブルシューティングも参考にしてください。ローカルネットワークの問題をVMessやVLESS自体の問題と取り違えずに済みます。