1. GeoIP・GeoSiteとサブスクリプション更新の違い
GeoIPとGeoSiteは、振り分けルールが参照するデータであり、プロキシノードではありません。サブスクリプションを更新すると、通常はノードやグループ、設定全体が取得されます。一方、地理データベースの更新では、ルールが照合するIPアドレス範囲やドメインの一覧が更新されます。管理の仕組みは別々なので、「サブスクリプションを更新」を実行しただけでは、データベースも更新されたとは限りません。
| データの種類 | 照合対象 | 主な形式と用途 |
|---|---|---|
| GeoIP | 接続先IPアドレス | DATまたはMMDB。GEOIP,CN,DIRECTなどのルールでIPアドレスの割り当て地域を調べます。 |
| GeoSite | 接続先ドメイン | DAT。GEOSITE,cn,DIRECTなどのルールでドメインのカテゴリを調べます。 |
| ルールプロバイダー | ルールの動作タイプによる | rule-providersで定義し、RULE-SETから参照します。更新間隔は個別に設定できます。 |
GeoIPによる国・地域の分類は、ウェブサイトの運営主体の所在地と同じとは限らず、ユーザーがアクセスした際の実際のサービス提供場所を示すものでもありません。CDNや複数地域へのサーバー配置、データソースの収録状況によって、「ドメインは直接接続したい」という意図と「名前解決されたIPの地域分類」が食い違うことがあります。そのため、通常はドメインルールをIPルールより先に記述します。
2. geodata-modeの役割とデータファイルの保存場所
切り替わるのはGeoIPのデータ形式
mihomoでは、geodata-mode: trueにするとGeoIPにDAT形式を使用し、falseにするとMMDB形式を使用します。この設定は「すべての地理ベースの振り分け」を有効にするスイッチではなく、ルールを作成するものでもありません。GeoSiteを使うには、対応するデータファイルとGEOSITEルールが別途必要です。
geox-url.geoip:GeoIP DATのダウンロード元。geox-url.mmdb:GeoIP MMDBのダウンロード元。geox-url.geosite:GeoSite DATのダウンロード元。geodata-loader:DATデータの読み込み方式。一般的な値はstandardとmemconservativeです。ルールの振り分け先を決める設定ではありません。
データファイルは通常、コアの作業ディレクトリに保存されます。一般的なファイル名はGeoIP.dat、GeoSite.dat、country.mmdbです。クライアントによっては独自の実行ディレクトリを使用するため、インストーラーのあるフォルダーがデータの保存先とは限りません。Linuxでは大文字・小文字の違いがファイルの認識に影響する場合もあります。コアのログ、実際のファイル、クライアントの説明を確認してください。
実行時の引数から場所を特定し、別のファイルを誤って編集しない
- クライアントの設定ディレクトリや作業ディレクトリを開く項目から、データベースファイルを探します。「設定ディレクトリ」と「アプリのログ保存先」は別の場所の場合があります。
- コアの起動引数を確認します。
-dは作業ディレクトリ、-fは設定ファイルを指定します。設定ファイルの保存先が作業ディレクトリとは限りません。 - コアを手動で起動する場合は、
mihomo -d ./mihomo-data -f ./config.yamlのように指定すると、作業ディレクトリを明確にできます。 - コンテナを使用している場合は、ディレクトリのマウント設定を確認してください。コンテナ内の作業ディレクトリと、ホスト側のファイル保存先は異なる場合があります。
変更前に現在の設定と既存のデータベースをバックアップしてください。クライアントにオーバーライド、マージ、拡張設定の仕組みがある場合は、永続化される設定からグローバル項目を追加します。自動生成された実行用設定を直接編集すると、次回のサブスクリプション更新で上書きされることがあります。
3. ダウンロード先と24時間ごとの自動更新を設定する
以下はmihomoの設定ファイルのトップレベルにマージできる例です。データの取得元にはMetaCubeXのmeta-rules-datのリリースを指定しています。geo-update-intervalの単位は時間で、24は1日ごとの更新を意味します。ルールプロバイダーで使う秒単位の間隔とは異なります。
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"
- これらの項目は
rulesやdnsと同じ階層に記述します。proxy-groupsやprofileの下には入れないでください。 - すでに
geox-urlがある場合は、既存のマッピングに項目を追加してください。同じ名前のトップレベルキーを重複して追加しないでください。 geodata-mode: falseに変更した場合は、MMDBの取得元が利用可能か重点的に確認してください。DATだけを更新しても、現在使用中のMMDBの代わりにはなりません。- 自動更新は、設定を保存した直後にダウンロードが始まるという意味ではありません。設定を適用するかコアを再起動した後、更新ログでスケジュールが有効になっているか確認してください。
データの取得元はMetaCubeX/meta-rules-datで確認できます。項目の説明はmihomoの一般設定ドキュメントを参照してください。リリース内容はプロジェクトの更新に伴って変わることがあります。リンク切れの場合はリリースページを確認し、ファイル名だけを頼りに見慣れないダウンロード先へ変更しないでください。
4. GEOIP・GEOSITEルールと適用順序
Clash系のルールは上から順に照合され、最初に一致したルールのポリシーが適用されます。以下の例では、ドメインの分類をIPルールより先に置き、最後にMATCHでそれ以外を処理します。「出站选择」グループを定義していますが、グループ内はDIRECTのみで、設定の構造を示すための例です。実際に使う場合は既存のプロキシノードやポリシーグループを追加してください。この例だけではプロキシ接続として機能しません。
proxy-groups:
- name: 出站选择
type: select
proxies:
- DIRECT
rules:
- GEOSITE,cn,DIRECT
- GEOIP,CN,DIRECT,no-resolve
- MATCH,出站选择
no-resolveはDNSを無効にする設定ではない
GEOIP,CN,DIRECT,no-resolveは、このルールの照合時にドメイン名の名前解決を新たに実行しないことを示します。接続情報に接続先IPがすでに含まれていれば、IPによる照合は行われます。利用可能なIPがない場合は、後続のルールに進むことがあります。このオプションはクライアント全体のDNSを無効にするものではなく、ほかの段階でアプリが名前解決することも妨げません。
照合できるルールは接続情報によって変わる
GeoSiteの照合にはドメイン情報が必要です。アプリがIPアドレスに直接接続する場合や、ドメインとの対応情報が失われた場合、またはトラフィックの取り込み方式が変わった場合は、すべての接続でドメインカテゴリに一致するとは限りません。TUNはトラフィックを取り込む方式であり、GeoSite更新の前提条件ではありません。TUNを有効にしても、すべての接続でドメイン情報が自動的に補完されるわけではありません。fake-ipを使用している場合も、DNSの対応関係によってコアがドメインを復元できるかが変わります。
特定のサイトの接続先を固定したい場合は、カテゴリルールより前に、たとえばDOMAIN-SUFFIX,example.com,DIRECTのような個別ルールを記述できます。これはルールの順序で制御する方法であり、単一ドメインのためにデータベースを作り直す必要はありません。実際の設定では対象ドメインを指定し、接続の詳細画面でルールが一致していることを確認してください。
5. 自動ダウンロードできない場合の手動更新手順
よくある失敗には、ダウンロードのタイムアウト、リダイレクト先への接続失敗、プロキシの通信自体がまだ読み込まれていない設定に依存しているケースがあります。ブラウザーでGitHubのトップページを開けても、コアがリリース添付ファイルをダウンロードできるとは限りません。ブラウザーとコアで、プロキシ設定や通信経路が異なる場合があります。
- エラーを記録:ログに記録されたリソースのURL、エラーの種類、保存先ファイルを控え、接続タイムアウト、HTTPエラー、データ解析失敗を切り分けます。
- 対応するファイルを取得:設定で指定したリリース元からバイナリファイルをダウンロードし、ウェブページやログイン画面、エラーレスポンスを誤って保存していないか確認します。
- コアを停止:クライアントの停止機能を使います。ウィンドウを閉じてもタスクトレイに常駐する場合は、バックグラウンドのコアも明示的に停止し、ファイルが使用中のままにならないようにしてください。
- バックアップして差し替え:元のファイルをバックアップ用ディレクトリに移動し、新しいファイルを確認済みの作業ディレクトリに配置します。ローカルでのファイル名は、コアが要求する名前を使用してください。
- 再起動:データの読み込みログと設定の解析結果を確認します。カテゴリが見つからない、または解析エラーが発生する場合は、まずバックアップを戻し、取得元とファイル形式を確認してください。
MMDBファイルの拡張子をDATに変更して形式を変換しようとしたり、GeoSiteのデータをGeoIP用の場所に置いたりしないでください。拡張子を変えても形式は変換されません。コアが読み込むのはファイル内部のデータ構造です。Linuxやサービスとして実行している場合は、コアの実行ユーザーにディレクトリの読み取り権限があることも確認してください。自動更新を有効にする場合は、書き込み権限も必要です。
6. 更新後、ログと接続情報で照合する
「ファイルの更新日時が変わった」ことから分かるのは、ファイルに書き込みがあったことだけです。「設定が起動できた」からといって、テスト通信が想定したルールに一致したとは限りません。ウェブページを開けるかだけで判断せず、更新処理と実際の振り分けを分けて確認し、それぞれの結果を記録してください。
| 確認項目 | 確認場所 | 判定方法 |
|---|---|---|
| 設定が反映されているか | 実行中の設定、起動ログ | マージ後のトップレベル項目が存在し、コアで設定解析エラーが発生していないことを確認します。 |
| データが読み込まれているか | データベースの読み込み・更新ログ | 現在使用している形式のデータが正常に読み込まれ、ファイル不足やカテゴリのエラーがないことを確認します。 |
| ルールに一致しているか | クライアントの接続詳細 | 接続先ドメイン、接続先IP、ルールタイプ、最終的に適用されたポリシーの経路を確認します。 |
| サブスクリプション更新で設定が上書きされていないか | サブスクリプション更新後の実行設定 | ダウンロード元と自動更新の項目が引き続き保持されているか、もう一度確認します。 |
テストの前に既存の長時間接続を閉じ、新しいリクエストを送信してください。確立済みの接続では、データベースを更新しても通常はルール選択が最初からやり直されません。ブラウザーが接続を再利用していると、結果が変わらないように見える場合があります。一時的にログの詳細度を上げた場合は、調査後に元へ戻してください。ノードの認証情報、サブスクリプションURL、個人のアクセス履歴を含むログ全体を外部に共有しないよう注意してください。
7. よくあるエラーと対処の範囲
「カテゴリが存在しない」またはGeoSiteの読み込みに失敗する
まず、ルールに記述したカテゴリ名が現在のデータソースに含まれているかを確認し、ダウンロードしたファイルがGeoSite DATであることも確かめてください。軽量版のデータソースに切り替えると、一部のカテゴリが削除されている場合があります。何度も再起動するより、互換性のあるデータソースに戻すか、対応しなくなったルールを削除するほうが効果的です。
データベースを更新しても、特定のサイトに誤ったポリシーが適用される
より上位にあるDOMAIN、DOMAIN-SUFFIX、RULE-SETが先に一致していないか確認し、DNSの応答アドレスと接続詳細に表示される接続先IPも照合してください。データベースを更新してもルールの順序は変わらず、DNSキャッシュがすべて消去されるわけでもありません。実際にどのルール経路を通ったかを確認してから、ルールの修正、キャッシュの削除、データソースへの収録依頼のどれが必要か判断します。
rule-providersを使用していても、GeoSiteの更新は必要?
設定で地理データを引き続き参照しているかによります。RULE-SETに対応するルールプロバイダーは、個別に設定したurl、path、intervalに従って更新されます。地理データベースの自動更新で、この仕組みを代用することはできません。設定でGEOSITEやGEOIPを使っている場合、またはDNS設定が関連カテゴリを参照している場合は、該当するデータも引き続き更新してください。