Clash GeoIP・GeoSiteの使い方:データベース更新とルール参照

ClashのGeoIPとGeoSiteについて、用途、ルールの書き方、更新手順、読み込み時のよくある問題を解説します。

GeoIPとGeoSiteはそれぞれ何を解決するのか

GeoIPとGeoSiteはいずれも、設定ファイルでルールを一件ずつ管理する手間を減らせます。ただし、接続を判定する基準は異なります。GeoIPは接続先IPアドレスの国・地域やネットワーク集合を基に照合し、GeoSiteは接続先ドメインが属するサイト分類を基に照合します。前者はIP、後者はドメインを対象とするため、同じデータベースを別の書き方で表したものではありません。

アプリがドメインへアクセスすると、ClashまたはMihomoは通常、まず接続メタデータを取得し、ルールリストを上から順に照合します。適切なドメイン条件があれば、GeoSiteによってドメイン段階でポリシーを決定できます。先行するドメインルールに一致しなければ、カーネルが接続先を解決してからGeoIPルールで判定する場合もあります。実際の動作は、DNSモード、スニッフィング、ルール順序、no-resolve の有無にも左右されます。

接続先IPの分類

GEOIP

接続先IPが属する集合を基に照合し、地域別の振り分けや最終段階でのネットワーク分類に使います。

接続先ドメインの分類

GEOSITE

ドメインのカテゴリを基に接続を照合し、サイト、サービス種別、複合カテゴリなどのルール集合を表現できます。

GeoIPは、IPへ直接接続するリクエストを処理でき、ドメイン解決後のアドレスも対象にできます。ただし、クラウドサービスやコンテンツ配信ネットワークでは、同じサイトが異なる地域のノードを使うことがあります。また、IPの登録地が必ずしもサービスの実際の所在を示すとは限りません。そのためGeoIPは振り分け条件の一つとして使い、サイトの識別を単独で任せるべきではありません。

GeoSiteの分類は、「このドメインはどのサービスカテゴリに属するか」という判断に近いものです。たとえば一つの集合に、メインドメイン、APIドメイン、静的リソース用ドメイン、コンテンツ配信用ドメインを含められます。単一の DOMAIN-SUFFIX よりも網羅的になりやすい一方、分類結果はデータベースのメンテナンス方針に依存します。新しいドメインを対象にするには、データベースを更新してクライアントに再読み込みさせる必要があります。

Clash GeoIP・GeoSiteのルール記述

ルールは設定ファイルの rules セクションに記述し、上から順に照合します。ルールに一致すると、接続はそのルールが指定するプロキシグループまたは組み込みアクションに渡され、後続のルールでは処理されません。そのため、具体的なドメイン分類は広範囲を対象とする地域IPルールより前に置き、最後に MATCH で未一致のトラフィックを処理する構成が一般的です。

rules:
  - GEOSITE,category-ads-all,REJECT
  - GEOSITE,cn,DIRECT
  - GEOIP,CN,DIRECT
  - MATCH,ノード選択

1項目目はルール種別、2項目目はデータベース内の分類コード、3項目目はポリシー名またはアクションです。上の例では、まず広告ドメインの分類を処理し、次に一般的な中国本土のドメインを直接接続させ、その後GeoIPで先に一致しなかった中国本土の接続先IPを処理します。最後に、残りの接続を「ノード選択」というポリシーグループへ渡します。設定内のポリシー名は、proxy-groups に定義した名前と大文字・小文字、空白、句読点を含めて完全に一致させてください。

no-resolve はいつ使うのか

GeoIPルールには no-resolve パラメータを追加できます。一般的な記述例は次のとおりです。

rules:
  - GEOIP,CN,DIRECT,no-resolve
  - MATCH,ノード選択

no-resolve は、このルールを実行するためにドメインを自動でIPへ解決しないことを示します。現在の接続に接続先IPが含まれていれば、GeoIPによる照合は可能です。一方、ドメインしかなく、判定に使えるアドレスをそれまでに取得できていない場合、このルールはスキップされます。余分なDNSクエリを抑えたり、特定の解決経路を避けたりするのに適していますが、ドメインだけのリクエストに対するGeoIPの適用範囲は狭くなります。

このパラメータを追加するかどうかは、既存の設定だけを見て決めないでください。Fake-IP、Redir-Host、TUNモード、ドメインスニッフィングを使う場合、カーネルが取得できる接続情報はそれぞれ異なります。変更後は接続詳細の接続先ホスト、ルール種別、最終一致項目を確認し、実際のトラフィックが想定どおり振り分けられているか確かめます。

データベースファイル、カーネルのバージョン、互換性の境界

カーネルの系統やクライアントによって、使用する地理データファイルは完全には同じではありません。一般的なファイルには、IP判定に使う Country.mmdb などのGeoIPデータファイルと、ドメイン分類に使う GeoSite.dat があります。Mihomoでは、地理データの読み込みモード、自動更新間隔、データURLなども設定できます。具体的なファイル名、既定のディレクトリ、利用可能な項目は、カーネルのバージョンとクライアントのドキュメントを確認してください。

従来のClashカーネル、Clash Metaの後継系統であるMihomo、Mihomoを統合したGUIクライアントでは、対応範囲に違いがあります。ある設定が GEOIP を認識できても、同じ GEOSITE 分類、ローダーオプション、新形式のデータベースまで対応しているとは限りません。「ルール種別がサポートされていません」と表示されたら、まずクライアントの画面名ではなく、実際に使われているカーネルを確認します。

実際のカーネルとデータディレクトリを確認する

  1. クライアントの概要、カーネル設定、またはログ画面で、カーネル名とバージョンを確認します。
  2. インストーラーのある場所ではなく、クライアントの設定ディレクトリを確認します。ポータブル版とシステムインストール版では場所が異なる場合があります。
  3. 起動ログで GeoIPGeoSitemmdbgeodata を検索し、カーネルが最終的にどのファイルを読み込んだか確認します。
  4. クライアントに「地理データを更新」機能がある場合は、更新完了後のファイル更新日時と次回起動時のログを記録します。

ルールプロバイダーと地理データベースを混同しないでください。rule-providers は通常、独立したルール集合を読み込み、RULE-SET で参照します。一方、GeoIPとGeoSiteは、対応するルール種別に応じてカーネルが地理データを検索します。両者は同じ設定内で併用できますが、更新方法、キャッシュファイル、エラーメッセージは通常異なります。

GeoIP・GeoSiteデータベースの更新手順

データベースの更新は、ファイルを任意のディレクトリへダウンロードするだけでは完了しません。カーネルが読み込むのは、設定で指定された場所またはクライアントが定めたデータディレクトリだけです。更新後のファイルも、設定を再読み込みするかカーネルを再起動して初めて使われます。GUIクライアントに更新ボタンがある場合は、ダウンロード先、一時ファイルの置き換え、カーネルの再読み込みまで処理することが多いため、まずその機能を使うのがおすすめです。

クライアント内蔵の更新機能

  1. まず現在の設定が正常に起動することを確認し、復元用の設定をエクスポートまたはコピーしておきます。
  2. カーネル、設定、データ管理のいずれかの画面を開き、地理データの更新機能を探します。
  3. GeoIPとGeoSiteの両方のデータが完了するまで待ち、書き込み中にクライアントを強制終了しないでください。
  4. 設定を再読み込みするかカーネルを再起動し、データベースの読み込み成功を示すログが出るか確認します。
  5. 接続一覧で、既知のドメイン1件と既知の地域に属するIP1件について、一致したルールを確認します。

データベースを手動で置き換える

クライアントに更新機能がない場合、またはデータのバージョンを固定したい場合に限り、手動での置き換えを推奨します。作業前にカーネルを完全に停止し、旧ファイル名、ディレクトリ、設定からの参照先を確認してから、同じ用途の新しいファイルへ置き換えます。拡張子だけで互換性を判断しないでください。MMDB、DATなどのコンパクトなルール形式はデータ構造が異なるため、現在のカーネルの読み込み方式に対応している必要があります。

クライアントで自動更新を有効にしている場合は、更新間隔とデータソースの設定も確認します。自動更新が成功しても、ファイルの取得と保存が完了しただけで、実際に反映されたかどうかは後続の読み込みログで確認する必要があります。長時間のスリープ、クライアントの停止、システム時刻の異常、ネットワークポリシーによる更新先への接続阻止などで、定期タスクが想定どおり実行されないことがあります。

更新頻度の決め方

地理データを接続のたびに更新する必要はありません。一般的な個人設定なら、クライアントの既定の更新間隔で十分です。ルールプロジェクトの変更が多い場合や、最近追加されたドメインを分類できない場合は、手動で一度更新するとよいでしょう。企業ネットワークや固定環境では、分類変更によって多数の接続先ポリシーが変わらないよう、まず新しいデータをテストしてください。

データベースのバージョンと設定ルールは、一つの変更記録として管理します。更新後に振り分けが変わった場合、更新日、カーネルバージョン、設定バージョン、該当した分類コードを把握しておくと、原因がデータ内容、ルール順序、カーネルの動作のどこにあるか判断できます。

読み込み失敗とルール不一致の切り分け手順

GeoIPやGeoSiteの問題は、主に「設定を起動できない」「データベースの読み込みでエラーになる」「設定は動くが接続が想定したルールに一致しない」の3種類に分かれます。確認すべき点はそれぞれ異なるため、まずログで種類を特定してから設定を変更します。

1. データベースファイルが見つからない

まずログに表示された完全なパスを確認し、カーネルを実行するアカウントにディレクトリの読み取り権限があるか確かめます。複数のクライアントを併用していると、別のクライアントの設定ディレクトリへファイルを入れてしまいがちです。ファイル名の大文字・小文字も確認してください。大文字・小文字を区別するファイルシステムでは、GeoSite.datgeosite.dat は別ファイルとして扱われる場合があります。

2. 形式が無効、または読み込みに失敗する

これは通常、データファイルとローダーの組み合わせが合っていない、ダウンロードが不完全、またはカーネルのバージョンが形式を認識できないことを示します。旧ファイルに戻して正常に起動できるなら、新しいファイルの提供元の形式と、対象カーネルの要件を確認できます。ルール名を何度も変更しても、基盤となるファイル形式のエラーは解決しません。ルールの照合段階にまだ到達していないためです。

3. GeoSiteの分類に一致しない

  • 未知のルール種別や分類コードがログに記録されていないか確認します。
  • そのドメインが、現在のデータベースバージョンで対象カテゴリに実際に収録されているか確認します。
  • 前方に DOMAINDOMAIN-SUFFIXRULE-SET、または別のGeoSiteルールがあり、先に一致していないか確認します。
  • 接続詳細に接続先ドメインが保持されているか確認します。IP情報しかない場合、ドメイン分類による判定はできません。
  • 画面上ではYAMLが保存済みでも、実行中のカーネルが古い設定を使っている可能性があるため、設定を再読み込みします。

4. GeoIPの地域判定が想定と異なる

まず接続詳細に表示されているのが最終的な接続先IPであり、ローカルのFake-IP、プロキシノードのアドレス、DNSサーバーのアドレスではないことを確認します。コンテンツ配信ネットワークは同じサービスを異なる地域へ振り分けることがあり、データベース上のネットワーク帰属と実際のデータセンター所在地が異なる場合もあります。特定のサービスを安定して指定ポリシーへ振り分ける必要があるなら、明確なドメインルールや管理しやすいルールセットを優先し、GeoIPは後段のフォールバックとして使います。

5. TUNモードで結果が変わる

TUNモードでは、システムプロキシ設定に従わないトラフィックもより多く取り込めるため、接続数、プロトコル種別、確認できる接続先が変化します。TUNを有効にして一致結果が変わっても、データベースが壊れたとは限りません。DNSハイジャック、Fake-IPの範囲、ドメインスニッフィング、ルーティングの除外設定も併せて確認してください。同じ接続先について、通常のシステムプロキシとTUNモードで接続詳細を記録し、ドメイン、IP、適用ルールを比較します。

更新後の検証方法

クライアントに「更新完了」と表示されたかどうかだけでは検証になりません。完全な確認では、ファイルの読み込み、ルールの解析、実際の接続の一致という3段階を確認します。まず起動ログで、現在のカーネルがデータベースを読み込んだことを確認します。次に設定の解析結果を確認し、GeoIP、GeoSiteの分類、ポリシーグループ名が有効であることを確かめます。最後にテスト通信を発生させ、接続一覧で最終ルールとポリシーを確認します。

比較用に、いくつかの種類の接続先を選びます。明確なGeoSite分類で処理されるドメイン、IPへ直接アクセスする接続、特定の分類には一致しない一般的なドメインなどです。テスト中はブラウザのプロキシ拡張機能とセキュアDNSを一時的に無効にし、別経路による影響を減らします。端末でテストする場合は、HTTP_PROXYHTTPS_PROXYALL_PROXY が設定されていないかも確認してください。これらの環境変数によって、リクエストがClashへ入る経路が変わります。

ルールの結果が想定と異なる場合は、設定のコピー上で対象ルールを一時的に前方へ移動します。移動後に一致するなら、原因はおそらく順序または上書き関係です。それでも一致しない場合は、分類内容、接続先情報、データベースの読み込みを確認します。切り分けが終わったら適切な順序へ戻し、単一ドメインのために広範囲のルールを長期間最優先に置かないようにします。

GeoIPとGeoSiteを安定して使うには、4つの条件が必要です。カーネルが該当するルール種別に対応していること、データベース形式と読み込み方式が一致していること、ルール順序が目的の振り分けに合っていること、更新後のデータが実行中のカーネルに再読み込みされていることです。この4層を順に確認するほうが、データベースを何度も交換したり設定一式をコピーしたりするより、原因を見つけやすくなります。

Clash をダウンロード