GeoIPとGeoSite:IPデータとドメイン分類の違い
mihomoは地理データを使ってルールに基づく通信の振り分けを行います。GeoIPは接続先IPアドレスから国・地域やデータソースで定義されたアドレス集合を検索し、GeoSiteは接続先ドメインからサービスごとのドメイン分類を検索します。データベースはルールの照合に使う情報を提供し、該当時にどのプロキシを使うかはルールで決まります。データベースを更新しても、ルールの順序が自動で変わるわけではありません。
| データの種類 | 主なファイル | ルールと用途 |
|---|---|---|
| GeoIP DAT | geoip.dat | GEOIP,CN,DIRECT:IPアドレスの集合を検索 |
| GeoIP MMDB | Country.mmdb | MMDBモードでGEOIP検索に使用 |
| GeoSite | geosite.dat | GEOSITE,google,节点选择:ドメインの分類を検索 |
geodata-mode: trueにすると、GEOIPでDATデータを使用します。falseの場合はMMDBデータを使用します。この設定はGeoIPのデータ形式を選ぶもので、オフにするとすべてのGeoSiteルールが無効になる、という意味ではありません。GeoSiteルールには引き続き対応するドメインデータベースが必要です。
更新前の確認:カーネル、現在の設定、データソース
FlClashはクライアントであり、ルールを実際に処理するのはカーネルです。この記事ではmihomoの設定項目を扱います。旧バージョンのClashカーネルやほかのクライアントでは、一部の項目に対応していない場合があります。問題を調べる際は、まずクライアントとカーネルのバージョンを記録し、サブスクリプションURLの元データだけでなく、実際に適用されている設定を確認してください。
- カーネルを確認:クライアントのバージョン情報または起動ログでmihomoが使われていることを確認し、バージョン番号を記録します。該当バージョンの設定ドキュメントと照らし合わせる際に役立ちます。
- 設定を確認:FlClashの「設定」ページで、現在選択されている設定を確認します。オーバーライドや設定のマージが適用されている場合は、最終的にカーネルへ渡される設定を基準にしてください。
- モードを確認:
geodata-modeを確認します。DATモードではgeoip.datを更新し、MMDBモードでは実際に使用中のMMDBファイルを更新してください。 - ルールの種類を確認:
GEOIP、GEOSITE、RULE-SETを検索します。リモートルールセットだけを使う設定では、同じ地理データベースに依存しているとは限りません。
サブスクリプションの更新とデータベースの更新は別々の処理です。サブスクリプションを更新すると、通常はノード、プロキシグループ、設定テキストが更新されます。一方、地理データベースはカーネルまたはクライアントのデータ更新機能で管理されます。ノード一覧が更新されても、GeoSiteデータが更新されたとは限りません。
自動更新:mihomoの設定で24時間間隔を指定
以下は、MetaCubeXが公開しているDATデータソースを使ったトップレベル設定の例です。ノードやプロキシグループを含む完全な設定ではなく、既存の設定に追加する断片です。各項目は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-update-interval: 24:更新間隔は24時間です。単位は分ではなく時間です。geox-url.geoip:DAT形式のGeoIPダウンロードURLです。geox-url.geosite:GeoSiteのダウンロードURLです。
既存の設定にgeox-urlがある場合は、子項目を統合し、引き続き使用するデータソースを残してください。同じ名前のトップレベルキーを重複して追加しないでください。MMDBモードでは、対応するgeox-url.mmdbを設定します。DATのURLをMMDBの項目に指定しないでください。
サブスクリプション設定は永続オーバーライドで保存
クライアントがダウンロードしたサブスクリプションファイルを直接編集すると、次回の更新で変更が上書きされる場合があります。現在のFlClashに永続オーバーライドや設定マージ機能がある場合は、その機能を使って上記の項目を保存してください。設定画面の場所はバージョンによって異なるため、実際の画面に表示される名称を確認してください。ローカル設定を使っている場合は、自分で管理しているYAMLファイルを編集します。
保存後、設定を再読み込みします。必要に応じてカーネルを再起動し、ログに設定の解析エラーがないか確認してください。自動更新にはカーネルの稼働とネットワーク接続が必要です。端末のスリープ中やクライアントの終了中、ダウンロード失敗時には、時計どおりに24時間ごとの更新が完了するとは限りません。
手動更新:クライアントの操作とローカルファイルの差し替え
まずクライアントのデータ更新機能を使う
現在のクライアントにGeoIP、GeoSite、または地理データベースの更新機能がある場合は、更新対象の形式を確認してから実行してください。FlClashはバージョンによって操作場所や更新対象が異なる場合があります。「設定」ページにあるサブスクリプション更新ボタンを、地理データベースの更新ボタンと混同しないでください。
- 現在使える設定とデータベースのバックアップを保管し、更新前のファイル更新日時を記録します。
- クライアントの地理データ更新機能を実行し、完了表示を待ちます。ダウンロードや読み込みの結果もログで確認してください。
- 設定の再読み込みやカーネルの再起動が必要と表示された場合は、指示に従い、新しいデータが以降の照合に使われるようにします。
- テスト対象サイトの既存の接続を閉じてから再アクセスし、接続履歴で一致したルールと実際の出力先を確認します。
クライアントに更新機能がない場合は、カーネルが読み込むファイルを差し替える
デスクトップ版では、データディレクトリを確認したうえでファイルを手動で差し替えられます。起動ログ、カーネルの起動オプション、またはクライアントのディレクトリ表示機能から作業ディレクトリを特定してください。単独で起動するmihomoでは、-dでディレクトリを指定できます。サブスクリプションファイルとカーネルのデータは別々に保存される場合があるため、同じ名前のファイルがあるだけで場所を判断しないでください。
クライアントを終了するかカーネルを停止し、古いファイルをバックアップ用ディレクトリに移動してから、ダウンロード済みの新しいファイルを実際のデータディレクトリに配置します。DATモードでは通常、geoip.datとgeosite.datを使用します。MMDBモードではカーネルが読み込んでいるファイル名を維持し、Linuxではファイル名の大文字・小文字にも注意してください。作業後にカーネルを起動し、データの読み込みログを確認します。
GEOIP・GEOSITEルールの書き方と照合順序
mihomoの通常ルールは上から順に照合され、通常は最初に一致したルールのポリシーが適用されます。以下では、既存の設定に「节点选择」というプロキシグループが定義されているものとします。実際のグループ名が異なる場合は、同じように置き換えてください。例は既存のルール一覧に追加し、rulesキーを重複して作成しないでください。
rules:
- DOMAIN-SUFFIX,example.com,DIRECT
- GEOSITE,google,节点选择
- GEOIP,private,DIRECT,no-resolve
- GEOIP,CN,DIRECT
- MATCH,节点选择
DOMAIN-SUFFIXは、対象を明確に指定できるドメインサフィックスルールです。後続の広い分類ルールより前に置くと、そちらに優先して適用できます。GEOSITE,google,节点选择はGeoSiteのgoogle分類を使います。対象ドメインがその集合に含まれている場合に一致します。GEOIP,private,DIRECT,no-resolveは、データソースが提供するprivate集合を使います。使用前に、データソースに該当項目が含まれていることを確認してください。GEOIP,CN,DIRECTは接続先IPアドレスをCN集合と照合します。IPアドレスがまだ取得されていないドメインのリクエストでは、名前解決が行われる場合があります。MATCHは最後のフォールバックルールです。具体的なルールの後ろに配置してください。
no-resolveは、そのルールの追加の名前解決を避ける設定
GEOIPルールにno-resolveを付けると、そのルールの照合時に、ドメイン名しかないリクエストに対して新たにDNS解決を行いません。接続先がすでにIPアドレスの場合や、リクエストのコンテキストに利用可能なIPアドレスがある場合は、引き続きアドレス照合が行われることがあります。クライアント全体のDNSを無効にする設定ではなく、すべてのドメインリクエストをこのルールで処理できることを保証するものでもありません。
GeoSiteの照合には利用可能なドメイン情報が必要です。アプリがIPアドレスへ直接接続する場合、ドメインスニッフィングで情報を取得できない場合、または現在の通信方式でドメイン情報が保持されない場合は、ドメイン分類ルールに一致しないことがあります。TUNは通信を取り込む機能であり、すべての接続からドメインを復元できるわけではありません。DNS、Fake-IP、スニッフィングの設定も併せて確認してください。
更新失敗・ルールが反映されない場合:ログから原因を特定
| 症状 | まず確認する項目 | 対処方法 |
|---|---|---|
| ダウンロードがタイムアウトする | データソースのドメイン解決、HTTPS接続、起動時に利用できる出力先 | まず利用可能な設定でネットワークを復旧し、その後データベースを更新します。 |
| ファイルの解析に失敗する | ファイル形式が正しいか、ダウンロードした内容がHTMLページになっていないか | 対応するDATまたはMMDBファイルを再取得し、バックアップを戻してから再試行します。 |
| 分類の読み込みに失敗する | データソースにルールで参照している分類名が含まれているか | 分類一覧を確認してルールを修正するか、対応するデータソースを選択します。 |
| 更新は成功したが通信の振り分けが変わらない | 前にあるルール、出力モード、既存の接続、実際のデータディレクトリ | ルールモードに切り替え、新しい接続を作成して一致したルールを確認します。 |
まだ読み込まれていないデータに依存したダウンロードを避ける
初回起動時にデータベースがなく、そのデータベースを読み込まなければ初期化できないルールにダウンロードが依存していると、起動とダウンロードが互いに依存して進まなくなる場合があります。その場合は、まず起動できる簡易設定で接続するか、データファイルを手動で用意してから通常のルールに戻してください。サブスクリプションを何度更新しても、この依存関係は解消されません。
RULE-SETとGeoSiteは更新周期が異なる
RULE-SETが参照するのは、rule-providersで定義されたルールセットです。更新元と更新間隔は、該当するproviderで管理されます。たとえばHTTP providerのinterval: 86400は86400秒、つまり24時間を意味します。単位は時間のgeo-update-interval: 24とは異なります。geosite.datを更新しても、すべてのproviderが同時に更新されるわけではありません。
更新後の確認:新しい接続で一致したルールを確認
データベースのダウンロード成功は、最初の段階にすぎません。確認するには、クライアントをルールモードに設定し、設定内で分類が明確なドメインを選びます。既存のページ接続を閉じてから再アクセスし、接続の詳細またはログで対象ドメイン、接続先IPアドレス、一致したルール、出力ポリシーを確認してください。グローバルモードでは想定したルール振り分けを確認できないため、このテストには適していません。
- 読み込み結果を確認:ファイルが見つからない、分類がない、データ解析に失敗したといったエラーがないことを確認します。
- 照合順序を確認:先にあるドメインルールに一致している場合、後続のGEOIPデータを更新しても、その接続のポリシーは変わりません。
- 新しい接続を確認:確立済みのTCP長時間接続は、データベースを更新してもすぐに別の経路へ切り替わらないのが一般的です。
- 結果の見方を確認:IPアドレスの地理的な所属と、ドメインのサービス分類は異なる情報です。CDNのIPアドレスが変わると、GEOIPの判定も変わる場合があります。
日常的なメンテナンスでは24時間間隔の自動更新を使い、問題が発生したときは手動更新を行ってログを確認してください。不具合が起きた場合は、以前のデータベースと設定に戻し、データソース、分類、ルール順序を一つずつ比較します。基本操作はFlClashの設定ガイドをご覧ください。DNS、モード、接続に関する問題はトラブルシューティングも参考になります。