REALITYとXTLS Visionの仕組みを解説:VLESSの新しい通信方式はなぜ速い?

TLSハンドシェイク、暗号化の重複、フロー制御をもとに、XTLS Visionが重複処理を減らす仕組みと、REALITYで独自証明書が不要になる理由を解説します。

この記事の要点

VLESSはプロキシ要求とユーザー識別情報を扱い、REALITYは安全なハンドシェイクとサーバー認証を担い、XTLS Visionはトラフィックの識別やパディング、条件を満たす場合の転送を最適化します。v2rayNやv2rayNGでこの組み合わせを使う方は、まず各機能の役割を確認し、設定項目を照合してから、同じネットワーク条件で速度を測定しましょう。ノード名だけで性能を判断するのは避けてください。

VLESS・REALITY・Vision:3つの名称と役割

ノード一覧にある「VLESS + REALITY + Vision」は、3つのプロキシプロトコルを重ねたものではありません。VLESSはプロキシプロトコル、REALITYはセキュリティ層の方式、VisionはXrayのフロー制御モードの一つで、設定値は通常xtls-rprx-visionです。さらに下位層には通信路が必要で、一般的にはTCPを使います。新しいバージョンの画面や設定では、こうした通信方式がRAWと表示される場合があります。

それぞれの役割は、「宛先をどう指定するか」「接続相手をどう認証するか」「その後のデータをどう運ぶか」に分けると理解しやすくなります。VLESSの要求にはユーザー識別情報と宛先情報が含まれますが、UUIDがすべての通信を暗号化するパスワードというわけではありません。一般的な設定のVLESS encryption=noneは、この層で追加の暗号化を行わないという意味であり、接続全体が平文で送信されるわけではありません。

項目主な役割代替できない機能
VLESSプロキシ要求、ユーザー識別情報、宛先アドレスを伝える単独では安全な通信層を代替できない
REALITY安全な接続を確立し、設定に対応するサーバーを認証するルーティング先の選択やサブスクリプションの更新は行わない
XTLS Vision内部のTLS通信を識別し、パディングと転送の最適化を行う回線の帯域幅を増やしたり、物理的な距離を縮めたりはしない
TCP / RAW順序を保ったバイトストリームを運ぶWebSocketやHTTP中継と同じものではない

ここではXrayの実装について説明します。v2rayNでは複数のコアを使用できるため、対象ノードがこの組み合わせに対応したXrayで実行されているか確認してください。v2rayNGはXrayコアを使用します。v2flyNGはV2Flyコアを使用するため、一部のVLESS情報をインポートできても、XrayのREALITYとVisionに対応しているとは限りません。サブスクリプションにノードが表示されることと、コアで接続できることは別の問題です。

TLS over TLS:暗号化の重複はどこで起こる?

ブラウザーでHTTPSサイトを開くと、ブラウザーと接続先サイトの間にTLS接続が確立されます。プロキシは通常、このHTTPSの内容を復号せずにバイト列を転送します。その通信をさらにTLSで保護されたプロキシトンネルに入れると、同じデータがサイトとの接続で暗号化された後、プロキシトンネルでも暗号化されることがあります。これが一般に「内側のTLS」と「外側のTLS」と呼ばれる状態です。

ブラウザーの要求 ローカルプロキシ 安全なハンドシェイク トラフィックの識別 サイトへの接続

上記は各処理の役割を示すもので、すべてのハンドシェイクが厳密に順番どおり進むという意味ではありません。接続の確立時には、クライアントとプロキシサーバーがハンドシェイク情報を交換し、プロキシサーバーは接続先サイトにも接続します。重複する暗号化処理を一部省けても、通信の往復時間、サイトの応答時間、TCPのパケット損失と再送などのコストは残ります。

そのため、Visionの性能向上は、HTTPSデータを継続的に転送し、クライアントまたはサーバーの処理能力がボトルネックになっている場面で期待しやすくなります。回線の帯域幅が小さい場合や、混雑時のパケット損失が目立つ場合は、カプセル化方式を変えても混雑は解消されません。

XTLS Vision:トラフィック識別、パディング、転送の最適化

Visionはプロキシが運ぶ内側のTLS通信を監視し、接続の初期段階で仕様に沿ったパディングを行い、その後の通信が最適化の条件を満たすか判定します。実装が識別でき、条件を満たす内側のTLS暗号化アプリケーションデータについては、専用の直接転送経路に切り替え、外側の暗号化の重複や一部のバッファー処理を減らせます。

「直接転送」は、プロキシサーバーを経由しないことでも、HTTPSを復号して平文にすることでもありません。データは引き続きクライアント、プロキシサーバー、接続先サイトの順に流れます。減らすのは不要な重複処理です。また、接続の最初のバイトからセキュリティ層を完全になくすという意味でもありません。ハンドシェイクやプロキシ要求、直接転送の条件を満たさないデータには、それぞれ適切な保護と処理が適用されます。

  1. まず安全な接続を確立。クライアントとサーバーがセキュリティパラメーターを確認し、VLESS要求でユーザーと宛先の情報を伝えます。
  2. 次に初期データを処理。Visionが最初のデータにパディングを施し、内側のTLSハンドシェイクとレコードを識別します。
  3. 条件を満たす場合に最適化。実装要件を満たす内側の暗号化アプリケーションデータは直接転送経路に進みます。すべてのバイトが一律に同じ経路を通るわけではありません。
  4. その他の通信は保護を維持。識別できない通信や条件を満たさない通信は、適用される経路で処理されます。暗号化済みのデータとして強制的に扱うことはできません。

Visionには一部のトラフィック特性を目立ちにくくする設計も含まれますが、通信を識別できなくしたり、常に利用可能にしたりするものではありません。接続先サイトの選択、ネットワーク環境、サーバー設定、コアの実装などが結果に影響します。速度と接続の可用性は分けて測定し、1回の速度測定だけで長期的な状態を判断しないでください。

REALITY:独自証明書は不要、サーバー認証は必要

一般的なTLSサーバーでは、独自ドメインに証明書を設定し、更新も行う必要があります。REALITYの一般的な構成では、プロキシサーバー自身のドメイン用に証明書を取得する必要はありません。その代わり、接続先サイトのTLS特性と追加の認証方式を組み合わせて接続を確立します。クライアント設定のサーバー公開鍵、ServerName、Short IDはいずれも役割があるため、見た目が正しそうなドメイン名だけを入力しても機能しません。

REALITYサーバーは秘密鍵を保持し、クライアントはサーバーから提供された対応する公開鍵などのパラメーターを使って接続を認証します。「あるサイトの証明書が見えた」ことだけを根拠にプロキシサーバーを信頼する仕組みではありません。認証条件を満たさない接続は、通常、設定に応じて接続先サイトへ転送されます。これは、認証済みユーザーのすべての通信がそのサイトを経由するという意味ではありません。

TLS 1.3
一般的な構成で、接続先サイトが対応している必要のあるTLSバージョン
443
HTTPSでよく使われる接続先ポート。ノードのポートが固定で443という意味ではありません。
16
Short IDは16文字以内の16進数で、文字数は偶数にする必要があります

接続先サイトのTLS互換性、到達性、応答状況はサーバー側で確認する必要があります。ServerNameをランダムに変更しても、確実な解決策にはなりません。システム時刻も認証に影響するため、時刻のずれが大きい場合は、まず時刻の自動同期を有効にしてから再接続してください。

v2rayN・v2rayNG:名前で推測せず、設定項目を照合

まず既存のサブスクリプションからノード全体をインポートしてください。手動で編集する場合は、セキュリティ層を確認してから、Flow、通信方式、ServerName、公開鍵、Short IDを照合します。以下の2つのカードは、異なるセキュリティ層でよく使われる構成の比較です。そのままコピーして使える完全なノード設定ではありません。アドレス、ユーザー識別情報、認証パラメーターはサーバーから提供された情報に従ってください。

VLESS + REALITY + Vision

プロトコル
VLESS
通信方式
TCP / RAW
セキュリティ層
REALITY
Flow
xtls-rprx-vision
認証項目
サーバー公開鍵、Short ID
ServerName
サーバーが許可する名前

クライアントとサーバーの設定を一致させる必要があります。通常のノードはFlowだけ変更しても、この構成にはなりません。

VLESS + TLS + Vision

プロトコル
VLESS
通信方式
TCP / RAW
セキュリティ層
TLS
Flow
xtls-rprx-vision
認証方式
証明書チェーンとドメイン名の検証
ServerName
証明書に一致する名前

VisionはREALITY専用ではありません。通常のTLS構成では、証明書を正しく設定する必要があります。

  1. デスクトップでノードを確認。v2rayNのノード一覧で対象のVLESSノードをダブルクリックし、プロトコル、通信方式、セキュリティ層、Flowを一つずつ確認します。これらの機能に対応したXrayコアが使われていることも確認してください。バージョンによって項目名が多少異なる場合があります。
  2. ローカルの接続先を確認。v2rayNの「設定」→「パラメーター設定」を開き、ローカルの待ち受けポートに関する設定を確認します。たとえばクライアントが127.0.0.1:10808で待ち受けている場合、アプリに手動でプロキシを設定する際も、対応するアドレス、ポート、プロキシ種別を指定します。ここでの10808は確認用の例であり、すべての環境で固定の値ではありません。
  3. Androidで設定項目を確認。v2rayNGのノード一覧から対象ノードの編集画面を開き、通信方式、セキュリティ設定、フロー制御を確認します。保存後に対象ノードを選び直して接続を開始し、別の設定をテストしたままになっていないか確認してください。
  4. 入口と出口を区別。デスクトップのシステムプロキシやAndroidのVPN接続設定は、アプリの通信がクライアントに入るかどうかを決めます。ノードのセキュリティ設定はプロキシ接続を確立できるかどうかを左右し、ルーティングルールは通信が最終的にプロキシ経由か直接接続かを決めます。

REALITYの接続エラーを解決するために、証明書検証を無効にしたり、公開鍵を削除したり、Short IDをむやみに変更したりしないでください。こうした変更は正しいサーバーパラメーターの代わりにはならず、問題の切り分けを難しくします。画面を共有する場合は、サブスクリプションのURL、ユーザー識別情報、その他の機密設定を隠してください。

速度低下と接続トラブル:比較テストで原因を切り分ける

「なぜ速くなるのか」は仕組みとして説明できますが、すべての回線での結果を保証するものではありません。Visionと別の構成を比較する場合は、できるだけ同じサーバー、近い時間帯、同じ接続先を使い、初回接続の遅延、継続ダウンロード時のスループット、CPU使用率を分けて確認してください。地域の異なる2つのノードは、プロトコル名が違っていても有効な性能比較にはなりません。

Visionに変更したらまったく接続できなくなったのはなぜ?

まずサーバーから提供された設定に戻し、ノードの編集画面でxtls-rprx-vision、TCP / RAW、セキュリティ層を確認します。この組み合わせに対応したXrayが使われていることを確認し、接続時のコアログも確認してください。Flowの不一致や通信方式の非互換は、設定を修正して対処します。接続タイムアウトを延ばしても解決しません。

ログにREALITYの認証失敗が表示されたら、何を確認する?

サーバー公開鍵、ServerName、Short ID、システム時刻の順に確認してください。公開鍵が欠けずにコピーされているか、Short IDに余分な空白が入っていないかも確認します。時刻の自動同期を有効にして再接続してください。それでも失敗する場合は、設定の提供元にサーバーから接続先へ到達できるか、各パラメーターが許可されているか確認してもらいましょう。

ノードテストは正常なのにブラウザーでサイトが開かない場合は?

まずブラウザーに正しいローカルプロキシが設定されているか確認します。デスクトップではシステムプロキシの状態と待ち受けポートを、AndroidではVPN接続が確立していることと対象アプリが除外されていないことを確認してください。次に、要求が直接接続にルーティングされていないか、DNSが利用可能なアドレスを返しているかを確認します。1回のノードテストですべてのサイトの接続性は判断できません。

REALITYに変更しても速度が上がらない場合、設定ミス?

必ずしもそうとは限りません。REALITYが主に変えるのはハンドシェイクと導入方法で、ここで説明しているデータ経路の最適化に関わるのはVisionです。同じ接続先で3回比較測定し、CPU使用率とパケット損失を確認してください。ボトルネックが帯域幅、ネットワークの混雑、サイト側の速度制限にある場合、設定が正しくても大きな改善が見られないことがあります。

最後に、次の3点を分けて確認してください。安全なハンドシェイクを完了できるか、アプリの通信が正しい出口に流れているか、継続転送時の処理負荷が減っているか。REALITYは一般的な構成で必要となる独自証明書の管理を不要にし、Visionは条件を満たす内側のTLS通信で重複処理を減らし、VLESSはプロキシ要求を運びます。設定項目が正確で、コアが対応し、測定条件がそろっていれば、この組み合わせが現在のネットワークに適しているか判断できます。

v2rayN をダウンロード対応プラットフォームとインストーラーを確認