この記事の要点

REALITYはプロキシ接続の安全なハンドシェイクと認証を担い、Visionは通信を識別して転送を最適化します。両者は同じ設定項目ではありません。VLESSノードを入手し、設定を確認したい方向けに、二重暗号化が起きる仕組みから、flow・SNI・公開鍵・shortIdの確認方法、速度を比較する手順まで解説します。

VLESS・REALITY・Visionの役割を整理

「VLESS + TCP + REALITY + Vision」は設定の組み合わせであり、4つの互換性のあるプロトコル名ではありません。VLESSはプロキシ要求とユーザー識別情報を扱い、TCPは通信経路を提供します。REALITYはセキュリティ層を担い、Visionはxtls-rprx-visionで指定するフロー制御モードです。UUIDだけ正しく入力しても、セキュリティ層やフロー制御の設定が合っているとは限りません。

設定レイヤー主な設定値主な役割
プロキシプロトコルVLESS宛先アドレス、リクエスト情報、ユーザー識別情報を伝送
トランスポートTCP / RAWバイトストリームを運ぶ(画面やバージョンによって名称が異なる場合があります)
セキュリティ層REALITYハンドシェイク、サーバー認証、接続の保護
フロー制御xtls-rprx-vision内側のTLSを識別し、条件を満たす場合に転送を最適化

ここではXrayの実装を扱います。v2rayNはデスクトップ向けの設定管理クライアントであり、特定のコアそのものではありません。この組み合わせを使うには、対応するXrayコアが実際に動作している必要があります。Android版のv2rayNGはXrayコアを使用します。v2flyNGはv2flyコアを使用するため、一部のVLESSリンクをインポートできるからといって、この記事で扱う構成全体に対応しているとは限りません。

TLSの二重化:HTTPS通信が再暗号化される仕組み

ブラウザーでHTTPSサイトにアクセスすると、ブラウザーとサイトの間ですでにTLS接続が確立されています。この通信をプロキシに渡すと、一般的なTLSプロキシトンネルでは、暗号化済みのデータをさらにもう一度カプセル化します。そのため、クライアントからプロキシサーバーまでの区間では、「外側のTLSが内側のTLSを包む」状態になることがあります。

ブラウザーからのリクエスト サイトとのTLS通信 プロキシでカプセル化 外側のTLS サーバーから転送

内側のTLSはプロキシサーバーを通過した後も維持され、接続先のサイトで初めて終了します。通常、プロキシサーバーはサイトとのセッション鍵を持たず、ウェブページの内容を復号する必要もありません。一方、外側のTLSはクライアントからプロキシサーバーまでの通信を保護し、プロキシへのリクエストなどが暗号化されずに露出するのを防ぎます。保護する区間が異なるため、どちらかを「無意味」と単純に決めつけることはできません。

このため、「ハンドシェイクの遅延が小さい」からといって「ダウンロード速度が速い」とは限りません。ハンドシェイクは接続確立に関わりますが、継続的なダウンロード速度は帯域幅、パケットロス、輻輳制御、CPU性能にも左右されます。二重暗号化は要因の一つにすぎません。

Visionはどう二重暗号化を減らし、何を保護するのか

Visionはすべてのデータを平文で送る仕組みではありません。内側のTLSのハンドシェイクとデータ転送を識別し、接続初期の通信にはパディングを適用します。条件に合うTLS 1.3通信を検出すると、より直接的な転送経路に切り替え、TLSですでに保護されたデータを外側の暗号化で継続的に包むのを避けます。

TLS 1.3
最適化には、条件を満たす内側のTLS通信が必要
443
サーバーポートの例(固定要件ではありません)
10808
ローカルプロキシポートの例(クライアントの実際の設定に従ってください)

切り替え後も、ウェブページの内容はブラウザーとサイト間のTLSによって暗号化されます。識別条件を満たさない通信について、「直接転送に切り替わった」とは言えません。該当する安全な転送経路で処理されます。特に通常のHTTPや非TLSアプリ、UDP通信は、ノードでVisionを設定しただけで同じ最適化が適用されるわけではありません。

ここでいう「フロー制御」は帯域制限ではありません。xtls-rprx-visionを設定しても、100 Mbpsの契約がそれ以上の帯域に変わるわけではなく、ネットワーク間の輻輳も解消されません。特定の通信にかかる追加処理を減らし、TLSの二重化による特徴を一部改善できる点が利点です。効果は実際の通信経路によって異なります。

結論:まずボトルネックを確認し、フロー制御を比較する

ダウンロード中にCPUの特定のコアが継続して高負荷になる場合は、Visionによる処理負荷を比較してみましょう。CPUに余裕があるのにパケットロスが目立つ場合は、flowを何度も変更するのではなく、回線やサーバーの負荷を先に確認してください。

REALITYのハンドシェイク:公開鍵・SNI・接続先サイトの関係

REALITYは安全なハンドシェイクと認証を担います。TLSのハンドシェイク構造を利用し、サーバー鍵とクライアント設定の認証情報を組み合わせることで、正規のクライアントがサーバーを検証し、保護された接続を確立します。従来のウェブサイト向けTLSのように、プロキシの入口用に一般公開の信頼された証明書を取得・設定する必要はありません。

だからといって、任意のドメインを入力すれば使えるわけではありません。サーバーには接続先サイトと許可するサーバー名が設定されており、クライアントのSNIはサーバー側の設定と合致する必要があります。公開鍵もサーバーの秘密鍵と対になっていなければなりません。SNIはハンドシェイクで送る名前情報であり、ノードサーバーの接続先アドレスの代わりではありません。任意のウェブサイトをプロキシサーバーにすることもできません。

  1. 接続先アドレス:クライアントは、まずノードに指定されたIPアドレスまたはドメインとポートに接続します。たとえば、プロバイダーから指定された443です。SNIに対応するサイトへ直接接続するわけではありません。
  2. ハンドシェイクのパラメーター:指定されたサーバー名、フィンガープリント、REALITY認証に必要な情報をクライアントから送信します。各項目は同じノード設定の情報を使用してください。
  3. 認証後の処理:サーバーは正規のリクエストを識別してプロキシ接続を確立します。認証条件を満たさない接続は、REALITYの仕組みに従って設定済みの接続先サイトへ転送される場合があります。
  4. プロキシリクエスト:セキュリティ層が確立した後、VLESSのユーザーを検証して接続先への通信を処理します。Visionを設定している場合は、その後の通信の識別も行われます。

クライアント設定のポイント:2種類の項目を確認

まず提供元が案内する完全なリンクまたはサブスクリプションをインポートし、各項目を確認してください。手動で入力する場合、v2rayNでは「サーバー」→「VLESSサーバーを追加」から設定できます。既存ノードは編集画面を開いてください。v2rayNGでは、右上の「+」からVLESS設定を手動入力できます。バージョンによって項目名やメニューの位置が異なる場合があるため、画面上の場所ではなく項目の意味に沿って設定してください。

プロキシとフロー制御の項目

プロトコル
VLESS
アドレスとポート
ノード提供元から指定されたサーバーアドレスとポート
ユーザーID
ノードに割り当てられたUUID
トランスポート
TCP / RAW(コアや画面上の名称に合わせて選択)
Flow
xtls-rprx-vision

flowはサーバー側のユーザー設定と一致させる必要があります。クライアント側だけで有効にしないでください。

REALITYのセキュリティ項目

セキュリティ方式
REALITY
サーバー名
提供元から指定されたSNI
公開鍵
サーバーの秘密鍵と対になるクライアント用パラメーター
Short ID
サーバーで許可されているshortId
フィンガープリント
例:chrome(提供元の指定に従ってください)

新しいバージョンでは、公開鍵認証項目の画面上の名称が変更されている場合があります。リンクの解析結果とコアのドキュメントを照合してください。

shortIdは16進数の文字列で、通常は16文字以下、文字数は偶数である必要があります。空欄が許可されるかどうかはサーバー設定によって異なります。自分でゼロを補ったり、UUIDを入力したりしないでください。クライアントに必要なのは、サーバーに対応する公開鍵認証用のパラメーターです。サーバーの秘密鍵をクライアントに渡してはいけません。

速度比較テスト:遅延の数値でスループットを判断しない

「二重暗号化を減らすと速くなるか」を確かめるには、比較可能な条件をそろえる必要があります。可能であれば、同じサーバーから2種類の設定を用意し、比較したい項目だけを変更してください。サーバーの地域、トランスポート方式、ルーティングも同時に変えると、速度差をVisionの効果に結びつけられません。サーバーを管理できない場合、テスト結果から分かるのは2つのノードの総合的な使用感だけです。

  1. 通信経路を統一:同じ端末、同じネットワーク、同じダウンロード先を使用します。リクエストがプロキシのルールに一致していることを確認し、一方だけ直接接続にならないようにしてください。
  2. 接続先を統一:どちらのテストも同じローカルプロキシポートを使います。帯域を取り合わないよう、他のダウンロードを先に停止してください。
  3. 複数回測定:各設定で60秒間のテストを3回行い、順番を交互にします。平均スループット、CPU使用率、失敗回数をそれぞれ記録してください。
  4. 単位をそろえる:100 Mbpsは理論上12.5 MB/sに相当しますが、実際の速度はプロトコルのオーバーヘッドにも左右されます。単位の異なる数値をそのまま比較しないでください。
  5. ログを保存:テスト日時、コアのバージョン、ノード設定の種類、エラー情報を記録します。共有する前にUUID、サブスクリプションURL、その他の認証情報を削除してください。

上記の回数と時間はテスト方法の提案であり、本サイトでの実測結果ではありません。スループットがほぼ同じでもCPU使用率が下がれば、処理負荷が改善した可能性があります。初回接続にかかる時間だけが短くなった場合、継続的なダウンロードも速くなるとは言えません。ハンドシェイクや各項目の詳しい説明は、プロトコルリファレンスのREALITY解説をご覧ください。

REALITY・Visionに関するよくある質問

ノードのTCP遅延は測定できるのに、ウェブページが開かないのはなぜですか?

TCPの疎通確認で分かるのは、通常ポートに到達できることだけです。REALITY認証やVLESSリクエストの成功までは確認できません。まずクライアントのコアログを開き、SNI、公開鍵認証パラメーター、shortId、UUID、flowの順に確認してください。その後、システム時刻が正確か確認します。一度に変更するのは1項目だけにし、元の設定に戻せるよう保存してください。

flowをVisionに変えるだけで、古いノードは速くなりますか?

いいえ。クライアントとサーバーの両方が同じフロー制御に対応し、設定されている必要があります。また、トランスポートの組み合わせも要件を満たさなければなりません。まず提供元にxtls-rprx-visionへの対応を確認し、対応する設定一式をインポートしてください。古いノードがWebSocketを使用している場合、この記事のTCP構成をそのまま適用しないでください。

証明書エラーは「安全でない接続を許可」を有効にすれば解決しますか?

証明書検証をスキップする設定を、REALITYの修復手順として使わないでください。まずセキュリティ方式がREALITYになっているか確認し、クライアントの認証パラメーターとサーバー設定を照合します。それでも従来の証明書エラーが表示される場合は、通常のTLSノードとしてインポートしていないか、別の設定で起動していないかも確認してください。

REALITYに変更しても速度が変わりません。設定に問題がありますか?

必ずしもそうとは限りません。まずログで対象ノードを経由していることを確認し、前述の方法で60秒間のテストを3回行って、スループットとCPU使用率を比較してください。ボトルネックが回線事業者のネットワークやサーバーの外向き回線にある場合、暗号化処理を減らしても帯域の上限は自動的に上がりません。接続に問題がある場合は、よくある質問の接続トラブルシューティングもご覧ください。