設定階層 / マッチ順序 / 検証と切り戻し

V2Ray 高度な設定ガイド

デスクトップはv2rayNを中心に解説し、v2rayNGとv2flyNGのモバイル環境での注意点も紹介します。

このページは項目別に設定を確認するためのガイドで、初回接続の手順に代わるものではありません。インストール、サブスクリプションの追加、接続確認がまだの場合は、先にクイックスタートガイドをご覧ください。基本接続を確認してから、このページを参考にグループ分け、ルーティング、通信の取り込みを調整してください。チュートリアルにある高度な設定は、該当する章をこのページで確認できます。

画面上の項目名はクライアントのビルドによって異なる場合があります。使用中のコア、設定形式、実際の設定画面を確認してから該当する設定例を使ってください。異なるコア向けの設定項目を同じファイルに混在させないでください。

設定階層と検証の基本

クライアントの画面、プロキシコア、OSのネットワーク設定は、それぞれ別の階層です。v2rayNはサーバー、サブスクリプション、ルーティングを管理し、コアの設定を生成または読み込んで実行します。システムプロキシは、一部のアプリがローカルのプロキシ入口を使うかどうかを決めます。TUNは仮想ネットワークインターフェースを通じて、条件に合う通信を取り込みます。画面に起動済みと表示されても、起動処理が完了したことしか分かりません。名前解決、ルーティング、接続先への通信を順に確認する必要があります。

画面上の設定とネイティブ設定を区別する

通常のサーバー項目はクライアントが設定を生成するため、画面から調整できます。一方、カスタム設定は指定したコアに直接渡される場合があり、クライアントのルーティング、DNS、ポート設定の一部が生成に反映されないことがあります。変更前に、現在の項目がどちらに当たるか確認してください。確認を怠ると、画面では保存されていても実際に動作中のファイルに変更が反映されないことがあります。自動生成された一時ファイルを直接編集しないでください。サーバーの切り替えやクライアントの再起動時に内容が再生成される可能性があります。

このガイドのJSON例は主にXray形式の項目を使用しています。「マージ用」と記載したコードは、単体で起動できる設定ではありません。v2rayNGは一般にXrayコアを使用し、v2flyNGはV2Flyコアを採用しています。項目名が似ていても、設定全体を相互に流用できるとは限りません。v2rayNではTUNの通信取り込み機能とプロキシコアが別々に動作する場合もあります。通信取り込み側のDNSやルーティングの構文は、現在使用中のコンポーネントに合わせて確認し、プロキシコアの項目をそのまま適用しないでください。

階層主な役割最初に確認する項目
クライアント管理層サブスクリプション、項目、設定生成現在の項目と選択中の設定
プロキシコア層プロトコル、DNS、ルーティング、アウトバウンド起動エラーと実際のアウトバウンドタグ
システムネットワーク層システムプロキシ、仮想インターフェース、ルーティングプロキシの入口とインターフェースの割り当て

再現可能な基本接続を確立する

作業を始める前に、正常に動作する設定を1つバックアップし、選択中のサーバー、システムプロキシのモード、ローカルの待ち受けポート、ルーティング方式を記録してください。サブスクリプションURLや認証情報を公開記録に残さないでください。まずTUNを無効にし、システムプロキシに従うアプリを1つ使って目的のサイトにアクセスします。クライアントのログに対応する接続が記録されているか確認してください。基本のプロキシ接続が正常に動作していない段階でFakeDNS、カスタムアウトバウンド、複雑なルールを追加すると、原因の切り分けが難しくなります。

検証では、1つのWebページだけを確認しないでください。直接接続するサイト、プロキシ経由でアクセスするサイト、ローカルまたはLAN上のサービスをそれぞれ用意します。名前解決や接続が成功するか、ログでどのアウトバウンドが選択されたかを記録してください。ブラウザーのキャッシュでDNSの変更が見えないことや、既存の接続が古い経路を使い続けることがあります。ルールを変更したら接続を確立し直し、必要に応じてテスト用アプリを完全に終了してから、同じ条件で比較してください。

一度に変更する設定階層は1つだけ

推奨する順序は、サブスクリプションの整理、ルーティングの設定、DNSの調整、最後にTUNとFakeDNSの有効化です。保存するたびに起動ログを確認し、同じアクセス手順でテストしてください。問題が起きたら、複数のスイッチを一度に切るのではなく、直前に変更した項目だけを元に戻します。こうすることで、ルールによる経路の変化なのか、名前解決結果の変化なのか、システムが通信を取り込む範囲の変化なのかを判断しやすくなります。

トラブルの記録には、クライアント名、使用コア、設定形式、実行した操作、機密情報を伏せたログがあれば十分です。クライアントを更新する場合は、ダウンロードセンターでOSに合ったインストール方法を選んでください。基本接続がタイムアウトする場合は、まずトラブルシューティングを確認してください。更新は原因の特定に代わるものではありません。特に、更新前に唯一使える設定や切り戻し用の記録を削除しないでください。

サブスクリプションのグループ分けとサーバーフィルター

サブスクリプションをグループ分けする主な目的は、取得元を分けて管理することです。接続プロトコルを変える機能ではありません。取得元ごとにグループを作ると、更新対象、項目の所属、無効化する範囲を明確にできます。v2rayNでは通常、「サブスクリプショングループ」に関連する画面で名前とURLを登録します。v2rayNGとv2flyNGでは、サブスクリプション設定から取得元を管理します。メニュー名はクライアントによって異なりますが、取得元を登録し、対象を更新して、取り込み結果を確認する流れは共通です。

取得元ごとにグループを作り、表示範囲を決める

グループ名には「普段使い」「予備」「手動設定」など、用途が分かる名前を付けてください。認証情報、サブスクリプションURL、請求情報を名前に含めないでください。似た項目が複数の取得元にあっても、グループは分けておきます。取得元の更新が止まったとき、混在した一覧を調べずに該当グループだけを無効化できます。手動で追加した項目は専用のグループに分け、サブスクリプションから取得した項目と混在させないのがおすすめです。

サブスクリプションURLを入力するときは、クエリパラメーターを含むURL全体をそのまま使ってください。URL内のトークンでアカウントを識別するサブスクリプションもあり、疑問符以降を削除すると更新に失敗することがあります。QRコードやクリップボードから取り込む場合は、前後の空白や改行、全角の記号にも注意してください。認証情報を含むURLを公開の変換サービスに送信しないでください。形式の変換には、信頼できるローカル環境を優先してください。具体的な形式はサブスクリプションURLの形式解説をご覧ください。

フィルターが適用される段階を確認する

「検索」「表示フィルター」「取り込みフィルター」は、それぞれ異なる機能です。検索は通常、一覧の表示を絞り込むだけで、サーバーを削除しません。取り込みフィルターは条件に合わない項目を現在のグループに取り込まない場合があります。削除はローカルの項目一覧そのものを変更します。設定前に説明を読み、次回のサブスクリプション更新にも影響するか確認してください。判断できない場合は、取り込み設定に複雑な条件を書くのではなく、まず一覧検索を使ってください。

現在のクライアントが正規表現に対応している場合は、シンプルで範囲の明確なルールで名前を絞り込めます。まず少数の項目で試し、その後に取得元全体へ適用してください。サブスクリプションの項目名は提供元が決めるため、接頭辞や空白、異なる言語が含まれることがあります。名前の一致は、地理的な位置の判定とは異なります。フィルター結果が空になった場合は、フィルターを解除して再更新し、元のサブスクリプションに項目があるか確認してください。そのうえで、大文字・小文字、区切り文字、正規表現の構文を確認します。

^(日常|予備)-
^(?!.*テスト).*$

上の2行は、互いに独立した正規表現の例です。1行目は「日常-」または「予備-」で始まる名前に一致します。2行目は「テスト」を含む項目を除外します。正規表現に対応していると明記された欄だけで使用してください。通常の検索欄では、これらの記号が正規表現として解釈されない場合があります。名前のフィルターは一覧管理用であり、プロトコルの互換性、サーバーの稼働状況、想定どおりの通信経路を保証するものではありません。

更新後に項目の変化を確認する

指定したグループを更新したら、まずプロトコル、アドレス、ポート、転送方式が正しく読み込まれたか確認してください。項目数の変化は、取得元の変更、フィルター設定、形式の認識結果による可能性があり、クライアントが設定を失ったとは限りません。グループ全体が消えた、または空になった場合は、更新結果と解析エラーを確認してから、以前のフィルター条件に戻してください。形式の非互換性は、更新ボタンを何度押しても解決しません。取得元側のリクエスト制限にかかるおそれもあります。

長期的な修正のために、サブスクリプションから取り込んだ項目の名前や転送パラメーターを手動で変更するのは避けてください。次回更新で変更が上書きされたり、項目が再生成されたりする場合があります。一時的な修正が必要なら、項目を手動管理のグループにコピーし、用途を明記して、元の項目との差分を記録してください。サブスクリプションから取得した元の項目はそのままにしておくと、原因が取得元データかローカルの変更かを判断しやすくなります。

グループを切り替えても、使用中のサーバーが切り替わるとは限りません。更新後は、現在選択されている項目を確認してください。元の項目が削除または再生成された場合は特に注意が必要です。モバイル端末では、変更を読み込むためにサービスの再起動が必要なこともあります。一覧のハイライト表示だけで判断せず、起動ログに記録された接続先とアウトバウンドを確認してください。一覧の整理が済んでからルーティングを設定すると、取得元の管理上の問題を通信経路の不具合と誤認しにくくなります。

ルーティングルールの実践とマッチ順序

ルーティングは通信を指定したアウトバウンドへ振り分ける機能で、サーバーのプロトコル設定を修正するものではありません。Xray形式のルールは通常、上から順に評価され、最初に一致したルールで経路が決まります。具体的なドメインのルールは広い分類より前に置き、LANを保護するルールが全通信をプロキシへ送るルールに隠れないようにしてください。どのルールにも一致しない通信の既定の行き先も決めておく必要があります。ネイティブ設定では通常、最初のアウトバウンドが既定の経路になります。クライアントが設定を生成する場合は、実際の挙動を確認してください。

意図を決めてからマッチ条件を書く

設定前に、必ず直接接続する対象、プロキシ経由にする対象、遮断する対象の3種類を文章で整理してください。大量のルールを先に追加して、結果から意図を推測するのは避けましょう。v2rayNでは「ルーティング設定」から方式を選び、ルールを編集できます。モバイル版のプリセットは一般的な振り分けに便利ですが、カスタムルールの機能はクライアントの設定画面によって異なります。ネイティブ設定一式を読み込む場合は、画面上のルーティング設定が引き続き生成に反映されるか確認してください。

ドメインのマッチ条件では、full: は完全一致、domain: はドメインとそのサブドメインへの一致、keyword: はキーワードの確認、regexp: は正規表現を使用します。対象が明確な場合は最初の2つを優先し、キーワードによる意図しない一致を避けてください。geosite: はドメイン分類、geoip: はIPアドレス分類を参照します。参照するデータファイルが存在し、指定したカテゴリを含んでいることを確認してください。

{
  "routing": {
    "domainStrategy": "IPIfNonMatch",
    "rules": [
      {
        "type": "field",
        "ip": ["geoip:private"],
        "outboundTag": "direct"
      },
      {
        "type": "field",
        "domain": ["full:example.com"],
        "outboundTag": "proxy"
      },
      {
        "type": "field",
        "domain": ["geosite:cn"],
        "outboundTag": "direct"
      },
      {
        "type": "field",
        "ip": ["geoip:cn"],
        "outboundTag": "direct"
      }
    ]
  }
}

これは完全な設定にマージするルーティング例で、directとproxyという2つのアウトバウンドがすでにあることを前提としています。完全一致するドメインの例外を地域分類より前に置き、後続の広いルールに上書きされないようにしています。既定のアウトバウンドもプロキシサーバーも定義していないため、単独のファイルとして保存しても起動できません。使用する際は、例のドメインを実際に振り分けたい対象に置き換え、既存ルールとの前後関係を確認してください。

ドメイン条件とIP条件の適用範囲

同じルール内の複数のドメイン条件は、通常はいずれかに一致すれば適用されます。一方、異なる種類の条件は、通常すべて満たす必要があります。ドメインとIPを同じルールに入れても、「ドメインまたはIPのどちらかに一致」という意味にはなりません。それぞれを別に判定したい場合は、ルールを分けてください。また、ドメイン情報が取得できるかにも注意が必要です。アプリがIPアドレスへ直接接続する場合、ドメインルールだけでは元のドメインは分かりません。スニッフィングもすべてのプロトコルで有効とは限りません。

AsIsは、ルーティングのために積極的なドメイン解決を行いません。IPIfNonMatchは、ドメインルールに一致しない場合にIPマッチング用の名前解決を試みます。IPOnDemandは、より早い段階で名前解決を行います。ここで設定するのはルーティング判定に必要な名前解決のタイミングであり、DNSプロキシ全体の有効・無効ではありません。IP分類ルールを使う場合は、リゾルバーへの通信経路も確認してください。ルール自体が正しくても、DNSリクエストが到達しなければマッチ判定まで進めません。

ログで例外ルールの適用を確認する

ルールを保存したら接続し直し、対象ドメイン、マッチ結果、アウトバウンドタグを確認してください。特定のアプリだけ想定と異なる場合は、アプリがプロキシにドメイン名とIPアドレスのどちらを渡しているか、独自の暗号化DNSを使っているかを確認します。すべての例外ルールが機能しない場合は、まずルールの順序、正しいルーティング方式が読み込まれているか、タグの綴りを確認してください。アウトバウンドタグは文字列が完全に一致する必要があります。存在しないタグを参照しても、有効な経路にはなりません。

地域別の振り分けにも注意点があります。ドメインの分類と現在の名前解決結果が示す地域は一致しないことがあり、コンテンツ配信サービスは接続のたびに経路を変更する場合があります。分類データが接続ごとの通信内容をすべて反映すると考えず、必要な対象には明示的な例外を設定してください。より詳しい優先順位や適用範囲はルーティング構文と優先順位の解説をご覧ください。変更後にアクセスが遅くなった場合は、まず元の方式に戻して比較し、ルールの追加が必要か判断してください。

DNS 設定と名前解決の経路

DNSの問題は、誰がクエリを送るのか、誰が処理するのか、どの経路で上流DNSへ届くのかの3点に分けて考えます。ブラウザー、OS、プロキシコア、TUNの通信取り込みコンポーネントが名前解決を処理する場合があります。クライアントのDNSアドレスを変更しても、すべてのアプリがすぐにそのアドレスを使うとは限りません。アプリ独自の暗号化DNS、システムキャッシュ、既存の接続も、確認結果に影響します。

内蔵DNSの役割を確認する

プロキシコアの内蔵DNSは通常、内部の名前解決、ルーティング判定、特定のアウトバウンド処理に使われます。システムの既定リゾルバーに自動的に切り替わるとは限りません。システムプロキシモードでは、アプリによってOSが先に名前解決してIPをプロキシへ渡す場合と、ドメイン名をプロキシの入口へ渡す場合があります。DNSの処理経路はこの2つで異なります。システムのDNSクエリを取り込むには、通常、TUN側でのDNSリダイレクトや対応するシステム設定も必要です。

v2rayNのDNS画面は、使用するコアによって設定方法が異なる場合があります。v2rayNGのリモートDNS、ローカルDNS、関連するルーティング設定も、現在のモードに合わせて解釈してください。「リモート」という名称だけで、通信が必ずプロキシ経由になると判断しないでください。まずクライアントの既定設定を保ち、通常の接続が動作することを確認してから、上流DNSのアドレスやドメイン別の振り分けを調整します。DNS設定を全面的に置き換える前に、既存ルールと予備リゾルバーの役割を記録してください。

{
  "dns": {
    "servers": [
      {
        "address": "223.5.5.5",
        "domains": ["geosite:cn"],
        "skipFallback": true
      },
      "1.1.1.1"
    ],
    "queryStrategy": "UseIP"
  }
}

これはXray形式のDNS設定を既存構成にマージする例です。ドメイン分類に応じた問い合わせ先とフォールバック用リゾルバーを示していますが、すべてのネットワークに適しているとは限りません。domainsは該当するドメインの問い合わせ先を選び、skipFallbackはそのサーバーをほかのドメインの通常のフォールバックに使わないようにします。選択されたドメインがほかのサーバーを一切試さないという意味ではありません。実際のフォールバック動作は、ほかの設定項目にも左右されます。上流DNSへの接続可否と接続経路は、実際の設定で確認してください。

暗号化DNSとブートストラップ名前解決

ドメイン名で指定する暗号化DNSを使う場合、クライアントは暗号化接続を確立する前にDNSサーバーのアドレスを知る必要があります。これがブートストラップ名前解決の問題です。ブートストラップの名前解決まで、まだ接続できていない同じDNSサービスに依存すると、循環が発生します。到達可能な経路を明示するか、現在のコアが対応する静的マッピングを使用してください。通常のDNSアドレスを暗号化DNSに置き換えただけで、名前解決の経路全体が完成したと考えないでください。

リモートプロキシサーバーのドメイン名も、この経路に含まれます。サーバーの名前解決にプロキシが必要なのに、そのプロキシもサーバーへの接続を必要とする場合、起動時の名前解決で停止します。トラブル時は、サービスの起動前にサーバーのドメイン名を解決できるか確認し、上流への接続が自分自身に戻っていないかを調べてください。暗号化DNSはクエリの転送を保護しますが、ルーティング、サーバー証明書、システム時刻の誤りを自動で修正するものではありません。

IPv4・IPv6とキャッシュの影響

UseIPは、2種類のアドレス結果を利用可能にしますが、システムでIPv6が正常に通信できることを保証しません。ネットワークからIPv6アドレスが返っても、外向きの通信ができない場合、接続に失敗してからIPv4へ切り替わるため、初回アクセスが遅くなることがあります。まずIPv4とIPv6の実際の経路を比較し、IPv4だけを使う名前解決方式にするか判断してください。特定のクエリ種別を無効にしても、アプリ独自の名前解決やIPアドレスへの直接接続まで制御できるわけではありません。

DNSの検証でシステムの問い合わせツールを使っても、分かるのはOSが使用したリゾルバーの結果だけです。プロキシコアの内蔵DNSが正常に動作している証拠とは限りません。クライアントのログとアプリの接続記録も確認してください。変更後はOS、ブラウザー、コアのキャッシュを考慮する必要があります。上流DNSを何度も変えるより、テスト対象ごとにキャッシュを消去するか再起動するほうが、原因を判断しやすくなります。キャッシュが残っている間は、一度アクセスに成功しても新しいリゾルバーが使われたとは限りません。

ドメインを名前解決できてもアクセスできない場合は、返されたIPアドレスとルーティング先のアウトバウンドが一致しているか確認してください。DNSの確認だけで終わらせないでください。LAN内の短いホスト名だけが使えない場合は、検索ドメインとローカルDNSサービスが通信取り込みの対象になっているか確認します。社内ドメイン、プリンター名、家庭内ネットワーク機器はローカルDNSに依存する場合があります。すべてをパブリックDNSに渡すのではなく、ローカルDNSを使う対象を明示的に設定してください。

TUN モードとシステム通信の取り込み

システムプロキシが有効なのは、プロキシ設定に従うアプリだけです。TUNは仮想ネットワークインターフェースを作成し、システムルートと連携して、条件に合うIP通信を取り込みコンポーネントへ渡します。そのため、システムプロキシの設定を参照しないアプリの一部も処理できます。ただし、すべての接続を強制的にリモートへ送るわけではありません。取り込み後の通信はDNS、ルール、アウトバウンドによって処理され、最終的に直接接続、プロキシ経由、遮断のいずれかになります。

有効化する前に基本経路を確認する

まずシステムプロキシモードで、同じサーバーへの接続が正常に使えることを確認してください。次に、既定ルートを競合させる可能性のあるほかの通信取り込みツールを停止します。v2rayNでは通常、メイン画面からTUN設定を開いてスイッチを有効にします。権限が足りない場合は、クライアントの案内に従って再起動してください。仮想インターフェース、ルーティングテーブル、ファイアウォールの許可方法はOSごとに異なります。あるOSの管理者権限での操作を、すべての環境に当てはめないでください。

Androidでは、システムのVPN許可を得て通信を取り込みます。v2rayNGとv2flyNGは、初めてサービスを起動するときに必要な権限を要求します。同じユーザー領域でこの役割を占有できるVPNサービスは、通常1つだけです。システムの許可を使うAndroidの方式は、デスクトップのTUNとは実装が異なります。デスクトップの仮想インターフェース設定をそのままスマートフォンに読み込まないでください。アプリごとのプロキシを有効にした場合は、許可するアプリと除外するアプリの一覧も確認してください。

確認項目システムプロキシTUNまたはシステムVPNによる通信取り込み
アプリがプロキシ設定に従うか通常は必要主に通信取り込みの範囲で決まる
DNSクエリの処理元通常はアプリまたはシステムが処理DNSの通信取り込み設定による
LANへのアクセスプロキシの除外設定によるシステムルートと振り分けルールによる
実行に必要な権限通常はプロキシ設定の変更のみインターフェースまたはシステムVPNの許可が必要

ループとLAN通信の誤取り込みを防ぐ

プロキシサーバーへの接続は、実際のネットワークインターフェースから送信される必要があります。同じ通信取り込みの入口へ再び流すとループが発生します。クライアントは通常、必要な除外設定やインターフェースのバインドを処理しますが、カスタムルーティング、手動のゲートウェイ設定、複数の通信取り込みツールによって、この前提が崩れることがあります。有効化後にすべての接続が途切れたら、まずTUNを終了して基本のプロキシ接続が復旧するか確認し、その後、既定ルート、サーバーアドレスの除外、実際の出口インターフェースを調べてください。

LANへの直接接続には、システムルートが通信をローカルインターフェースへ送れるかと、プロキシルールがプライベートIPアドレスをdirectアウトバウンドへ割り当てるかという2つの条件があります。後者が正しくても前者が書き換えられていると、プリンターやゲートウェイに接続できません。まずローカル機器のIPアドレスを指定してテストし、次に機器名で接続してください。IPアドレスなら接続できて名前では失敗する場合は、全体のルーティングを変えるのではなく、ローカルDNSを確認します。

通信の取り込み結果を順に検証する

有効化したら、ブラウザー、通常はシステムプロキシに従わないアプリ、LAN内のサービスの順にテストします。ブラウザーが使えても、システムプロキシを引き続き利用している可能性があるため、すべてのアプリが通信取り込みの対象になっているとは限りません。経路を切り分けるには、管理下のテスト環境でシステムプロキシを一時的に無効にし、TUNだけの動作を確認します。テスト後は、普段使用する設定に戻してください。2つの入口を同時に有効にすることが必ずしも誤りではありませんが、アプリの通信経路を判別しにくくなります。

UDPを使うアプリの通信には、サーバーのプロトコル、リモート側の対応、ローカルファイアウォールも関係します。TUNだけでこれらの機能が追加されるわけではありません。一部の接続だけ成功し、長時間応答がない場合は、UDP、IPv6、大きなパケットのいずれかに問題が偏っているか確認してから、MTUを調べてください。比較せずにMTUを極端に小さくしないでください。断片化や処理負荷が増える一方で、本当の原因に対処できないことがあります。

TUNを終了してもネットワークが復旧しない場合は、まずクライアントから通常の手順でサービスを停止し、システムにプロキシ設定、仮想インターフェース、誤ったルートが残っていないか確認してください。ネットワークインターフェースをすべて削除したり、ファイアウォールを長期間無効にしたりしないでください。詳しい有効化手順はv2rayN TUN仮想アダプターの設定をご覧ください。モバイル版でタイムアウトする場合は、接続タイムアウトの確認手順も参考になります。

FakeDNSとドメインのマッピング

FakeDNSは問い合わせたドメインに合成IPアドレスを割り当て、ドメインとアドレスの対応を内部で管理します。アプリがそのアドレスに接続すると、通信取り込みコンポーネントが元のドメインを復元し、ドメイン別ルーティングやプロキシ経由の名前解決に利用できます。合成アドレスは接続先サーバーの実IPアドレスでも、新しいリモートサーバーでもありません。アプリが先に実IPアドレスを取得し、ドメイン情報が失われる状況を減らし、ドメインの情報を保つことが目的です。

有効化にはマッピング経路全体の連携が必要

FakeDNSを使うには、少なくとも3つの処理が連携する必要があります。問い合わせが指定のリゾルバーへ届くこと、合成アドレスへの接続が同じ通信取り込み経路に捕捉されること、接続処理時にドメインを復元できることです。DNSサーバー一覧に名前を追加しただけで対応する通信を取り込まない場合、アプリは合成IPを通常のゲートウェイへ直接送る可能性があります。逆に、スニッフィングを設定しただけでは、システムのDNSクエリが自動的にFakeDNSへ送られるわけではありません。

まず、合成アドレスの処理をどのコンポーネントが担うか決めてください。v2rayNのTUN通信取り込みコンポーネントに独自のFake IP機能がある場合、XrayのFakeDNSをむやみに重ねて有効にしないでください。2つのコンポーネントが別々にアドレスを割り当ててキャッシュを管理すると、ドメインの復元時に対応するマッピングが見つからないことがあります。v2rayNGとv2flyNGでは設定画面や対応範囲も異なります。現在のコアとクライアントの機能を確認し、設定名が似ているだけで同じ実装だと判断しないでください。

{
  "fakedns": [
    {
      "ipPool": "198.18.0.0/15",
      "poolSize": 65535
    }
  ],
  "dns": {
    "servers": ["fakedns"]
  }
}

これはXray形式の機能設定例で、DNSの通信取り込みを含む完全な設定ではありません。アドレスプールにはテスト専用の範囲を使用していますが、現在の環境で競合しないという意味ではありません。LAN、社内ネットワーク、ほかの仮想インターフェースがすでにその範囲を使っている場合は、先に設定を変更してください。アドレスプールのサイズはマッピングの容量を決めるもので、同時接続数の上限とは異なります。容量を増やしても、問い合わせの取り込みやマッピング復元ができない問題は解決しません。

インバウンドでの復元とスニッフィングの適用範囲

Xrayが対象の通信を直接処理する構成では、関連するインバウンドでもFakeDNSに対応する復元機能を有効にする必要があります。設定するのは、合成アドレスへの接続を受け取るインバウンドです。任意の待ち受け入口を選ぶのではありません。以下は一般的なスニッフィング設定例です。実際のインバウンド構成に合わせて使用してください。上流の通信取り込みコンポーネントがすでにドメインを復元する場合は、そのコンポーネントの設定方法に従ってください。

{
  "sniffing": {
    "enabled": true,
    "destOverride": ["fakedns"]
  }
}

通常のHTTPやTLSのスニッフィングと、FakeDNSのマッピング情報は別の情報源です。前者はアプリのプロトコルからドメインを取得しようとし、後者は事前のDNS問い合わせ記録に依存します。一部のプロトコル、暗号化ハンドシェイク、IPアドレスへの直接接続では、利用可能なドメイン情報を取得できません。スニッフィングですべての接続先名を必ず復元できるとは限りません。ルーティングだけに適用するのか、接続先アドレスも置き換えるのかは、現在使用しているコアの設定項目を確認してください。

キャッシュ、切り替え、互換性への対処

有効化後は、キャッシュされていないドメインを1つ問い合わせ、アプリが合成アドレスを受け取ることと、接続時にそのドメインが復元されることを確認してください。サービスの停止後や通信取り込みコンポーネントの変更後も、アプリが古い合成IPをキャッシュしている場合があります。新しいサービスに対応するマッピングがないと、一部のサイトに突然接続できなくなることがあります。その場合は、DNSキャッシュを消去してアプリを再起動してください。アドレスプールを広げたり、リモートサーバーを繰り返し変更したりしないでください。

LAN内のサービス検出、名前解決結果のアドレスを検査するプログラム、実IPアドレスが必要な診断ツールは、合成アドレスに適さない場合があります。こうした対象には、実アドレスを返す明示的な例外を優先し、DNSと接続経路の両方に例外が適用されることを確認してください。ブラウザー内蔵の暗号化DNSが通信取り込み用リゾルバーを迂回すると、同じアプリのリクエストでも経路が分かれることがあります。トラブルの切り分けでは、その設定状態も記録してください。

有効化による効果がはっきりしない場合は、通常の名前解決を使うほうが管理しやすくなります。元に戻すときは、通信の取り込みを停止し、DNS設定を復元し、キャッシュを消去してアプリを再起動した後、直接接続とプロキシ接続の対象を確認してください。FakeDNSの項目だけを削除し、システムに古い合成アドレスを残さないでください。信頼できる比較結果を得るには、設定とキャッシュの両方を復元する必要があります。

複数サブスクリプションの管理と更新方針

サブスクリプションのグループ分けは取得元を分離し、複数購読の管理は取得元ごとの更新タイミング、重複項目、現在の選択、障害時の切り替えを管理します。複数の取得元を使う場合、すべての項目を長大な一覧に集約することが目的ではありません。どの取得元を更新したか、どの項目が変わったか、現在のサーバーがまだ存在するか、更新に失敗した場合にどの設定を残すかを把握できるようにします。

取得元ごとに一貫した管理範囲を設ける

普段使い、予備、テスト用など用途ごとに取得元を分け、手動設定は別に保存してください。予備の取得元を用意しても、自動で障害を検知して切り替わるわけではありません。サブスクリプションはサーバー情報の取得手段であり、稼働状況の確認や自動切り替え機能を自動的に作るものではありません。クライアントでサーバーを切り替えると、通常は新しい接続の経路が変わります。確立済みの接続は移行しないことがあります。予備の取得元を試す場合は、新しい接続を作り直し、既存のセッションが結果に影響しないようにしてください。

2つの取得元に同じ名前のサーバーがあっても、名前だけで重複項目を削除しないでください。名前は表示用の項目にすぎず、接続設定を決めるのはプロトコル、アドレス、ポート、ユーザーID、TLS、転送パラメーターです。アドレスが同じでも認証情報や用途が異なる場合があります。逆に、同じサーバーでも名前の変更によって別の項目に見えることがあります。機密情報を伏せた接続パラメーターを比較してから、重複項目を非表示または削除するか決めてください。

更新は結果を確認できる時間帯に行う

自動更新の間隔は、取得元の要件と利用頻度に合わせてください。頻繁に更新する必要はありません。更新には現在のネットワークが使われ、直接リクエストを送る場合とクライアントの既存プロキシを使う場合があります。具体的な動作は設定によって異なります。初回の取り込み時にプロキシがまだ使えず、取得元URLへのアクセスにプロキシが必要な場合は、先に使える基本接続を確立するか、信頼できるオフラインの方法で取り込んでください。サブスクリプションの更新とプロキシの起動が互いに依存しないようにします。

複数の取得元を一括更新して失敗したら、まず1つの取得元だけを更新し、ネットワーク全体の障害か、特定の取得元の応答異常かを切り分けてください。リクエストのエラー、応答が認識可能な内容だったか、どの段階で解析されたかを記録します。リクエストが成功しても、正しいサブスクリプションデータが返されたとは限りません。認証が無効な場合、取得元がWebページや案内文を返すことがあります。その場合、ローカルのプロトコル設定を繰り返し変更しても解決しません。URL、認証、取得元サービスの状態を先に確認してください。

状況最初に確認する項目残しておく切り戻し対象
すべての取得元で更新に失敗ローカルネットワークと更新リクエストの経路現在利用できるサーバー
特定の取得元を解析すると空になる応答形式と取り込みフィルターそのグループの元の設定とフィルター条件
更新後に現在の項目が使えなくなった項目が置き換わったか、削除されたか接続を確認済みの予備の取得元

更新失敗は、サービスがすぐ使えなくなったことを意味しない

サブスクリプションの更新とサーバーへの接続は、異なるリクエスト経路を通ります。取得元に一時的にアクセスできなくても、ローカルに保存済みの項目なら接続できる場合があります。逆に、更新に成功してもすべてのサーバーが利用できるとは限りません。一度の更新失敗でグループ全体を削除したり、更新成功を接続確認とみなしたりしないでください。最後に利用できたデータを残し、サブスクリプションのリクエストとサーバー接続の結果を別々に記録すると、問題のある階層を判断しやすくなります。

取得元のURLが変わった場合は、元のグループのURLを先に変更し、フィルターや更新設定が引き続き使えるか確認してください。新しいグループを作る場合は、新しい取得元の取り込みと接続を確認してから、古い取得元を無効にします。新しいURLを試す前に古いグループを削除しないでください。新しい形式を解析できないと、比較対象と切り戻し経路の両方を失います。古いグループを無効にした後は、誤って選択したり不要なリクエストを送ったりしないよう、状態が分かる名前を付けてください。

バックアップ、移行、アクセス権の範囲

デバイスを移行するときは、サブスクリプションURL、手動で追加したサーバー、ローカルのルーティング設定を分けて扱ってください。サブスクリプションからサーバー一覧を再取得できても、ローカルDNS、グループのフィルター、アプリの除外設定、カスタムアウトバウンドまでは引き継がれない場合があります。エクスポート機能の対象範囲はクライアントによって異なるため、復元後に各項目を確認してください。デスクトップの設定フォルダーを、モバイル版にそのまま読み込める形式だと考えないでください。ほかのコア向けの構文を含む場合は特に注意が必要です。

バックアップにアクセス認証情報が含まれる場合があります。アクセス制限のある場所に保管し、公開用のチュートリアル素材と混在させないでください。トラブルの報告では、構造と機密情報を伏せた項目だけを共有し、アカウント情報を含むサブスクリプション全体をアップロードしないでください。複数サブスクリプションの設定が終わったら、普段使う取得元と予備の取得元をそれぞれ1つ以上検証します。切り替え後もローカルポート、ルーティング方式、DNSが変わらないか記録してください。取得元を切り替える際、確認していない全体設定まで同時に変えないようにします。

カスタムアウトバウンドと設定の切り戻し

アウトバウンドは、通信がプロキシコアから最終的にどのように送信されるかを定義し、ルーティングはタグを使ってアウトバウンドを指定します。直接接続、プロキシ、遮断のほか、ローカルで動作中の別のプロキシ入口へ接続する用途もあります。カスタムアウトバウンドは明確な経路要件がある場合に使うもので、通常のサーバー項目をインポートする代わりにはなりません。作業前に、各タグがどのサービスに対応し、どこで待ち受けているか、そのサービスを停止したらどうなるかを確認してください。

タグは設定内の参照関係を表す

tagは手動で指定する識別子であり、プロトコル機能を自動的に作るものではありません。ルーティングでproxyを指定するなら、設定にも同じ名前のアウトバウンドが必要です。名前が似ているだけでは一致したことになりません。ネイティブのXray設定では、最初のアウトバウンドがルールに一致しない通信の既定経路になることが多く、アウトバウンドの順序にも意味があります。クライアントが設定を生成する場合は、既定ルールが追加されることがあります。確認時は、編集欄の一部だけでなく、実際に動作している設定全体を見てください。

以下は、ローカルの通信経路をテストするための完全なXray形式の設定例です。ローカルのアプリがSOCKSインバウンドに接続し、通常の接続先はローカルの別のSOCKSサービスへ転送し、プライベートアドレスは直接接続します。リモートサーバーの認証情報は含みません。参照先のサービスが指定されたポートで実際に動作していることが前提です。上流サービスから現在のインバウンドへ戻す設定にすると、転送ループが発生します。

{
  "log": {
    "loglevel": "warning"
  },
  "inbounds": [
    {
      "tag": "local-in",
      "listen": "127.0.0.1",
      "port": 10810,
      "protocol": "socks",
      "settings": {
        "auth": "noauth",
        "udp": false
      }
    }
  ],
  "outbounds": [
    {
      "tag": "proxy",
      "protocol": "socks",
      "settings": {
        "servers": [
          {
            "address": "127.0.0.1",
            "port": 10809
          }
        ]
      }
    },
    {
      "tag": "direct",
      "protocol": "freedom",
      "settings": {}
    },
    {
      "tag": "block",
      "protocol": "blackhole",
      "settings": {}
    }
  ],
  "routing": {
    "domainStrategy": "AsIs",
    "rules": [
      {
        "type": "field",
        "ip": ["geoip:private"],
        "outboundTag": "direct"
      }
    ]
  }
}

ルールの確認前にプロトコルとポートを確認する

使用前に、10810が未使用であることと、10809がSOCKSサービスを提供していることを確認してください。HTTPプロキシのポートを「プロキシ用のポート」という理由だけでSOCKSアウトバウンドに指定してはいけません。ここで使用するポートはテスト用の値で、クライアントの既定値ではありません。認証なしの入口を誤ってLANに公開しないよう、待ち受けアドレスはローカルのループバックに限定しています。リモートからアクセスする場合は、認証、ファイアウォール、アクセス範囲を別途設計してください。

この例ではインバウンドのUDPを無効にしており、TCP経路の確認だけを目的としています。同じ設定ですべてのUDPアプリを利用できるとは限りません。UDPを有効にする場合は、インバウンド、上流のSOCKSサービス、その先の経路が対応しているかを確認してください。直接接続用や遮断用のアウトバウンドは、定義しただけでは使われません。ルールに一致するか、既定経路に設定された場合にのみ適用されます。blockという名前のアウトバウンドを追加しても、自動的に通信が遮断されるわけではありません。

カスタム設定を取り込む際の注意点

v2rayNでカスタム設定を読み込む場合は、ファイルの構文に合ったコアを選択し、クライアントがローカルの待ち受けポートをどのように認識するか確認してください。管理画面の一部の設定はこのファイルに反映されず、システムプロキシが古いポートを参照し続けることもあります。モバイル版の設定取り込み機能はデスクトップ版と異なります。現在のクライアントが対応している形式を使用してください。ファイルを保存できることと、サービスが想定どおりに起動することは別です。

複数のプロキシを連結すると、依存関係とトラブル対応の負担が増えます。まず上流と下流をそれぞれ単独で検証してから接続し、どの段階でもう一方の出口通信が再び取り込まれていないか確認してください。一部のドメインだけ別の経路に振り分けたい場合は、分かりやすいルーティングと専用アウトバウンドを優先し、分類のためだけに不要なプロキシ層を増やさないでください。プロトコルの選択については主なプロトコルの違いも参考になりますが、実際に使える機能は通信経路によって決まります。

追加した順序と逆の順に切り戻す

起動に失敗したら、最初に記録された明確なエラーを確認してください。JSON構文エラー、未対応の項目、ポートの競合、アウトバウンド参照の不足は、それぞれ別に対処する必要があります。起動しても接続できない場合は、上流サービスの待ち受け状態、プロトコルの一致、既定のアウトバウンドを確認します。ログの詳細度を一時的に上げた後は、必要なリクエストだけを再現し、調査が終わったら通常の設定に戻してください。アクセス先が記録されたログを保存し続けないようにします。

切り戻すときは、追加した通信取り込み設定とカスタム項目を停止し、元のルーティングとDNSを復元してから、接続確認済みのサーバーを選び直して接続してください。システムプロキシのポートを変更した場合は、こちらも元に戻します。今回の変更を「目的、変更内容、検証、切り戻し」の4点で記録すると、出所が不明な大きな設定を保存するより管理しやすくなります。初回設定はクイックスタートガイドを参照し、具体的な症状はトラブルシューティングで引き続き確認してください。