Clash GeoIP・GeoSiteデータベースの更新方法|データの入手先、自動更新、ルール設定
GeoIP・GeoSiteデータの入手先と用途、mihomoの自動更新設定、手動でのファイル差し替え方法、GEOSITEルールの書き方を解説します。
1. GeoIP・GeoSite・ルールセットの違い
Clashの設定で地域別に通信を振り分ける際、クライアントがその場でサイトの国を判定するわけではありません。通常は、コアが読み込んだデータファイルを使います。GeoIPは接続先IPアドレスから地域やカテゴリを判定し、GeoSiteはドメインからサイトのカテゴリを判定します。更新対象が異なるため、一方のファイルで他方を代用することはできません。
この記事の設定例は、旧Clash.Metaから発展したコアであるmihomoを対象としています。利用前にクライアントの「バージョン情報」やコア情報の画面で、実際に使用中のコア名とバージョンを確認してください。画面にClashと表示されていても、この記事の設定項目すべてに対応しているとは限りません。旧バージョンのClashコアにmihomo用のGeoSite設定や自動更新設定をそのまま適用しないでください。
| データの種類 | 照合対象 | 主なファイル・設定 |
|---|---|---|
| GeoIP(MMDB形式) | IPv4・IPv6アドレスの地域情報 | Country.mmdb;geodata-mode: false |
| GeoIP(DAT形式) | IPアドレスに対応する地域またはデータソースの分類 | geoip.dat;geodata-mode: true |
| GeoSite | ドメインの集合(例:cn、geolocation-!cn) | geosite.dat(GEOSITEルールで使用) |
| ルールプロバイダー | 使用するルールセットによる | rule-providersとRULE-SET(個別に更新) |
データベースを更新しても振り分けルールは変わらない
データベースは「このドメインやIPがどの集合に属するか」を判定し、ルールは「一致した通信をどこへ送るか」を決めます。たとえばGEOSITE,cn,DIRECTでは、cnがデータベースの集合、DIRECTがルールで指定された出力先です。データを更新すると集合の内容は変わることがありますが、DIRECTが自動的にプロキシへ切り替わったり、ルールの順序が変わったりすることはありません。
2. データの入手先とファイル形式の選び方
主なデータの入手先には、コミュニティが管理するドメイン分類プロジェクトや地域別IPデータプロジェクト、それらの上流データを整理・ビルドして公開するリポジトリがあります。たとえばMetaCubeX/meta-rules-datでは、mihomoで利用できる複数の形式が配布されています。「入手先」は、ダウンロードファイルを配布するリポジトリと、分類内容を決める上流プロジェクトに分けて考えましょう。両者の更新頻度は異なる場合があります。
- まず形式を確認:DATモードでは
geoipのURLを、MMDBモードではmmdbのURLを設定します。ファイル名を変更しても形式は変換されません。 - 次にカテゴリ名を確認:
cnなどのタグが、データソースに実際に含まれている必要があります。サイト、広告、サービスの分類はデータソースによって異なり、同じカテゴリが必ずそろっているとは限りません。 - 信頼できる入手先を固定:リポジトリ、配布元、ダウンロード日を記録しておきましょう。更新に失敗するたびに、出所の不明なミラーへ安易に切り替えるのは避けてください。
- 配布形式を区別:Webページ、圧縮ファイル、YAML形式のルールセット、MRS形式のルールセット、DATデータベースは用途が異なり、相互に置き換えることはできません。
geolocation-!cnはデータセットで定義されたドメインカテゴリであり、コアが実行時にすべてのドメインを調べて「中国以外」と判定するものではありません。未分類のドメインが含まれない場合もあります。同様に、GeoIPの国・地域情報はIPデータ上の帰属先を示すもので、サイト運営者の所在地、コンテンツの言語、実際の通信経路を保証するものではありません。
3. mihomoの自動更新設定
以下はDATモードで、自動更新間隔を24時間に設定する例です。各項目はYAMLの最上位に置き、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"
mmdb: "https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/country.mmdb"
geo-auto-updateはコアの地理データ自動更新を有効にする設定です。geo-update-intervalの単位は秒ではなく時間です。上の例にあるmmdbのURLは形式を切り替える場合に使うもので、DATモードで2種類のGeoIPデータを同時に使うという意味ではありません。実際のダウンロード動作は、コアのバージョン、有効な機能、クライアントの管理方法にも左右されるため、実行ログで確認してください。
MMDBモードを維持する場合の変更方法
既存設定でCountry.mmdbを問題なく使えている場合は、上の例の1行目をgeodata-mode: falseに変更し、geox-url.mmdbをそのまま使えます。データベースの更新だけを目的に、データ形式を切り替える必要はありません。形式を切り替えた場合も、対応するファイルが存在することを確認し、既存のGeoIPカテゴリが利用できるか再確認してください。
サブスクリプション更新後も設定を維持する
- 現在有効な設定をバックアップし、元の更新関連フィールド3つを記録します。
- クライアントのオーバーライド、マージ、拡張設定のいずれかの機能から、最上位の設定を追加します。メニュー名はクライアントごとに異なります。設定例を「ノードのサブスクリプションURL」欄に貼り付けないでください。
- 設定を再読み込みし、コアの起動ログに未知のフィールド、ダウンロード失敗、データ解析エラーが出ていないか確認します。
- クライアントに表示される実行中の設定を開き、サブスクリプションのテンプレートに設定が上書きされていないことを確認します。次回のサブスクリプション更新後にも再度確認してください。
4. データベースの手動差し替えと作業ディレクトリ
手動更新で最も間違いやすいのは、ダウンロードそのものではなく、対象ディレクトリの特定です。サブスクリプション設定の保存先、GUIアプリのインストール先、コアの作業ディレクトリは、それぞれ異なる場合があります。起動引数やログに記載されたディレクトリ情報、クライアントのデータディレクトリを確認してください。同じ名前のファイルを見つけただけで、実際に使用中だと判断してはいけません。
起動引数で実際のパスを確認する
単独でmihomoを実行する場合、-dで作業ディレクトリを明示的に指定できます。以下は独自に構成した環境の例であり、すべてのデスクトップクライアントで使われる既定パスではありません。
# Linux:作業ディレクトリは /home/lin/.config/mihomo
mihomo -d /home/lin/.config/mihomo
# Windows PowerShell:作業ディレクトリは C:\mihomo\data
.\mihomo.exe -d C:\mihomo\data
上記のLinux環境では、一般的な配置先は/home/lin/.config/mihomo/geoip.dat、/home/lin/.config/mihomo/geosite.datです。MMDBモードでは/home/lin/.config/mihomo/Country.mmdbを使います。既存設定やクライアントで別の保存先が指定されている場合は、実際の設定に従ってください。Linuxではファイル名の大文字・小文字が区別されるため、ダウンロードしたcountry.mmdbとコアが使用するCountry.mmdbの名前を合わせる必要があります。
差し替えの手順
- 現在の状態を記録:有効な設定、データソースのURL、ファイルの更新日時、現在の動作確認結果を保存します。
- 一時フォルダにファイルをすべてダウンロード:使用中のファイルへ直接上書きしないでください。ダウンロードしたものが配布ファイルであり、エラーページやリポジトリ上のファイルプレビューではないことを確認します。
- コアを停止:デスクトップクライアントではサービス停止または終了の操作を行い、コンテナ環境では該当するコンテナを停止します。設定画面を閉じただけでは、バックグラウンドのコアは停止しないことがあります。
- バックアップして差し替え:元のファイルを
geosite.dat.bakなどの名前で保存してから、新しいファイルを配置します。Linuxではサービス実行ユーザーに作業ディレクトリの読み取り権限が必要です。自動更新を使う場合は書き込み権限も必要になります。 - 再起動して確認:ファイルの読み込みログとルールのマッチ状況を確認します。コアがデータをキャッシュする場合があるため、ディスク上のファイルを差し替えただけでは実行中のデータがすぐに更新されるとは限りません。
コンテナ環境では、ホスト側のディレクトリとコンテナ内の作業ディレクトリのマウント先も確認してください。コンテナにマウントされていないホスト側の同名ファイルを差し替えても、コンテナ内のデータは変わりません。更新後に解析エラーが出た場合は、コアを停止してバックアップを戻し、再起動してから、新しいファイルの入手先と形式を確認してください。
5. GEOSITE・GEOIPルールの書き方
以下のルール例では、既存の設定に 代理出口 という利用可能なプロキシグループが定義されているものとします。貼り付ける前に、この名前を実際のプロキシグループ名に置き換えてください。ルールは上から順に評価され、先に一致したルールが適用されると、それより下のルールは評価されません。
rules:
- GEOSITE,cn,DIRECT
- GEOSITE,geolocation-!cn,プロキシ出口
- GEOIP,CN,DIRECT,no-resolve
- MATCH,プロキシ出口
GEOSITE,cn,DIRECT:ドメインがデータベース内のcnに属する場合、直接接続します。GEOSITE,geolocation-!cn,プロキシ出口:データソース内のこのカテゴリに含まれるドメインを照合し、指定したポリシーグループへ送ります。GEOIP,CN,DIRECT,no-resolve:中国のIPアドレスを照合します。no-resolveは、このルールの照合のために追加のドメイン解決を行わないという意味で、クライアント全体のDNSを無効にする設定ではありません。MATCH,プロキシ出口:それ以前のルールに一致しなかった通信を処理します。照合対象にしたいルールの後に配置してください。
未解決のドメインに対してGeoIPがIPアドレスを取得してから判定するようにしたい場合は、必要に応じてno-resolveを削除できます。ただし、DNS問い合わせの動作と照合の流れが変わります。設定を残す場合、ドメイン接続がこのIPルールに一致するかどうかは、判定時点でコアが照合可能な接続先IPを取得しているかによります。
データベース全体ではなく、対象ドメインだけを調整する
一部の業務用ドメインの接続先を固定したい場合は、汎用カテゴリのルールより前にDOMAINまたはDOMAIN-SUFFIXルールを追加できます。データソース全体を入れ替えるよりも、変更内容を追跡しやすくなります。設定でDOMAIN-SUFFIXルールをGeoSiteルールより先に置けば、前者が優先されます。GeoSiteを更新しても、この優先順位は変わりません。
また、rule-providersのinterval: 86400は通常、ルールプロバイダーを86400秒ごとに更新する設定です。地理データベースのgeo-update-interval: 24とは別のフィールドで、単位も異なります。ルールセットの更新に成功しても、GeoSiteデータが更新されたとは限りません。
6. 更新失敗・ルール不一致の確認手順
| 症状 | まず確認する項目 | 対処方法 |
|---|---|---|
| ダウンロードがタイムアウトする、またはTLS接続に失敗する | システム時刻、DNS、配布元への接続可否 | 現在利用できる接続から同じダウンロード先にアクセスし、必要に応じて手動でファイルを取得します。 |
| 更新時に権限不足と表示される | コアの実行ユーザーとディレクトリの書き込み権限 | 実際の作業ディレクトリの権限を修正し、サービスデータを書き込みできない場所に置かないようにします。 |
| データ解析エラーが発生する | ファイル形式、ダウンロードの完了状況、Webページを誤って保存していないか | 元のファイルに戻し、モードに合った配布ファイルを再ダウンロードします。 |
| カテゴリが存在しないと表示される | ルールのタグとデータソースに含まれるカテゴリ | タグのつづりとデータソースの説明を確認し、実在するカテゴリか明示的なドメインルールを使います。 |
| 更新は成功したが、出口が変わらない | 現在のモード、ルールの順序、既存接続、実際に読み込まれたファイル | ルールモードに切り替え、対象の既存接続を閉じてから再試行し、適用されたルールを確認します。 |
新しい接続で結果を確認する
- 現在のモードがルールモードであることを確認してください。グローバルモードや直接接続モードでは、上記の振り分けルールと同じ結果になりません。
- 確認したいドメインを1つ選び、クライアントの接続一覧で新しい接続を特定します。接続先ドメイン、適用されたルール、出力先のポリシーグループを記録してください。
- 更新後、そのサイトへの既存接続を閉じてからリクエストを再送します。確立済みのTCP接続やQUIC接続は、データベースを更新しても自動的に経路が再選択されるとは限りません。
- アプリがIPアドレスへ直接接続している場合や、コアがドメイン情報を取得できていない場合は、まずDNS、スニッフィング、アプリの接続方法を確認してください。GeoSiteにはドメイン情報が必要なため、ファイルを更新するだけでは不足している情報を補えません。
TUNモードは、一部の通信をどのようにコアへ取り込むかを決めるもので、GeoIPやGeoSiteを更新する機能ではありません。システムプロキシとTUNでは通信の取り込み範囲が異なるため、各モードで表示される接続も変わることがあります。切り分け時は一度に変更する条件を1つに絞り、通信の取り込み方法とDNS設定を保ったまま、データベース更新前後のルール適用を比較してください。ネットワークの取り込み方の変化を、データ更新の効果と誤認しないようにしましょう。