REALITYとXTLS Visionはなぜ速いのか:ハンドシェイクの再利用とフロー制御を解説

TLSハンドシェイクのコストから、REALITYが実在サイトの証明書を利用して接続し、XTLS VisionがTLS内の二重暗号化を避ける仕組みと、Xrayコアでの併用条件を解説します。

この記事の概要

この記事では、VLESS、REALITY、XTLS Visionを比較しているユーザーに向けて、TCP接続、TLSハンドシェイク、認証、データ転送までの経路を分解し、v2rayNでの設定確認、性能ボトルネックの見極め、ハンドシェイク失敗の切り分け方法を紹介します。

TLSハンドシェイクが最初のデータ到着時間に与える影響

プロキシ接続の「速さ」には、接続確立までの時間、継続転送時のスループット、各パケットの処理に必要なCPUコストという、少なくとも3つの指標があります。REALITYは主にハンドシェイクと外観上の特徴を変え、XTLS Visionは安定した転送に入った後のデータ経路を最適化します。両者を単純に「帯域幅を増やす機能」と捉えるのは正確ではありません。

TCP上のTLS 1.3を例にすると、クライアントはまずTCPの3ウェイハンドシェイクを完了し、続いてClientHelloを送信します。サーバーはServerHello、証明書関連のメッセージ、ハンドシェイク完了メッセージを返します。TLS 1.3の完全なハンドシェイクでは、通常1往復で保護されたアプリケーションデータを送信できます。クライアントとサーバー間の往復遅延が大きい場合、このメッセージ交換が最初のWebリクエストやアプリ接続の待ち時間にそのまま表れます。

TLS 1.2の完全なハンドシェイクでは通常さらに多くの往復が必要なため、TLS 1.3では起動時のコストがすでに削減されています。ただし、プロキシ経路では外側のTLS内にブラウザー自身のHTTPSを通す場合があります。外側の保護はプロキシ経路を、内側の保護はアクセス先サイトを守ります。プロキシ層が暗号化済みのTLSレコードに対して汎用暗号化、コピー、カプセル化を続けると、CPU処理やメモリ操作が重複する可能性があります。

TCP接続を確立ClientHelloを送信認証を完了内側のTLSを識別アプリケーションデータを転送
1 RTT
TLS 1.3の完全なハンドシェイクにおける一般的な往復回数
32バイト
REALITYで使用されるX25519公開鍵の長さ
8バイト
shortIdの最大元データ長
16バイト
VLESSユーザーUUIDのバイナリ長

REALITYが実際に処理するもの

REALITYは、Xrayで認証付きのTLS風接続を確立するためのセキュリティ層で、VLESSやTCPと組み合わせて使われることが多い機能です。クライアントはClientHelloにREALITYのパラメータから生成された認証情報を含め、サーバーは秘密鍵と公開鍵の関係、shortId、時間範囲などを基に接続の正当性を判定します。認証に成功すると、接続はVLESSと後続のフロー制御処理へ進みます。

「実在サイトの証明書を借用する」という表現は、対象サイトの秘密鍵をコピーするのではなく、TLSの外観とハンドシェイクのコンテキストを再利用すると理解するのが適切です。REALITYサーバーが対象サイトの証明書秘密鍵を保持する必要はありません。設定のserverNameはサーバーで許可された名前と一致させ、クライアントでは正しいpublicKey、shortId、fingerprintを使用します。これらのフィールドのいずれか1つでも一致しなければ、ハンドシェイクで失敗する可能性があります。

サーバー側では通常、アクセス可能なターゲットアドレスも設定します。REALITY認証に合格しない通常の探索接続は、設定に応じてターゲットサイトへ転送できるため、外部から見える応答を一般的なTLSサービスに近づけられます。この仕組みが解決するのはハンドシェイクの形態と認証の問題であり、サーバーの混雑、ネットワーク間のパケットロス、通信事業者による迂回経路を自動的に解消するものではありません。

VLESS + REALITY + Vision

ネットワーク
TCP
セキュリティ
REALITY
Flow
xtls-rprx-vision
フィンガープリント
chrome
サーバー名
サーバー側のserverNamesに対応

クライアントとサーバーの双方が互換性のあるXrayコアを実行し、パラメータを一致させられる環境に適しています。

従来の外側TLSトランスポート

ネットワーク
TCPまたはWebSocket
セキュリティ
TLS
証明書
サーバードメインの証明書
Flow
通常は空欄
追加のカプセル化
トランスポート方式によって決まる

互換性は比較的わかりやすい一方、トランスポート方式によって追加フレーム、コピー処理、導入条件が発生します。

結論:REALITYは回線高速化ツールではない

接続の遅さがネットワーク間の経路、サーバーの出口、継続的なパケットロスに起因する場合、セキュリティ層を変更しても利用可能な帯域幅が直接増えることはありません。ハンドシェイクのコスト、外側のカプセル化、CPU処理がボトルネックになっている場合に限り、プロトコル経路の違いが体感に表れます。

XTLS Visionが重複処理を減らす仕組み

VLESS自体はアプリケーションデータに汎用的な内容暗号化を追加せず、セキュリティはREALITYやTLSなどの外部セキュリティ層が提供します。XTLS VisionはXrayのフロー制御方式で、設定値は通常xtls-rprx-visionと記述します。接続中のTLS特性を監視し、必要なハンドシェイクと認証が完了した後、条件に合うデータにはより直接的な転送経路を適用します。

ブラウザーでHTTPSサイトにアクセスすると、ブラウザーと対象サイトの間にはすでにエンドツーエンドのTLSが形成されています。従来のプロキシ用セキュリティ経路が内側のTLSデータ全体を通常のペイロードとして継続的に暗号化すると、「TLSデータを別のセキュリティ経路内で処理する」構造になります。Visionの重点は対象サイトのHTTPSを無効にすることではなく、すでに暗号化されたデータストリームを識別し、外側での重複暗号化、バッファリング、メモリコピーを減らすことです。

この最適化は、大容量ファイルの転送、HTTPS接続の同時実行数が多い場合、サーバーのCPUに余裕がない場合に観察しやすくなります。短い接続では、DNS、TCP接続確立、ネットワーク往復が総時間の大部分を占めることがあります。低速回線では、先に帯域幅の制限を受ける可能性があります。Visionは対象サイトTLSの証明書検証結果も変更せず、ブラウザーと対象サイト間のセキュリティ境界は維持されます。

処理段階 REALITYの役割 XTLS Visionの役割 解決できない問題
接続確立 TLS風のハンドシェイクを形成し、クライアントパラメータを検証 まだ主な最適化段階に入っていない TCPのパケットロスと物理的距離
本人認証 公開鍵の関係、shortId、サーバー名などの条件を検証 VLESSユーザーとFlowの設定を使用 無効なサブスクリプションと誤ったUUID
安定した転送 外側のセキュリティコンテキストを維持 内側のTLSを識別し、重複処理を削減 サーバー帯域幅の不足
アプリケーションアクセス 対象サイトの証明書検証を代替しない ブラウザーからサイトへの内容を復号しない サイト自体の応答が遅い

REALITYとVisionがよく併用される理由

REALITYとVisionは、同じ接続の異なる段階を処理します。REALITYは特定のTLS外観と認証機能を備えた経路を確立し、Visionは経路確立後に条件に合うデータストリームを最適化します。そのため、一般的な組み合わせではVLESSがユーザーとリクエストを表現し、REALITYがセキュリティハンドシェイクを担い、Visionがフロー制御を行い、TCPが信頼性のある転送を担当します。

この組み合わせでは、クライアントとサーバーのパラメータを正確に一致させる必要があります。クライアントが持つのはpublicKeyであり、サーバーのprivateKeyではありません。shortIdはサーバーの許可リストに含まれる値を使い、serverNameはサーバー設定と一致させ、Flowはxtls-rprx-visionに設定します。通常のTLSノードのドメインやポートをREALITYのフィールドにそのまま入れても、利用可能な接続にはなりません。

v2rayNでサブスクリプションからインポートすると、これらの値は通常サーバー設定に自動入力されます。手動で確認する場合は、「サーバー」→「サーバーを編集」を開き、アドレス、ポート、ユーザーID、Flow、トランスポートプロトコル、セキュリティ方式、SNI、フィンガープリント、公開鍵、shortIdを確認します。続いて「設定」→「パラメータ設定」で、現在のCoreタイプがこの組み合わせに対応するXrayコアであることを確認します。

プロトコル:VLESS
トランスポート:TCP
セキュリティ:REALITY
Flow:xtls-rprx-vision
SNI:サーバー側のserverNamesと一致
Fingerprint:chrome
Public key:サーバーの公開鍵から生成
Short ID:サーバーの許可値と完全一致
  1. まずサブスクリプションを更新して、該当するサーバーを選び直します。古いpublicKeyやshortIdを使い続けないようにしてください。
  2. v2rayNのサーバー編集画面を開き、VLESS、TCP、REALITY、Visionを項目ごとに確認します。アドレスとポートだけを確認して終わらせないでください。
  3. 保存して接続を開始し、「ヘルプ」→「ログを表示」でXrayの起動、ハンドシェイク、送信側のエラーを確認します。
  4. システムプロキシを有効にして通常のHTTPSページへアクセスし、その後に継続的なダウンロードをテストして、ハンドシェイク段階と転送段階を分けて判断します。
  5. 端末上のアプリが手動でプロキシを使用する場合は、v2rayNが現在待ち受けているポートを指定していることを確認します。一般的なローカル混合プロキシポートは10808ですが、「設定」→「パラメータ設定」に表示される実際の値を優先してください。

結論:プロトコル名よりパラメータの一致が重要

ノード名にREALITYやVisionが含まれていても、設定が有効とは限りません。編集画面のsecurity、flow、serverName、publicKey、shortIdを基準に確認し、Xrayのログでハンドシェイク結果を照合してください。

適した環境と、解消できないボトルネック

VLESS、REALITY、Visionの組み合わせは、クライアントとサーバーの双方でXrayコアを安定して利用できる環境に適しています。特にHTTPSの利用が中心で、継続的な転送が多く、重複処理を減らしたいデスクトップやAndroidの接続に向いています。v2rayNはWindows、macOS、Linuxのデスクトップ環境で利用できます。Androidでこの組み合わせを使う場合は、Xrayコアを採用し、対応パラメータをサポートするv2rayNGを使用してください。

v2flyNGはv2flyコアを使用するため、設定機能はそのコアが実際にサポートする範囲で判断してください。REALITYやVisionを含むサブスクリプション項目を受け取っても、インポートに成功しただけで接続できると判断してはいけません。クライアント画面にフィールドが表示されても、現在のコアが対応するハンドシェイクやフロー制御を実装しているとは限りません。

回線そのものの品質が、依然として性能の上限を決めます。サーバーの出口帯域が固定されている場合、Visionで制限を超えることはできません。地域をまたぐ経路でパケットロスが続けば、TCPは速度を落として再送します。サーバーの時刻が大きくずれている場合は、REALITY認証が失敗することもあります。プロトコルは、ログ、ネットワーク経路、リソース使用率を総合的に観察したうえで選択してください。

接続成功と表示されるのに、Webページがずっと読み込み中になる?

まずv2rayNでシステムプロキシが有効になっていることを確認し、続いて「設定」→「パラメータ設定」でローカル待ち受けポートを確認します。プロキシを手動設定するアプリは同じポートを使用する必要があります。設定画面に10808と表示されている場合、アプリが古いポートを指定したままになっていないか確認してください。

REALITYのハンドシェイクに失敗したら、まず何を確認する?

serverName、publicKey、shortId、fingerprint、システム時刻の順に確認します。サブスクリプション更新後はサーバーを選び直してコアを再起動し、古いプロセスが前のパラメータを保持し続けないようにします。

通常のVLESSは接続できるのに、Visionでは接続できないのはなぜ?

クライアントとサーバーの両方でFlowがxtls-rprx-visionに設定され、現在Xrayコアを使用していることを確認します。Flowを片側だけに設定している場合、コアが古い場合、またはトランスポートの組み合わせに互換性がない場合、接続が直接失敗することがあります。

Visionに変更しても速度測定の数値が変わらないのはなぜ?

まずボトルネックがプロトコル処理にあるかを判断します。同じサーバーとネットワークを使い、初回接続、継続ダウンロード、CPU使用率、再送状況をそれぞれ記録します。出口帯域をすでに使い切っている場合、プロトコル処理の最適化でピーク値がさらに上がることは通常ありません。

モバイルネットワークを切り替えたら、再インポートが必要?

通常は必要ありません。いったん切断して再接続し、v2rayNGにTCPとREALITYのハンドシェイクを再確立させます。ログで認証フィールドの不一致が示された場合や、サブスクリプションのパラメータが更新された場合に限り、サブスクリプションを更新して項目を選び直してください。

性能向上の要因を見分ける方法

現在のネットワークにプロトコルが適しているか判断するには、まず再現可能な比較条件を作ります。同じサーバーアドレス、同じ出口ポート、同じテストファイルを使い、安全層またはFlowだけを変更します。各条件を少なくとも3回実行し、テスト前に毎回接続を再確立してください。そうしないと、DNSキャッシュ、サーバー負荷、ネットワーク変動が実際の差を隠してしまいます。

最初のデータ到着が遅く継続ダウンロードが正常なら、まずネットワーク往復、DNS、ハンドシェイクを確認します。最初のデータ到着は正常でも長時間接続でCPU使用率が高い場合は、重複暗号化やコピー処理のコストが疑われます。スループットが周期的に低下し、TCP再送を伴うなら、先にパケットロスへ対処してください。ログのハンドシェイク失敗は設定問題であり、性能問題と混同して分析してはいけません。

ハンドシェイク段階の確認

確認項目
初回接続の所要時間
重要なフィールド
SNI、公開鍵、shortId
ネットワーク指標
RTTとパケットロス
ログの場所
ヘルプ → ログを表示

接続がまだ確立されていない場合は、まず認証とネットワーク往復の問題を切り分けます。

転送段階の確認

確認項目
安定時のスループット
重要なフィールド
xtls-rprx-vision
システム指標
CPUと再送
テスト時間
少なくとも60秒

接続が安定してから、Visionが処理コストを削減できているかを判断します。

つまり、REALITYとXTLS Visionの利点は、単独の「高速化スイッチ」から生まれるものではありません。REALITYは検証可能なパラメータで、対象TLSの外観に沿った接続を確立します。Visionはセキュリティ経路内で暗号化済みのアプリケーション通信を識別し、重複処理を減らします。パラメータが一致し、コアに互換性があり、ルーティングが正しく、回線のボトルネックにも余裕がある場合に限り、起動時の待ち時間短縮、リソース使用量の削減、継続転送の安定化として効果が表れます。

v2rayNをダウンロード