ルール設定 読了時間:約10分

GeoIP・GeoSiteデータベースの更新方法:geox-urlの設定とルールの書き方

GeoIP・GeoSiteデータの役割と入手先、mihomoのgeox-url設定と自動更新、GEOIP・GEOSITEルールの書き方を解説します。

まずGeoIP、GeoSite、ルールセットの違いを確認

サイトへの接続が想定外の経路を通っても、必ずしもノードの障害とは限りません。通信の振り分けには、接続先のドメイン名またはIPアドレス、設定内のルール順序、ルールが参照するデータの少なくとも3つが影響します。Geoデータの更新で変わるのは最後の要素だけです。DNSの調査に代わるものではなく、新しいルールが設定に自動追加されることもありません。

この記事では、mihomoカーネルを使用するClashクライアントを対象に説明します。Clashはクライアント群で広く使われる名称ですが、すべてのカーネルが同じ設定項目に対応しているわけではありません。旧バージョンのClashカーネルでは、この記事のGEOSITEや自動更新の設定をそのまま使えません。作業前に、ウィンドウのタイトルだけで判断せず、クライアントのカーネル情報で実際にmihomoが動作していることを確認してください。

データまたは設定内容と用途参照方法
geoip.dat国・地域・データソース別に分類したIPアドレス範囲DATモードのGEOIP
country.mmdbMMDB形式のIP地理情報データ。ローカルファイルの一般的な名前はCountry.mmdbMMDBモードのGEOIP
geosite.datサイト・サービス・カテゴリ別にまとめたドメインの一覧GEOSITE
rule-providers個別に宣言・ダウンロード・更新するルールセットRULE-SET

GeoSiteのカテゴリは、サイトの用途をリアルタイムで判定するものではなく、データのメンテナーが整理したドメイン一覧です。GeoIPも正確な位置情報を示すものではありません。クラウドサービス、CDN、越境トラフィックの振り分け、IPアドレスの移転などにより、地理的な分類と実際のアクセス目的が一致しないことがあります。重要なサービスでは、国単位でIPを振り分けるだけでなく、ドメインを明示したルールを使うほうが細かく制御できます。

geox-urlの設定:データの取得先と自動更新間隔

以下は既存設定に追加するトップレベルの設定例で、ノードを含むサブスクリプション全体ではありません。GeoIP DATモードを選択し、GeoIP・GeoSite・MMDBの取得先を指定したうえで、Geoデータを24時間ごとに自動更新します。例ではMetaCubeXのmeta-rules-datリリースアセットを取得先にしています。実際に使用する前に、現在のネットワークから各URLにアクセスできることを確認してください。

geodata-mode: true
geodata-loader: memconservative

geo-auto-update: true
geo-update-interval: 24

geox-url:
  geoip: "https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geoip.dat"
  geosite: "https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geosite.dat"
  mmdb: "https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/country.mmdb"

各項目を確認:時間の単位は秒ではなく時間

  • geodata-mode: true:GEOIPでGeoIP DATデータを使用します。falseにするとMMDBデータを使用します。GeoSite全体を有効・無効にするスイッチではありません。
  • geodata-loader: memconservative:メモリ消費を抑えるDATの読み込み方式を選択します。ルールの優先順位を変える設定でも、ダウンロードを高速化するスイッチでもありません。
  • geo-auto-update: true:カーネルによるGeoデータの定期更新を有効にします。クライアント側に手動更新の機能が用意されている場合もあります。
  • geo-update-interval: 24:単位は時間です。24秒ではなく24時間です。定期更新はカーネルの動作中に実行されるため、パソコンの電源を切っている間はダウンロードされません。
  • geox-url:データの取得先を指定します。URLを変更しただけでは、現在使用中のデータが置き換わったことにはなりません。実際に更新と読み込みが完了する必要があります。

この例では、あとからGeoIPのデータ形式を切り替えられるようにmmdbのURLも残しています。これは1回のGEOIP判定でDATとMMDBの両方を同時に検索するという意味ではありません。また、国コードのみを含むMMDBデータに、他のDATデータソースにしかない独自カテゴリ名をそのまま指定することはできません。

サブスクリプションクライアントで更新設定を保持する方法

多くのクライアントは、リモートのサブスクリプションをダウンロードしたあとに実行用の設定を生成します。生成ファイルを直接編集すると、一時的には反映されても、次回のサブスクリプション更新で上書きされることがあります。「サブスクリプションの原文」「クライアントのオーバーライド」「カーネルが最終的に読み込む設定」の3か所を区別してください。

  1. 現在の環境を記録します。クライアントのカーネル情報または起動ログで、mihomoのバージョン、使用中の設定名、Geoデータの保存先を確認します。ファイルの保存先は、クライアントの「設定フォルダーを開く」などの機能から確認してください。別のクライアントのパスをそのまま当てはめないでください。
  2. 動作中の設定をバックアップします。現在のオーバーライド内容と古いデータベースを保存してください。サブスクリプションURLやノードのパスワードを含むファイルはローカルだけに保管し、公開の掲示板などに貼り付けないでください。
  3. 設定を永続化する場所に書き込みます。クライアントにMerge、オーバーライド、拡張設定などの機能がある場合は、その機能で上記のトップレベル項目を統合します。自分でローカルのYAMLを管理している場合は、そのファイルを直接編集してください。
  4. 最終的な設定を確認します。再読み込み後、実際に動作している設定にgeodata-mode、geox-url、更新間隔が反映されていることを確認してください。エディター上で項目が見えるだけでは、カーネルに渡されたことを確認できません。
  5. 一度更新を実行します。クライアントのGeoデータ更新機能を使い、カーネルログを確認してください。メニュー名はクライアントによって異なります。「サブスクリプションを更新」と「Geoデータを更新」は別の操作です。

クライアントにGeoデータの更新ボタンがない場合は、自動更新設定を残すか、後述のオフライン置き換え手順を利用してください。必要なデータがない状態で初回起動すると、カーネルがファイルをダウンロードしようとする場合があります。このとき、利用可能なプロキシがまだ起動していないと、「起動にデータが必要なのに、ダウンロードにはプロキシが必要」という依存関係が発生します。何度も再起動するより、データをオフラインで用意するほうが確実です。

GEOIP・GEOSITEルールの正しい書き方

以下のルール例では、既存設定に代理选择という名前のプロキシ選択グループがあることを前提としています。実際のグループ名が異なる場合は、同じように書き換えてください。DIRECTは組み込みの直接接続ポリシーなので、別途作成する必要はありません。例は既存のrulesに統合し、2つ目のrulesキーを追加しないでください。

mode: rule

rules:
  - DOMAIN,example.com,DIRECT
  - GEOSITE,cn,DIRECT
  - GEOSITE,geolocation-!cn,代理选择
  - GEOIP,CN,DIRECT,no-resolve
  - MATCH,代理选择

上から順に判定し、最初に一致したルールで確定

DOMAIN,example.com,DIRECTはドメインを完全一致で指定するルールです。特定サイトの例外は、広いカテゴリを指定するルールより前に置きます。続く2つのGeoSiteルールで、ドメインのカテゴリに応じて接続先を選びます。例のcnとgeolocation-!cnは、使用中のデータソースに含まれている必要があります。軽量版のデータベースに切り替えた場合は、カテゴリが残っているか再確認してください。

GEOIP,CN,DIRECT,no-resolveは、判明している接続先IPがCNカテゴリに属するかを判定します。末尾のno-resolveは、このIPルールのために追加のドメイン解決を行わないという意味です。接続に利用可能な接続先IPがすでにある場合は、引き続きルール判定の対象になります。「DNSを無効にする」という意味ではなく、すべてのリクエストがDNSモジュールを迂回するわけでもありません。

最後のMATCHは、それまでのルールに一致しなかった通信を処理します。これを先頭に置くと、その後のGeoSite・GeoIPルールは実行されません。また、グローバルモードでは全体ポリシーに従って通信が転送されるため、ルールモードでの振り分け順を確認できません。

ドメイン名がなければ、GeoSiteが自動で補完することはない

アプリがIPアドレスへ直接接続する場合や、通信がカーネルに渡された時点で関連付け可能なドメイン名がない場合、GeoSiteルールに一致しないことがあります。TUNは通信を取り込む方式の1つであり、すべての接続にドメイン名が自動的に付与されるわけではありません。DNSが想定した経路を通っているか、Fake-IPの対応付けが有効か、スニッフィングが必要で正しく有効になっているかを確認してください。情報が欠けている問題を、GeoSiteファイルの交換だけで解決しようとしないでください。

更新が反映されたことを確認する方法

「ダウンロード完了」「ファイルの置き換え完了」「新しい接続が更新後のデータでルールに一致」は、それぞれ別の確認項目です。ファイルの更新日時が変わっただけでは、新しいデータが現在のカーネルに読み込まれたとは限りません。サイトが開けることだけでも、想定した経路を通ったとは判断できません。

  1. ダウンロードと読み込みの結果を確認します。更新操作後のログを確認し、ネットワークのタイムアウト、ダウンロード失敗、データの解析失敗、カテゴリの未登録を区別してください。ログの文言はカーネルのバージョンによって異なるため、具体的なエラーと発生時刻を記録します。
  2. 動作モードとルールを確認します。ルールモードに切り替え、最終的な設定でGeoルールがMATCHより前にあることと、指定したポリシーグループ名が存在することを確認してください。
  3. テスト接続を新しく作成します。テスト対象アプリの既存接続を閉じてから、リクエストを再実行してください。確立済みのTCP接続は、データベースを更新しても通常は別のプロキシ経路に自動で切り替わりません。
  4. 接続の詳細を確認します。接続先ドメイン、接続先IP、一致したルール、実際の出口を確認してください。先に配置したDOMAIN-SUFFIXに一致している場合、その接続は後続のGeoルールまで到達していません。
現象まず確認する項目対処方法
更新がタイムアウトするダウンロード先への接続、DNS、ネットワークの出口まずダウンロード経路を確保し、必要ならオフラインで置き換える
カテゴリが見つからないというエラーが出るデータソースにルールで参照しているカテゴリが含まれているかカテゴリ名を確認するか、互換性のあるデータソースに戻す
更新後も以前の出口を通る既存の接続、ルールの順序、実行中の設定接続を作り直し、実際に一致したルールを確認する
GeoIPを更新しても変化がないgeodata-modeと実際に使用されているファイルDATとMMDBのどちらを更新したか確認する
サブスクリプション更新後に設定が消える生成された設定ファイルだけを編集していないか設定を永続化されるオーバーライドに移す

調査中は一時的にログの詳細度を上げてもかまいませんが、完了したら普段のレベルに戻し、接続情報を長時間大量に記録しないようにしてください。問題を報告する前に、サブスクリプションURL、アクセストークン、プライベートなドメイン名を削除してください。カーネルのバージョン、ルールの抜粋、データソース、エラー前後の状況があれば、原因を絞り込むのに十分な場合がほとんどです。

オフラインでの置き換え、ロールバック、更新頻度

起動時にデータをダウンロードできない場合、オフラインでの置き換えは再現性のある対処方法です。まず選択したデータソースから対応する形式のファイルを入手し、クライアントを使ってカーネルが実際に参照するデータフォルダーを確認してください。インストーラーの保存先から場所を推測しないでください。デスクトップアプリ、システムサービス、ポータブル実行では、作業ディレクトリが異なることがあります。

  1. 現在のデータファイルをバックアップし、取得元と取得日を記録します。
  2. 実際に動作しているカーネルを停止します。サービスモードの場合は、ウィンドウを閉じるだけでなく、バックグラウンドのサービスも停止したことを確認してください。
  3. 元のファイル名を維持してデータを置き換えます。例:geoip.dat、geosite.dat、Country.mmdb。実行ユーザーがファイルを読み取れる状態にしてください。
  4. カーネルを起動して読み込みログを確認し、新しい接続でルールの一致を検証します。
  5. 解析エラーや振り分けの異常が発生した場合は、カーネルを停止してバックアップを復元し、ファイル形式、カテゴリ、データソースの違いを調べます。

ダウンロードしたファイルが実際にはログインページ、アクセス制限の案内、エラー文書だった場合、拡張子を.datに変更しても使用できません。まず想定したリリースアセットから取得できていることを確認してから、カーネルのエラーに対処してください。また、GeoSiteファイルでGeoIPファイルを上書きしないでください。拡張子が同じでも、内容を相互に置き換えられるとは限りません。

日常の更新間隔はまず24時間に設定し、1時間ごとに何度もダウンロードする必要はありません。サイトの振り分けに問題が起きたら、まず一致したルールとドメイン情報を確認し、データ更新、特定サイトの例外追加、DNS経路の修正のどれが必要か判断してください。問題を該当する段階に切り分けるほうが、設定全体を何度も入れ替えるより、動作する状態を保ちやすくなります。各設定項目の詳細は技術リファレンスを、通信の取り込みと基本設定は設定ガイドをご覧ください。

Clash をダウンロードお使いのプラットフォームに合ったクライアントを選択