GeoIPとGeoSite:IPアドレスとドメインによる振り分け

mihomoはプロキシ接続の確立、DNSの名前解決、ルールの適用を担うコアです。Clash Verge Revなどのデスクトップクライアントは、画面を提供しコアを管理します。この記事の設定はmihomo向けです。これらの項目に対応していない旧版Clashコアには、そのまま適用できません。

GEOIPとGEOSITEはどちらもルールタイプですが、参照する対象が異なります。GeoIPはIPアドレスの範囲を国・地域などのデータセットに分類し、GeoSiteはドメインをサイト・サービス・カテゴリごとに分類します。どちらも外部で管理されるデータファイルに依存しており、コアがオンラインの地理情報サービスをリアルタイムで照会するわけではありません。

比較項目GeoIPGeoSite
マッチ対象接続先のIPアドレスコアが認識している接続先ドメイン
代表的なルールGEOIP,CN,DIRECTGEOSITE,cn,DIRECT
代表的なファイルgeoip.datまたはcountry.mmdbgeosite.dat
主な制約IPアドレスの所在地だけでは、利用サービスを特定できない新しいドメインが分類に含まれない場合があり、IPアドレスへの直接接続も自動ではカバーできない

たとえば、あるサービスが複数地域のCDNにコンテンツを配置している場合があります。サーバーのIPアドレスの所在地だけでは、サービスの種類を特定できないことがあります。まずGeoSiteでドメインを判定し、残りの接続をGeoIPで補うと、振り分けの意図を表現しやすくなります。GeoIPの判定結果は物理的な所在地の証明にはなりません。データの更新頻度やIPアドレス範囲の割り当て変更によっても結果は変わります。

データの入手先とファイル形式:まず読み込み方式を確認

データは通常、コミュニティプロジェクトが整理・公開しています。代表的な入手先にはMetaCubeXのmeta-rules-datのほか、ドメインやIPアドレスの分類を管理するプロジェクトがあります。同じgeosite.datというファイル名でも、公開元によって収録カテゴリや更新頻度、内容が異なる場合があります。ルールで指定するcnやgoogleなどのカテゴリ名が、使用中のデータセットに実際に存在することを確認してください。

geodata-modeでGeoIPの形式を選択

  • geodata-mode: true:GeoIPにはDAT形式を使用し、geox-url.geoipで指定したデータソースを読み込みます。
  • geodata-mode: false:GeoIPにはMMDB形式を使用し、geox-url.mmdbで指定したデータソースを読み込みます。
  • GEOSITEはgeosite.datを使用します。GeoIPをMMDB形式に切り替えても、自動的に無効にはなりません。

拡張子を変えてもファイル形式は変換されません。MMDBファイルの名前をgeoip.datに変えても、DAT形式のローダーでは読み込めません。同様に、ルールセット用のYAML・テキスト・MRSファイルを、データベースのURLとしてgeox-url.geositeに指定することもできません。

自動更新の設定:geox-urlと更新間隔

ここではDATモードを使い、MetaCubeXが公開するファイルをデータソースにします。例に記載したURLはデータベースの入手先であり、クライアントのインストーラーのURLではありません。各項目は設定のトップレベルに記述し、dnsやrulesと同じ階層に置きます。特定のプロキシグループやDNS設定の中にインデントしないでください。

geodata-mode: true
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"
  • geo-auto-update: true:コアのGeoデータ自動更新を有効にします。
  • geo-update-interval: 24:更新間隔は24時間です。24秒ではありません。
  • geox-url.geoip:DATモードで使用するGeoIPデータの入手先です。
  • geox-url.geosite:GEOSITEルールで使用するGeoSiteデータの入手先です。

この例では、実際に使用する2種類のファイルだけを設定しています。既存の設定でMMDBを使用している場合は、geodata-mode: falseを維持し、適切なgeox-url.mmdbを設定してください。ダウンロード先だけ変更して、読み込み方式の切り替えを忘れないようにしましょう。また、更新間隔が24時間でも、24時間ごとに必ずデータが変わるとは限りません。上流で新しいデータが公開されていない、ダウンロードに失敗した、コアが継続して動作していない場合などは、更新結果が異なります。

Clash Verge Revで設定を永続化する

  1. 「プロファイル」を開き、現在有効なサブスクリプション設定を確認します。
  2. クライアントのマージ設定またはオーバーライド機能を使って、上記の項目をトップレベルに追加します。編集画面の名称はバージョンによって異なる場合があるため、最終的に適用される設定で反映状況を確認してください。
  3. 設定を再読み込みします。更新タスクやデータベースの状態が想定どおり変わらない場合は、コアを再起動して起動ログを確認してください。
  4. 適用中の設定でgeox-urlが明確に1組だけ設定されていることと、geo-auto-updateがtrueのままであることを確認します。

サブスクリプションからダウンロードしたファイルを直接編集すると、次回の更新時に変更が上書きされることがあります。オーバーライドではリストのマージ方法にも注意してください。操作によっては、既存リストへの追加ではなくrules全体の置き換えになります。編集前に設定をバックアップし、クライアントで適用されるマージ順を確認しましょう。

GEOIP・GEOSITEルールと適用順

以下は、具体的なドメイン、ドメインカテゴリ、IPカテゴリ、最後にフォールバックの順で処理する一般的な例です。例の「プロキシ選択」は、既存の設定で定義済みのプロキシグループ名に置き換えてください。実際の名前が異なる場合は、合わせて変更します。これはルール部分だけの例であり、プロキシノード、DNS、待ち受けポートを含む完全な設定ではありません。

rules:
  - DOMAIN-SUFFIX,example.com,DIRECT
  - GEOSITE,google,プロキシ選択
  - GEOSITE,cn,DIRECT
  - GEOIP,CN,DIRECT,no-resolve
  - MATCH,プロキシ選択

mihomoの通常ルールはリストの上から順に評価され、最初に一致したルールのポリシーが適用されます。そのため、先に記述した明示的なドメインルールは後続のカテゴリルールより優先されます。フォールバック用のMATCHは最後に配置してください。先頭にMATCHを置くと、後続のGeoルールでは接続先を振り分けられません。

GEOSITEのカテゴリ名は共通の固定辞書ではない

GEOSITE,google,プロキシ選択は、現在のデータベースにあるgoogleカテゴリを使うという意味です。コアが「google」という単語を含むドメインをすべて自動収集するわけではありません。GeoSiteのデータソースを変更したら、使用するカテゴリが引き続き存在するか確認してください。カテゴリが見つからないという読み込みエラーが出た場合は、ルールを修正するか互換性のあるデータソースに切り替えます。プロキシノードを何度も切り替えても解決しません。

GeoSiteで判定するには、コアがドメインを認識している必要があります。アプリがIPアドレスへ直接接続する場合や、通信を取り込む経路でドメインが保持・復元されない場合、接続先IPだけを使ってサイトカテゴリに一致させることはできません。TUNモードで拡張されるのは取り込む通信の範囲であり、すべての接続にGeoSiteが判定できるドメインが付くわけではありません。

no-resolve:ルール判定のための名前解決を抑制

GEOIP,CN,DIRECT,no-resolveのno-resolveはルールのパラメーターです。このIPルールを評価する際、IPアドレスの所属を判定するためだけに、接続先ドメインをIPアドレスへ積極的に名前解決しないようコアに指示します。DNSを全体的に無効にする設定ではなく、アプリやプロキシ接続、先行するルールによる名前解決を防ぐものでもありません。

接続の状態no-resolveありno-resolveなし
接続先の実IPアドレスがすでに利用可能既存のIPアドレスで所属を判定所属を判定できる
ドメインのみで、利用可能な実IPアドレスがないこのルールのための名前解決は行わず、後続ルールへ進む名前解決が行われる場合があり、その後に所属を判定
先行するドメインルールに一致済みこのルールには到達しないこのルールには到達しない

不要なローカル名前解決を減らしたい場合は、まずGeoSiteで主なドメインをカバーし、GeoIPの補助ルールにno-resolveを付けます。ただし、ドメインルールに一致せず、接続先の実IPアドレスもない通信は、後続のMATCHに進む可能性があります。これはルール設計による結果であり、すぐにGeoIPデータの破損と判断する必要はありません。

残りのドメインを先に名前解決してから、IPアドレスの地域に応じて直接接続するか決めたい場合は、GEOIP,CN,DIRECTを使えます。その際はDNSの名前解決経路、上流への接続性、プライバシー上の要件もあわせて確認してください。fake-ipモードでは、仮想アドレスと実際の接続先アドレスを区別することが特に重要です。表示されたfake-ipを、GeoIPで照会するパブリックIPアドレスと誤認しないようにしてください。

更新と振り分けを検証:設定・ファイル・接続を個別に確認

検証は3段階に分けて行います。設定の読み込みに成功しただけでは、項目や必要なリソースのチェックを通過したことしか分かりません。データベースのダウンロード成功が示すのも、リソースを取得できたことだけです。実際の接続が想定したルールに一致して初めて、振り分けが目的どおりに動いたと確認できます。クライアントのスイッチやWebページが開けるかどうかだけで判断しないでください。

第1段階:コアのバージョンと設定構文を確認

mihomoを単独で起動する場合は、以下のコマンドを使えます。データディレクトリと設定ファイルのパスは、実際に使用している場所を指定してください。異なる場所を指定すると、別のファイルをテストすることになります。デスクトップクライアントには通常、専用の作業ディレクトリがあります。コアの動作中に、別プロセスから同じディレクトリを書き換えないでください。

mihomo -v
mihomo -t -d ./mihomo-data -f ./config.yaml

-vで実際に実行されているコアのバージョンを確認し、-tで設定をテストできます。未対応の項目やリソースの読み込みエラーが表示された場合は、まず使用中のコアが該当設定に対応したmihomoか確認し、YAMLのインデントとデータソースを調べてください。クライアント名だけからコアの対応状況を判断しないようにしましょう。

第2段階:ダウンロードログと実際の作業ディレクトリを確認

  • クライアントの「ログ」画面で、Geoデータの読み込み・ダウンロード・更新に関する記録を探し、タイムアウト、HTTPステータス、解析エラーを確認します。
  • コアが実際に使用している作業ディレクトリでgeoip.datとgeosite.datを確認します。MMDBモードの場合は、対応するMMDBファイルを確認してください。サブスクリプションファイルの保存先を見るだけでは不十分です。
  • 更新前後のファイル更新日時、ファイルサイズ、エラーログを記録します。更新日時の変化は参考になりますが、カテゴリの内容が変わったことを単独で証明するものではありません。

第3段階:新しい接続でルールへの一致を確認

  1. クライアントを「ルール」モードに切り替えます。全体モードや直接接続モードでは、この振り分けルールの検証に適しません。
  2. 対象アプリの既存接続を終了するか、「接続」画面で該当する接続を閉じてから、テスト用ドメインに再アクセスします。
  3. 新しい接続の接続先ドメイン、接続先IPアドレス、一致したルール、ポリシーチェーンを確認し、GEOSITE、GEOIP、MATCHのどれに一致したかを調べます。
  4. 設定は一度に1項目だけ変更し、再読み込み後に同じテストを繰り返して結果を記録してください。

データベースを更新しても、既存の接続で経路が自動的に選び直されることはありません。ブラウザーがHTTP/2やHTTP/3の接続を再利用することもあるため、ページを再読み込みしても新しい接続が作られるとは限りません。システムプロキシとTUNを同時に有効にしている場合は、まずテスト対象アプリの通信が現在のコアに届いているか確認してから、ルールの問題を判断してください。

よくあるトラブル:ダウンロード失敗・カテゴリ不足・ルール不一致

データベースのURLはブラウザーで開けるのに、コアのダウンロードに失敗する

ブラウザーはプロキシを使っている一方、コアのリソース取得経路、DNSの状態、起動時に利用できるポリシーは異なる場合があります。両者を同じ条件と考えないでください。まずログで実際のダウンロードURLと失敗した段階を確認します。接続タイムアウトならネットワーク経路、HTTP 404なら公開URLを優先して調べます。解析エラーの場合は、HTML形式のエラーページや誤った形式のファイルをダウンロードしていないか確認してください。

初回起動時にデータベースがないと、依存関係が循環する場合があります。ルールの読み込みにはデータベースが必要ですが、データベースのダウンロードには、まだ利用できないプロキシ経路が必要になるケースです。接続可能なネットワークで該当ファイルを取得し、実際の作業ディレクトリに配置してからコアを起動できます。ファイルを手動で配置した場合も、今後の更新に備えて正しい入手先の設定を残してください。

更新は成功したのに、GeoSiteカテゴリが見つからないと表示される

多くの場合、ルール名とデータソースが一致していません。まずデータ公開プロジェクトのカテゴリ一覧を確認し、次にルールのスペルとカテゴリ属性を調べてください。特定のサブスクリプション固有のカテゴリ名が、すべてのデータベースにある標準名だとは限りません。拡張子を変えても解決しません。

日本国内のサイトへのアクセスがMATCHに一致する

次の順に確認します。対象ドメインが現在のGeoSiteカテゴリに収録されているか、先行する別のルールに一致していないか、接続先がドメインのみでGeoIPにno-resolveが付いていないか、最終的に適用される設定がサブスクリプション更新で上書きされていないかを調べてください。データベースに該当データがないと確認できた場合に限り、対象範囲を明確にしたDOMAINまたはDOMAIN-SUFFIXルールの追加を検討します。

基本用語を確認したい場合は用語集をご覧ください。DNS・ルール・コアの連携については設定ガイドを参照してください。トラブルの切り分けでは、元の設定とログを残しておくと、データベース・プロキシノード・DNSを同時に変更するより原因を特定しやすくなります。