GeoIP・GeoSiteデータベース更新ガイド|geoip.dat・geosite.datを使ったルーティング設定

GeoIPとGeoSiteの収録内容やクライアントからの更新方法、geosite:cn・geoip:privateの書き方、ルーティングルールの優先順位と注意点を解説します。

この記事の概要

GeoSiteはドメインの集合、GeoIPはIPアドレスの集合に基づいて照合します。v2rayNでルーティングを設定するMacユーザー向けに、データベースの更新場所、Xray・V2Rayのルーティング項目、ルールの優先順位、ログの確認方法を解説します。まず通信がプロキシコアに届いているか確認し、その後データベースとルールを調べましょう。サブスクリプションの更新だけでは、これら2つのファイルは更新されません。

GeoIPとGeoSiteの照合対象

geosite.datには、タグごとに整理されたドメインルールが収録されています。完全一致するドメインやドメインのサフィックスなど、対応する形式で照合できます。geoip.datには、タグごとに整理されたIPアドレス範囲が収録されており、国・地域別の分類や特定用途のアドレス分類などが含まれます。どちらもバイナリ形式のデータベースなので、通常のドメイン一覧のファイル名を変えても利用できません。

GeoSite:ドメインの集合

主なファイル
geosite.dat
ルーティング項目
domain
指定例
geosite:cn
照合対象
リクエストの宛先ドメイン

タグが存在するかどうかは、使用中のデータベースの配布元と内容によって異なります。

GeoIP:IPアドレスの集合

主なファイル
geoip.dat
ルーティング項目
ip
指定例
geoip:private
照合対象
宛先IP、またはルーティング時に名前解決されたIP

アドレスの分類はWebサイトの分類とは異なり、接続できることを保証するものでもありません。

geosite:cnは「.cnで終わるすべてのドメイン」を意味するのではなく、データベース内のcnという集合を参照します。別のトップレベルドメインのサイトが含まれる場合もあれば、新しく公開されたサイトが未収録の場合もあります。geoip:cnはデータベース内のIPアドレス範囲に基づいて照合します。これだけでWebサイトの運営主体やユーザーの所在地を判断することはできません。

geoip:privateは、プライベートネットワークや特殊用途のアドレスを直接接続するルールによく使われますが、LAN内のドメインをすべて網羅した一覧ではありません。たとえば、192.168.1.1はIPアドレス宛て、printer.localはドメイン宛てで、後者では名前解決も関係します。アドレスが収録されているかは、使用中のデータベースで確認してください。

システムプロキシを確認してから更新方法を選ぶ

ルーティングルールが処理するのは、すでにプロキシコアに届いた接続だけです。macOSのシステムプロキシが影響するのは、システムプロキシの設定に従うアプリです。システムプロキシを迂回するアプリは、GeoSiteルールを変更しても接続経路が変わらないことがあります。TUNを使えばより多くの通信を取り込めますが、ルーティング、DNS、除外設定の確認は必要です。スイッチがオンになっているだけで、すべてのリクエストがコアに届いているとは限りません。

対象ファイルは2種類
geoip.datとgeosite.datを解説
ポリシーは3種類
AsIs、IPIfNonMatch、IPOnDemand
53
従来型DNSでよく使われるUDP/TCPポート

データベース、サブスクリプション、コアの更新はそれぞれ別の作業です。サブスクリプションにはノード情報、データベースにはルーティングで参照する各種セット、コアには設定を実行する役割があります。VMessやVLESSのノードを切り替えてもデータベースのタグは自動修正されません。また、データベースを更新しても、無効になったノードの認証情報は修復されません。

クライアントから更新

おすすめ

v2rayNのGeoファイル更新機能を使えば、ダウンロードとファイルの配置をクライアントに任せられます。更新完了後に結果を確認し、コアを再起動して読み込み状況を確かめてください。

おすすめのユーザー:内蔵ルーティングを使い、ファイルやフォルダーを手動で操作したくない方。

ファイルを手動で置き換える

データベースの配布元、タグの内容、コアのリソースフォルダーを把握している場合に限り、手動で置き換えてください。作業前に旧ファイルを保管し、アプリのパッケージ内のファイルやシステムフォルダーのアクセス権は変更しないでください。

おすすめのユーザー:内蔵更新が失敗する場合や、カスタムデータベースを使う上級者。

v2rayNでGeoファイルを更新する手順

v2rayNのメニュー名は、バージョンや表示言語によって異なります。デスクトップ版でよくある操作は「更新を確認」→「Geo filesを更新」です。GeoIPとGeoSiteが個別に表示される場合は、それぞれ更新してください。以下では一般的なメニューを例に説明します。特定バージョンの配置がすべてのプラットフォームで共通とは限りません。

  1. 使用中のコアを確認する

    メイン画面で現在のノードを確認し、実行ログでコア名を確認します。この記事の設定例は、DAT形式のデータベースを読み込むXrayまたはV2Ray向けです。別形式のルールを使っている場合は、そのまま適用しないでください。

  2. 現在のルールを控える

    「設定」→「ルーティング設定」を開き、有効なルーティングプリセット、ルールの順序、ドメインポリシーを控えます。カスタムルールを使っている場合は、問題が起きたときに戻せるよう、現在の内容を先に保存してください。

  3. ファイルを更新する

    「更新を確認」→「Geo filesを更新」を選びます。「GeoIPを更新」と「GeoSiteを更新」が個別に表示される場合は、順に実行して、それぞれの結果が表示されるまで待ちます。

  4. コアを再読み込みする

    ダウンロード完了後、クライアントのコア再起動機能を使います。該当するメニューが見つからない場合は、クライアントを正常終了してから再度起動してください。サブスクリプションの再読み込みだけでなく、データベースも再度読み込ませることが重要です。

  5. 読み込みログを確認する

    データベースの読み込み失敗、セットの不存在、ルーティング設定の無効化に関するエラーがないか確認します。その後、直接接続する宛先とプロキシ経由にする宛先を1つずつテストし、実際の接続先が想定どおりか確かめてください。

手動で作業する場合は、先にコアを停止し、クライアントのログまたはリソースフォルダーの設定で実際のファイルの場所を確認してください。アプリのインストール先とユーザーデータの保存先は異なる場合があります。macOSでは、データベースをアプリのパッケージ内に置くと決めつけないでください。置き換え後にタグが見つからない場合は、ルールを追加し続けるより、元のファイルに戻すほうが原因を特定しやすいことがあります。

geosite:cnとgeoip:privateの正しい書き方

以下はXray/V2Ray形式のrouting設定例で、単独で動作する完全な設定ではありません。例にあるdirectとproxyは、完全な設定内で定義済みの出力タグと一致させてください。v2rayNは実行用の設定を生成します。クライアントのルーティング編集画面で調整し、すぐに上書きされる生成済みの一時ファイルは編集しないでください。

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

例のexample.comはドメイン完全一致ルールの説明用です。実際には、指定した出力先に振り分けたいドメインに置き換えてください。最後のルールはTCP/UDP全体に適用する明示的なフォールバックであり、すべてのクライアントでの既定動作を示すものではありません。フォールバックがない場合、どのルールにも一致しない通信は通常、既定の出力先に送られます。既定の出力先が必ずプロキシとは限りません。

ルールの順序とDNSポリシーの連携

ルールは上から順に評価され、一致すると対応する出力先が使われます。その後に「より詳細な」ルールが続いていても評価されません。通常は、明示的な例外、ドメインの集合、IPの集合、フォールバックの順に配置します。TCP/UDP全体に適用するルールを先頭に置くと、後続のGeoSite・GeoIPルールはその通信を処理できません。

domainStrategyルーティングの動作確認するポイント
AsIsルーティング照合のためのドメイン名解決は行われません。宛先がもともとIPアドレスの場合は、IPルールで照合できます。ドメイン宛ての通信をGeoIPルールだけで完全に振り分けられるとは限りません。
IPIfNonMatchドメインがルールに一致しない場合、IPアドレスに名前解決して再照合します。前にあるドメインルールやフォールバックルールがすでに一致していないか。
IPOnDemand照合中にIPが必要なルールに達した場合、必要に応じて宛先ドメインを名前解決します。前方にあるIPルールが、後続のドメイン例外より先に一致する場合があります。

特に注意:前の例ではIPIfNonMatchを使い、末尾にフォールバックルールを設定しています。ドメインがgeosite:cnに一致しなくても、先にフォールバックへ一致する可能性があります。そのため、「GeoSiteに一致しなかった」だけで追加のIP名前解決が必ず行われるとは限りません。この例はドメインによる振り分けを優先しますが、宛先がもともとIPの通信にはIPルールを適用できます。

分類されていないドメインを名前解決してからGeoIPで振り分ける必要がある場合は、フォールバックと既定の出力先を見直すか、IPOnDemandの利用を検討してください。その場合もルールの順序を併せて確認します。ポリシー名だけを変えて、正しく動作すると判断することはできません。必要に応じて名前解決する設定では、指定のプロキシに送るドメイン例外を広範なIPルールより前に置くと、例外が先に処理されやすくなります。

更新後も反映されない場合:症状別の確認方法

サブスクリプションの変更、DNSの設定変更、ルーティングの切り替え、データベース更新を同時に行わないでください。一度に変更する条件は1つにして、宛先ドメイン、宛先IP、一致したルール、出力タグを記録します。これにより、「リクエストがコアに届いていない」「データベースを読み込めない」「ルールの照合が実際に間違っている」を切り分けられます。

症状優先して確認する項目対処方法
更新後、コアが起動しないファイルの読み込み先、データベース形式、セットのタグ起動ログを確認し、旧ファイルに戻してから、設定で参照しているセットが存在するか確認します。
日本国内のWebサイトがプロキシ経由になるドメインがデータベースに収録されているか、前方のルールに上書きされていないかまず特定のドメインを指定するルールを追加して動作を確認し、その後でセットやデータベースの配布元を見直してください。
LAN内のデバイスに接続できない宛先がドメインかIPか、名前解決結果、TUNの除外設定まずデバイスの実際のLAN内IPでテストし、その後、名前解決とルーティングを個別に確認してください。
ルールを切り替えても変化がない現在有効なルーティングプリセット、既存の長時間接続プリセットが適用されているか確認し、新しい接続でテストしてください。必要に応じてコアを再起動します。
特定のアプリだけで問題が起きるアプリがシステムプロキシに従うか、独自のDNSを使っているかまず通信がどこから入るか確認してください。GeoSiteのルールを追加するだけでは解決しない場合があります。

同様の設定方法はAndroid版のv2rayNGでも使えますが、Xrayコアを使用するため、メニューやリソースフォルダーの操作はデスクトップ版と異なります。v2flyNGはv2flyコアを使用します。対応する設定機能やデータベースの読み込み方法は、実際に使うバージョンで確認してください。サブスクリプションをインポートできても、すべてのクライアントで同じルーティングデータベースが共有されるとは限りません。

日常のメンテナンスは3段階で進められます。ファイルを更新して読み込みを確認し、ルールの順序とドメインポリシーを調べ、新しい接続で出力先を検証します。データベースは照合用の集合を提供し、設定は接続先を決め、システムプロキシとTUNは通信をコアに届けます。この3つの役割を分けて考えると、ルーティングの問題を効率よく調査できます。

v2rayNをダウンロードプラットフォームを選んでクライアントをダウンロード