GeoIP・GeoSiteルールファイルの更新方法:v2rayN・v2rayNGのデータベース更新と参照方法

geoip.dat・geosite.datの役割、v2rayN・v2rayNGでの更新方法、geosite:cnやgeoip:privateなどの基本的な参照方法を解説します。

この記事の概要

ノードの登録が済み、ルーティングの振り分けやGeoデータのエラーを調べている方向けです。まずドメイン用データとIP用データの違いを確認し、クライアントからデータを更新します。手動でファイルを置き換える場合は、カーネルが実際に読み込むディレクトリを確認してください。最後にルーティングログで参照タグとルールの順序を検証します。この記事のdatファイルとJSONの記述例はV2Ray/Xray形式向けで、ほかの形式のルールデータベースには使えません。

1. GeoIPとGeoSiteは何を照合する?

geoip.datにはタグごとに整理されたIPアドレス範囲が、geosite.datにはタグごとに整理されたドメインルールが保存されています。どちらもカーネルが参照するバイナリデータであり、ノード一覧やサブスクリプションURLではありません。データを更新しても、サーバー、ポート、ユーザー認証情報は変更されません。

GeoIP:接続先IPを照合

ファイル名
geoip.dat
ルールのフィールド
ip
よく使う参照方法
geoip:cn、geoip:private
データの内容
IPv4・IPv6アドレス範囲の集合

地域の分類はデータソース内の接続先IPアドレス範囲を示すもので、サービス運営者の所在地を示すものではありません。

GeoSite:接続先ドメインを照合

ファイル名
geosite.dat
ルールのフィールド
domain
よく使う参照方法
geosite:cn
データの内容
完全修飾ドメイン名、ドメインのサフィックスなどのルール

特定のタグが含まれるかどうかは使用するデータベースによって決まり、タグ名から自動的に生成されるわけではありません。

geosite:cnは「中国のIPアドレスに解決されるすべてのドメイン」を意味するわけではありません。同様に、geoip:cnも「中国語のウェブサイトすべて」を指すわけではありません。ドメインが海外のCDNを利用する場合もあれば、海外サービスが中国国内の接続拠点を持つ場合もあります。ドメインの集合とIPの集合は、別々の条件として捉えてください。

リクエストがカーネルに到達接続先情報を読み取るルールセットを照合アウトバウンドタグを選択接続先に接続

データベースが提供するのは照合に必要な集合です。直接接続、プロキシ、ブロックのどれにするかはルーティング設定で決まります。ファイルの更新に成功しても、現在のルーティング設定が該当する集合を参照していなければ、振り分け動作は変わりません。

2. 更新前にカーネル・ディレクトリ・復旧手段を確認

v2rayNはデスクトップクライアントです。設定を生成し、選択したカーネルに通信処理を任せます。v2rayNGはXrayカーネルを使用します。クライアントのインストール先、設定の保存先、カーネルのデータ保存先を同じ場所と考えないでください。特にデスクトップ版でカーネルを切り替えると、以前置き換えたファイルが現在のプロセスから読み込まれるとは限りません。

  1. 現在の環境を記録:クライアントの「バージョン情報」などでクライアントのバージョンを控え、起動ログでカーネル名とバージョンを確認します。「接続できない」だけで済ませず、元のエラーメッセージも保存してください。
  2. ルーティング設定をバックアップ:カスタムルールと現在のGeo更新先を保存します。ファイルを手動で置き換える場合は、元のgeoip.datとgeosite.datもバックアップしてください。
  3. データ形式を確認:この記事ではdat形式を扱います。別の拡張子のルールセットをgeosite.datにリネームしないでください。ファイル名が同じでも、内部形式に互換性があるとは限りません。
  4. 変更範囲を絞る:まずデータを更新して動作を確認し、その後でルールを調整します。クライアントのアップグレード、カーネルの置き換え、DNSの変更、ルーティングの並べ替えを同時に行うと、原因を特定しにくくなります。

3. v2rayN:まず更新メニューを使い、必要な場合のみ手動で置き換える

Geo更新に対応したv2rayNのデスクトップ画面で、上部の「更新を確認」メニューを開き、「Geoファイルを更新」を選びます。バージョンや画面レイアウトによってメニューの場所や表示名が異なる場合があるため、現在の画面にあるGeo更新項目を確認してください。「サブスクリプションを更新」とは別の操作です。サブスクリプションの更新でサーバー設定は更新できますが、ルールデータの更新にはなりません。

  1. 更新に使うネットワークを確認:まず現在の設定で利用可能なノードに接続します。更新メニューで直接接続とプロキシ経由のダウンロードを選べる場合は、現在アクセス可能な方法を選んでください。ブラウザーでダウンロードできても、クライアントの更新リクエストが同じ経路を使うとは限りません。
  2. Geoデータを更新:クライアントのログで、データのダウンロードと保存が完了したことを確認します。タイムアウト、接続切断、書き込みエラーがあれば更新は成功していません。メニューが閉じたことだけで判断しないでください。
  3. カーネルを再読み込み:更新後、クライアントから現在のサービスを再起動するか、クライアントを正常に終了してから起動し、新しいファイルが次回の設定読み込み時に反映されるようにします。
  4. 起動結果を確認:データの読み込みエラーがないことを確認し、直接接続ルールとプロキシルールからそれぞれ1件ずつテストします。新しいデータベースに既存のルールが使うタグがない場合は、データベースを元に戻すか、該当するルールを修正してください。

手動で置き換える場合は実際のデータディレクトリを探す

ポータブル版で見かけるbinサブディレクトリは場所を探す手がかりにすぎず、すべてのインストール方法に当てはまる固定の保存先ではありません。起動ログ、カーネルの起動引数、クライアントのディレクトリ設定を確認し、実際に使用されている場所を特定してください。同名ファイルが複数ある場合、更新日時だけで判断しないでください。

要点:読み込み先を特定してからファイルを置き換える

同名のデータベースが複数ある場合は、起動情報で現在のカーネルが使っているファイルを確認してください。すべてのディレクトリにファイルをコピーすると、次にカーネルを切り替えたときに追跡しにくい設定差分が生じるおそれがあります。

4. v2rayNG:Geoリソースの更新メニューを使う

v2rayNGのメイン画面で右上の「⋮」メニューを開き、「Geoリソースを更新」に関する項目を探します。バージョンによっては「Geoリソースファイルを更新」と表示されます。ここで更新するのはXrayが使用するローカルデータで、サブスクリプション内のノードではありません。該当項目が見当たらない場合は、バージョンと機能の説明を確認してください。システムのダウンロードフォルダーにある同名ファイルを、安易に上書きしないでください。

  1. 現在のルーティング設定を保持:現在のルーティングモード、カスタムルール、データソースの設定を記録しておきます。更新に伴ってこれらの設定を変更する必要はありません。
  2. データを更新:更新先にアクセスできることを確認します。使用中のバージョンでGeoリソースのURLを指定できる場合は、対応するバイナリファイルを返すURLを入力してください。配布ページやサブスクリプションのリンクは指定しないでください。
  3. 項目ごとに結果を確認:GeoIPとGeoSiteのダウンロード状況が個別に表示される場合は、それぞれ確認します。一方だけ更新できても、もう一方も置き換わったとは限りません。
  4. 接続を再起動:更新後は接続を停止してから再起動し、カーネルログを確認します。その後、照合対象のドメインとローカルネットワーク内の接続先をテストしてください。

カスタムデータソースは安定して利用できるものを選んでください。データソースを変更した場合は、既存のルールが参照するcn、privateなどのタグが含まれているかを先に確認します。特定の分類は一部のデータセットでしか提供されません。別の解説記事で使われていたからといって、そのまま設定できるとは限りません。

5. geosite:cnとgeoip:privateの参照方法

以下はV2Ray/Xrayのroutingフィールドの例であり、クライアント設定全体ではありません。既存のアウトバウンドにdirectとproxyのタグが定義されている前提です。実際のタグ名が異なる場合は、あわせて変更してください。通常、ノードの設定はクライアントが生成します。この断片をサブスクリプションURLの入力欄に貼り付けないでください。

{
  "routing": {
    "domainStrategy": "IPIfNonMatch",
    "rules": [
      {
        "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"
      }
    ]
  }
}

IPIfNonMatchは、ドメインの照合で一致しなかった場合に、IPアドレスへの解決を試みてIP照合を行う設定です。「先にすべてのドメインを解決してから全ルールを実行する」という意味ではありません。AsIsを使う場合、接続先IPのないドメインのみのリクエストは、geoip:cnを設定しても同じように解決・照合されるわけではありません。DNSの結果も最終的なIPの分類に影響するため、データ更新とDNSのトラブル調査は分けて考えてください。

プライベートIPv4アドレス範囲の確認基準

ローカルネットワークへの直接接続を調べるときは、まず以下の3つのRFC 1918アドレス範囲を基準に、接続先がプライベートIPv4ネットワークに属するかを確認できます。これらは確認項目の一部であり、geoip:privateの全範囲ではありません。ループバック、リンクローカル、IPv6関連の範囲は別途確認が必要です。

10.0.0.0/8
プライベートIPv4アドレス範囲
172.16.0.0/12
範囲の上限は172.31.255.255
192.168.0.0/16
家庭内LANでよく使われるアドレス範囲

6. 更新後の検証とよくあるエラー

検証は2段階で行います。まずファイルが正常に読み込まれたことを確認し、次にリクエストが想定したルールに一致したことを確かめます。ダウンロード完了、カーネルの起動成功、ウェブサイトへのアクセス成功は、それぞれ別の結果です。1回アクセスできただけでは、直接接続ルールが有効になったとは判断できません。

  1. 起動ログを確認:geoip、geosite、failedなどで検索し、ファイルの欠落、形式の誤り、分類の不足がないか確認します。
  2. 実際のアウトバウンドを確認:ログにルーティングやアクセス記録が表示される場合は、テストリクエストに対応するアウトバウンドタグを確認します。必要な間だけログレベルを上げ、調査後は元に戻してください。アクセス記録を長時間蓄積しないようにします。
  3. テスト条件をそろえる:同じノード、同じルーティングモード、同じ接続先を使い、既存の接続を閉じてからリクエストを送り直します。再利用中の接続では、データベースを置き換えてもアウトバウンドはすぐに選び直されません。
  4. 元に戻す手順を用意:新しいデータで起動に失敗した場合は、カーネルを停止し、元のファイルまたはデータソースに戻してから再起動して確認します。復旧できたら、新しいタグとデータ形式を一つずつ確認してください。

geosite.datが見つからないと表示されます。サブスクリプションを再インポートすればよいですか?

まず実際のデータディレクトリ、ファイル名、読み取り権限を確認し、その後クライアントのGeo更新を実行してください。通常、サブスクリプションに含まれるのはサーバー設定です。再インポートしても、カーネルに不足しているデータベースは補われません。

list not foundと表示されます。ファイルはダウンロード済みなのですが、なぜですか?

このエラーは通常、ルールが参照する分類が現在のデータベースに存在しないことを示します。エラーに記載されたタグを控え、データソースを確認してください。元のデータソースに戻すか、現在のデータベースに実際に含まれる分類を使うようルールを変更します。

リソースの更新はタイムアウトするのに、ブラウザーではダウンロードURLを開けるのはなぜですか?

クライアントの更新リクエストがプロキシ経由か、プロキシ接続を利用できる状態か、更新URLがウェブページではなくファイルを返すかを確認してください。直接接続とプロキシ経由の更新を選べる場合は、切り替えて再試行し、ログの結果を確認します。

更新後も日本国内のウェブサイトがプロキシ経由になります。次にどこを確認すればよいですか?

まず現在のルーティング設定でgeosite:cnまたはgeoip:cnを参照しているか確認します。次に、より前にあるプロキシルールが先に一致していないかを調べてください。アプリがIPアドレスしか送らない場合、ドメインルールは照合されないことがあります。接続先情報と名前解決の設定もあわせて確認してください。

データベースは毎日手動で更新する必要がありますか?

一律に毎日更新する必要はありません。データソースの公開頻度に合わせてメンテナンスし、分類漏れが確認できたときに更新してください。頻繁に出所不明のデータソースに切り替えるより、毎回復元できるよう以前のデータを残しておくほうが、問題の調査に役立ちます。

v2rayNをダウンロードデスクトップ・Androidクライアント