設定ガイド / デスクトップ・Androidクライアント

V2Rayの詳細設定
ルーティング・DNS・TUN

サブスクリプションの取得元から最終的なアウトバウンドまで、通信の流れに沿って設定を確認できます。

初めて使う場合は、入門ガイドに沿って設定をインポートし、接続と動作を確認してください。このページでは、接続できる状態になった後の詳細な調整を扱います。デスクトップではv2rayN、Androidでは必要なコアに応じてv2rayNGまたはv2flyNGを選びましょう。インストーラーと対応アーキテクチャはクライアント一覧をご覧ください。

  • サブスクリプションと絞り込み
  • ルールの優先順位
  • 名前解決と通信の取り込み
  • 設定の復旧

01 / 設定の取得元

サブスクリプションのグループ分けとサーバーの絞り込み

グループ分けの役割

サブスクリプションのグループ分けは、まず取得元を管理するための機能であり、通信を振り分けるルールではありません。グループには通常、サブスクリプションURL、更新設定、その取得元から生成されたサーバー情報が保存されます。サーバーをグループに移動しても、特定のサイトが自動的にそのサーバーを使うわけではありません。どのアウトバウンドを使うかは、現在の接続設定とルーティングで決まります。この違いを理解しておけば、一覧の整理をネットワークポリシーの設定と取り違えずに済みます。

v2rayNでは、まずサブスクリプショングループの管理画面を開き、用途や取得元が分かる名前を付けてグループを作成し、提供元のサブスクリプションURLを登録します。「普段使い」「予備接続」のように、区別しやすい名前がおすすめです。分かりにくいアルファベットだけの名前は避けましょう。保存したら対象グループを更新し、サーバー一覧に正しく取り込まれたか確認します。メニューの位置は画面によって異なるため、項目名や機能説明を手がかりにしてください。

サブスクリプションURLにはアクセス情報が含まれることが多いため、アカウント情報と同様に扱ってください。スクリーンショットを共有するときはURLやQRコードを隠し、公開ログに完全なURLを貼り付けないようにしましょう。ブラウザーでURLを開けても、返される内容が現在のクライアントに適した形式とは限りません。ログイン画面や案内ページ、形式変換の結果が通常のテキストとしてダウンロードされ、更新完了と表示されても利用可能なサーバーが追加されない場合があります。

サーバーの絞り込み

絞り込み機能は一覧を見やすくしたり、更新後に残す項目を制御したりするために使います。ただし、適用範囲はクライアントによって異なります。表示だけを絞るものもあれば、サブスクリプションの解析時に項目を除外するものもあります。最初はサーバー名の簡単なキーワードで動作を確認しましょう。設定前の一覧を記録し、条件を保存して対象グループを更新した後、絞り込みを解除して結果を見ます。実際の作用を把握してから複雑な条件を組み合わせてください。

入力欄が正規表現に対応している場合は、次のパターンで用途を示す2つの語を含む名前に一致させられます。縦棒は「または」、括弧はグループ化を表します。通常の文字列入力にしか対応していない欄に正規表現を貼り付けても、同じ結果にはなりません。サーバー名は提供元が付けるため、更新によって変わる可能性があります。地域名の略称、倍率表記、プロトコル名にも統一ルールがない場合があるので、条件は広めに設定しましょう。

名前の絞り込み · 正規表現の例
(普段使い|予備)

入力欄が「一致する項目を残す」設定か「一致する項目を除外する」設定かを、まず確認してください。同じ正規表現でも、モードによって結果は正反対になります。一覧が空になっても、すぐにクライアントを再インストールする必要はありません。絞り込み条件を消し、すべてのグループを選択して検索を解除し、単一の取得元を更新してください。項目が再表示された場合、問題はサーバー接続設定ではなく、表示または絞り込みの段階にあります。

更新と手動編集

サブスクリプションの情報は通常、取得元のデータから再生成されます。アドレス、ポート、通信方式などを直接変更しても、次回の更新で元に戻ることがあります。変更を長期間保持したい場合は、別名を付けて独立した手動設定として複製し、複製した日付と用途も記録してください。こうすれば取得元からの更新を続けながら、サブスクリプション管理の対象外になった設定を判別でき、古い情報で新しい設定を上書きする事態も防げます。

Androidのv2rayNGとv2flyNGでも、取得元ごとにサブスクリプションを管理しましょう。QRコードのインポートは単一の設定に、サブスクリプションのインポートは以後の一括更新に適しています。両者は同じ種類のデータではありません。別の端末から移行する場合は、エクスポートしたものが単一の接続設定、サブスクリプションURL、アプリ設定全体のどれなのか確認してから、対応するインポート機能を選んでください。無関係な形式を何度も試すのは避けましょう。

更新に失敗した場合は、現在使える設定を残したうえで、システム時刻、サブスクリプションの有効期限、更新リクエストに既存のプロキシが必要かを確認します。現在のプロキシ経由で更新できるクライアントもあれば、直接接続で更新するものもあります。まず現在のネットワークで到達できる方法を使って1つのグループを更新し、成功を確認してから自動更新を検討しましょう。未確認の接続1つに、すべての取得元を依存させないでください。

整理が終わったら、サーバーを1つ選んでテスト用の基準にし、自動切り替えや複雑な絞り込みは一旦無効にします。まず通常のシステムプロキシで接続できることを確認してから、ルーティングとDNSの設定に進みましょう。「設定をどこから取得するか」を管理する作業と、「接続設定が使えるか」を確認する作業は別々に記録してください。後のトラブルの範囲を絞りやすくなります。

02 / 条件判定とアウトバウンド

ルーティングルールの実践

ルールの判定順と条件

ルーティングルールは上から順に評価され、最初に一致したルールでアウトバウンドが決まります。具体的な例外は広い範囲を対象とするルールより前に、最終的なフォールバックルールは一番後ろに置きます。先にすべてのポートをプロキシへ送ると、後続のプライベートアドレス向け直接接続ルールは適用されません。変更前に、直接接続する宛先、プロキシを使う宛先、遮断する宛先を明確にし、その一覧を順序付きルールに落とし込みましょう。

1つのルールに異なる種類の条件を指定した場合、通常はすべての条件を満たす必要があります。同じドメイン配列内の複数項目は、通常いずれかに一致すれば対象になります。たとえばドメインとポートの両方を指定すると、「そのドメインで、かつ指定ポートを使う」という意味であり、「ドメインまたはポート」ではありません。2つの条件をそれぞれ独立して一致させたい場合は、ルールを分けてください。条件の関係を誤解すると、単純な入力ミスよりも画面上で気づきにくくなります。

よく使うドメイン指定では、full:example.comは完全一致、domain:example.comはそのドメインとサブドメインに一致します。通常の文字列や正規表現は対象範囲が広く、似た名前の宛先まで誤って一致することがあります。完全なドメイン名で例外を指定できるなら、曖昧なキーワードは避けましょう。ドメイン名にはプロトコル、パス、ページのパラメーターは含まれません。

最小構成の振り分け例

プライベートアドレスと中国本土で一般的なドメイン・アドレス範囲は直接接続し、それ以外のTCP・UDP通信はプロキシに送るルール構成を示します。このオブジェクトをメイン設定のrouting階層に統合してください。例では利用可能なGeoデータファイルと、directおよびproxyという名前のアウトバウンドがすでにあることを前提としています。タグは単なる識別名であり、対応する接続を自動作成するものではありません。

メイン設定 · routing
{
  "routing": {
    "domainStrategy": "IPIfNonMatch",
    "rules": [
      {
        "type": "field",
        "ip": ["geoip:private"],
        "outboundTag": "direct"
      },
      {
        "type": "field",
        "domain": ["geosite:cn"],
        "outboundTag": "direct"
      },
      {
        "type": "field",
        "ip": ["geoip:cn"],
        "outboundTag": "direct"
      },
      {
        "type": "field",
        "network": "tcp,udp",
        "outboundTag": "proxy"
      }
    ]
  }
}

IPIfNonMatchは、ドメインルールに一致しなかった場合に名前解決を試み、IPルールの判定を続ける設定です。すべてのアプリのリクエストにドメイン名が含まれることや、最終的なアウトバウンドがその名前解決結果を使うことを保証するものではありません。宛先IPだけが渡される場合、ドメインルールは適用できないことがあります。ドメイン情報を復元したい場合は、受信時のスニッフィングなどと組み合わせてください。ドメイン一覧を増やすだけでは解決しません。

Geoルールの効果は、データファイルとその分類に左右されます。1つのサービスが複数のドメイン、CDNのアドレス、サードパーティーのリソースを使うこともあります。トップページが直接接続できても、サービス全体が直接接続できるとは限りません。特定のサービスに例外を設ける場合は、実際のリクエスト先を確認してから必要なドメインを1つずつ追加してください。広範囲のパブリッククラウドのアドレス帯を直接接続に指定すると、ルールの適用範囲が広がりすぎるため避けましょう。

ルールの動作確認

テスト対象期待される動作確認するルールの位置
LAN内のデバイス直接接続のアウトバウンドでアクセスプライベートアドレスのルールとローカルルーティング
明示的に指定したドメイン例外指定したタグに一致ドメイン指定とルールの順序
一覧にない一般的な宛先フォールバックのアウトバウンドを使用最後のルールとタグ

一度に変更するルール群を1つに絞り、同じテスト対象で変更前後を比較してください。ブラウザーのキャッシュ、接続の再利用、アプリのバックグラウンドプロセスにより、古い接続が継続することがあります。保存後はコアを再起動し、関連アプリの既存接続を閉じてください。ログでは宛先ドメイン、宛先アドレス、アウトバウンドのタグを確認します。接続が確立しただけで、想定したルールに一致したと判断しないでください。

広告カテゴリの遮断は、優先順位の高い独立ルールとして設定できます。ただし、すべてのリソースを大まかな分類でブロックするのが適切とは限りません。有効にした後、ログイン、決済、認証コードなどに問題が出た場合は、まずそのルールを無効にして再テストし、必要なドメインをより優先度の高い例外として追加します。遮断には専用のアウトバウンドが必要で、通常はblackholeプロトコルを使います。blockというタグ名を付けるだけでは機能しません。

「システムプロキシモード」と「コアのルーティングモード」も区別してください。前者はアプリがリクエストをクライアントに送るかどうかを決め、後者は受け取ったリクエストの転送方法を決めます。クライアントに届いていない通信は、上記のルールでは処理されません。両者の詳しい関係はシステムプロキシとルーティングモードの解説をご覧ください。トラブルシューティングでは、まず通信がどこから入るかを確認しましょう。

03 / ドメイン名の解決

DNS設定の最適化

名前解決の経路

DNS設定では、まず経路の一貫性を整え、その後に応答速度を検討します。アクセス時には、システムのリゾルバー、ブラウザー内蔵の暗号化DNS、クライアントのDNS、リモートサーバーでの名前解決などが関わることがあります。どこから問い合わせが送られ、どの経路を通り、結果を誰が使うのかを把握して初めて、設定変更の効果を判断できます。DNSサーバーのアドレスを1つ変更するだけでは、名前解決の経路全体は制御できません。

システムプロキシが主に転送するのは、プロキシ設定に従うアプリの通信であり、システムDNSまで必ず取り込むわけではありません。ブラウザーがドメイン名をプロキシへ直接渡す場合もあれば、先に自身で名前解決する場合もあります。他のプログラムが固定のDNSアドレスへ直接アクセスすることもあります。そのため、クライアントにDNSを設定しても、端末上のすべての問い合わせがそのDNSを使うとは限りません。ブラウザー、システムのネットワーク設定、クライアントの通信取り込み範囲を個別に確認してください。

リモートでの名前解決と直接接続での名前解決は、ルーティングの目的に合わせて使い分けます。直接接続するリソースには現在のネットワークから到達できるリゾルバーが適しています。プロキシを使うリソースでは、問い合わせが想定した経路で届くことを確認してください。暗号化DNSサーバーをドメイン名で指定する場合は、そのサーバー自体の名前解決も必要です。これをブートストラップDNSと呼びます。ブートストラップの経路を誤ると、「リゾルバー自身の名前解決を、そのリゾルバーに依存する」という問題が起こります。

コアのDNS設定例

以下はメイン設定の一部にあたるdnsオブジェクトです。中国本土のドメインは指定したサーバーを優先し、それ以外の問い合わせにはDoHアドレスを使用します。これはドメインごとにリゾルバーを割り当てる構成を示す例であり、すべてのネットワークに適するとは限りません。DoHリクエストがどのアウトバウンドを使うかは、実際のコアと設定によって異なります。アドレスの接頭辞だけでプロキシ経由と決めつけず、ルーティングとログを確認してください。

メイン設定 · dns
{
  "dns": {
    "queryStrategy": "UseIPv4",
    "servers": [
      {
        "address": "223.5.5.5",
        "domains": ["geosite:cn"]
      },
      "https://1.1.1.1/dns-query"
    ]
  }
}

domainsでは、そのサーバーが優先的に処理するドメインの範囲を指定します。ただし、問い合わせに失敗した後の動作は、フォールバック設定やコアの実装にも左右されます。厳密なネットワーク分離のルールと捉えないでください。特定の問い合わせが他のリゾルバーへ絶対に送られないようにするには、使用中のコアが対応するフォールバック項目、失敗時の動作、実際のネットワーク経路を確認してから設計します。この例だけを残しても実現できません。

queryStrategyはここではコアのDNS問い合わせ方式を指定します。OSのIPv6を無効にしたり、すべてのアプリが別のレコードを個別に問い合わせるのを防いだりするものではありません。IPv4を選ぶとデュアルスタックの問題を切り分けやすくなりますが、一般的な高速化スイッチではありません。現在のネットワークとサーバーがIPv6を正しく処理できる場合は、個別に検証してから設定を残すか判断してください。関連する問題を恒久的に隠すのは避けましょう。

キャッシュと段階的な検証

DNS設定を変更しても、以前の結果がシステム、ブラウザー、アプリ、コアのキャッシュに残っていることがあります。まず対象アプリを終了してクライアントを再起動し、OSの手順に従ってキャッシュを更新してください。同じドメインを使って結果と実際の接続先アドレスを比較します。ページを一度再読み込みしただけで新しい設定が有効になったと判断しないでください。ページのリソースがローカルキャッシュから読み込まれたり、古い接続が再利用されたりすることがあります。

「IPアドレスではアクセスできるが、ドメイン名では開けない」場合は、まずDNSを確認します。「ドメイン名は解決できるが、接続できない」場合は、ルーティングとリモート接続を調べてください。名前解決が成功しても、得られた結果が現在のネットワーク経路に適しているとは限りません。リゾルバーの場所に応じて接続先アドレスを変えるサービスもあります。直接接続で得た結果をリモートアウトバウンドに渡すと、遠回りになったり接続に失敗したりすることがあります。

ブラウザーだけで問題が起きる場合は、一時的にブラウザー独自のセキュアDNSを無効にし、システム設定に従う状態に戻して比較します。特定のアプリだけで問題が起きる場合は、独自の名前解決を使っていないか、固定アドレスに接続していないかを確認してください。テスト後に最終的な設定を決めましょう。一時的に無効にするのは問題の範囲を絞るためであり、すべてのネットワークに同じ名前解決方式を推奨するものではありません。

クライアントの「リモートDNS」「直接接続DNS」などのフォーム項目は、設定生成時に複数のコアオブジェクトへ変換されることがあります。まず同じフォームを使って設定し、カスタムJSONに反対の設定を重ねて記述しないでください。手動で拡張する場合は、最終的に生成されたファイルを確認し、オブジェクトの重複や上書きの関係を把握してから、有効だった変更を独立した変更記録に残しましょう。

04 / 通信の入口

TUNモード

システムプロキシと仮想ネットワークインターフェース

TUNモードは仮想ネットワークインターフェースを使い、ルーティング対象のIP通信を処理チェーンに取り込みます。システムプロキシに従わないアプリに適しています。解決するのは通信の取り込み範囲の問題であり、リモートサーバー、プロトコル設定、DNSを自動的に修正するものではありません。通常のシステムプロキシで接続できない場合は、先に基本的な接続を直してからTUNを有効にしてください。複数の設定階層が同時に失敗すると、原因を特定しにくくなります。

v2rayNのTUN機能は、クライアントが別のネットワークコンポーネントを制御して実現している場合があります。画面上のTUNオプションが、Xrayのメイン設定に固定の項目を追加するものとは限りません。実際の通信の入口、ルーティング、DNSの取り込み方は、クライアントが使用するコンポーネントによって異なります。手動設定の前に、設定ファイルがどのコンポーネント向けか確認してください。異なる実装のインターフェース項目を、同じJSONオブジェクトに混在させないようにしましょう。

Androidのv2rayNGとv2flyNGは、システムのVPNインターフェースを通じて通信を取り込みます。接続リクエストはユーザーの許可が必要です。システムのステータスバーにVPNアイコンが表示されても、リモート接続が使えるとは限りません。デスクトップとAndroidでは、通信の入口、権限、アプリのフィルタリング機能が異なります。特定のプラットフォームの設定をそのまま流用せず、振り分けの目的と検証方法を引き継いでください。

有効化の順序と権限

有効にする前に、現在使える設定を保存し、デフォルトルートを変更する他のネットワークツールを終了して、クライアントに必要な権限を付与します。デスクトップ環境では、管理者権限、バックグラウンドサービス、仮想ネットワークインターフェースのコンポーネントが必要な場合があります。クライアントの案内に従ってください。テストを通すためだけにセキュリティ機能を恒久的に無効にせず、不足している権限を特定して、クライアントが対応する方法で許可しましょう。

最初のテストでは、検証済みのリモート接続1つ、シンプルなルーティング、明確なDNS経路だけを使います。起動後に仮想インターフェースが作成されたか、想定したルートが設定されたか、通常のアプリから目的の接続先にアクセスできるかを確認してください。システムプロキシでは使えてTUNでは使えない場合に限り、通信の入口コンポーネント、権限、ルーティングの取り込みを重点的に調べます。サブスクリプションをすべてインポートし直す必要はありません。

プラットフォーム重点確認項目よくある競合
Windows権限、仮想インターフェース、ルートの優先順位他の仮想ネットワークインターフェースやセキュリティソフトの設定
macOS / Linuxサービスの権限、インターフェース、DNSの状態システムのネットワーク管理機能や既存のトンネル
AndroidVPNの許可、対象アプリ、バックグラウンド実行他のVPNサービスによるシステムインターフェースの使用

ルーティングループとLAN

クライアントからリモートサーバーへの接続が自身のTUNに再度取り込まれないようにする必要があります。再度取り込まれるとループが発生することがあります。自動ルーティング機能は通常、出口の保護や例外を設定しますが、手動でルートを追加するとこの関係が崩れる場合があります。起動直後にネットワーク全体へ接続できなくなった場合は、まずTUNを無効にしてネットワークが復旧するか確認し、サーバーへの出口とデフォルトルートを調べてください。グローバルルールを追加し続けるのは避けましょう。

LANプリンター、共有フォルダー、管理画面への接続は個別に確認してください。プライベートアドレスの直接接続ルールが制御するのは、コアに取り込まれた通信です。そもそもOSがその通信を仮想インターフェースへ送るかどうかは、システムのルーティングで決まります。LANに接続できない場合は、2つの階層を確認しましょう。システムに正しいLAN経路があるか、クライアントが通信を受け取った後に直接接続のアウトバウンドを選ぶかを調べます。

UDP、リアルタイム通信、一部のゲーム通信は、サーバー側の対応、ネットワークの制限、TUNコンポーネントの対応状況にも左右されます。Webページが開けて特定のアプリが失敗しても、モード全体が動作していないとは限りません。アプリが使う通信方式と、アプリのフィルターで除外されていないかを確認してから、アウトバウンドが必要な機能に対応しているか調べてください。Webページ1つのテストだけで実際のアプリの動作を判断しないようにしましょう。

MTUは仮想インターフェースで送信するパケットのサイズに影響します。特定のサイトが停止する、大きなリクエストが失敗する、接続確立後に応答が止まるといった症状がある場合に、調査項目に加えてください。まずクライアントの既定値を使い、変更前後の動作を記録します。ネットワーク、トンネルのカプセル化、経路の条件は環境によって異なるため、ネット上の固定値をそのまま設定しないでください。

システムプロキシも同時に有効にするかどうかは、最後に判断してください。2つの通信経路を同時に使っても問題が起きない場合はありますが、アプリが実際にどの経路を通るか判断しにくくなります。テスト中は通信の入口を1つに絞り、安定してから用途に応じて組み合わせましょう。グローバルモード、中国本土をバイパスするモード、通信の入口の違いは、モードの選び方も参照してください。

05 / ドメイン名のマッピング

FakeDNS

仮想アドレスと元のドメイン名

FakeDNSは、ドメイン名に対してアドレスプール内の仮想アドレスを返し、アドレスとドメイン名の対応を内部に保存します。その後、アプリが仮想アドレスへ接続すると、連携する通信の入口が元のドメイン名を復元し、ルーティングとアウトバウンドに渡します。これは公開リゾルバーではなく、接続先のWebサイトに新しいアドレスを割り当てる仕組みでもありません。ドメイン名の情報を保ち、ローカルでの実際の名前解決が後続の振り分け判定に与える影響を抑えることが利点です。

この仕組みを機能させるには、名前解決と接続が同じ管理下の経路を通る必要があります。DNS問い合わせだけがFakeDNSに届き、その後の接続がクライアントを迂回すると、アプリは実際のサーバーではないアドレスへ直接接続しようとします。反対に、接続が通信の入口に届いても、問い合わせをブラウザー独自の暗号化DNSが処理していると、クライアント側にマッピングが作られず、ドメイン名を想定どおりに復元できないことがあります。

そのため、FakeDNSを通常のDNSアドレスとしてシステムに設定しないでください。まずクライアントと通信の入口コンポーネントが対象のモードに明示的に対応していることを確認し、同じ実装に合わせてDNSの取り込み、アドレスプールのルーティング、マッピングの復元を設定します。v2rayNが制御するTUNコンポーネントは独自の仮想アドレス機能を使う場合があります。機能名が似ているからといって、コアのFakeDNSを併用しないでください。

Xrayの部分設定

以下はXrayで関連する3つの階層を示した例です。トップレベルのアドレスプール、DNSサーバー一覧、対象の通信入口に統合するスニッフィング設定を含みます。アドレスプールには予約済みのベンチマーク用アドレス帯を使用しており、インターネット上の接続先アドレスではありません。この例だけでは透過型の通信入口もシステムルートも作成されません。必要な関連設定がない状態でコピーしても、端末全体が自動的にFakeDNSを利用することはありません。

メイン設定 · アドレスプールとDNS
{
  "fakedns": [
    {
      "ipPool": "198.18.0.0/15",
      "poolSize": 65535
    }
  ],
  "dns": {
    "servers": ["fakedns"]
  }
}
対象のinbound · sniffingを統合
{
  "sniffing": {
    "enabled": true,
    "destOverride": ["fakedns"],
    "routeOnly": false
  }
}

ipPoolは仮想アドレスの範囲を定義し、poolSizeはマッピングプールの容量を指定します。プール内のアドレスは識別用であり、実際の接続先として直接接続のアウトバウンドに渡してはいけません。設定前に、既存のLAN、他のトンネル、テスト用ネットワークが同じ範囲を使用していないか確認してください。アドレス範囲が競合すると、一部の接続が物理インターフェースや別の仮想インターフェースへ誤って送られることがあります。

destOverrideのfakednsは、マッピングを使って宛先を復元するための設定です。この例ではrouteOnly: falseを明示しています。ルーティング判定だけに使い、実際の接続先として仮想アドレスを残す設定では、例の目的を満たせません。通常のHTTPやTLSのスニッフィングとFakeDNSのマッピングは別の仕組みです。項目名が似ているからといって置き換えないでください。

互換性とトラブルシューティング

有効にした後、まず通常のドメイン1つを名前解決し、結果が設定したプールの範囲内にあるか確認します。次に接続時にドメイン名へ正しく復元されるか確認してください。結果が実際のパブリックアドレスのままなら、問い合わせが対象のDNS経路に取り込まれているか調べます。仮想アドレスが返されても接続に失敗する場合は、そのアドレス宛ての通信が連携する通信の入口に戻るか、入口が同じマッピング状態を使っているかを優先して確認します。

ローカルでアドレスの種類を検査して予約済みアドレスを拒否するプログラムや、名前解決結果を別の端末へ渡すプログラムでは、FakeDNSが適さない場合があります。LAN内のデバイス検出、実際のアドレスを必要とするサービス、特定のネットワーク診断ツールでは、クライアントが対応する方法で通常のDNSを使う例外を設定してください。例外は名前解決とルーティングの両方に反映する必要があります。仮想アドレスの範囲を直接接続に指定するだけでは解決しません。

再起動後も、システムやアプリに古い仮想アドレスがキャッシュされている一方、新しいプロセスのマッピングテーブルは更新されていることがあります。その結果、「有効にした直後は使えたが、再起動後に一部だけ失敗する」という状態になることがあります。まず関連するキャッシュを消去して対象アプリを再起動し、その後に設定の誤りを判断してください。古い仮想アドレスを長期間使うhosts設定に登録したり、サービスの固定接続先として保存したりしないでください。

通常のDNSとドメイン名のスニッフィングで振り分けの要件を満たせるなら、設定項目を増やすためだけにFakeDNSを有効にする必要はありません。FakeDNSはドメイン名を保持する必要がある場合に役立つ機能であり、すべてのネットワークで使う標準的な最適化ではありません。まず1つのアプリで効果と互換性を確認し、すぐに復旧できる設定のコピーを残してから、少しずつ適用範囲を広げましょう。

06 / 取得元と設定の管理

複数サブスクリプションの管理

取得元・用途・テスト用の基準

複数のサブスクリプションを管理する目的は、すべてのサーバーを長い一覧にまとめることではなく、取得元を追跡でき、更新後に復旧できる状態にすることです。取得元ごとに独立したグループを作り、名前やメモに用途を記載しましょう。普段使い、一時的なテスト、予備接続で更新方法を分けても構いませんが、用途名は品質の保証ではありません。各取得元の現在の接続状態を個別に検証してください。

新しい取得元は、まず単独でインポートして手動更新を1回行い、すぐにデフォルト接続には設定しないでください。プロトコルの種類、サーバーアドレス、必要な通信方式の項目を現在のクライアントが認識できるか確認し、設定を1つ使って基本動作をテストします。取得元が出力する形式がクライアントに合わない場合は、同じ形式を何度もインポートして試すのではなく、クライアントに適したサブスクリプション形式を提供元に依頼してください。

複数の取得元に同じ名前の項目があっても、必ずしも重複とは限りません。同じ表示名でも、アドレス、ポート、通信方式、認証情報が異なる場合があります。同じアドレスが複数の異なるサービスを提供する場合もあります。重複を整理するときは実際の接続情報を比較し、取得元との関係も残してください。名前だけで一括削除すると予備設定を誤って消す可能性があり、アドレスだけで統合すると用途の異なる接続が混在することがあります。

更新方針

自動更新は、手動更新が安定して行えることを確認してから設定します。まず各グループで利用可能な更新経路を確認し、その後に更新頻度を決めてください。取得元に変更がないのに頻繁にリクエストしても、通常はメリットがありません。アクセス制限を受ける可能性もあります。クライアントがグループ単位の設定に対応している場合は、グループごとに管理しましょう。1つの取得元の失敗で全体の更新が止まったり、重要な設定が一括削除に巻き込まれたりするのを防げます。

更新前に、現在のデフォルト接続の取得元と実際の接続情報の特徴を記録してください。提供元が項目の名前を変更、削除、差し替えする可能性があり、クライアント内の選択先が変わることもあります。更新後は、現在の接続先が想定した項目のままか確認し、最もよく使うアプリでテストしてください。「更新成功」と表示されても、それだけでメンテナンスを終えないでください。通常、その表示が示すのはダウンロードと解析の完了までです。

更新に使うネットワーク経路も考慮しましょう。すべてのサブスクリプションが現在のプロキシ経由でしか更新できないと、その接続が使えなくなった際に代替設定を取得できない場合があります。検証済みの独立した予備設定を残し、自動更新されないことを明記しておくと安心です。予備設定も恒久的に使えるわけではないため、定期的に手動でテストしてください。有効期限が切れた設定を一覧に残しても、実際の復旧手段にはなりません。

記録する内容目的注意点
取得元とグループ名更新や形式の問題を特定する機密情報を含むURL全体は記録しない
更新経路直接接続かプロキシ経由かを明記する自動化の前に動作を確認する
手動で変更した項目取得元のデータとローカルでの変更を区別する更新で上書きされるかどうかを記載する
復旧用の設定検証済みの基本接続に戻す定期的に利用できることを確認する

移行と機密情報

新しい端末へ移行する場合は、クライアントが対応する方法で設定をエクスポートし、サーバー情報、サブスクリプションURL、設定全体を区別してください。完全なバックアップには、アカウント情報、ローカルの待ち受けアドレス、カスタムルーティングが含まれる場合があります。一般的な文書と同じように共有しないでください。移行前に必要な設定を記録し、移行後に権限とシステム連携を確認します。データをコピーしただけで、システムの状態もすべて引き継がれるとは限りません。

デスクトップとAndroidの間で移行する場合は、機能の違いに特に注意してください。サーバーの接続情報は共通でも、アプリのフィルタリング、VPNの許可、TUNコンポーネント、ファイルパスは共用できません。まず接続情報をインポートし、新しいプラットフォームに合わせて通信の入口と振り分けを設定し直してください。カスタムファイル一式をそのまま移すと、パスやコンポーネント項目が合わず、起動できないことがあります。

古い取得元を削除する前に、デフォルト接続、ルール、手動で作成したコピーがその取得元に依存していないか確認してください。サブスクリプショングループを削除する前に必要な設定を保存し、削除後は一覧と現在の選択先を確認します。サブスクリプションURLが公開スクリーンショットやエラーレポートに含まれていた場合は、提供元のアカウント機能を使ってURLを変更してください。ローカルでグループを削除しても、流出したURLは無効になりません。

最後に、「サブスクリプションの更新」と「サーバーの切り替え」を分けて考えてください。前者は設定データを更新し、後者は現在の接続先を選びます。両方を同時に行う必要はありません。自動更新後にアプリで問題が起きたら、まずデフォルトの項目が変わったか確認し、次に接続情報の変更を調べます。この順序で確認すれば、取得元の項目変更をDNSやルーティングルールの問題と取り違えずに済みます。

07 / アウトバウンドの構成

カスタムアウトバウンド

タグとプロトコルオブジェクト

アウトバウンドは、受け取った通信の次の接続をどのように確立するかを定義します。ルーティング内のoutboundTagは参照先を示すだけであり、実際のアウトバウンドオブジェクトに対応するtagが必要です。タグは大文字と小文字を区別するため、用途が分かる短い名前を付けましょう。存在しないタグを指定するルールを作っても、クライアントが接続を自動生成することはありません。起動時の検査や実際の転送時にエラーが発生する可能性があります。

クライアントが生成するアウトバウンドと、手動で追加するアウトバウンドを区別してください。v2rayNは通常、選択中のサーバーに応じてリモート接続オブジェクトを生成するため、サーバーを切り替えるとオブジェクトが再作成される場合があります。一時ファイルを直接編集すると、再起動時に変更が失われることがあります。クライアントが明示的に提供するカスタム設定の入力欄を使い、その設定がメイン設定に統合されるのか、置き換えるのか、完全に引き継ぐのか確認してください。

以下は独立した部分例です。直接接続、通信の破棄、ローカルの別のSOCKSサービスへの転送を示します。リモートサーバーの認証情報は含みません。指定したアドレスでローカルサービスが実際に待ち受けており、現在の通信の入口と同一ではないことが前提です。コピーする前に待ち受けポートを確認してください。同じ処理チェーンへ通信を戻すとループが発生する可能性があります。

メイン設定 · outbounds
{
  "outbounds": [
    {
      "tag": "direct",
      "protocol": "freedom",
      "settings": {}
    },
    {
      "tag": "block",
      "protocol": "blackhole",
      "settings": {}
    },
    {
      "tag": "local-socks",
      "protocol": "socks",
      "settings": {
        "servers": [
          {
            "address": "127.0.0.1",
            "port": 10810
          }
        ]
      }
    }
  ]
}

freedomは、コアが置かれているネットワークから直接接続することを示します。この端末上の他のすべてのネットワークツールを迂回するという意味ではありません。システムのデフォルトルートが別のトンネルを指していれば、直接接続のアウトバウンドもそのトンネルを経由することがあります。実際の出口を判断するには、OSのルーティングとクライアントのログをあわせて確認してください。タグがdirectだからといって、物理ネットワークを使うとは限りません。

blackholeは、一致した通信を破棄します。接続が不要な宛先を明確に遮断するのに適していますが、設定ミスがあった場合の既定の対処として使うべきではありません。特定のサービスに問題があるときは、まず遮断ルールに誤って一致していないか確認してから、条件の範囲を調整します。リクエストが応答なしで破棄されると長時間待たされることがあるため、トラブルシューティングでは遮断ルールを個別に確認してください。

ルールへの組み込みとデフォルトの出口

次のルールは、ドキュメント用の例示ドメインをローカルのSOCKSアウトバウンドへ転送します。広範囲のフォールバックルールより前に追加してください。例示ドメインは構文の説明用なので、実際に使うときは対象のサービスに合わせて変更します。対象サービスの範囲を広げる場合も、実際のリクエストを確認して必要なドメインを指定してください。すべてのポートをローカルサービスに渡すと、関係のないアプリの出口まで変わってしまいます。

{
  "type": "field",
  "domain": ["full:example.com"],
  "outboundTag": "local-socks"
}

どのルールにも一致しない場合、コアは通常デフォルトのアウトバウンドを使用します。一般的な設定では、アウトバウンド配列の先頭項目が関係します。上の例では先頭が直接接続なので、既存の設定にそのまま置き換えても、未一致の通信がプロキシを使うとは限りません。既存のリモート接続オブジェクトを残してフォールバック方針を明示するか、配列の順序を確認し、最終的な動作が想定どおりになるようにしてください。

連鎖接続の注意点

ローカルサービスへの転送と、コア内部の連鎖接続は異なる設定方法です。前者は別の待ち受けポートに接続し、そのサービスに後続の処理を任せます。後者は使用するコアが対応するアウトバウンドの組み合わせ項目に依存します。コアによって項目と作用する階層が異なるため、ある実装の通信設定を別の実装へコピーしないでください。クライアントが明示的に対応し、動作を確認しやすい方法を選びましょう。

転送を1段追加したら、それぞれの区間を個別に確認します。まずローカルのSOCKSサービスが単独で動作することを確認し、次にコアからそのポートへ接続できるか、最後にルールが一致するかをテストします。最初の区間は正常でも連鎖全体が失敗する場合は、名前解決の位置、UDP対応、追加のカプセル化が必要かを確認してください。両端の設定を同時に変更すると、どの変更が結果に影響したか分からなくなります。

カスタムアウトバウンドが安定したら、用途、タグの対応関係、復旧方法を記録します。機密性の高い接続情報は、保護されたクライアント設定に保存し、通常のメンテナンス文書にはコピーしないでください。日常的な調整は必要なルールだけにとどめ、サブスクリプションを切り替えるたびにアウトバウンド全体を書き直さないようにしましょう。取得元の管理と出口の構成を分ければ、更新と復旧を制御しやすくなります。

08 / 互換性と動作確認

プロトコル・コア・設定の検証

クライアント・コア・プロトコル

クライアントは画面、サブスクリプション管理、システム連携を担当し、コアは設定の解析と接続処理を担当します。Project Vは関連技術エコシステムの出発点です。V2FlyとXrayは異なるコアの系統であり、どちらもJSON形式だからといって設定項目が完全に互換とは限りません。v2rayNの機能は選択したコンポーネントに依存します。v2rayNGはXrayを中核とし、v2flyNGはV2Flyコアを対象としています。

コアを選ぶときは、名前を比較する前にサーバーの要件を確認してください。VMessやVLESSなどはプロトコル層、TCPやWebSocketなどは通信方式の選択肢です。TLSとREALITYはそれぞれ異なる接続のセキュリティ機構です。プロトコル、通信方式、セキュリティ設定、フロー制御を組み合わせて確認する必要があります。サーバーが求める条件に対して、クライアントも対応する機能を備えている必要があります。いずれかの項目だけを個別に置き換えないでください。

REALITYとXTLS Visionは、どの設定でも有効にできる汎用的な高速化オプションではありません。対応するサーバー設定とコアの実装が必要です。項目が正しくても、組み合わせ全体が適切とは限りません。既存の設定で接続できない場合は、まずサーバーから提示された接続要件全体を確認し、次にクライアントが使用するコアを確認してください。技術的な関係はREALITYとXTLS Visionの解説をご覧ください。

設定生成と項目の互換性

コアを変更する前に、現在使える設定を保存し、クライアントの設定項目と実際に生成されるファイルの対応関係を記録してください。画面上で項目を選べても、保存時に現在のコンポーネント向けに変換されたり、無視されたりする場合があります。カスタムオブジェクトがコアに直接渡される場合もあります。対応状況は、生成結果、起動ログ、実際の動作を根拠に判断してください。画面に似た名前の項目があるかどうかだけでは判断できません。

設定の確認は、まず構文、次に構造、最後にネットワークの順で進めます。JSONの余分なカンマ、閉じ忘れた引用符、重複キーを優先して確認してください。構造面では、項目が正しいオブジェクト階層にあるか、タグ参照とファイルパスが正しいかを確認します。起動できても、すべてのルールが想定どおり動くとは限りません。コアの違いについてはXrayとV2Flyコアの比較もご覧ください。

デスクトップ版の画面フレームワークを選んでも、コアの確認を省略できるわけではありません。v2rayNのデスクトップ版と従来のWPF版の主な違いは、画面、プラットフォーム、実行環境の依存関係にあります。実際に使えるプロトコル機能は、使用するコアと設定を確認してください。画面の入口が違うだけなら、同等の機能を探しましょう。チュートリアルのスクリーンショットを再現するために、すでに使えているプロトコルを変更する必要はありません。バージョンの選び方はデスクトップ版とWPF版の違いをご覧ください。

段階的な動作確認と復旧

確認手順を固定します。まず通常のシステムプロキシでリモート接続をテストし、次にプライベートアドレスとドメインの例外、DNSの経路を確認してから、最後にTUNとFakeDNSを有効にします。設定を1段追加するごとに同じアプリと宛先で再テストし、直前まで使えていた状態を保存してください。こうしておけば、失敗したときは最後の変更だけを戻せばよく、設定全体を最初から作り直す必要がありません。

ログは同じリクエストで発生した失敗を中心に収集してください。発生時刻、宛先、使用した通信の入口を記録し、前後のログから名前解決、ルールの一致、接続エラーを確認します。共有する前に、サーバーの認証情報、サブスクリプションURL、不要なアクセス記録を隠してください。無関係なログを大量に貼り付けると、機密情報が漏れるだけでなく、問題に関係する行も見つけにくくなります。

障害の種類は、できるだけ具体的に分類してください。「接続できない」は、コアが起動しない、通信が入口に届かない、名前解決に失敗する、アウトバウンド接続に失敗する、接続先アプリが応答を拒否する、といった原因に分けられます。それぞれ確認する場所は異なります。特定のアプリだけで問題が起きる場合は、同じ宛先へ別のアプリから接続できるか確認してください。システム全体で問題が起きる場合は、インターフェース、システムプロキシ、デフォルトルートなど共通の階層を調べます。

ルールを保存しても変化がない場合、まず何を確認すればよいですか?

変更した設定が現在有効になっていることを確認し、コアを再起動してアプリの古い接続を終了します。次にリクエストがクライアントに届いているか、実際にどのアウトバウンドに一致したかを確認し、追加したルールより前に広範囲のルールがあって上書きしていないか調べてください。

システムプロキシでは使えるのにTUNでは使えません。サブスクリプションを変更する必要がありますか?

検証済みの接続はそのまま残してください。まず権限、仮想インターフェース、出口のルーティングループ、DNSの取り込みを確認します。ログにリモート接続自体の失敗が示されている場合に限り、サーバー設定を再確認してください。通信の入口に問題があるときに、すべての取得元を同時に入れ替えないようにしましょう。

コアを切り替えた後に起動できなくなった場合、どうすれば元に戻せますか?

元のコアと対応する設定に戻し、基準となる接続が再び使えることを確認してください。その後、新しいコアが対応するプロトコル、通信方式、カスタム項目を1つずつ確認し、互換性のない項目を削除または書き換えます。コア名だけ変更して、確認していないカスタム設定ファイル全体を使い続けないでください。

最後に、名前を分かりやすく付けた2つの状態を保存します。1つは最小構成の利用可能な基準設定、もう1つは現在の詳細設定です。両者の違い、有効化する条件、復旧手順を記録すれば十分です。機密情報を複製する必要はありません。ネットワーク、取得元、コンポーネントに変更があった場合は、まず基準設定で基本接続を確認してから拡張機能を戻してください。トラブルシューティングの手順は短く、再現できる状態に保ちましょう。