GeoIP 與 GeoSite:先分清 IP 資料和網域分類

mihomo 會運用地理資料輔助規則分流。GeoIP 會依目標 IP 查詢所屬國家、地區或資料來源定義的 IP 位址集合;GeoSite 則依目標網域查詢分類集合,例如某項服務的網域群組。資料庫提供比對依據,規則則決定命中後採用哪個出站策略。更新資料庫會改變集合內容,但不會自動調整規則順序。

資料類型常見檔案規則與用途
GeoIP DATgeoip.datGEOIP,CN,DIRECT,查詢 IP 集合
GeoIP MMDBCountry.mmdbMMDB 模式下供 GEOIP 查詢使用
GeoSitegeosite.datGEOSITE,google,節點選擇,查詢網域分類

geodata-mode: true 會讓 GEOIP 使用 DAT 資料;設為 false 時則使用 MMDB 資料。這個開關是用來選擇 GeoIP 資料格式,並不代表「關閉後所有 GeoSite 規則都會失效」。GeoSite 規則仍需要相應的網域資料庫。

更新前檢查:核心、目前設定與資料來源

FlClash 是用戶端,實際解析規則的是核心。本文以 mihomo 的設定欄位為準;舊版 Clash 核心或其他用戶端可能不支援部分選項。排查問題時,請先記下用戶端與核心版本,再檢查目前生效的設定,不要只看訂閱連結的原始內容。

  1. 確認核心。從用戶端的版本資訊或啟動記錄確認使用的是 mihomo,並記下版本號,以便查閱相應版本的設定文件。
  2. 確認設定。在 FlClash 的「設定」頁面確認目前選用的設定檔。如果用戶端套用了覆寫或合併設定,請以最終交給核心的設定為準。
  3. 確認模式。檢查 geodata-mode;DAT 模式請更新 geoip.dat,MMDB 模式則更新實際使用的 MMDB 檔案。
  4. 確認規則類型。搜尋 GEOIP、GEOSITE 和 RULE-SET。只使用遠端規則集的設定,不一定會依賴同一套地理資料庫。

訂閱更新與資料庫更新是兩條不同的流程。重新整理訂閱通常會更新節點、策略群組和設定文字;地理資料庫則由核心或用戶端的資料更新功能維護。節點清單已更新,不代表 GeoSite 資料也已更新。

自動更新:在 mihomo 設定 24 小時更新間隔

以下是 mihomo 頂層設定範例,使用 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"

如果現有設定已經有 geox-url,請合併其子項目,保留仍在使用的其他來源,並避免重複新增同名的頂層鍵。使用 MMDB 模式時,應設定對應的 geox-url.mmdb,不能將 DAT 網址填入 MMDB 欄位。

訂閱設定請透過持久覆寫保存

直接編輯用戶端下載的訂閱檔案,下次更新訂閱時可能會被覆蓋。如果目前的 FlClash 版本提供持久覆寫或設定合併功能,可透過該功能保存上述欄位;實際入口會隨版本而異,請以介面顯示的名稱為準。使用本機設定檔時,則直接修改自行管理的 YAML 檔案。

儲存後重新載入設定,必要時重新啟動核心,並檢查記錄中是否有解析錯誤。自動更新需要核心持續執行且網路連線正常;裝置進入休眠、用戶端關閉或下載失敗時,無法保證每隔 24 小時就一定完成一次更新。

手動更新:用戶端操作與本機檔案替換

優先使用用戶端提供的資料更新功能

如果目前的用戶端提供 GeoIP、GeoSite 或地理資料庫更新入口,請先確認更新的資料格式,再執行更新。FlClash 各版本的入口位置和可更新項目可能不同;請勿把「設定」頁面的訂閱更新按鈕當成地理資料庫更新按鈕。

  1. 保留目前可用的設定和資料庫備份,並記下更新前的檔案修改時間。
  2. 使用用戶端提供的地理資料更新功能,等待完成提示,並查看記錄中的下載或載入結果。
  3. 如果用戶端提示需要重新載入設定或重新啟動核心,請依照提示操作,讓新資料套用於後續比對。
  4. 關閉測試網站的舊連線後重新開啟,並在連線記錄中確認命中的規則和實際出站策略。

用戶端沒有更新入口時,替換核心實際讀取的檔案

桌面版可在確認資料目錄後手動替換檔案。先從啟動記錄、核心啟動參數或用戶端提供的目錄入口找到工作目錄;獨立執行的 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,節點選擇

no-resolve 的用途是避免為該條規則額外進行解析

在 GEOIP 規則中加入 no-resolve,表示比對這條規則時,不會主動對只有網域的請求發起 DNS 解析。目標本身已是 IP,或請求內容已有可用 IP 時,仍可能進行位址比對。這不會關閉整個用戶端的 DNS,也不代表這條規則能處理所有網域請求。

GeoSite 需要可用的網域資訊。如果應用程式直接連線至 IP、網域嗅探未取得結果,或目前的流量接管方式未保留網域資訊,網域分類規則就可能無法命中。TUN 負責接管流量,但不代表每條連線都能還原網域;還需要一併檢查 DNS、Fake-IP 或嗅探設定。

更新失敗或規則未生效:依記錄找出原因

狀況優先檢查項目處理方式
下載逾時資料來源的網域解析、HTTPS 連線狀態、啟動時可用的出站策略先使用目前可用的設定恢復網路,再更新資料庫
檔案解析失敗檔案格式是否正確、下載內容是否其實是網頁重新下載相應的 DAT 或 MMDB 檔案,還原備份後再試一次
分類載入失敗資料來源是否包含規則所引用的分類名稱對照分類清單修正規則,或改用相符的資料來源
更新成功但分流結果沒變更前面的規則、出站模式、舊連線、實際資料目錄切換至規則模式,建立新連線並確認命中項目

避免下載資料時依賴尚未載入的資料

首次啟動時,如果資料庫尚未準備好,而下載流程又依賴一組必須讀取該資料庫才能初始化的規則,就可能形成啟動與下載互相依賴的情況。此時可先使用能正常啟動的精簡設定建立連線,或手動準備資料檔,再恢復正式規則。反覆更新訂閱通常無法解決這種依賴問題。

RULE-SET 與 GeoSite 的更新週期不同

RULE-SET 引用的是 rule-providers 中定義的規則集,更新來源和週期由相應的 provider 管理。例如 HTTP provider 的 interval: 86400 代表 86400 秒,也就是 24 小時;這與 geo-update-interval: 24 使用的小時單位不同。更新 geosite.dat 不會一併更新所有 provider。

更新後驗證:檢查新連線命中的規則

成功下載資料庫只是第一步。驗證時,請將用戶端切換至規則模式,選擇設定中已有明確分類的網域,關閉舊頁面的連線後重新開啟,再從連線詳細資訊或記錄查看目標網域、目標 IP、命中規則和出站策略。全域模式會略過預期的規則分流判斷,不適合用來進行這項測試。

  1. 檢查載入結果:確認沒有檔案不存在、分類缺漏或資料解析錯誤。
  2. 檢查比對順序:如果命中前面的網域規則,即使更新了後面的 GEOIP 資料,該連線的策略也不會改變。
  3. 檢查新連線:已建立的 TCP 長連線通常不會因資料庫更新而立即改走其他路徑。
  4. 確認結果是否合理:IP 地理位置和網域服務分類是不同維度,CDN 位址變動也可能影響 GEOIP 判斷。

日常維護可設定每 24 小時自動更新,遇到異常時再手動更新一次並檢查記錄。若更新後出現問題,請還原舊資料庫和原設定,再逐項比對資料來源、分類和規則順序。基本操作請參閱FlClash 設定教學;DNS、模式與連線問題可搭配疑難排解進一步檢查。