XrayコアとV2Flyコアの違い|XTLS Vision・REALITY・設定の互換性

XrayとV2Flyの開発経緯を整理し、XTLS VisionやREALITYなどの機能と、設定ファイルを移行する際の注意点を解説します。

この記事の要点

コアを選ぶときは、クライアント名ではなくサーバー側の要件を確認しましょう。ノードのインポート、コアの切り替え、JSON設定の移行を予定している方向けに、まずクライアントとコアの役割を整理し、プロトコル・トランスポート・セキュリティ層を確認します。そのうえで設定チェックと接続ログから問題を切り分けます。ノードにREALITYやxtls-rprx-visionの記載がある場合は、対応するXray環境を選択してください。一般的なノードでも、個々の設定項目とバージョンの確認が必要です。

クライアントとコアの役割を整理する

v2rayN、v2rayNG、v2flyNGは、ユーザーが操作するクライアントです。サーバー一覧、サブスクリプションのインポート、システムプロキシの切り替え、画面上の設定はクライアント側が担当します。一方、設定の読み込み、接続の確立、ルーティングルールの適用、通信の転送は主にコアが行います。クライアントに項目が表示されていても、現在実行中のコアがその機能に対応しているとは限りません。

サブスクリプションまたはノード クライアントで解析 実行用設定を生成 コアで読み込み サーバーに接続

Androidでは、v2rayNGはXrayコア、v2flyNGはV2Flyコアを使用します。デスクトップ版のv2rayNは、バージョンやノードの種類、実際の実行ログを確認して、使用中のコアを判断してください。デスクトップのショートカット名だけでは特定できません。問題の切り分けでは、クライアントとコアそれぞれのバージョンを記録しましょう。両者のバージョン番号は別のものです。

XrayとV2Fly:共通のルーツがあっても設定の互換性は保証されない

V2FlyはV2Rayの開発を引き継ぐコミュニティプロジェクトで、コアプログラムは一般にV2Ray Coreと呼ばれます。Xrayは2020年にV2Rayのコードを基盤として分岐し、その後独自に発展しました。インバウンド、アウトバウンド、ルーティング、DNSなど共通する概念は多いものの、機能や設定構造にはすでに違いがあります。

そのため、「どちらもプロキシ通信を処理できる」ことと、「実行ファイルをそのまま置き換えられる」ことは別です。移行時、プロトコル名が同じでも、対応するのは最初の段階にすぎません。トランスポートのパラメーター、セキュリティ層、ルーティングの記述、DNS設定まで一致するとは限りません。

比較項目XrayV2Fly実際の影響
プロジェクトの関係V2Rayから分岐して発展V2Rayの開発を引き継ぐコミュニティプロジェクト基本概念は共通しているが、すべての設定項目が共通とは限らない
VMessなどの基本プロトコル対応する実装あり対応する実装ありトランスポート、セキュリティ層、使用バージョンも確認が必要
XTLS Vision対応するフロー制御方式をサポート同等の代替として実行できないVisionを使用するノードには、対応するXrayを使用
REALITY対応するセキュリティ層をサポートXrayのREALITY設定をそのまま実行できない名称を書き換えるだけでは移行できない
設定の変遷Xrayの設定項目とバージョン要件に沿って確認V4、V5などの設定体系を区別する必要がある移行前に設定形式と読み込み方法を確認

判断のポイント:ノードの依存機能を整理してからコアを切り替える

既存ノードがREALITYまたはVisionに依存している場合は、まずXrayを使い続けてください。移行を試すのは、サーバー側から移行先のコアに対応した接続方法が別途提供されている場合に限ります。認識できない項目を削除して、そのまま使おうとするのは避けましょう。

XTLS VisionとREALITY:フロー制御とセキュリティ層の違い

一般的なVLESS設定では、XTLS Visionはflow: xtls-rprx-visionで指定します。条件に合った通信に特定の処理経路を適用する機能であり、独立したサブスクリプション形式でも、任意のトランスポート構成に追加できる高速化スイッチでもありません。サーバー側で対応するフロー制御が設定されていなければ、クライアントにVisionを指定しても利用できません。

REALITYはセキュリティ層に位置し、サーバー認証や関連するハンドシェイクパラメーターに関わります。通常、クライアント側ではサーバー名、公鍵、Short IDなどを確認します。画面上で公鍵の情報がPublic keyと表示される場合や、バージョンによって別の名称が使われる場合もあります。表示名が異なるからといって、パラメーターを入れ替えないでください。サーバーの秘密鍵をクライアントの公鍵欄に入力してはいけません。

VLESS + Vision + REALITY

プロトコル
VLESS
トランスポート
TCP(バージョンによってはRAWと表記)
Flow
xtls-rprx-vision
セキュリティ層
REALITY
主な確認項目
サーバー名、公鍵、Short ID

これは一般的な構成での項目の対応関係であり、接続可能な設定一式ではありません。各項目をサーバー側の設定と一致させる必要があります。

VMess + WebSocket + TLS

プロトコル
VMess
トランスポート
WebSocket
パスの例
/ws
セキュリティ層
TLS
主な確認項目
UUID、Host、パス、サーバー名

パスはあくまで例です。サブスクリプションに記載された実際の値を使用してください。通常のTLSとREALITYのパラメーターは互換性がありません。

設定の互換性:4つの層を個別に確認し、一括置換はしない

共有リンク、サブスクリプションのテキスト、クライアントに保存されたデータ、コアが読み込むJSONは、それぞれ異なる層のものです。vless://リンクをインポートできても、それはクライアントがリンクを解析できたというだけです。生成された実行用設定にフロー制御、セキュリティ層、トランスポートのパラメーターが保持されているかも確認してください。逆に、完全なJSON設定でも、通常のノードリンクとしてインポートできるとは限りません。

  1. プロトコル層を確認:VMessまたはVLESSの別、ユーザー識別子、認証パラメーターを確認します。古いVMess設定には過去の互換性パラメーターが含まれる場合があります。移行時はサーバー側の情報と現在の実装を照合し、古い解説記事の固定値をそのままコピーしないでください。
  2. トランスポート層を確認:TCP/RAW、WebSocketなどの種類に加え、パスやHostなどの項目を確認します。バージョンによって名称や設定方法が変更されている場合があるため、画面上の表示だけで比較しないでください。
  3. セキュリティ層を確認:TLS、REALITY、またはセキュリティ層を使用しない設定のいずれかを明確にします。サーバー名、証明書の検証、鍵情報、フィンガープリントの要件を確認してください。証明書検証を無効にしても、あらゆる問題が解決するわけではありません。
  4. 実行環境を確認:インバウンドのリッスンアドレスとポート、ルーティングタグ、DNS、ファイルパスを比較します。プロトコルのハンドシェイク設定が正しくても、アウトバウンドタグの参照先が無効なら、想定どおりに通信を振り分けられないことがあります。

V2FlyではV4とV5の設定体系も区別する必要があります。拡張子がどちらも.jsonでも、設定項目の構造が同じとは限りません。設定一式を移行する場合は、移行先コアのドキュメントに沿って構造を確認してください。一般ユーザーには、サービス提供元が用意した対応リンクをインポートし、クライアントに実行用設定を生成させる方法が適しています。

移行の検証:ローカルの待ち受けとリモートのハンドシェイクを分けてテスト

2つのコアを比較するときは、サーバー、ネットワーク、テスト先を固定し、各テストの条件を記録してください。以下の数値はローカルで比較するための設定例であり、クライアントの初期値でも速度測定の結果でもありません。例ではローカルHTTPプロキシを10809番ポートに設定し、ループバックアドレスのみで待ち受けます。テスト用ポートをLANに公開しないための設定です。

10809
ローカルHTTPプロキシのポート例
443
リモートポートの例(実際の値はノードに従う)
3回
同じ条件でリクエストを繰り返し、偶発的な失敗を除外

まず設定をコアが読み込めるか確認する

以下はコマンドラインでの確認例です。あらかじめ対象のコアが読み込めるclient.jsonを用意してください。Xrayの例ではXrayのコマンドライン形式を、V2Flyの例ではV5のコマンドライン形式を使用します。配布パッケージによって異なる場合は、該当プログラムのヘルプコマンドで確認してください。設定テストで確認できるのは読み込み段階までで、リモートサーバーへの接続可否は確認できません。

# Xrayの設定を確認
xray run -test -config client.json

# V2Fly V5のコマンドラインで設定を確認
v2ray test -c client.json

次にリクエストがローカルプロキシを経由しているか確認する

テスト用の設定を起動したら、ローカルプロキシのアドレスを明示してリクエストを送信します。以下では10809番ポートでHTTPプロキシが待ち受けているものとします。SOCKSインバウンドのみの場合、http://をそのまま使うことはできません。テスト先のhttps://example.com/は、アクセスできることを確認済みのHTTPSアドレスに置き換えられます。

curl --proxy http://127.0.0.1:10809 --connect-timeout 10 --max-time 30 -I https://example.com/

10809番ポートを使用する設定を2つ同時に起動しないでください。比較テストの前に前の設定を停止し、ローカルポートとテストコマンドを統一します。そうしないと、ポートの競合やリクエストが古いプロセスに送られる問題を、コアの違いと誤認するおそれがあります。

選び方:ノードの機能とメンテナンスの手間で判断する

現在正常に動作している設定なら、「別のコアが更新された」という理由だけで、すぐに移行する必要はありません。新バージョンを導入する価値は、修正内容、プロトコル対応、クライアントとの互換性を踏まえて判断しましょう。更新前にクライアントとコアのバージョン、利用可能なノードを記録し、復元できる設定のコピーを残しておくと、すばやく元に戻せます。

利用状況選択の目安確認・操作のポイント
ノードがREALITYまたはVisionを明示的に要求する対応するXrayを使用クライアントの対応状況と実際のコアのバージョンを確認し、ノードの設定一式を保持する
AndroidでXrayの機能を使うノードを利用v2rayNGの対応状況を確認インポート後、トランスポート、セキュリティ層、Flowがすべて保持されているか確認
AndroidでV2Flyの設定体系を利用v2flyNGの対応状況を確認ノードの機能、設定形式、内蔵コアの対応範囲を確認
デスクトップで複数のノードを管理するv2rayNを使い、実行中のコアを確認一覧の表示名だけでなく、起動ログで実際に読み込まれたコアを確認

作業のポイント:一度に変更するのは1つの条件だけ

まず元のノードを元のコアでテストして基準を確認し、その後、移行先のコアに対応するノード構成を試します。サブスクリプション、DNS、ルーティング、トランスポートを同時に変更しないでください。失敗したときに、どの層が原因か特定しにくくなります。

よくある誤解:インポート、起動、接続の成功はそれぞれ別に確認する

v2rayNGのノードをv2flyNGにインポートしても接続できないのはなぜ?

まず、ノードにREALITYまたはVisionが含まれているか確認してください。リンクを画面上で認識できても、V2Flyコアが該当機能を実装しているとは限りません。一般的なノードの場合は、トランスポート、セキュリティ層、認証パラメーターを確認します。必要なのはサーバー側が提供する互換性のある接続方法であり、専用の設定項目を削除して試し続けることではありません。

Xrayを使えば必ずV2Flyより速くなる?

そうとは限りません。スループットや遅延は、サーバーの負荷、往復遅延、パケットロス、端末の性能、使用するトランスポートにも左右されます。Visionの処理方式には適用条件があり、一度の速度測定をすべてのネットワークに当てはめることはできません。環境を固定して複数回測定し、接続エラーもあわせて確認してください。

同じドメイン、同じ443番ポートでも、プロトコルを切り替えられないのはなぜ?

ドメインとポートは接続先の入り口にすぎません。その先には、特定のプロトコル、セキュリティ層、転送ルールが設定されている場合があります。クライアントでVMess、VLESS、TLS、REALITYのどれを使う場合も、サーバー側に対応する設定が必要です。ポートが同じでも、ハンドシェイク方式が同じとは限りません。

トラブル調査を依頼する際、ログから何を削除すればよい?

クライアントとコアのバージョン、エラーの種類、発生時刻、必要な項目名は残し、サブスクリプションURL、UUID、秘密鍵などの認証情報は伏せてください。完全なサブスクリプションURLにはアクセストークンが含まれる場合があるため、公開の場にそのまま貼り付けないでください。問題に関係するログだけを抜粋すると、原因を特定しやすくなります。

クライアントをダウンロードプラットフォームに合ったインストーラーを選択