· ルーティング · 約10分

V2Rayのルーティング設定ガイド|domain・ipルールと中国向け振り分け

v2rayNのルーティング設定を解説。domain・IPルールやgeosite/geoipの使い方、中国本土を直結する設定、全通信をプロキシ経由にする方法、独自の直結ルールを紹介します。

この記事のポイント

サブスクを読み込み、ノードには接続できているものの、中国本土向けと海外向けの通信を振り分けたい方に向けた解説です。まず通信がクライアントに届いていることを確認し、domainとipがそれぞれ何を照合するかを把握したうえで、「個別の例外、共通カテゴリ、デフォルトの出口」の順にルールを設定します。V2Ray/Xray形式のルーティング設定例、v2rayNの操作手順、確認方法を紹介します。設定例の出口タグは使用中の構成に合わせてください。クライアント設定一式としてそのまま読み込むことはできません。

ルーティングの前提:通信がコアに届いていること

ルーティングルールが決めるのは出口であり、すべてのアプリの通信を自動的にプロキシへ送る機能ではありません。システムプロキシに従うブラウザーなら、リクエストはローカルのプロキシポートに届きます。システムプロキシを使わないアプリは、個別にプロキシを設定するか、TUNで通信を取り込む必要があります。TUNを有効にしても、すべての通信がプロキシ経由になるわけではありません。通信がコアに届いた後も、ルーティングルールにより直結できます。

v2rayNはデスクトップクライアントで、ルーティングは現在実行中のコアが処理します。この記事のJSONはV2Ray/Xray形式のルーティング設定で、対応するコア向けです。すべてのコアで使える共通構文ではありません。Android版のv2rayNGはXrayコア、v2flyNGはv2flyコアを使用します。画面上の設定項目、組み込みルール、リソースの更新方法はそれぞれ異なります。

10808
この記事のテストで使用するローカルプロキシポート。実際の待ち受けポートに置き換えてください
53
一般的なDNSのポート。すべてのドメイン名前解決通信がこのポートを使うとは限りません

domainとip:照合対象と書き方

domainはリクエストの接続先ドメイン、ipは接続先IPアドレス、またはポリシーに従って解決されたIPアドレスを照合します。ドメインルールはURL全体を対象にするフィルターではありません。https://やページのパス、クエリパラメーターは入力しないでください。同じドメインの異なるパスにアクセスしても、通常は出口は変わりません。

書き方意味用途
full:example.comexample.comのみを照合特定のホスト名だけに例外を設定
domain:example.comルートドメインとサブドメインを照合同一ドメイン配下のサービスを同じ出口に振り分け
example通常の文字列をドメインのキーワードとして照合対象範囲が広く誤一致しやすいため、使用には注意
geosite:cnドメインリソースのcnカテゴリを参照管理済みのドメイン一覧に基づいて振り分け
192.168.0.0/16指定したIPv4のCIDR範囲を照合ローカルネットワークのアドレスを直結
geoip:cnIPリソースのcnカテゴリを参照接続先IPのアドレス一覧に基づいて振り分け

たとえば、domain:example.comはapi.example.comに一致しますが、notexample.comはサブドメインとして扱われません。厳密に指定する場合はfull:またはdomain:を使い、短いキーワードでドメインの境界判定を代用しないでください。

ドメインの例外ルール

ルール項目
domain
照合対象
domain:example.com
出口
direct
推奨位置
共通カテゴリより前

対象ドメインが明確な場合に適しています。例のドメインは書式の説明用です。

ローカルネットワーク向けIPルール

ルール項目
ip
照合対象
geoip:private
出口
direct
確認ポイント
IPv4・IPv6のアドレス範囲

リソースファイルに該当カテゴリがあることを確認してください。実際のネットワークに合わせてCIDR範囲を指定する方法もあります。

ルールの順序:最初に一致したルールで出口が決まる

ルールは上から順に評価され、一致すると後続のルールは確認されません。範囲の広いルールを先頭に置くと、それ以降の個別例外が適用されないことがあります。同じ項目の配列に複数の値を指定した場合、通常は「いずれかに一致」の条件です。1つのルールにdomain、ip、portなど異なる条件を併記した場合は、それらの条件を組み合わせて判定します。

いずれのルールにも一致しない場合、コアは通常、outbounds配列の先頭にある出口を使用します。以下の設定例では末尾にTCP/UDPのルールを追加してプロキシへ振り分け、未一致なら必ず直結すると誤解しないようにしています。この例はrouting部分のみです。directとproxyは、現在の完全な設定に存在する出口タグに置き換えてください。

{
  "routing": {
    "domainStrategy": "IPIfNonMatch",
    "rules": [
      {
        "type": "field",
        "domain": ["domain:example.com"],
        "outboundTag": "direct"
      },
      {
        "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"
      }
    ]
  }
}

geosite・geoipとDNSポリシー

geositeはドメインのリスト、geoipはIPアドレスのリストで、どちらもリアルタイム検索サービスではありません。存在しないカテゴリを指定したり、リソースファイルが見つからない、または形式が合わなかったりすると、コアの起動に失敗することがあります。サブスクを更新しても、ルーティング用リソースまで同時に更新されるとは限りません。

domainStrategyは、ルーティング時にドメイン名の解決をどう扱うかを決める設定で、DNSサーバーの設定全体を表すものではありません。IPIfNonMatchの場合、ドメインの照合で一致しなかったときに限り、IPアドレスを解決して再照合することがあります。最後のワイルドカードルールに一致した場合は、「未一致」の条件を満たしません。

ポリシールーティング時の動作注意点
AsIsルーティング時にドメイン名からIPアドレスを積極的に解決しないドメイン宛ての通信は主にdomainルールで判定。IP項目はIPアドレスへの直接接続にも適用可能
IPIfNonMatchドメインが一致しない場合に解決を試み、再照合する末尾のワイルドカードルールが先に一致すると、IPによるフォールバックは行われない
IPOnDemandIPアドレスを必要とするルールの評価時に解決を試みるルールの順序によって解決を試みるタイミングが変わるため、DNSが使えることも確認

前の設定例にあるgeoip:cnは、IPアドレスを直接指定した接続には適用できます。ただし、末尾にワイルドカードルールがあると、分類されなかったすべてのドメインがIPで再判定されるとは限りません。一致しなかったドメインも、解決後のIPアドレスで分類したい場合はIPOnDemandを検討してください。その場合、優先的に判定したいドメインルールをIPルールより前に置きます。もう1つの方法は、ワイルドカードのフォールバックを削除し、先頭の出口が確実にプロキシであることを確認することです。

3つの設定例:中国本土を直結、全通信をプロキシ経由、独自ルールで直結

「中国本土を直結」は通常、ローカルネットワークと中国本土向けの通信を直接接続し、それ以外をプロキシ経由にする設定です。「全通信をプロキシ経由」は、コアに届いた通信をすべてプロキシの出口に送ります。いずれもアプリの通信がコアに取り込まれていることを保証するものではありません。社内ネットワーク、プリンター、家庭内ストレージなどへの接続が必要な場合は、設定を切り替えた後もアクセスできるか個別に確認してください。

設定ルールの構成確認ポイント
中国本土を直結個別例外 → ローカルネットワークを直結 → 国内ドメイン・IPを直結 → プロキシへフォールバック中国本土向けの通信はdirect、その他のテスト先はproxyを使用
全通信をプロキシ経由必要に応じてローカルネットワークの例外を残し、それ以外のTCP/UDPはproxyへ送る先に一致する直結ルールが残っていないか、アプリの通信がコアに届いているか
指定先を直結指定したfull/domainルールを先頭に移動し、既存の振り分けルールは維持メインのドメイン、ログイン用ドメイン、リソース配信用ドメインを個別に処理する必要があるか

特定のサイトを直結する場合、メインのドメインを1つ追加するだけでは不十分なことがあります。ログイン、API、静的ファイルで別のドメインを使う場合があるためです。まずログで実際のリクエスト先を確認し、必要なドメインだけを追加してください。手間を省くために共有CDNのアドレス範囲全体を直結にすると、関係のないサイトにも影響することがあります。

  1. 現在の設定を保存

    現在のルーティング名を控え、ルールをバックアップします。ノードが使用できることを確認し、変更前の設定を残しておけば、問題が起きたときに元に戻せます。

  2. ルーティング設定を開く

    該当のメニューがあるv2rayNデスクトップ画面で、「設定」→「ルーティング設定」を開きます。バージョンによっては、メイン画面の「ルーティング」メニューにあります。インストール済みの画面に表示されている項目名を確認してください。

  3. 対象ルールを編集

    使いたいルーティング設定を選び、ルール編集画面を開きます。例としてdomain:example.comのようなdomain項目を追加し、出口に直結を指定します。画面上でプレフィックスと値を別々に入力する場合は、種類を選択してからドメインを入力してください。

  4. ルールの位置を調整

    例外ルールを国内カテゴリとフォールバックルールより前に移動します。ドメインルールとIPルールは別々に追加してください。保存後、メイン画面の「ルーティング」選択メニューから設定を有効にします。

  5. 接続を再確立して確認

    設定の再読み込みを待ち、必要であればコアを再起動します。開いているページの接続をいったん閉じてから再アクセスし、新しい接続のログで接続先と出口を確認してください。確立済みの長時間接続では、新しいルールの反映を判断できません。

振り分けを確認:ポート・ログ・出口を照合

Webページが開けても、経路のどこかが使えたことしか分からず、想定した出口を通った証明にはなりません。直結する接続先、プロキシ経由にする接続先、ローカルネットワークのアドレスをそれぞれテストしてください。ログでは接続先のドメインまたはIP、選択された出口タグ、エラー内容を確認します。ログの詳細度が低い場合は、一時的に上げ、テスト後に元へ戻してください。

次のコマンドは、リクエストをローカルのHTTPプロキシ経由で送信します。例ではHTTPまたは混合プロトコルの待ち受け先を127.0.0.1:10808としています。まずクライアントで実際のプロトコルとポートを確認してください。ポートがSOCKS専用の場合、このHTTPプロキシの指定は使えません。コマンドはリクエスト方法の例であり、接続先サイトに特定の振り分け方を求めるものではありません。

curl --proxy http://127.0.0.1:10808 --connect-timeout 10 --max-time 20 -I https://example.com/

ルーティング設定のよくある質問

domainルールを追加したのに、プロキシ経由になるのはなぜ?

まず、入力したのがドメイン名のみで、プロトコルやパスを含んでいないことを確認します。次に、ルールを共通ルールより前に移動し、選択中の設定が有効になっているか確認してください。ログに接続先IPしか表示されない場合は、アプリがコアに届く前に名前解決しているか、現在のインバウンドから接続先ドメインを取得できるかを確認します。

geosite:cnとgeoip:cnは両方追加する必要がありますか?

構文上、両方を追加する必要はありません。ただし、対象となるデータが異なります。geosite:cnは既知のドメイン、geoip:cnは接続先IPまたは名前解決後のアドレスに適しています。両方を対象にする場合は、2つのルールに分けてください。また、カテゴリ名を追加するだけで名前解決が行われるわけではないため、domainStrategyも確認します。

サブスクを更新すると、独自の直結ルールは消えますか?

ノードのサブスクとクライアントのルーティング設定は、通常別々に管理されます。ただし、設定一式のインポート、設定の復元、ルーティング設定の上書きによってルールが変更されることがあります。独自設定は事前にバックアップし、実行時に生成される一時設定ファイルを直接編集しないでください。

デスクトップ版のルールをAndroidにそのままコピーできますか?

ドメイン、CIDR、ルールの優先順位に関する考え方は応用できますが、デスクトップ版の設定一式をそのままコピーすることはできません。v2rayNGとv2flyNGでは、リソースファイル、出口タグ、独自ルールの設定場所をそれぞれ確認してください。保存後に接続を確立し直し、ログで実際の出口を確認します。

クライアントをダウンロードお使いの環境に合ったインストーラーを選択