GeoIP・GeoSiteの更新方法とルーティング設定

geoip.dat・geosite.datの役割とクライアントでの更新手順、geosite:・geoip:を使ったルールの組み合わせを解説します。

この記事の概要

ノードの追加が済み、ルーティングを調整したい方向けの記事です。まずIPデータベースとドメインデータベースの違いを確認し、クライアントが実際に読み込むファイルを更新します。最後に最小限のルールで振り分けを検証します。例ではV2Ray/Xrayの従来のJSON形式を使用します。v2rayNの画面から設定する場合は、各項目をルーティング編集画面に入力してください。コードをサブスクリプションURL欄に貼り付けるものではありません。

GeoIPとGeoSite:IPとドメインをそれぞれ判定

geoip.datにはタグ別に整理されたIPアドレス範囲が、geosite.datにはタグ別のドメインルールが保存されています。どちらもコアが読み込むデータファイルであり、ノードのサブスクリプションやプロキシプロトコルではありません。更新してもVMessやVLESSノードのサーバーアドレス、ユーザーID、通信パラメーターは変更されません。

GeoIP:IPアドレス範囲の集合

標準ファイル名
geoip.dat
ルーティング項目
ip
よくある記述例
geoip:cn
プライベートIP用タグ
geoip:private

タグの有無はファイルの提供元によって異なります。地域分類は、Webサイトの運営主体の所在地を示すものではありません。

GeoSite:ドメインルールの集合

標準ファイル名
geosite.dat
ルーティング項目
domain
よくある記述例
geosite:cn
個別ドメインの記述方法
full:example.com

ドメインの集合には、サフィックスや完全一致のドメイン、正規表現のルールなどが含まれる場合があります。単なるドメインサフィックスの一覧ではありません。

geosite:cnは、現在使用中のドメインデータベースにあるcnの集合を参照します。「.cn」で終わるすべてのドメインを指すわけではありません。同様に、geoip:cnもWebサイトの登録地を調べるものではありません。CDNを利用するWebサイトは複数地域のIPアドレスを返すことがあり、ドメインによる振り分けと、名前解決後のIPアドレスによる振り分けでは結果が異なります。

更新前に確認すること:提供元・コア・読み込み先

更新に失敗する原因は主に3つあります。クライアントが更新した場所とコアが読み込む場所が異なる、新しいデータソースに既存ルールが参照するタグがない、ダウンロードした内容が有効なデータファイルではない、のいずれかです。作業前に、現在使えている2つのファイルとルーティングルール、またはクライアント設定のエクスポートファイルをバックアップしてください。

2ファイル
GeoIPとGeoSiteの更新結果を個別に確認
3ルール
後半で振り分けを検証するための最小構成例
7日
日常的な確認頻度の目安です。必須ではありません。
  • まずコアを確認します。クライアントのノード設定と起動ログでコア名を確認してください。デスクトップのショートカット名だけで判断しないでください。
  • 次にデータの提供元を確認します。まずは現在のクライアントで標準設定されているデータソースを使いましょう。独自の提供元を使う場合は、既存ルールで必要なcnやprivateなどの集合が含まれているか確認してください。
  • 実際の読み込み先を確認します。クライアントが管理するリソースディレクトリと、起動エラーに表示されるパスを基準にしてください。ポータブル版のフォルダー、独立したデータディレクトリ、複数のインストール先は、それぞれ別の場所である場合があります。
  • 元に戻せるようにしておきます。元の提供元、更新日時、ルーティング設定を記録してください。ルールのテキストだけをバックアップしても、新しいファイルに必要なタグがない問題は解決できません。

判断のポイント:提供元をそろえてからデータベースの変更を検討

現在の振り分けに問題がなければ、まず同じ提供元のデータを更新してください。必要な分類が現在のデータベースにないと確認できた場合に限り、提供元の変更を検討し、タグを一つずつ確認します。「ファイルの更新」と「ルール体系の移行」を一度に行わないようにしましょう。

クライアントでルールファイルを更新する:ダウンロード後にコアを再読み込み

メニュー名はバージョンや表示言語によって異なります。デスクトップ版v2rayNでは、「更新を確認」メニュー内にGeoファイルの更新項目があるのが一般的です。バージョンによってはGeoIPとGeoSiteが別々に表示されます。機能を目印に探し、該当項目が見つからない場合は、現在のバージョンのメニューとログを確認してください。「サブスクリプションの更新」はルールデータベースの更新とは異なります。

  1. まず接続できる状態にします。ノードが利用できることを確認してください。現在のネットワークからルールの提供元にアクセスできない場合は、クライアントの更新用プロキシ設定を有効にしてダウンロードできます。システムプロキシが有効かどうかだけで判断せず、更新ログも確認してください。
  2. Geoファイルを更新します。v2rayNで「更新を確認」を開き、Geoファイルの更新項目を選択します。2つの項目に分かれている場合は、GeoIPとGeoSiteをそれぞれ更新してください。各項目の完了を確認してから、ルーティングを変更します。
  3. エラー内容を確認します。タイムアウトは通常、接続の問題を示します。解析・展開・書き込みの失敗では、ダウンロード内容、フォルダーのアクセス権、ファイルの使用中状態を確認してください。ファイルの更新日時が変わったかどうかは、あくまで補助的な確認材料です。
  4. コアを再読み込みします。クライアントに再起動やコアの再読み込み機能があれば実行してください。専用ボタンがない場合は接続を停止してから再起動します。その後、起動ログにデータファイルや分類の読み込みエラーがないか確認してください。
  5. 振り分けを検証します。更新前と同じルーティングモードとテスト対象を使い、実際の出力先を比較してください。この段階でノード、DNS、ルーティングテンプレート全体を同時に変更しないでください。

Android版では、v2rayNGのGeoリソース更新項目はサイドメニューやリソース関連の画面から開けることが一般的です。画面の案内に従って更新してください。v2flyNGのメニュー構成や利用可能な更新項目は、インストールされているバージョンで確認してください。別のクライアントのメニュー名をそのまま当てはめないでください。モバイル端末でも、更新後は接続を停止して再起動する必要があります。

ルーティングルールの書き方:ドメインを優先し、IPで補完して最後にフォールバック

ルーティングはルールの記述順に照合され、一致すると対応するアウトバウンドが使われます。ここでは「中国本土のドメインは直接接続、プライベートIPと中国本土のIPも直接接続、それ以外のTCP/UDPはプロキシ経由」という基本構成を紹介します。directとproxyはどちらもアウトバウンドのタグです。既存設定のoutbounds[].tagと完全に一致させてください。

リクエストがコアに到着 ドメインルールを照合 必要に応じて名前解決 IPルールを照合 フォールバック先

これは設定の一部であり、クライアント設定全体ではありません。V2Ray/XrayのJSONを直接編集する場合に使えます。クライアントのGUIでルーティングを管理する場合は、ルーティングエディターで同じ順序のルールを作成し、現在有効なルールセットとして保存してください。

{
  "routing": {
    "domainStrategy": "IPIfNonMatch",
    "rules": [
      {
        "type": "field",
        "domain": [
          "geosite:cn"
        ],
        "outboundTag": "direct"
      },
      {
        "type": "field",
        "ip": [
          "geoip:private",
          "geoip:cn"
        ],
        "outboundTag": "direct"
      },
      {
        "type": "field",
        "network": "tcp,udp",
        "outboundTag": "proxy"
      }
    ]
  }
}
  • 1つ目のルールではドメイン集合を判定します。リクエストにドメインが含まれ、geosite:cnに一致した場合はdirectを選択します。同じ振り分け判定でGeoIPに頼る必要はありません。
  • 2つ目のルールではIP集合を判定します。同じip配列にある2つの集合は、どちらか一方に一致すれば対象になります。両方に同時に属することが条件ではありません。プライベートIP集合の範囲は、使用するデータファイルによって異なります。
  • 3つ目のルールで明示的にフォールバックします。それまでのルールに一致しないTCPとUDPのリクエストはproxyに送られます。このような広範囲に一致するルールは末尾に置いてください。先に置くと、後続のルールが照合されない場合があります。
  • 項目を安易にまとめないでください。1つのルールにdomainとipを両方指定しても、「ドメインまたはIPのどちらかに一致」という意味にはなりません。異なる条件項目は通常、すべて満たす必要があります。ルールを分けるほうが確認しやすくなります。

IPIfNonMatchは、ドメインリクエストのルーティング先がドメイン条件で決まらなかった場合に、対象のIPアドレスを名前解決し、IP条件でもう一度照合する設定です。最後のnetworkフォールバックはドメイン分類ではなく、この名前解決の代わりにもなりません。AsIsに設定すると、ルーティングモジュールはIPルールのためにドメインを自動で名前解決しません。ドメイン情報しかないリクエストは、フォールバック先に送られる可能性があります。

DNSとルールの順序:更新に成功しても振り分けが意図どおりとは限らない

GeoSiteはDNSサーバーを自動で指定しません。GeoIPも名前解決の誤りを修正しません。どのアウトバウンドで接続するかはルーティングモジュールが決め、アドレスをどう取得するかはDNS設定が決めます。両者には関係がありますが、「中国本土のドメインは直接接続する」ことが「DNS問い合わせも中国本土のDNSに送る」ことを意味するわけではありません。DNSサーバーの選択と問い合わせの送信先は、別途確認してください。

発生している現象まず確認する項目対処方法
ドメインルールにまったく一致しないコアが受け取っているのはドメインかIPかアプリのプロキシ方式を確認します。必要に応じてスニッフィングの設定を検討してください。暗号化された接続から常にドメインを取得できるとは限りません。
すべてのWebサイトが同じ出口を使うルーティングモードと最初のルールカスタム振り分けが有効か確認し、すべてに一致するルールを末尾に移動します。
同じサイトでも出口が変わることがあるCDNのIPアドレスとIP分類GeoIPに依存していないか確認します。安定した振り分けが必要な場合は、ドメイン例外を前方に追加してください。
ルール変更後も既存の接続先が変わらない接続がすでに確立されているかコアを再読み込みして新しいテスト接続を作成してください。既存の長時間接続で新しいルールの動作を判断しないでください。

IPIfNonMatchを設定していても、先行するドメインルールに一致したリクエストが、後続のGeoIPルールで判定し直されることはありません。反対に、アプリがプロキシに渡す前にドメインをIPアドレスへ変換している場合、GeoSiteで照合できるドメイン情報がない可能性があります。スニッフィングでドメインを取得できるかは、プロトコル、トラフィックの種類、設定によって異なります。確実な解決策とは限りません。

判断のポイント:データベースの古さを疑う前にリクエスト情報を確認

意図しない出口に接続された場合は、まずログに表示された対象のドメインまたはIP、選択された出口、ルールの順序を確認します。リクエスト情報が正しく、ルールも有効なのに対象が集合に含まれていない場合に限り、データの更新や個別例外の追加を検討してください。

更新失敗・分類が見つからない場合の対処

更新は成功したのに、起動時に分類が見つからないと表示されるのはなぜですか?

まず、geosite:cnのようにログに表示された不足タグを記録します。現在のファイルの提供元にその集合が含まれているか確認し、続けてコアの読み込み先を確認してください。似た名前のタグに安易に変更しないでください。まずバックアップを復元して正常に起動することを確認し、その後、新しいデータソースに含まれる分類に合わせてルールを調整します。

GeoIPの更新は完了したのに、GeoSiteのダウンロードがタイムアウトする場合は?

2つの更新結果を個別に確認し、失敗した項目の提供元とネットワーク接続を先に確認します。クライアントがプロキシ経由の更新に対応している場合は、接続を確認済みのノードを使って再試行してください。使用中のファイルを繰り返し上書きしたり、一方のファイルを複製して別の名前にしたりしないでください。

サブスクリプションを更新しても、ルーティングデータベースが古いままなのはなぜですか?

サブスクリプションで主に提供されるのはノード情報です。Geoファイルには別の更新機能があります。クライアントのGeoリソース更新項目から更新し、接続を再起動してください。サブスクリプションサービスにルーティング設定も含まれる場合は、ルールの内容とデータファイルの更新状況をそれぞれ確認します。

更新後に一部のWebサイトが開けなくなった場合、すぐにノードを変更すべきですか?

まずコアが正常に起動しているか確認し、対象サイトのアウトバウンドが変わったか調べます。更新前は利用できていて、2つのデータファイルを元に戻すと復旧する場合は、タグや分類の変更を優先して確認してください。すべての接続に失敗する場合は、ノードへの接続、DNS、ローカルプロキシの設定を確認します。

常に最新の状態にするために、データソースを毎日変更する必要はありません。一般的な利用であれば週に一度確認し、分類に明確な変更があった場合やログにエラーが出た場合に、その都度対応すれば十分です。ルールデータベースを更新してもノード自体の帯域は増えず、サーバー側のプロトコル対応状況も変わりません。更新によって改善されるのは、ルーティング判定の基準となるデータです。

適用結果を検証する:3つの接続先を固定し、復元手段を残す

検証には、直接接続される想定のドメイン、プロキシ経由になる想定のドメイン、アクセス権のあるLAN内サービスを1つずつ選びます。速度測定ではなく、3種類の接続がそれぞれ想定したアウトバウンドに進むか確認するのが目的です。LAN内サービスは実在するアドレスを使用し、ランダムなアドレスへテストリクエストを繰り返し送らないでください。

  1. 接続先の設定を統一します。たとえばアプリで127.0.0.1:10808を使用する場合は、そのポートが現在のクライアントの待ち受けポートであることと、対応するプロキシプロトコルを確認します。10808は一例であり、実際の設定を確認してください。
  2. 設定が読み込まれているか確認します。ルーティング設定を保存してコアを再読み込みし、ファイルの読み込み、タグの不足、設定の解析に関するエラーがないか確認してください。起動に失敗している場合、ブラウザーの表示からルーティングの動作を推測しないでください。
  3. 接続先ごとに新しい接続を作成します。対象、時刻、ログに表示されたアウトバウンドタグを記録してください。クライアントの表示がdirect/proxyだけの場合、接続先の確認はできますが、どのルールに一致したかまでは分からないことがあります。
  4. 問題の範囲を絞り込みます。必要に応じて一時的に最小限のルールだけを残すか、ログの詳細度を上げて短時間だけ再現してください。調査後は通常のログレベルに戻します。ログを共有する前に、ノードのアドレス、ユーザーID、アクセス履歴を削除してください。
  5. 動作する状態を保存します。3つの接続先がすべて想定どおりに動作したことを確認してから、古いバックアップを整理してください。問題が起きた場合は、元のファイルとルールに戻してから、更新と設定変更を個別にやり直します。

最後に、ルールファイルの提供元、ルーティングの順序、実際に使用しているコアの3点を記録しておきましょう。別の端末への移行やクライアントの再インストール後も、同じ振り分けを復元してから分類やDNSを調整できます。初期設定は設定ガイド、各項目の意味はプロトコルリファレンスをご覧ください。

クライアントをダウンロード