Project Vのエコシステムを解説:V2Fly・Xrayと各種クライアントの違い

Project Vの成り立ちからV2Flyのコミュニティ運営、Xrayの派生まで解説。v2rayN・v2rayNG・v2flyNGの位置づけやオープンソースライセンスも紹介します。

この記事の要点

このエコシステムを理解する出発点はProject Vです。中心となるプロジェクトのV2FlyとXrayを区別し、v2rayN・v2rayNG・v2flyNGがグラフィカルな操作画面を提供します。クライアント選びやノードの互換性確認、コアの切り替えを検討している方に向けて、プロジェクトの関係を整理したうえで、プロトコル、トランスポート、セキュリティ設定、オープンソースライセンスを確認します。クライアント名だけで互換性を判断せず、実際に使うバージョンと設定を確かめましょう。

Project Vの成り立ち:プロジェクト・コア・プロトコルの違い

Project Vは、V2Rayを中心にネットワークプロキシツールと関連コンポーネントを開発するプロジェクトとして始まりました。V2Rayのコアは、サブスクリプション一覧を表示するものではなく、設定に基づいてインバウンドを受け付け、ルーティングを選択し、アウトバウンド接続を行います。「V2Ray」はプロジェクト名やコアプログラムを指すほか、プロキシ設定全般を指して使われることもあります。問題を調べる際は、まず何を指しているのかを明確にしましょう。

グラフィカルクライアントは別のレイヤーに位置します。サーバー一覧やサブスクリプションの管理、設定の生成、コアの起動、ログの表示を担います。VMessやVLESSなどのプロトコルを使った接続を実際に処理するのは、コアとその実装です。クライアントの画面にプロトコル名が表示されていても、同梱されたコアがそのプロトコルのあらゆるトランスポートやセキュリティ設定に対応しているとは限りません。

そのため、「V2Rayをインストールした」という情報だけでは問題を特定できません。クライアント名とバージョン、実行中のコア名とバージョン、ノードのプロトコル、エラーログを記録すると調査しやすくなります。ログを共有する前に、サブスクリプションのURLやユーザー識別子などの認証情報を削除してください。

V2FlyとXray:共通のルーツから独立して発展

V2Flyは、V2Rayコアの保守を引き継ぐコミュニティプロジェクトです。コアは一般にV2Fly-coreと呼ばれ、プログラムやドキュメントには引き続きV2Rayの名称も使われています。Xray-coreは2020年に関連コードを基盤として分岐し、その後は独立したプロジェクトとして発展しています。歴史的なつながりはありますが、同じリリース系列の通常版と上位版という関係ではありません。

比較項目V2Fly-coreXray-core
プロジェクトの位置づけV2Rayコアを引き継ぐコミュニティによる保守関連コードを基盤に分岐した独立コア
互換性の確認方法該当バージョンのプロトコルと設定のドキュメントで確認該当バージョンのプロトコルと設定のドキュメントで確認
主な確認ポイント既存のV2Ray設定の保守と移行VLESS、XTLS Vision、REALITYなどの関連設定
コアのライセンスMIT LicenseMozilla Public License 2.0

VMessとVLESSはプロトコル名です。TCPやWebSocketなどはトランスポートの選択肢で、TLSは接続のセキュリティに関する設定です。REALITYやXTLS Visionには特定の実装や設定要件があり、VMessと同列の、自由に置き換えられる項目ではありません。特にREALITYやVisionの設定を含むノードでは、クライアントにリンクをインポートできるかだけでなく、コアが必要な組み合わせ全体に対応しているか確認してください。

確認のポイント:ノード設定を見てからコアを選ぶ

プロバイダーが指定するプロトコル、トランスポート、セキュリティ方式、追加パラメーターを一覧にし、使用中のコアが対応しているか確認しましょう。コア同士に共通のルーツがあるからといって、実行ファイルをそのまま置き換えたり、設定全体を流用したりしないでください。

エコシステムにおける3つのグラフィカルクライアント

v2rayNはWindows、macOS、Linuxのデスクトップ環境向けです。インストール方法や権限、システムプロキシの動作はプラットフォームによって異なります。サブスクリプションやルーティングを管理でき、対応範囲内で異なるコアを利用できます。コアを切り替えられるかどうかは、クライアントのバージョン、インストールパッケージの内容、ノードの種類によります。名前に「N」が含まれていることからは判断できません。

クライアントプラットフォームコアとの関係選ぶ前の確認事項
v2rayNWindows、macOS、Linuxデスクトップ向け管理画面。対応状況に応じてコアを選択システムのアーキテクチャ、コアファイル、ノードの対応状況、プロキシの利用方法
v2rayNGAndroidXrayコアを使用ノード設定、コアのバージョン、システムVPNの許可
v2flyNGAndroidV2Flyコアを使用既存設定との互換性、システムVPNの許可

v2rayNGとv2flyNGは画面や操作の流れに共通点がありますが、同じインストールパッケージの別スキンではありません。Androidクライアントを変更する場合は、サブスクリプションのインポート結果、アプリごとの設定、ルーティング、DNSを改めて確認してください。別のアプリにローカル設定が自動で引き継がれるとは限りません。

Androidクライアントは通常、システムのVPNインターフェースを通じて端末の通信を受け取ります。このローカル接続方式は、リモートノードで使うプロトコルとは別のものです。デスクトップの「システムプロキシ」は、主にシステムプロキシ設定に従うアプリに影響します。どちらの場合も、通信はクライアントのルーティング設定を通るため、接続のオン・オフだけでは最終的な通信経路を判断できません。

ポートの例でクライアント・コア・リモートサーバーの関係を理解する

各レイヤーの関係を説明するため、以下では具体的なポート番号を例に挙げます。すべてのクライアントの初期値ではなく、インストール時にそのまま設定する必要もありません。ローカルの待ち受けアドレスは127.0.0.1に設定できますが、ポートは実際の設定を確認してください。リモートポートはサーバー側の設定と一致させる必要があります。

10808
例:ローカルSOCKSインバウンドのポート
10809
例:ローカルHTTPインバウンドのポート
443
例:リモートサーバーの待ち受けポート

上記の設定では、ブラウザーからのリクエストはまずローカルHTTPインバウンドの127.0.0.1:10809に送られます。リクエストを受け取ったコアがルーティングを確認し、直接接続ルールに一致すれば宛先へ直接接続します。プロキシルールに一致した場合に限り、リモートサーバーの443ポートへ接続する可能性があります。ローカルHTTPポートをリモートポートに変更しても、サーバーへの接続問題は解決しません。

アプリ
  → ローカルHTTPインバウンド:127.0.0.1:10809
  → コアがルーティングを判定
      → 直接接続のアウトバウンド → 宛先サイト
      → プロキシ経由のアウトバウンド → リモートサーバー:443 → 宛先サイト

バージョンによっては、1つの待ち受けポートで複数のプロキシリクエストを受け付ける混合インバウンドを採用しているため、2つのポートが必ず別々にあるとは限りません。「アドレスはすでに使用されています」と表示された場合は、まずローカルの待ち受けポートが競合していないか確認します。リモートのハンドシェイクや認証エラーが発生した場合は、サーバー側のパラメーターを確認してください。問題が起きている場所が異なれば、対処方法も異なります。

切り替えとトラブルシューティング:現状を記録し、1項目ずつ検証

コアの切り替えは、あらゆる問題を解決する万能策ではありません。クライアントにノードが保存されていても、コアが正常に起動しているとは限りません。コアが起動していても、リモート側の認証に成功したとは限りません。以下ではv2rayNでよく使われる画面の操作例を紹介します。項目名はバージョンやプラットフォームによって異なる場合があります。該当する選択肢がない場合、同名の設定フィールドを独自に作成しないでください。

  1. 現在の状態を記録する

    「ヘルプ」→「バージョン情報」を開き、クライアントのバージョンを記録します。起動ログからコアの名称とバージョンも確認してください。現在の設定をバックアップし、使用中のノードとルーティング設定を控えておきましょう。

  2. コアを確認する

    「設定」→「パラメーター設定」を開き、「Coreタイプ」または該当するコアの設定画面で、対象プロトコルに使うコアを確認します。項目が見つからない場合は、まず現在のバージョンの説明で対応状況を確認し、コアファイルを直接上書きしないでください。

  3. インバウンドを確認する

    「設定」→「パラメーター設定」で、ローカルの待ち受けアドレスとポートを確認します。前述の例を使う場合は、HTTPリクエストの送信先が10809になっていることを確認してください。混合インバウンドを使っている場合は、画面に表示された値を基準にします。

  4. 1項目ずつテストする

    同じノードと同じルーティング設定を維持し、互換性を確認したコアだけを変更して、保存後にサービスを再起動します。最初のエラーログを確認し、プロキシ経由と直接接続を別々にテストしてください。DNS、トランスポート、ルーティングを同時に変更しないようにしましょう。

サブスクリプションは設定を配布するための入り口にすぎず、異なるコアでまったく同じ有効な設定が得られる保証はありません。インポート時にクライアントが各項目を解析して、コア用の設定を生成します。トランスポートのパス、サービス名、セキュリティパラメーターが不足していると、インポート時にはエラーが出なくても接続時に失敗することがあります。トラブルシューティングでは元のノード情報と項目ごとに照合し、サブスクリプションURL全体を公開しないでください。

オープンソースライセンス:コアと画面のライセンスを個別に確認

オープンソースプロジェクトであっても、ライセンスがすべて共通とは限りません。V2Fly-coreはMIT License、Xray-coreはMPL 2.0を採用しています。v2rayNとv2rayNGのプロジェクトライセンスはGPLv3です。v2flyNGを再配布する場合も、対象バージョンのライセンスと継承したコードに関する記載を確認してください。アプリに含まれるサードパーティ製ライブラリにも、それぞれライセンス上の義務がある場合があります。インストールパッケージの名称だけでは全体の条件を判断できません。

ここで挙げた内容はライセンスを確認する際の手がかりであり、あらゆる組み合わせやパッケージ方法に関する法的判断ではありません。二次開発、企業での配布、再パッケージを行う場合は、該当バージョンのLICENSE、COPYING、サードパーティのライセンス表示、ビルド手順を確認してください。サイト上のブランド表記も、上流プロジェクトからの許諾や運営上の関係を示すものではありません。

よくある質問:名前が似ている場合の見分け方

v2rayNをインストールすると、V2Flyを使っていることになりますか?

必ずしもそうではありません。起動ログで実際のコア名を確認し、コアの種類の設定も調べてください。v2rayNはグラフィカルクライアントの名称であり、実行中のコアを示すものではありません。問題を報告する際は、クライアントとコアの両方のバージョンを記載しましょう。

同じサブスクリプションなのに、別のAndroidクライアントでは使えないのはなぜですか?

まず、インポート後のノード数とプロトコルを比較し、次にトランスポート、セキュリティ設定、コアの対応状況を確認します。その後、システムVPNの許可とアプリごとの対象範囲を確認してください。サブスクリプションの更新に成功しても、ノードの互換性確認を省略しないでください。

Xrayを使うなら、ノードをVLESSに変更する必要がありますか?

コア名に合わせてプロトコルを変更する必要はありません。サーバーが実際に提供しているプロトコルを使い、現在のコアが対応しているか確認してください。サーバー側を変更せず、クライアント側だけでVMessをVLESSに変更すると、接続できなくなります。

コアを変更すると接続できるのに、一部のアプリは直接接続されるのはなぜですか?

まず、そのアプリがシステムプロキシまたはAndroid VPNの対象になっているか確認し、次にルーティング設定でアプリや宛先が直接接続に振り分けられていないか調べてください。さらに原因を特定する場合は、コアを次々に変更するのではなく、トラブルシューティングガイドの各レイヤーを順に確認します。

v2rayN をダウンロードクライアントとプラットフォームを選択