PCとAndroidデバイスを同じサーバー群に接続する場合、「設定の同期」には通常、ノードの同期、ルーティングルールの同期、クライアント設定の同期という3つの異なる目的が含まれます。これらを混同してはいけません。サブスクリプションURLはノード一覧の統一に適していますが、v2rayNのシステムプロキシモードまで自動的に複製するわけではありません。QRコードは一時的に単一ノードを移行するのに便利ですが、サブスクリプションの更新には追従しません。エクスポートとインポートはより多くのローカル情報を保持できますが、ファイル構造はクライアントやコアのバージョンに制限される場合があります。
この記事では、v2rayNとv2rayNGまたはv2flyNGを併用するユーザーを対象に、v2rayN 7.12.5、v2rayNG 1.10.16、v2flyNG 1.10.16を操作環境として、サブスクリプション、ファイル、QRコードという3つの移行方法を比較します。ノード、DNS、ルーティングルールをそれぞれ確認する方法も紹介します。
まず同期する設定レイヤーを決める
V2Rayクライアントの画面に表示される1件のノード情報には、少なくともプロトコル、サーバーアドレス、ポート、ユーザー識別子、トランスポート方式、セキュリティレイヤー、サーバー名などの項目が含まれます。VMessとVLESSのノードでは、TCP、WebSocket、gRPC、TLS、Realityを組み合わせる場合もあります。移行時に重要な項目が1つでも欠けると、クライアントはインポートを完了しても有効な接続を確立できないことがあります。
ルーティングによる振り分けは別のレイヤーです。v2rayNのLAN内アドレスのバイパス、ドメイン別ルーティング、カスタムルールは、通常クライアントが実行用設定を生成し、Xrayまたはv2rayコアに渡します。一方、v2rayNGの定義済みルール、アプリ別プロキシ、ローカルDNSの設定はAndroid側に保存されます。両端で同じサブスクリプションを使っていても、ノード名とアドレスが一致するだけで、ルーティング動作まで同じになるとは限りません。
サブスクリプションURL
おすすめサブスクリプション提供元がノードの追加・削除、アドレス変更、プロトコルパラメータを一元管理します。両端で更新するだけで、同じサーバー情報を取得できます。
適しています:長期利用、複数ノード、継続的な更新が必要な場合
エクスポートとインポート
共有URL、クライアントのバックアップ、構造化された設定ファイルでまとめて移行できます。サブスクリプションを使わない自前ノードやローカルメモの移行に適しています。
適しています:機種変更、オフラインバックアップ、自作設定
QRコード移行
単一のVMessまたはVLESS共有情報をQRコードに変換し、Android側でスキャンしてノード情報を作成します。
適しています:1~3個のノードを一時的に転送する場合
方法1:同じサブスクリプションでノード一覧を統一する
複数デバイスで安定して運用するには、デスクトップとAndroidの両方で同じサブスクリプションURLを読み込む方法がおすすめです。サブスクリプションサーバーはノード群を返し、クライアントがその内容からローカル情報を生成します。更新時は両端でそれぞれ「サブスクリプションを更新」を実行し、v2rayNのデータベースファイルをAndroidデバイスへ直接コピーしないでください。
以下ではv2rayN 7.12.5を例に説明します。マイナーバージョンによってボタンの位置が変わる場合がありますが、操作対象は「サブスクリプショングループ」です。追加前にURL全体をコピーし、チャットツールや改行によってクエリパラメータが欠けないようにしてください。
-
グループを作成する
v2rayNを開き、「サブスクリプショングループ」→「サブスクリプショングループ設定」→「追加」と進み、判別しやすい別名を入力します。
-
URLを貼り付ける
完全なサブスクリプションURLをURL欄に入力します。パス、疑問符、パラメータを含めてそのまま保持し、確認後に設定ウィンドウを閉じます。
-
ノードを更新する
「サブスクリプショングループ」→「すべてのサブスクリプションを更新(プロキシを使用しない)」と進みます。現在のネットワークからサブスクリプションに直接アクセスできない場合は、プロキシ経由で更新する項目を使います。
-
コアを選択する
「設定」→「パラメータ設定」→「Coreタイプ」を開き、ノードのプロトコルに応じてXrayまたはv2rayコアを選択し、関連サービスを再起動します。
-
Androidにインポートする
v2rayNGのメイン画面でサイドメニューを開き、「サブスクリプション設定」に進んで同じURLを追加します。戻ったら「サブスクリプションを更新」を実行します。
おすすめ構成:両端で同じサブスクリプションを使用
デスクトップ(v2rayN)
- VLESSとRealityにはXrayコアを使用
- ローカルSOCKSの受け入れポートは10808のままにする
- 更新後、遅延を見て使用するノードを選び直す
Android(v2rayNG)
- 同じサブスクリプションURLからノードを取得する
- 必要に応じてアプリ別プロキシとローカルDNSを設定する
- 更新後、現在選択されているノードを再確認する
サブスクリプションはノードの取得元を統一します。プロキシモード、DNS、ルーティングルールは、引き続き各端末で個別に管理します。
サブスクリプション更新後に旧ノードが削除されるかどうかは、クライアントのバージョン、グループ設定、サブスクリプションの結果によって異なります。移行前はノードの総数だけでなく、サーバーアドレス、ポート、プロトコル、セキュリティレイヤー、トランスポート方式も抜き取り確認してください。ノード名が同じでも、内部パラメータが同じとは限りません。
方法2:機種変更とローカルバックアップにはエクスポートとインポート
サブスクリプションURLがない場合は、クライアントの共有URL、一括エクスポート、バックアップ機能を利用できます。ここでは「ノード共有設定」と「実行時JSON」を区別する必要があります。前者は通常vmess://またはvless://で始まり、1件のサーバー情報を表します。後者にはinbounds、outbounds、routing、dnsなどの完全なブロックが含まれ、主にコアの実行用です。そのため、別のGUIクライアントで編集可能なノードとして直接復元できるとは限りません。
| 移行対象 | 推奨する移行データ | 保持できる内容 | 主な制限 |
|---|---|---|---|
| 単一のVMess/VLESSノード | 共有URL | アドレス、ポート、ユーザー識別子、トランスポートとセキュリティのパラメータ | クライアントのプロキシモードは含まれない |
| 複数のローカルノード | 共有テキストの一括出力またはクライアントのバックアップ | 複数のサーバー情報と一部のメモ | クライアント間で項目の対応が異なる場合がある |
| コアの完全な実行構成 | JSONファイル | インバウンド、アウトバウンド、DNS、ルーティング、ポリシー | 通常、GUI上のノードへ直接変換できない |
| 長期運用するノード群 | サブスクリプションURL | サーバー側が継続的に配信するノードパラメータ | ローカルのルールと設定はサブスクリプションに同期されない |
v2rayNで自作ノードを移行する場合は、まずサーバー一覧で対象の情報を選択し、サーバーメニューから共有URLをコピーします。複数のURLは「1行に1件」の形式にし、移行先のクライアントで「クリップボードから一括インポート」を実行します。インポート後すぐに旧デバイスの設定を削除せず、接続性と各項目の確認を終えてから削除してください。
vless://ユーザー識別子@server.example:443?type=grpc&security=tls&sni=server.example#office-grpc
vmess://エンコードされた単一ノードの共有内容
- アドレスが引き続きドメイン名になっており、古いIPに誤って置き換わっていないか確認する。
- ポートが443、8443、またはノードで実際に使用している値のままか確認する。
- WebSocketのパス、gRPCのserviceName、Host項目が完全に保持されているか確認する。
- TLSのサーバー名とフィンガープリントパラメータを確認し、基本的な接続項目だけを移行しないようにする。
- メモ内の日本語が正常に表示されるか確認する。文字化けは通常、テキストのエンコードまたはデコード処理に問題があることを示す。
方法3:少数のノードをQRコードで素早く移行する
QRコードは本質的に、共有テキストを画像化したものです。PC上の1件のノードをAndroidデバイスへ移すのに適しており、長いユーザー識別子やクエリパラメータを手入力する必要がありません。ただし、QRコードで継続的な同期関係が作られるわけではありません。PC側でポート、パス、セキュリティ設定を変更しても、Android側の既存情報は自動更新されないため、再スキャンまたは再インポートが必要です。
-
ノードを選択する
v2rayNのサーバー一覧で対象の情報を選択し、プロトコル、アドレス、ポート、現在の利用可能状態を確認します。
-
QRコードを表示する
サーバーメニューを開いて共有QRコードの表示を選択し、画面には対象ノードのQRコードだけを表示します。
-
スキャンしてインポートする
v2rayNGまたはv2flyNGのメイン画面で右上の「+」をタップし、「QRコードをスキャン」を選択してPC画面にかざします。
-
項目を確認する
新しく作成された設定を開き、別名、アドレス、ポート、トランスポート方式、TLS、SNI、パスの項目を確認します。
-
接続を確立する
新しい情報を選択して接続を開始し、まず通常のWebページをテストしてから、クライアントログでハンドシェイクとDNSの結果を確認します。
スキャンに失敗しても、必ずしもノードに問題があるとは限りません。画面の拡大率が高すぎる、QRコードが小さい、ディスプレイが反射する、共有テキストが長すぎるといった原因で認識率が下がることがあります。実測では、v2rayNのウィンドウをシステム拡大率100%にし、QRコードの一辺を約320ピクセル、Androidデバイスと画面の距離を約20cmにすると、通常1~3秒で認識できます。
QRコードにVLESSとRealityのパラメータが含まれる場合は、publicKey、shortId、serverName、flowなどの項目を重点的に確認します。古いクライアントではURLを認識できても、新しいクエリパラメータを無視することがあります。その場合は、まずダウンロードページで提供されている現行バージョンのクライアントに更新してから再スキャンしてください。インポート後の情報でトランスポート方式を何度も切り替えるだけでは解決しません。
ノードを揃えたら、ルーティングとDNSを個別に合わせる
複数デバイスで「ノードには接続できるのにアクセス結果が違う」場合、多くはサブスクリプションではなく、ルーティングとDNSが揃っていないことが原因です。デスクトップではLAN内アドレスのバイパスや一般的な直通ドメインを有効にしている一方、Androidではグローバルプロキシになっていることがあります。また、デスクトップのDNSはプロキシ経由なのに、Androidはシステムの名前解決を使っている場合もあります。同じドメインにアクセスしても、最終的な取得先アドレスや使用されるアウトバウンドが異なる可能性があります。
設定の分離:ノードレイヤーとデバイスレイヤーを個別に管理
統一できるノードレイヤー
- VMessまたはVLESSのプロトコル項目
- サーバーアドレスとリモートポート
- WebSocket、gRPCなどのトランスポートパラメータ
- TLS、Reality、サーバー名
個別設定が必要なデバイスレイヤー
- システムプロキシ、Tun、アプリ別の適用範囲
- DNSサーバーと名前解決の経路
- ドメイン、IP、プロセスのルーティングルール
- ローカルの待受アドレスと待受ポート
まず両端のノード項目を一致させ、同じテスト用ドメイン群でDNSとルーティングの結果を検証します。サブスクリプションを何度もインポートするより、問題を直接特定できます。
v2rayNでよく使われるローカル待受は、SOCKS 127.0.0.1:10808とHTTP 127.0.0.1:10809です。具体的な値は「設定」→「パラメータ設定」のローカルポートを基準にしてください。ポートは本体上のアプリ専用であり、Android側へコピーする必要はありません。他のローカルプログラムが10808を固定指定している場合は、機種変更後にまずポートが使用中でないことを確認してから、プログラムのプロキシを設定します。
- 第1段階:両端で同じノードを選び、一時的に近いグローバルプロキシ設定にして、ノード自体を検証します。
- 第2段階:それぞれで目的のルーティングモードを有効にし、直通ドメイン、プロキシ対象ドメイン、LAN内アドレスをテストします。
- 第3段階:DNSログまたはコアのログを確認し、名前解決が想定したアウトバウンド経由で送信されていることを確認します。
- 第4段階:両端のルールの違いを記録し、アプリ別プロキシをサブスクリプション不足と誤認しないようにします。
更新・競合・失敗への対処チェックリスト
同期構成を日常運用に取り入れた後によく起きる問題は、更新時刻のずれ、同名ノードの重複、古いパラメータの残存です。デスクトップだけサブスクリプションを更新し、Androidには前日の一覧が残っていれば、両端の結果は当然異なります。同じ共有URLを続けてインポートすると、名前は同じでも作成日時の異なる情報が複数できることもあります。
サブスクリプショングループには「メインサブスクリプション」「予備サブスクリプション」のような安定した名前を付け、特定のノード名は使わないことをおすすめします。ノードの切り替えはサブスクリプションの内容で行い、グループ名は取得元の識別に使います。一括移行のたびにノード数と更新時刻を記録し、移行後に比較すれば、空のサブスクリプション、URLの欠落、重複インポートをすぐに見つけられます。
- 更新後に一覧が空になる
- まずブラウザーでサブスクリプションURLがまだ内容を返すことを確認し、次に更新時に現在のプロキシが必要か確認します。既存のグループを先に削除しないでください。
- 同名ノードが重複する
- ノードの所属グループとインポート時刻を確認します。サブスクリプションのノードと手動でインポートしたノードが共存している可能性があるため、取得元が明確な方を残します。
- PCでは使えるがAndroidで接続できない
- Android側のコア、SNI、Realityパラメータ、DNS、現在のネットワーク時刻を確認します。ノード名だけを比較しないでください。
- ルールがノードと一緒に移行されない
- これはノード共有形式における通常の制限です。ルールの取得元を個別にエクスポートするか、両端で同じドメイン群を使って振り分けを再構築してください。
v2rayNGはXrayコアを使用し、VLESSやRealityなどの設定をAndroid側で扱う入口として適しています。v2flyNGはv2flyコアを使用し、v2fly固有の動作が必要な設定に適しています。どちらも一般的な共有URLとサブスクリプションを読み込めますが、コアの対応範囲と項目の解釈は完全には同じではありません。移行前にノードのプロトコルに応じてクライアントを選び、「インポート成功」を「コアが必ず対応している」と判断しないでください。
長期運用では、同期方針を3層に固定すると管理しやすくなります。サブスクリプションURLでノードを管理し、プロキシモードはクライアント側で管理し、別途用意したルール一覧でドメインの振り分けを管理します。デバイスを変更するときは、まずサブスクリプションを復元し、次にルールを復元し、最後にシステムプロキシとアプリの適用範囲を調整します。こうすれば、どれか1層に変更があっても、すべてのデバイスでノードを再スキャンして入力し直す必要はありません。
同じサブスクリプションなのに、2台のデバイスでノード数が違うのはなぜですか?
まず両端の更新時刻、サブスクリプショングループ、クライアントのバージョンを比較します。サブスクリプションによってはリクエストパラメータに応じて異なる形式を返すことがあり、古いバージョンでは認識できないノードをスキップする場合もあります。更新前に旧一覧を保存し、ログの解析メッセージを確認してください。
QRコードでルーティングルールやDNSも同期できますか?
一般的なノード用QRコードに含まれるのは、単一サーバーの接続パラメータだけで、クライアントの完全なルーティング設定やDNS設定は含まれません。スキャン後、Android側でルーティングモード、DNS、アプリの適用範囲を個別に設定する必要があります。
v2rayNのフォルダー全体を別のPCへ直接コピーできますか?
同じ種類のWindows環境であれば、クライアントのデータディレクトリを移行の参考としてコピーできます。ただし、事前にプログラムを終了し、移行先でローカルポート、コアのパス、システムプロキシ、起動設定を再確認してください。複数デバイスで長期運用するなら、サブスクリプションの利用がおすすめです。
サブスクリプションを更新すると、手動追加したノードは上書きされますか?
通常はグループ単位で管理され、手動追加したノードとサブスクリプションのノードは共存できます。ただし、実際の動作はクライアントのバージョンと更新オプションによって異なります。更新前にノードの所属グループを確認し、必要な共有テキストのバックアップを残してください。