この記事の要点

まずノードのパラメータでコアを判断し、クライアント名だけで決めないでください。VMess、WebSocket、TLSなどの一般的な構成は通常、両方のコア間で移行できます。一方、xtls-rprx-vision、REALITY、shortId、特定のXray用トランスポート項目を含むノードにはXrayを使用します。v2rayN、v2rayNG、v2flyNGの選択や、サブスクリプション取り込み後にノードが起動しない原因を調べたい方に適した内容です。

Project V、V2Fly、Xrayの関係

まずクライアントとコアを分けて考えます。v2rayN、v2rayNG、v2flyNGはサブスクリプション管理、ノード一覧、システムプロキシ、画面設定を担当し、Xray-coreとv2ray-coreが実際の設定解析、接続確立、DNS処理、ルーティングを担当します。画面で共有リンクを認識できても、現在のコアがリンク内のすべての項目を実行できるとは限りません。

V2FlyはProject Vの系統にあるv2ray-coreを引き継いでいます。設定は引き続きinbounds、outbounds、routing、dns、transportを中心に構成されます。VMess、SOCKS、HTTP、Shadowsocksに加え、WebSocket、gRPC、TLSなど長く使われてきた組み合わせに適しています。開発方針は、汎用プロキシ基盤と設定インターフェースの継続的な発展を重視しています。

Xray-coreは同じ設定体系から発展し、多くのV2Ray JSON構造を維持しながら、VLESS、XTLS Vision、REALITY、新しいトランスポート方式向けの項目を拡張しています。そのため、両者は完全に無関係な別プロジェクトではありませんが、「設定ファイルのプログラム名を変えれば必ず使える」と考えることもできません。

25.6.8
この記事のXrayテスト基準
5.36.0
この記事のV2Flyテスト基準
10808
ローカルSOCKSテストポート
10809
ローカルHTTPテストポート

VMess、VLESS、XTLS、REALITYの対応の違い

VMessは両方のコアに共通する基盤です。サーバーがVMessを使用し、従来型のTCP、WebSocket、gRPCトランスポートを組み合わせている場合、Xrayと比較的新しいV2Flyのどちらでも通常は接続できます。移行時はalterId、暗号化方式、Host、パス、TLSのサービス名を確認してください。どれか一つでも欠けると、ハンドシェイク失敗として現れることがあります。

VLESSはプロトコル名だけで判断できません。最新のコアは基本的なVLESS設定の一部を共通して処理できる場合がありますが、VLESSとXTLS Vision、REALITYを組み合わせた場合、実際にはXray独自の拡張項目とハンドシェイク処理に依存します。共有リンクにflow=xtls-rprx-visionsecurity=realitypbksidfpが含まれている場合は、Xrayを選んでください。

ノード構成 Xray V2Fly 移行時の注意点
VMess + TCP 対応 対応 UUID、ポート、暗号化項目を確認
VMess + WebSocket + TLS 対応 対応 Host、path、SNI、証明書ドメインを確認
VLESS + TCP + TLS 対応 バージョンと設定によって異なる まずXray固有のflow項目を削除してテスト
VLESS + XTLS Vision 対応 そのまま置き換え不可 flow=xtls-rprx-visionを保持する必要あり
VLESS + REALITY 対応 通常のTLSノードとして代用不可 公開鍵、shortId、serverNameを一致させる必要あり

Xrayコア

推奨

VMessと一般的なVLESS設定に対応し、XTLS Vision、REALITY、および関連する共有リンクの項目もそのまま処理できます。

適した用途:日常のメイン利用、新しいサブスクリプション、VLESS・REALITYノード

V2Flyコア

構成が明確なVMess、WebSocket、gRPC、TLS設定に適しており、既存のv2ray-core環境も維持しやすいコアです。

適した用途:既存のVMessノード、固定JSON設定、V2Flyサーバー

結論:VLESSの文字だけでなく、完全なパラメータを確認する

基本的なVLESSと、VLESS・Vision・REALITYの組み合わせは、同じ互換範囲ではありません。サブスクリプションにsecurity=realityまたはflow=xtls-rprx-visionが含まれている場合、クライアント側ではXrayを使用してください。取り込みは成功したのに起動できない問題を避けられます。

トランスポート層とJSON設定の互換範囲

両方のコアは階層型の設定方式を採用しています。インバウンドがローカルトラフィックを受け取り、アウトバウンドがリモートサーバーへ接続し、ルーティングがプロキシ、直接接続、ブロックのどこへ流すかを決めます。一般的なrouting.rulesdns.serversinboundsoutboundsの構造は似ているため、単純な設定は再利用できることがよくあります。

互換性の境界は主にstreamSettingsに現れます。Xrayのノードでは、security、realitySettings、tlsSettings、grpcSettingsなどのトランスポートオブジェクトに固有の項目が追加される場合があります。V2Flyは未知の項目に遭遇すると、起動時に設定エラーを直接報告することもあれば、バージョンの違いによって一部を無視することもあります。項目が無視されたからといって、接続パラメータが正しいとは限りません。

サブスクリプションリンクも、コアが直接保存・更新するものではありません。クライアントがまずサブスクリプションを読み込み、vmess://やvless://の内容を実行用設定に変換してから、選択したコアを呼び出します。そのため、互換性の問題は二層に分かれます。クライアントが共有リンクの項目を認識できるか、そしてコアがその項目に対応するプロトコル動作を実装しているかです。

{
  "outbounds": [
    {
      "tag": "proxy",
      "protocol": "vless",
      "settings": {
        "vnext": [
          {
            "address": "node.example.net",
            "port": 443,
            "users": [
              {
                "id": "11111111-2222-3333-4444-555555555555",
                "encryption": "none",
                "flow": "xtls-rprx-vision"
              }
            ]
          }
        ]
      },
      "streamSettings": {
        "network": "tcp",
        "security": "reality",
        "realitySettings": {
          "serverName": "www.example.com",
          "fingerprint": "chrome",
          "publicKey": "examplePublicKey",
          "shortId": "6ba85179e30d4fc2"
        }
      }
    }
  ]
}
  1. まず元の設定をコピーして復元可能な状態を残し、現在使用中のファイルを直接上書きしないでください。
  2. コアの設定テストを実行するか、クライアントから一度起動し、unknown field、failed to parse config、invalid userなどのエラーを優先して確認します。
  3. アウトバウンドのプロトコル、network、security、flowの4項目を確認します。REALITY設定を通常のTLSに書き換えて使い続けないでください。
  4. ローカルの待受ポートが競合していないことを確認します。この記事のテストではSOCKSに10808、HTTPに10809を使用します。同じポートを複数のプロセスで待ち受けることはできません。
  5. 接続後にコアのログを確認します。TCP接続が確立しているのにTLSまたはREALITYのハンドシェイクに失敗する場合は、serverName、公開鍵、shortId、システム時刻を再確認してください。

v2rayN、v2rayNG、v2flyNGの標準コア構成

デスクトップではv2rayNを優先します。現在よく使われるバージョンはXrayを主要コアとし、VMess、VLESS、XTLS Vision、REALITYノードを同時に保存する用途に適しています。確認する場合は「設定」→「パラメータ設定」→「Coreタイプ」を開き、対象プロトコルがXrayに割り当てられていることを確認してください。システムプロキシのオン・オフだけを確認してはいけません。

Android版のv2rayNGはXrayコアを採用しており、REALITYノードを含むサブスクリプションをv2rayNと共有する用途に適しています。v2flyNGはV2Flyコアに対応し、サーバー側がv2ray-coreを明確に使用し、ノードの中心がVMessと一般的なトランスポートである環境に向いています。2つのクライアントは画面が似ていますが、コアの機能まで完全に同じとは限りません。

推奨構成:デスクトップとAndroidで同じサブスクリプションを使う

デスクトップ(v2rayN)
  • VLESS、Vision、REALITYをXrayに割り当てる
  • ローカルの混合プロキシポートは10808のままにする
  • サブスクリプション更新後に遅延を測定し、Coreログを確認する
Android(v2rayNG)
  • 同じサブスクリプションリンクを取り込む
  • ノード内のflowとREALITYパラメータを保持する
  • アプリごとにプロキシ範囲を設定し、サブスクリプションの元の項目を書き換えない

両方でXrayを使用すると、VLESS共有項目の解釈がより一貫します。ノードを変更した場合も、それぞれで一度サブスクリプションを更新するだけで済みます。

v2flyNGを選ぶ条件

  • サーバー側が明確にV2Flyで動作し、既存ノードの中心がVMess、TCP、WebSocket、gRPC、通常のTLSである。
  • サブスクリプションにxtls-rprx-vision、REALITY公開鍵、shortIdなどのXray固有パラメータがない。
  • 同じV2Fly JSONのロジックを検証する必要があり、ルーティングルールが現在のv2ray-coreの挙動に依存している。
  • 新しいノードを追加するたびにプロトコル対応を確認し、すべてのVLESSリンクがそのまま使えると決めつけない。

性能差と実際の選び方

コアの名前自体が速度差の主な原因になることは通常ありません。同じサーバー、同じVMess WebSocket TLSノード、同じルーティングルールであれば、スループットはネットワーク経路、TLSハンドシェイク、サーバー負荷、WebSocketの追加オーバーヘッドの影響を受けやすくなります。まずプロトコル互換性を確認し、その後で速度を比較してください。

この記事では、下り300 Mbps、上り50 Mbps、往復遅延38 msの固定回線で500 MiBのファイルをテストしました。VMess、WebSocket、TLSの組み合わせでは、Xrayの平均下り速度が286 Mbps、V2Flyが281 Mbpsで、5回の差は約1.8%でした。この結果は、従来型プロトコルが同じなら両者に桁違いの差はないことを示すだけで、他の回線にそのまま当てはめることはできません。

VLESS、Vision、REALITYに切り替えると、重視すべき点は機能が使えるかどうかになります。Xrayは5回すべて接続でき、平均下り速度は292 Mbpsでした。一方、V2Flyではこのパラメータを通常のVLESS TLS設定と同等に実行できません。この場合は互換性の前提が成立していないため、速度を比較すべきではありません。

結論:わずかなスループット差よりプロトコル対応を優先する

同じ回線の従来型VMessノードでは、コアによる差が5%未満になることがあります。ノードにVisionやREALITYが含まれる場合は、まず設定を完全に解釈できるXrayを選び、その後で遅延、パケットロス、サーバー負荷を確認してください。

  1. サブスクリプションのノード詳細を確認します。VMess、WebSocket、TLSが表示される場合は、両方のコアで互換性をテストできます。
  2. VLESSが表示されたら、flowとsecurityも確認します。VisionまたはREALITYがあればXrayを選択してください。
  3. TCP接続、TLSハンドシェイク、最初の1バイトまでの時間を個別に測定し、クライアントに表示されるICMPやTCPの遅延だけを見ないでください。
  4. サイズを固定したファイルを3~5回連続でダウンロードし、平均速度と失敗回数を記録して、一時的な回線の揺らぎを除外します。
  5. 最後に正式なルーティングルールを有効にし、DNSと分岐設定が結果を変えていないか確認します。グローバルプロキシでのテストは、実際の分岐環境の代わりにはなりません。

よくある互換性の問題と対処手順

サブスクリプションは取り込めるのに、REALITYノードを起動するとすぐ失敗するのはなぜですか?

まず、現在のクライアントがXrayを呼び出していることを確認します。v2rayNで「設定」→「パラメータ設定」→「Coreタイプ」を開き、VLESSの割り当てを確認します。次に、ノード詳細のpublicKey、shortId、serverName、fingerprint、flowを確認してください。サブスクリプション変換時にどれか一つでも欠落すると、ハンドシェイクに失敗します。

VMessノードを別のコアに変更したらタイムアウトする場合、どこを確認すべきですか?

address、port、UUID、security、network、Host、pathの順に確認します。WebSocketのパスは先頭のスラッシュを残し、TLSのserverNameはサーバー側の証明書設定と一致させる必要があります。その後、ログでDNS失敗、TCPタイムアウト、TLSハンドシェイクエラーのどれかを確認します。

v2rayNGでは接続できるのに、v2flyNGでは同じサブスクリプションが失敗するのはなぜですか?

失敗したノードを展開し、VLESS、xtls-rprx-vision、REALITYの項目が含まれていないか確認します。v2rayNGはXray、v2flyNGはV2Flyを使用するため、拡張項目の対応範囲が異なります。このようなノードはv2rayNGで使い続け、安全項目を削除して無理に取り込まないでください。

コアの起動時にポートが使用中だと表示された場合、どう対処すればよいですか?

重複して起動しているクライアントを終了するか、ローカルの待受ポートを変更します。SOCKSに10808を使う場合、HTTPには10809を使用できます。変更後は、ブラウザ、コマンドラインツール、システムプロキシの設定も更新し、古いポートへ接続し続けないようにしてください。

コアを変更したら分岐ルールが反映されなくなった場合、どうすればよいですか?

まず、ルールが参照するoutboundTagとアウトバウンドのタグが一致しているか確認します。次に、GeoIP、GeoSiteの分類名を現在のコアが認識できるか確認してください。保存後は古いコアを完全に停止して再起動し、ログでドメインが最終的にproxy、direct、blockのどのアウトバウンドへ入ったか検証します。

最終的な選択チェックリスト

  • デスクトップ設定を新規作成し、プロトコルが混在するサブスクリプションを使う:v2rayNとXrayを使用する。
  • AndroidでVLESS、Vision、REALITYを使う:v2rayNGを使用する。
  • 既存のV2Flyサーバーで、VMessと一般的なトランスポートが中心:v2flyNGを使用できる。
  • 同じサブスクリプションを複数端末で使う:できるだけ両端末のコア機能を揃える。
  • JSONを移行する:まず設定テストを行い、次にノードへ接続し、最後にDNSとルーティングルールを戻す。