v2rayNのルーティング設定方法:geosite・geoipで中国国内外を振り分ける実践ガイド

domainStrategyの選び方からdirect・proxy・blockのルール順まで解説。中国国内は直接接続、中国国外はプロキシ経由にし、広告をブロックする設定を紹介します。

この記事の要点

サブスクリプションとノードの接続設定が済み、中国国内のサイトには直接接続し、中国国外のサイトにはプロキシを使いたいv2rayNユーザー向けです。ドメインセットとIPセットの違いを確認し、ドメイン解決方針を選んでから、ルールを順に設定してログで検証します。末尾に全通信をプロキシへ送るルールを置くとgeoipによる判定が機能しない場合がある点にも触れます。サンプルはコアのルーティング部分で、クライアントにそのままインポートできる完全な設定ではありません。

1. geositeとgeoipがそれぞれ照合する対象

v2rayNはクライアントの画面で、接続を実際に処理するのは選択中のコアです。サブスクリプションには主にサーバーアドレス、プロトコル、認証情報、通信方式が含まれ、ルーティングによってローカルコアに入った接続の出力先が決まります。サブスクリプションを更新してもルーティング用データベースは更新されず、カスタムルールの順序も自動では修正されません。

geositeはドメインの集合、geoipはIPアドレスの集合を照合します。いずれも対応するデータファイルに依存しており、名前だけを見てリアルタイムの位置情報サービスと考えることはできません。特にgeosite:cnはデータベースで管理されるドメイン分類を指します。「.cnで終わるすべてのサイト」という意味でも、サーバーの物理的な所在地を保証するものでもありません。

条件照合対象主な用途注意点
geosite:cn接続先ドメインデータベースに登録された中国国内サイトを直接接続分類は使用するgeositeデータによって異なる
geosite:category-ads-all広告関連ドメインblock経由で遮断データファイルに該当カテゴリが必要
geoip:cn接続先IP中国のIPアドレス範囲を直接接続ドメイン接続では先に名前解決が必要な場合がある
geoip:privateプライベート・ローカルアドレスの集合LAN内の機器へのアクセスデータセットの定義に従う。LAN内のすべてのドメインとは限らない
full:example.com完全一致のドメイン特定ドメインへの例外ルールサブドメインには一致しない
domain:example.comドメインとそのサブドメイン同じサイト群の接続先を統一完全一致のドメインルールより広い範囲に適用

ここでのexample.comは構文を説明するための例であり、実際に追加するルールではありません。自分の環境を確認するときは、ブラウザーやコアのログに表示された実際のホスト名を使ってください。1つのページから複数のドメインが読み込まれることがあります。トップページに直接接続できても、ログインAPIや画像、動画にも同じルールが適用されるとは限りません。

2. domainStrategyの選び方:ドメインとIPのどちらを先に判定するか

routing.domainStrategyは、ルーティングの判定時に接続先ドメインを名前解決するかどうかを決めます。DNSサーバーのアドレスでも、direct出力内部の名前解決方針でもありません。似た名前でも役割は異なります。一方は「出力先の選択」に使うIPを取得し、もう一方は「直接接続の確立時」にアドレスを解決する場合があります。

IPIfNonMatch

おすすめ

まず接続時点で得られている情報を使ってルールを照合します。ドメイン段階でどのルールにも一致しなければ、名前解決してIP条件を試します。この記事の「ドメイン優先、IPで補完」という構成に適しています。ただし、全通信を対象とするルールに先に捕捉されず、未一致の状態が保たれる必要があります。

適する構成:ドメインルールを中心にgeoipで補完し、デフォルトの出力先が明確な場合

AsIs

ルーティング段階で追加の名前解決を行いません。ドメイン名で渡された接続は主にドメインルールで判定し、IPアドレスで渡された接続は引き続きIPルールに一致します。接続処理全体でDNSが使われないという意味ではありません。

適する構成:ドメインルールで判定でき、ルーティング段階での追加照会を避けたい場合

IPOnDemand

判定中にIPが必要なルールがあると、ドメインを名前解決します。プライベートアドレスや国別IPのルールが前にある場合、ドメイン接続でも早い段階でDNS照会が発生することがあります。末尾のフォールバックより前にあるIPルールを判定できますが、名前解決の結果にも左右されます。

適する構成:接続先IPによる判定が必要で、DNSの動作も検証済みの場合

見落としやすいのは、IPIfNonMatchを使いながら末尾にnetwork: tcp,udp → proxyを追加するケースです。このルールは最初の判定で接続を捕捉できるため、「どのルールにも一致しない」状態になりません。その結果、ドメイン解決による再判定が行われず、先行するgeoip:cnでもこのドメイン接続を補完できない場合があります。

3. direct・proxy・blockとルールの順序

コアはルールを上から順に確認し、最初に一致したルールの出力先を使います。ここでのdirect、proxy、blockは出力タグであり、書くだけで有効になるキーワードではありません。完全な設定には同じ名前の出力先が必要です。カスタム設定で別のタグを使う場合は、ルーティング側の参照も合わせて変更してください。

直接接続とプロキシの出力先

直接接続タグ
direct
直接接続の実装
通常はfreedom出力を使用
プロキシタグ
proxy
プロキシの接続先
現在選択中の利用可能なノード
どのルールにも一致しない通信
この記事では最初の出力先をproxyに設定

ノードを切り替えるとプロキシの接続先は変わりますが、ルールの照合順は変わりません。

ブロックとルールの前提

ブロック用タグ
block
ブロックの実装
通常はblackhole出力を使用
ドメインデータベース
geosite.dat
IPデータベース
geoip.dat
照合の原則
上から順に確認し、最初に一致したルールを適用

データファイルがない場合や分類が存在しない場合、コアが設定を読み込めないことがあります。まず起動ログのエラーを確認してください。

推奨順は、必要な個別サイトの例外、広告ブロック、LANアドレスの直接接続、中国国内ドメインの直接接続、中国国内IPの直接接続です。最後はデフォルトの出力先に任せます。例外ルールを先頭に置くのは、より広い分類に先に一致するのを防ぐためです。ただし後続の広告ルールにも優先するため、本当に必要なドメインだけを追加してください。

優先度ルールの用途出力先配置する理由
1特定サイトへの個別例外directまたはproxy後続の広範な分類より優先
2広告ドメインの集合block中国国内の直接接続ルールより先に判定
3プライベートIPとローカルネットワークdirectLAN内の接続をリモートノードへ送らない
4中国国内ドメインの集合directドメインで判定できる場合、IPによる再判定を待たない
5中国国内IPの集合directIPアドレスを直接指定した接続や未登録ドメインを補完
デフォルトどのルールにも一致しない接続proxy生成された設定の最初の出力先を使用

4. v2rayNで独立したルーティング設定を作成する

以下のメニューは、v2rayN 7.xのWindows WPF版を基準にしています。デスクトップ版や細かなバージョンの違いにより、ボタン名が異なる場合があります。同じ名前の項目が見つからない場合は、現在の画面の設定メニューでルーティング編集機能を確認してください。以下のコアJSONをノードアドレス欄やサブスクリプション欄に貼り付けないでください。設定前に現在のルーティング設定を保存しておくと、元に戻しやすくなります。

  1. ノードが使えることを確認

    メイン画面で利用可能なノードを選び、使用中のサーバーに設定します。まず既存のルーティング設定でウェブサイトにアクセスできることを確認してください。ノード自体のタイムアウト、認証失敗、TLSハンドシェイク失敗が起きる場合は、先にトラブル対処を確認してください。ルーティングルールではリモート接続の問題を解決できません。

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

    「設定」→「ルーティング設定」を開き、新しいルーティング設定を作成して「中国国内直結テスト」と名付けます。画面に高度なルーティングを有効にする項目がある場合は、詳細ルールを有効にし、新しい設定を現在のルーティングとして選択してください。

  3. ドメインの判定方針を選択

    ルーティング設定のドメイン判定方針でIPIfNonMatchを選びます。続けて、末尾に「すべてのTCP・UDPをプロキシ経由にする」ルールがないか確認してください。この記事の構成ではそのルールを使わず、デフォルトの出力先をproxyにします。

  4. 条件を分けて追加

    広告ドメイン、プライベートIP、中国国内ドメイン、中国国内IPの順に4つのルールを追加します。geosite:はドメイン条件に、geoip:はIP条件に使います。「どちらか一方に一致」という意味で、同じルールにドメイン条件とIP条件を同時に設定しないでください。

  5. 保存して確認

    設定を保存し、コアに設定を再読み込みさせます。生成された設定のルール順、出力タグ、outboundsの順序を確認してください。デフォルトの出力先がproxyでない場合は、使用中のバージョンにあるデフォルト出力先の設定を変更するか、前述の明示的なフォールバック方式を使ってください。

  6. 項目ごとにテスト

    ノード、ブラウザー、プロキシの接続方式を変えずに、中国国内ドメイン、中国国外ドメイン、LAN内IPをそれぞれテストします。変更のたびに新しい接続を作り、ブラウザーが既存の接続を再利用しないようにしてください。ログの出力先が想定どおりであることを確認できて初めて、ルールが機能していると判断できます。

1つのfieldルール内では、通常、異なる種類の条件はすべて満たす必要があります。同じ条件配列に複数の値がある場合は、そのうち1つに一致すれば該当します。domainとipを同じルールにまとめても、2つの独立した直接接続ルールの代わりにはなりません。手書きの設定でもGUIでの編集でも起こりやすい間違いです。

5. コアのルーティング例:ドメイン優先、IPで補完

以下に示すのはroutingオブジェクトのみです。inbound、ノードの認証情報、DNS、outboundの定義は含まれていないため、完全な設定ではなく、v2rayNのルーティング設定にインポートできる形式でもありません。画面上でルールを1つずつ入力する際の参考にしてください。カスタムのコア設定に使う場合は、既存の設定構造に統合し、3つの出力タグがすべて存在することを確認してください。

{
  "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"
      }
    ]
  }
}

中国国内の分類に含まれるサイトを常にプロキシ経由にしたい場合は、広告ルールより前に個別のドメイン例外を追加してproxyを指定します。特定のサブドメインだけに問題がある場合は、すぐに親ドメイン全体とすべてのサブドメインへ範囲を広げず、まずfull:で完全一致させてください。

6. 振り分けを検証する:接続経路・DNS・出力先を確認

ウェブページが開けても、何らかの接続経路が使えたことしか分からず、想定した出力先が使われた証拠にはなりません。テストではまずノードを固定し、アプリが使用するローカルプロキシポートを確認します。v2rayNでよく使われるローカル待ち受けポートは10808ですが、既存の環境で変更されている場合もあります。現在の設定とコアの起動ログを確認し、固定ポートと決めつけないでください。

テスト対象想定される結果確認する内容
cnセットに含まれることを確認したドメインdirectログに表示された接続先ドメインと出力タグ
直接接続の分類に一致しない中国国外のドメインproxyデフォルトの出力先がプロキシかどうか
192.168.1.1など、実際のLAN内アドレスdirect接続がコアに届いているか、プライベートIPルールに一致しているか
ログに実際に表示された広告ドメインblock現在の分類に含まれているか、例外ルールが先に一致していないか

特定のドメインを維持したままSOCKSプロキシに渡す必要がある場合は、以下のテストコマンドを使えます。socks5hのhは、接続先ドメインの名前解決をプロキシ側で行うことを意味します。ローカルで先に名前解決し、IPアドレスだけをコアに渡す動作を避けられます。コマンドの実行には、ローカルポートでSOCKSサービスが待ち受けていることと、curlがインストールされていることが必要です。

curl --proxy socks5h://127.0.0.1:10808 --connect-timeout 10 --max-time 20 https://www.baidu.com/ --output /dev/null

上記の出力例はLinuxおよびmacOSのターミナル向けです。Windowsのコマンドプロンプトでは/dev/nullをNULに置き換え、必要に応じてcurl.exeを実行してください。接続タイムアウト10秒、全体のタイムアウト20秒はテスト用の上限であり、実測の遅延や速度を示すものではありません。このドメインを直接接続するかどうかは、使用中のデータファイルとログで確認してください。

7. よくある質問:ルールが効かない、広告を誤ってブロックする

geoip:cnを設定したのに、中国国内のサイトがプロキシ経由になるのはなぜ?

「設定」→「ルーティング設定」を開き、現在の設定とドメイン判定方針を確認します。IPIfNonMatchを使っている場合は、末尾にTCP・UDPをすべてプロキシへ送るルールがないか確認してください。このルールが最初の判定を終わらせている可能性があります。続いて、ログの接続先がドメインかIPか、実際の解決先アドレスが現在のgeoipデータのcn分類に含まれているかを確認してください。

広告ルールを最後に置いたのに、まったく効かないのはなぜ?

geosite:category-ads-all → blockを中国国内の直接接続ルールや広範なプロキシルールより前に移動し、保存後に設定を再読み込みして、ブラウザーで新しい接続を作成してください。それでも一致しない場合は、そのドメインが現在の分類に含まれているか確認します。ページに広告が表示されるだけで失敗と判断しないでください。コンテンツとドメインを共用する広告は、ドメイン単位のブロックに向かない場合があります。

ルーティングを変更したらコアが起動しなくなりました。まず何を確認すればよいですか?

まず元のルーティング設定に戻して接続を復旧し、コアの起動ログを確認してください。データファイルの読み込み失敗、カテゴリの欠落、出力タグの参照ミス、JSON構文エラーを重点的に確認します。geosite.datや指定したカテゴリを読み込めないというエラーがある場合は、ルールを追加し続けるのではなく、データの入手元とファイルの場所を修正してください。

LAN内の管理画面が開かない場合、どのルールを追加すればよいですか?

まず機器の実際のIPアドレスでアクセスし、プライベートIPルールの出力先がdirectになっていることを確認します。独自のLAN内ドメインを使う場合は、ローカルDNSで正しく名前解決できるかも確認してください。実際のドメインに対する完全一致の直接接続例外を追加する方法もあります。ドメインルーティングによって、存在しないDNSレコードがアクセス可能なアドレスに変わることはありません。

このルールをAndroidクライアントにそのままコピーできますか?

v2rayNGはXrayコア、v2flyNGはV2Flyコアを使用します。基本的なルーティングの考え方は似ていますが、画面上の項目、インポート形式、データ分類、コアの機能はそれぞれ確認が必要です。「ルール条件と順序」は移行できますが、v2rayNのクライアントバックアップを汎用設定としてそのまま使わないでください。移行後もデフォルトの出力先とDNSを確認してください。

検証済みのルーティング設定を1つ保存しておきましょう。その後、特定サイトで問題が起きたら、ドメイン分類、IP分類、DNS、ノード接続のどこに原因があるかを確認し、一度に変更する項目は1つに絞ります。そのうえで必要最小限の例外を追加します。こうすれば変更の原因を把握しやすく、改善しなかった場合も元に戻しやすくなります。

v2rayN をダウンロード