まず整理:IPアドレスの所属、ドメイン分類、ルールによる振り分け
日本国内のサイトがプロキシ経由になったり、サービスが想定どおりに振り分けられなかったりしても、すぐに「データベースが古い」と決めつけるのは避けましょう。mihomoのルール判定には、接続にドメイン名と宛先IPのどちらが保持されているか、データベースが宛先をどの分類に含めているか、設定内のどのルールが先に一致するか、という3つの要素が関わります。データベースを更新して変わるのは2つ目だけで、ルールの順序やポリシーグループの選択は自動では修正されません。
この記事の設定例はmihomoを対象としています。mihomoはClash Metaの後継として使われているコアの名称です。デスクトップクライアントは設定やコアを管理するための画面にすぎません。名前にClashが含まれていても、同じ設定項目に対応しているとは限りません。適用前にクライアントの「バージョン情報」、コア情報、または起動ログで実際に動作しているのがmihomoか確認し、現在の設定をバックアップしてください。
| データ・設定 | 照合対象 | 主な用途 |
|---|---|---|
| GeoIP | IPv4・IPv6アドレスが属するネットワークの集合 | 国・地域や特定のアドレス集合に基づく振り分け |
| GeoSite | ドメイン名とその分類エントリー | サイトのカテゴリ、サービス、地域別ドメインの集合に基づく振り分け |
| rules | 上から順に並ぶ判定条件 | 一致した接続をDIRECT、REJECT、またはポリシーグループに渡す |
| rule-providers | 独立したルールセットファイル | ルールセットごとのURLと更新間隔で更新され、geox-urlでは管理されない |
たとえば、GEOSITE,cn,DIRECTはドメインの集合を使い、GEOIP,CN,DIRECTは宛先アドレスの所属集合を使います。どちらも同じ「中国のWebサイト一覧」ではありません。サイトが海外CDNを利用していたり、複数地域のドメインで同じアドレスを共有していたりするため、GeoIPだけでサイトの運営地域を判断することはできません。
データファイルと入手先:まず読み込む形式を確認
GeoIPのDAT形式とMMDB形式
mihomoでは、GeoIPを複数の形式で扱えます。geodata-mode: trueを設定するとGeoIPにはgeoip.datを使い、このモードを無効にすると一般的にはCountry.mmdbを使います。GeoSiteにはgeosite.datを使います。そのため、MMDBファイルだけを置き換えても、DATモードで実際に照合されるGeoIPデータは更新されません。
geox-urlのキーも形式に対応させる必要があります。geoipはGeoIP DAT、geositeはGeoSite DAT、mmdbは対応するMMDBデータを指定します。テキスト形式のドメイン一覧のURLをgeositeに設定したり、MMDBファイルをgeoip.datに改名して使ったりすることはできません。
代表的な入手先と選び方
- Loyalsoldier/v2ray-rules-dat:GeoIP・GeoSiteのDAT形式の配布ファイルを提供しています。一般的な地域分類やドメイン分類を使う設定に適しています。以下では、切り分ける条件を固定するため、この配布元を使用します。
- MetaCubeX/meta-rules-dat:関連するコアのエコシステム向けにデータファイルを提供しています。利用する際はリポジトリの説明、配布ブランチ、実際のファイル形式を確認し、異なるファイルのダウンロードURLを混在させないでください。
- クライアントに同梱されたデータ:初回起動には便利ですが、同梱ファイルの作成時期とアプリのインストール時期は一致しません。その後の更新方法はクライアントとコアの設定によって異なります。
同じ分類名でも、データソースによって含まれるエントリーが異なる場合があります。特にprivate、geolocation-!cn、属性付きのドメイン分類は、選択したデータソースの説明を確認してください。あるGeoSiteデータに含まれる分類が、すべての配布ファイルにあるとは限りません。
自動更新の設定:geox-urlと24時間間隔
以下は、既存設定のトップレベルに統合できる例です。DATモードを使用し、更新間隔を24時間に設定しています。完全なサブスクリプション用設定ではなく、ノード、ポート、ポリシーグループは含みません。同じキーがすでに設定されている場合は既存の値を変更し、ファイル末尾に同じ項目を重複して追加しないでください。
geodata-mode: true
geo-auto-update: true
geo-update-interval: 24
geox-url:
geoip: "https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geoip.dat"
geosite: "https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geosite.dat"
geodata-mode: true:GeoIPにDATを使います。すべての振り分けを同時に有効にするスイッチではありません。geo-auto-update: true:コアによるGeoデータの自動更新を有効にします。geo-update-interval: 24:単位は時間です。秒ではなく、毎日決まった時刻に実行されるわけでもありません。geox-url:データのダウンロード元を指定します。サブスクリプションのノードを同期したり、rulesを書き換えたりする設定ではありません。
この例ではDATモードを選んでいるため、mmdbは設定していません。既存設定にMMDBの取得元がある場合は残してもかまいませんが、その更新日時はGeoIP DATが更新された証拠にはなりません。AS番号データベースは別の用途のため、GEOIPやGEOSITEを使う目的で一緒に有効にする必要はありません。
クライアントのどこで設定するか
- 使用中の設定をエクスポートするかコピーし、現在の設定名を控えておきます。
- クライアントにある「オーバーライド」「設定のマージ」「設定編集」などの機能を探し、上記の項目を最終的な設定に反映します。クライアントによってメニューは異なるため、特定のメニュー操作をmihomo共通の設定手順と考えないでください。
- 設定を再読み込みします。関連するグローバル設定の反映にコアの再起動が必要と表示された場合は、再起動してから起動ログを確認してください。
- 最終的に動作している設定を開き、トップレベルの3つの項目と2つのデータURLが、サブスクリプションやグローバル設定で上書きされていないことを確認します。
サブスクリプションをダウンロードした後のキャッシュファイルを直接編集すると、次回の更新で上書きされることがあります。長期的に維持するローカル設定は、クライアントが対応する永続的なオーバーライド機能に保存してください。サブスクリプションの更新間隔、Geoデータの更新間隔、ルールプロバイダーのintervalは、それぞれ独立した仕組みです。
GEOIP・GEOSITEルールの書き方:ドメインを先に、IPアドレスは補完に
以下の例では、既存設定に「ノード選択」という名前のポリシーグループが定義されているものとします。名前は実際のグループ名と完全に一致させてください。実際の名称が「プロキシ」なら、ルールの転送先も変更します。例では、LAN、国内ドメイン、国内IPアドレス、最終フォールバックの4段階を扱い、広告ブロックなどの追加分類は含みません。
rules:
- GEOSITE,private,DIRECT
- GEOIP,private,DIRECT,no-resolve
- GEOSITE,cn,DIRECT
- GEOIP,CN,DIRECT,no-resolve
- MATCH,ノード選択
5つのルールを順に確認
GEOSITE,private,DIRECT:選択したGeoSiteデータで定義されたプライベートドメインの集合に一致します。すべての社内ネットワーク用ドメインを網羅するわけではないため、独自の内部ドメインは別途ルールを追加してください。GEOIP,private,DIRECT,no-resolve:すでに取得済みの宛先IPをプライベートアドレスの集合と照合します。このルールだけのためにドメイン名を積極的に解決することを避けます。GEOSITE,cn,DIRECT:まずドメイン分類で処理し、アドレスの所属情報だけでドメインの振り分けを判断する状況を減らします。GEOIP,CN,DIRECT,no-resolve:宛先IPがわかっている場合に、中国本土のアドレス集合で補完します。MATCH,ノード選択:それ以前のルールに一致しなかった接続を、指定したポリシーグループに渡します。
no-resolveは「このIPルールのためにドメイン名の解決を積極的に行わない」という意味で、「この接続でDNSを一切使わない」という意味ではありません。接続に実際の宛先IPが含まれていればIPルールで判定できます。利用できるIPがない場合は一致せず、次のルールへ進むことがあります。このパラメーターを残すかどうかは、DNS設定、接続方法、振り分けの目的に応じて判断してください。
mihomoのルールは上から順に照合されます。先にある広範囲なルールに一致すると、後続の細かな分類は適用されません。MATCHを前方に置くと後続のルールを遮り、海外サービスを対象とする分類を先に置くと、後ろにある個別ドメインの例外が適用されないこともあります。例外ルールは通常、対象となる広範囲なルールより前に置いてください。
更新を確認する方法:ダウンロード・読み込み・ルール一致を切り分ける
「ファイルのダウンロード完了」は、更新処理の一段階が終わったことを示すだけです。検証するには、コアがデータを正常に読み込んだことと、対象の接続が想定したルールに一致したことも確認する必要があります。ファイルの日付やサイトを開けるかどうかだけで判断せず、以下の3段階を確認してください。
第1段階:使用中のファイルを確認
クライアントの「設定フォルダーを開く」機能や、コアの起動引数から作業ディレクトリを確認します。ダウンロードフォルダーやアプリのインストール先にあるとは限りません。DATモードではgeoip.datとgeosite.datを確認し、MMDBモードでは実際に読み込まれるMMDBファイルを確認します。OSが拡張子を非表示にしている場合があるため、geosite.dat.datのようなファイル名にならないよう注意してください。
第2段階:設定とデータを正常に読み込めるか確認
mihomoを単独のコマンドラインで使う場合は、設定をコピーしたテスト用ディレクトリで、以下の設定チェックを実行できます。例のディレクトリ./geo-checkは事前に作成し、テストする設定とデータファイルを配置してください。テストコマンドで稼働中のディレクトリを上書きしないでください。
mihomo -t -d ./geo-check -f ./geo-check/config.yaml
チェックに失敗したら、最初に表示されたエラーを確認してください。YAMLのインデント、存在しないポリシーグループ、GeoSite分類の不足、データの解析失敗は、それぞれ別の対応が必要です。設定チェックに通っても、すべての通信が想定どおりに振り分けられるとは限りません。これは接続を検証するための前提条件です。
第3段階:接続し直してルールを確認
- ルールモードに切り替え、グローバルモードやダイレクトモードになっていないことを確認します。
- 対象サイトへの既存の接続を閉じてから、ページを開き直します。必要に応じてアプリを終了して再起動してください。
- クライアントの接続パネルで、ドメイン名、宛先IP、一致したルール、最終的なポリシーの経路を確認します。
- DIRECTになる想定の接続と、「ノード選択」に渡る想定の接続をそれぞれ1つずつテストし、結果を記録します。
たとえば、接続パネルに一致ルールとしてGeoSite(cn)、ポリシーとしてDIRECTと表示されれば、国内ドメイン用ルールの想定と一致しています。表示形式はクライアントによって異なるため、ログにまったく同じ文字列が出るとは限りません。既存の長時間接続はデータベースを更新しても新しいルールで自動的に再接続されないため、検証には新しい接続を使ってください。
更新失敗・振り分けの問題:症状ごとの確認ポイント
| 症状 | まず確認する項目 | 対処方法 |
|---|---|---|
| ダウンロード接続がタイムアウトする | データソースのドメインにアクセスできるか、DNS、現在のネットワーク状態 | まずダウンロード経路を復旧し、使えるデータは残したままにします。ディレクトリを急いで空にしないでください。 |
| 分類が存在しないというエラーが出る | 分類名の綴り、データソース、実際に読み込まれているファイル | データソースが提供する分類を確認するか、そのソースが対応しているルールに変更します。 |
| データの解析失敗と表示される | Webページを誤ってダウンロードしていないか、ファイル形式が設定と一致しているか | 正しい配布ファイルを取得し、リポジトリのWebページURLをファイルURLの代わりに使わないでください。 |
| ファイルは更新されたが、振り分け結果が変わらない | ルールの順序、最終的な設定、既存の接続 | 再読み込み後に新しい接続を確立し、出口IPだけでなく、実際に一致したルールを確認します。 |
| サブスクリプションを更新するたびに設定が消える | サブスクリプションのキャッシュ内だけを変更していないか | 長期的に維持する設定を、クライアントの永続的なオーバーライド機能に移します。 |
初回起動時にダウンロードできない場合
設定の起動にGeoデータが必要なのに、現在のネットワークからデータソースにアクセスできないと、初期化できない状態に陥ることがあります。データソースにアクセスできるネットワークから該当ファイルを取得し、実際のコア作業ディレクトリに配置して再起動してください。手動で置き換える前にコアを停止し、古いファイルをバックアップします。ファイルが正常に読み込まれたら、自動更新の経路を確認してください。
起動を通すためだけにGEOIP・GEOSITEルールをすべて削除し、元のフォールバック動作を確認せずに残すことは避けてください。ルールを削除すると、直結するはずの接続がすべてプロキシグループに送られたり、例外サービスが適切に振り分けられなくなったりする可能性があります。一時的に変更する場合も内容を記録し、元に戻した後にもう一度検証してください。
TUNを有効にしたら、別のデータベースが必要か
必要ありません。TUNで変わるのは通信を取り込む方法であり、別のGeoIP・GeoSiteデータに自動で切り替わるわけではありません。同じコアなら、通常は同じ作業ディレクトリのデータを読み込みます。TUN有効化後に結果が変わった場合は、別のデータベースをダウンロードする前に、ドメイン名が保持されているか、DNSリクエストの経路、Fake-IPのマッピング、宛先接続の情報を確認してください。
IPアドレスしかない接続には、GeoSiteで照合できるドメイン名がありません。一部のプロトコルや条件ではスニッフィングによってドメイン名を補えることがありますが、すべての通信で有効とは限りません。通信の取り込み、DNS、ルールの関係を確認するには技術リファレンスをご覧ください。また、用語集でFake-IPとTUNの定義も確認できます。
運用の基本:データソースを固定し、戻せる状態を保ち、新しい接続で検証
- データソースを固定:選択したデータリポジトリ、形式、設定項目を記録し、ミラーURLだけを控える状態を避けます。
- 更新間隔を適切に設定:通常はまず24時間に設定します。データが分単位で頻繁に変わることはなく、PCがスリープ中またはコアの停止中は更新処理も継続しません。
- 元に戻せる状態を維持:データソースの変更や手動置き換えの前に、現在の設定と使用できるデータを保存しておきます。問題が起きた場合は両方を元に戻してください。
- 実際の動作を確認:更新後に少なくとも一度は読み込み状態を確認し、新しい接続でドメイン名、一致したルール、ポリシーの経路を検証します。
Geoデータの管理で大切なのは、ファイルの日付をできるだけ新しくすることではなく、データ形式、分類名、ルールの転送先を一致させることです。まずコアと読み込みモードを確認し、次に更新元を設定し、最後に接続パネルで検証すると、データベースを何度も入れ替えるより問題を特定しやすくなります。