V2Rayのルーティング設定実践:geositeとgeoipで中国国内外の通信を振り分ける

よくある通信の振り分けを例に、国内ドメインとIPは直接接続、その他はプロキシ、広告ドメインはブロックする設定を解説。ルールの優先順と出力タグの対応、動作確認方法も紹介します。

この記事の要点

この記事は、ノードに正常接続でき、ルーティング方針を調整したいユーザー向けです。最終設定では「広告ブロック、LAN直接接続、中国国内ドメイン直接接続、中国国内IP直接接続、その他はプロキシ」の順に処理し、コアログ、指定したプロキシポート、ドメイン解決結果で順番に検証します。

まず振り分けの目的とマッチング経路を決める

ルーティングのポイント

ルーティングによる振り分けは、VLESSやVMessなどのプロキシ接続を確立する機能ではありません。リクエストがコアに入った後、どの出力を使うかを決める機能です。ノードのアドレス、ポート、トランスポート層、認証パラメーターはプロキシ出力の設定に属し、ルーティングルールは既存の出力タグだけを参照します。この2つを混同することが、「ノードには接続できるのにルールが適用されない」最も一般的な原因の一つです。

ルーティングのポイント

この例では3つの出力タグを使います。proxy は現在のプロキシノード、direct は freedom による直接接続出力、block は blackhole によるブロック出力に対応します。タグは大文字と小文字を区別するため、ルール内の outboundTag は出力側の tag と完全に一致させる必要があります。

アプリがリクエストを開始ローカル入口で受信ドメインルールを照合IPルールを照合出力を選択

ルーティングのポイント

V2RayとXrayのルーティングルールは、配列の順番に従って確認されます。リクエストが条件に合う最初のルールに一致すると、それ以降の照合は停止します。つまり、ルールは「多いほど優先」ではなく、「前にあるほど優先」です。広告ドメインは中国国内ドメインより前に置いてください。両方の集合に含まれるドメインが、先に直接接続ルールへ進むのを防げます。

広告ブロック

マッチング元
geosite:category-ads-all
出力タグ
block
推奨位置
1番目

先にブロックしてから地域を判定し、広告ドメインが中国国内向けルールで先に直接接続されるのを防ぎます。

LAN直接接続

マッチング元
geoip:private
出力タグ
direct
代表的なアドレス
192.168.0.0/16

ルーター、ファイルサーバーなど、LAN内機器へのローカルアクセスを維持します。

中国国内リソースの直接接続

ドメイン集合
geosite:cn
IP集合
geoip:cn
出力タグ
direct

ドメインとIPを2つのルールに分けると、ログからどの段階で一致したかを確認しやすくなります。

残りの通信をプロキシ経由にする

マッチング対象ネットワーク
tcp,udp
出力タグ
proxy
推奨位置
最後のルール

フォールバックルールは末尾に置く必要があります。途中に置くと、それ以降のすべてのTCPおよびUDPルールを処理できなくなります。

geositeとgeoipは何を照合するのか

ルーティングのポイント

geosite はドメイン集合です。リクエストにドメイン情報が残っている場合、コアはそのドメインが geosite:cngeosite:category-ads-all に含まれるかを直接判定できます。集合には完全なドメイン、サブドメインルール、キーワードルールが含まれる場合があり、実際の範囲はクライアントに付属するデータファイルのバージョンによって異なります。

ルーティングのポイント

geoip はIPネットワークの集合です。アプリがIPへ直接アクセスした場合、ドメインルールに一致せず解決が行われた場合、または通信入口から宛先IPしか確認できない場合に、コアは geoip:cn で地域を判定できます。サイト名から所属地域を推測する機能ではなく、宛先アドレスがデータファイルに記録されたネットワーク範囲に含まれるかを比較します。

マッチング方法 入力対象 適した用途
geosite ドメイン geosite:cn サイトのカテゴリや地域ごとに管理されたドメイン集合
geoip IPv4またはIPv6アドレス geoip:cn IPへの直接接続と、名前解決後のアドレス判定
domain 明示的なドメインルール domain:example.com 固定的に指定したい少数のサイト
ip 明示的なネットワーク範囲 192.168.0.0/16 LAN、専用サービス、管理下のネットワーク範囲

結論:まずドメインを維持し、IPで補完する

geoip:cn だけを指定すると、ドメインへのリクエストが名前解決の結果に依存します。判定が一段増えるうえ、解決場所の影響も受ける可能性があります。まず geosite:cn で明確なドメインを処理し、geoip:cn で残りの中国国内アドレスを受ける構成にすると、ルールを説明しやすく、トラブルシューティングもしやすくなります。

完全なルーティング設定とルールの順番

ルーティングのポイント

以下のJSONは、ルーティングと3つの出力を組み合わせた最小構成です。高度な設定の構造を確認する参考として使えます。実際に使用する際は、元の設定にある入力、DNS、ログ、プロキシサーバーのパラメーターも残してください。この内容でクライアント設定全体をそのまま上書きしてはいけません。

ルーティングのポイント

domainStrategyIPIfNonMatch に設定すると、コアはまずドメインルールを確認し、一致しなかった場合に対象ドメインを解決してIPルールを試します。これによりgeositeを利用しつつ、geoipを第2段階の判定として使えます。

{
  "routing": {
    "domainStrategy": "IPIfNonMatch",
    "rules": [
      {
        "type": "field",
        "domain": [
          "geosite:category-ads-all"
        ],
        "outboundTag": "block"
      },
      {
        "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"
      }
    ]
  },
  "outbounds": [
    {
      "tag": "proxy",
      "protocol": "vless",
      "settings": {
        "vnext": []
      }
    },
    {
      "tag": "direct",
      "protocol": "freedom",
      "settings": {}
    },
    {
      "tag": "block",
      "protocol": "blackhole",
      "settings": {}
    }
  ]
}

ルーティングのポイント

例にある空の vnext は、プロキシノードのパラメーターを既存のサブスクリプション設定から提供する必要があることを示すだけです。接続可能なノードとしては使えません。v2rayNでは、サブスクリプションをインポートすると完全なプロキシ出力が生成されます。ルーティングを手動で管理する場合は、サーバー情報を削除して空の配列をそのまま写すのではなく、クライアントが生成したプロキシタグを参照してください。

  1. まず、広告ドメインやカスタムドメインなど、明示的にブロックまたは上書きしたいルールを配置します。
  2. 次に geoip:private を配置し、10.0.0.0/8、172.16.0.0/12、192.168.0.0/16などのプライベートアドレスを直接接続にします。
  3. 続いて geosite:cngeoip:cn を順番に配置し、中国国内のドメインとアドレスをそれぞれ処理します。
  4. 最後に network: tcp,udpproxy に送信し、どのルールにも一致しないリクエストのフォールバックにします。

v2rayNで設定を反映する

ルーティングのポイント

v2rayN 7.10.xの画面構成を例にすると、まず「設定」→「パラメーター設定」でローカルリスニングポートとログレベルを確認します。一般的にはSOCKSポートに 10808、HTTPポートに 10809 が使われますが、アップグレードや移行後は実際のポートが異なる場合があります。確認コマンドには、現在の画面に表示されている値を使用してください。

ルーティングのポイント

ルーティングの入口は通常、「設定」→「ルーティング設定」にあります。新しいルールセットを作成したら、広告ドメイン、プライベートIP、中国国内ドメイン、中国国内IP、最終プロキシルールの順に追加し、そのルールセットを現在の設定として選択します。7.xのマイナーバージョンによってボタンの位置は変わる場合がありますが、ルール名、順番、出力タグの確認方法は変わりません。

ルーティングのポイント

サブスクリプションを更新するとノードが再生成される場合がありますが、通常はカスタムルーティングを自動修正しません。更新後は、現在の有効なルールセットがデフォルト設定に戻っていないか、選択したノードが利用可能なプロキシ出力に対応しているかを確認してください。変更後はコアの再起動が必要です。ルールを保存するだけでコアを再読み込みしなければ、実行中のルーティング状態は変わりません。

中国国内外の振り分けが実際に機能しているか確認する

ルーティングのポイント

「ウェブページを開ける」ことは、接続経路が基本的に利用できることを示すだけで、通信が想定した出力を通った証明にはなりません。検証時は、リクエスト先、コアログのルール一致結果、最終出力タグを同時に確認してください。まずログレベルを一時的に info に変更し、確認後に元へ戻すことをおすすめします。大量のログが長期的に蓄積するのを防げます。

ルーティングのポイント

1回目はブラウザーでテストします。中国国内のドメイン集合に明確に含まれるサイト、プロキシが必要なサイト、ルーターの管理アドレスをそれぞれ開いてください。想定結果は、国内サイトが direct、その他のサイトが proxy、ルーターのアドレスが geoip:private 経由で直接接続されることです。

ルーティングのポイント

2回目はブラウザー拡張機能とキャッシュを介さず、v2rayNのHTTPプロキシポートを直接指定してリクエストを送ります。現在のHTTPポートが 10809 の場合、Windows、macOS、Linuxのターミナルで次のコマンドを実行できます。テスト先は、自分でアクセスログを確認できるHTTPサービスに置き換えてください。

curl --proxy http://127.0.0.1:10809 https://your-test-endpoint.example/
curl --proxy http://127.0.0.1:10809 -I https://your-test-endpoint.example/
nslookup your-test-endpoint.example

ルーティングのポイント

確認時は、返されたIPだけを比較しないでください。一部のサイトは分散ノードを利用しているため、同じドメインでも名前解決の場所によって異なるアドレスが返ることがあります。より確かな証拠は、v2rayNのコアログに表示される対象ドメイン、対象ポート、および対応する directproxyblock の出力です。

中国国内のサイトまでプロキシ経由になる場合は?

ルーティングのポイント

まず geosite:cn が最終プロキシルールより前にあることを確認し、次にログに対象ドメインが残っているかを確認します。入口で対象IPしか取得できない場合は、domainStrategygeoip:cn が読み込まれているかも確認してください。

LAN内のアドレスに突然アクセスできなくなった場合は?

ルーティングのポイント

geoip:private の出力先が direct になっているか確認し、network: tcp,udp のフォールバックルールより前に配置されていることも確認してください。192.168.1.1へアクセスした際、ログに proxy と表示されるべきではありません。

広告ルールでページの一部が表示されない場合は?

ルーティングのポイント

まず category-ads-all を一時的に無効にして再テストします。誤ブロックだと確認できたら、必要なドメインに対して、より前に置く direct ルールを追加してください。広告ルール全体を中国国内の直接接続ルールより後ろへ移動するのは避けます。

ルールを保存してもログが変わらない場合は?

ルーティングのポイント

編集したばかりのルールセットが有効になっていることを確認してから、コアを再起動してください。v2rayNで定義済みのルーティング設定も有効にしている場合は、現在の設定がカスタムルールを上書きしていないか確認します。

UDPリクエストがルールどおりに振り分けられない場合は?

ルーティングのポイント

フォールバックルールの networktcp,udp の両方が含まれていることを確認し、現在のプロキシノードのトランスポート設定が対象UDP通信に対応しているかも確認してください。ルールに一致しても、対応する出力がその通信を必ず処理できるとは限りません。

よくあるずれとメンテナンス方針

ルーティングのポイント

振り分け結果は、ドメインの所属、サービスの配置、ルールデータの更新によって変わります。中国国内のサービスが国外アドレスを使う場合もあれば、国外ブランドが中国国内にノードを配置する場合もあります。そのためgeositeとgeoipが示すのはルールデータ上の分類であり、サービスの所属地域をリアルタイムに判定した結果ではありません。業務システムや自社サービスなど対象が明確な場合は、地域集合より明示的なドメインルールのほうが安定します。

ルーティングのポイント

カスタムの上書きルールは、少数かつ明確に保ちます。強制的に直接接続したい場合は、具体的なドメインルールを広告・地域ルールより前に置き、direct を指定します。強制的にプロキシを通したい場合も、地域の直接接続ルールより前に置き、proxy を指定してください。上書きルールを追加するたびに用途を記録し、数か月後に説明できない例外一覧だけが残る事態を避けます。

結論:振り分けの不具合は順番、タグ、データの順に確認する

多くの問題は、次の3段階で切り分けられます。前置きルールにリクエストが先取りされていないか、マッチした outboundTag が存在するか、geositeとgeoipの集合が正常に読み込まれているかを確認します。3項目すべてに問題がなければ、DNSとノードのトランスポート層を確認します。

V2Rayクライアントを入手 Windows、macOS、Android、Linuxから選択