XrayとV2Flyの違い|開発の経緯・機能比較・クライアント別の選び方

Project VのV2FlyとXrayの開発経緯やREALITY・XTLSの対応状況を比較。v2rayN、v2rayNG、v2flyNGで使うコアの選び方を解説します。

この記事の要点

ノードにREALITYまたはxtls-rprx-visionが含まれる場合は、まずXrayの対応状況を確認しましょう。VMess、WebSocket、TLSなど一般的な設定のみなら、どちらのコアも使える場合があります。クライアントの選択やコアの切り替え、設定の移行を検討している方向けに、プロトコル・トランスポート・セキュリティ層・ログの確認方法を解説します。クライアント名だけで互換性を判断しないことが大切です。

V2Ray・V2Fly・Xrayとクライアントの違い

コアはプロキシ接続、プロトコル処理、DNS、ルーティングを担います。クライアントはノード一覧やサブスクリプションの読み込み、設定編集、プロセス管理を行います。v2rayNの画面にノードが表示されても、実行中のコアがそのノードの全項目を解釈できるとは限りません。コアを選ぶ前にノードの要件を確認し、クライアントが実際に起動するプログラムも確認しましょう。

Project Vはこのエコシステムのプロジェクト群で、V2Rayはその中のプロキシソフトウェアです。V2FlyコミュニティはV2Rayの開発を引き継いでいます。Xrayは2020年にV2Ray関連のコードから分岐し、独立したコアプロジェクトとして開発されています。設定の考え方には共通点が多いものの、同じプログラムの別画面ではありません。共通のルーツだけを根拠に、設定が完全に互換だと判断しないでください。

機能の違い:まずREALITYとVision、次にトランスポートの組み合わせを確認

最もわかりやすい判断基準は、ノードがXray独自の機能を必要とするかどうかです。REALITYはセキュリティ層の方式で、VMessやVLESSの別名ではありません。xtls-rprx-visionはフロー制御の設定であり、独立したトランスポートプロトコルではありません。接続できるかどうかは、プロトコル・トランスポート・セキュリティ層・フロー制御の組み合わせがすべて対応しているかで決まります。

XrayとV2Flyを選ぶ際の主な確認項目
確認項目XrayV2Fly判断の目安
VMess対応対応トランスポート方式、TLS、認証設定も確認してください。プロトコル名だけでは判断できません。
VLESS対応対応。ただし、機能の組み合わせは同一ではありません基本的なVLESSへの対応は、REALITYやVisionへの対応を意味しません。
Trojan対応対応パスワード、TLSのサーバー名、サーバー側のトランスポート設定を確認してください。
REALITY対応。実際のバージョンと設定項目の確認が必要ですXrayのREALITY設定はそのまま使用できませんノードがREALITYを要求する場合は、この記事で比較する2つのコアのうちXrayを選びましょう。
XTLS Vision該当するVLESS設定の組み合わせに対応XrayのVisionフロー制御には非対応xtls-rprx-visionがある場合は、Xrayとトランスポートの要件を確認してください。
WebSocket + TLS対応対応パス、Host、サーバー名、サーバー側の設定も確認が必要です。
DNSとルーティング該当するモジュールを搭載該当するモジュールを搭載設定項目やデフォルト動作、拡張機能は、それぞれのドキュメントで確認してください。

古いチュートリアルにある「XTLS」は、以前の設定方式を指している場合があります。現在のVisionと同じものとして扱わないでください。また、設定を読み込ませるためにsecurityをrealityからtlsに変更するのも避けましょう。ハンドシェイク方式が変わるだけで、サーバー側の設定は変わりません。対応するコアを使うか、サーバー管理者に別の実在するノード設定を確認してください。

クライアントの選び方:ノードの要件からコアを決める

利用できるサブスクリプションがある場合は、まずノードの編集画面で主要な設定項目を確認しましょう。「VLESS」とだけ書かれた情報では不十分です。トランスポートの種類、セキュリティ層、フロー制御も確認してください。以下はREALITYまたはVisionが必要なケースを想定した推奨で、すべての一般的なノードを移行すべきという意味ではありません。

Xrayコア

おすすめ

REALITYやxtls-rprx-visionが明示的に必要なノードに適しています。デスクトップでは、v2rayNが実際に起動するコアを確認してください。Androidではv2rayNGを選び、同梱コアがノードの要件を満たすか確認しましょう。

適した用途:REALITYまたはVisionを使うノードがあり、必要な機能の組み合わせに対応させたい場合。

V2Flyコア

V2Fly向けに設定・検証済みの環境で使います。一般的なVMess、VLESS、Trojanのノードも、トランスポートとセキュリティの設定を個別に確認してください。Androidではv2flyNGが対応クライアントです。

適した用途:既存のV2Fly設定を維持し、サーバーがXray独自の機能を要求しない場合。

v2rayNでは、一部のバージョンで「設定」→「パラメータ設定」からコア関連の項目を確認できます。項目名や対応範囲はバージョンによって異なります。画面に特定のコアが表示されない場合、プログラムファイルの名前を変更すれば切り替わるとは限りません。クライアントの対応範囲、インストールパッケージの内容、起動ログを確認し、必要に応じて既存の設定に合う方法でクライアントをインストールしてください。

デスクトップとAndroidで選ぶ:同じサブスクリプションのノードを個別に検証

デスクトップ:v2rayN
  • ノードのプロトコル、トランスポート、セキュリティ層を確認する。
  • 設定の種類に対応するコア設定を確認する。
  • 起動後、ログでコア名とバージョンを確認する。
Android:v2rayNG / v2flyNG
  • REALITYまたはVisionを使うノードには、対応するv2rayNGを使用する。
  • 既存のV2Fly環境では、v2flyNGで設定を確認する。
  • 初回接続時に、AndroidのVPN利用許可とアプリごとのプロキシ適用範囲を確認する。

同じサブスクリプションURLを異なるクライアントで使えても、形式の解析方法、対応項目、更新タイミングは異なる場合があります。ノード一覧と接続結果は、それぞれのクライアントで確認してください。

コアを切り替える前に:ローカルポートとリモートポートを分けて記録

切り替え後に「ウェブページが開かない」場合、リモート側のプロトコルが非対応とは限りません。アプリが古いローカルポートへ接続している、待ち受けアドレスが変わった、ポートが使用中など、同じ症状につながる原因はいくつもあります。以下は確認箇所を説明するための設定例であり、クライアントの初期値や実測結果ではありません。

10808
ローカルSOCKSの待ち受けポート例
443
リモートのTLS / REALITYサーバーポート例
127.0.0.1
ローカルループバックの待ち受けアドレス例
  1. ローカルの接続先を記録します。アプリからSOCKSを使う場合は、サーバーの443番ポートではなく、例にある127.0.0.1:10808へ接続します。HTTPプロキシを使う場合は、実際に有効化されているHTTPまたは混合プロキシの接続先を指定してください。
  2. ノードの設定を記録します。サーバーアドレス、ポート、ユーザーIDまたはパスワード、トランスポートの種類、サーバー名、フロー制御を控えてください。REALITYでは、サーバーから提供された公開鍵やShort IDなども確認します。
  3. ルーティングとDNSの設定を記録します。切り替え前にクライアントの設定をエクスポートするかバックアップし、サブスクリプションのデータ、カスタムルート、カスタムJSONを区別してください。ノード一覧だけを保存しないよう注意しましょう。
  4. 一つずつ切り替えます。まずTUNなどの追加のトラフィック制御を一時停止し、明確なローカルプロキシの接続先で接続を検証します。その後、元のルーティング設定とトラフィック制御を戻してください。

サーバーが443で待ち受けていても、ノードが通常のTLSを使うとは限りません。また、任意のブラウザーリクエストをそのポートへ直接送れるわけでもありません。ポートは接続先の一要素にすぎず、実際のハンドシェイクはプロトコルとセキュリティ層で決まります。

JSON設定はそのまま使える?構造が似ていても項目の互換性は別

2つのコアでは、inbounds、outbounds、routing、dnsなどの概念が共通しています。一方、拡張項目、設定形式、デフォルトの処理は、各プロジェクトの開発に伴って異なることがあります。クライアントで読み込んだ共有リンクは、実行用の設定に変換されます。そのため、「リンクを読み込めた」ことと「生成されたJSONで起動できる」ことは別の段階です。

一般のユーザーには、元の設定をバックアップしたうえで、移行先のクライアントにノードを再度読み込み、設定を確認する方法が安全です。生成済みの設定ファイル全体をそのまま上書きするのは避けましょう。カスタムJSONを使う場合は、移行先コアのドキュメントに沿って項目を一つずつ確認してください。また、設定を検証するコマンドは使用中のバイナリのヘルプで確認し、別のコア向けコマンドの引数をそのまま流用しないようにしましょう。

トラブル対処:起動、ハンドシェイク、ルーティングの順に確認

ログは接続の段階ごとに読みます。コアが正常に起動していない段階で、リモートのサーバー名を変更しても意味はありません。リモートとのハンドシェイクに成功しているなら、コアを何度も切り替えてもルーティングやDNSの問題は解決しないことがあります。関連する項目を一度に一組だけ変更し、変更前後のログの時刻を記録してください。

ノードは読み込めるのに、起動時に未対応の項目があると表示される場合

起動ログでコア名とバージョンを確認し、エラーに出ている設定項目を照合してください。ノードがREALITYまたはVisionを要求する場合は、該当設定に対応するXrayを選びます。すでにXrayを使っているなら、バージョンとクライアントが生成した設定の組み合わせを確認してください。エラー項目をそのまま削除しないでください。

Xrayに切り替えてもタイムアウトが続く場合、まず何を確認する?

まずサーバーアドレスとポートに到達できるか確認し、次にTLSのサーバー名またはREALITYの設定、ユーザーID、フロー制御を確認してください。タイムアウトだけではコアの選択ミスとは限りません。リモート側で待ち受けていない、ネットワーク経路が途切れている、ローカルファイアウォールで遮断されている場合もあります。

ログにaddress already in useと表示されたら、どのポートを変更する?

エラーが発生したローカルの待ち受けアドレスを確認してください。例のポート10808が別のプロセスに使用されている場合は、重複して起動しているコアを停止するか、ローカルの待ち受けポートを変更し、そのプロキシを使うアプリの設定も合わせて変更します。リモートの443番ポートをむやみに変更しないでください。

コアは起動し、接続テストも成功するのに、一部のサイトだけ開けない場合

まずアプリが実際にプロキシを使っているか確認し、対象ドメインにどのルーティングルールが適用され、どのアウトバウンドへ送られるかを調べます。同じノードで一時的なプロキシルールと元のルールを比較し、その後DNSを確認してください。Androidでは、アプリごとのプロキシ設定で対象アプリが除外されていないかも確認します。

コア選びの結論:検証可能な設定の組み合わせを維持する

REALITYまたはXTLS Visionが必要なら、この記事の比較対象では要件に合うXrayを選びましょう。既存のV2Fly設定が安定して動作し、ノードがこれらの機能を要求しない場合、名称を変えるだけのために移行する必要はありません。VMess、VLESS、Trojanについても、トランスポート、セキュリティ層、認証設定を確認してください。

設定項目の構造を確認するには、V2Ray JSON設定マニュアルをご覧ください。インバウンド、アウトバウンド、ルーティングの違いがわからない場合は、用語解説から確認できます。バージョンは実際のインストールパッケージとノードの要件に合わせて選び、古いチュートリアルに書かれた設定画面の場所を、すべてのクライアントバージョンに共通するものと考えないでください。

v2rayNをダウンロードOSに合わせてクライアントを選択