GeoIP 與 GeoSite:先分清 IP 資料和網域分類
mihomo 會運用地理資料輔助規則分流。GeoIP 會依目標 IP 查詢所屬國家、地區或資料來源定義的 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 核心或其他用戶端可能不支援部分選項。排查問題時,請先記下用戶端與核心版本,再檢查目前生效的設定,不要只看訂閱連結的原始內容。
- 確認核心。從用戶端的版本資訊或啟動記錄確認使用的是 mihomo,並記下版本號,以便查閱相應版本的設定文件。
- 確認設定。在 FlClash 的「設定」頁面確認目前選用的設定檔。如果用戶端套用了覆寫或合併設定,請以最終交給核心的設定為準。
- 確認模式。檢查
geodata-mode;DAT 模式請更新geoip.dat,MMDB 模式則更新實際使用的 MMDB 檔案。 - 確認規則類型。搜尋
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"
geo-auto-update: true:啟用核心的地理資料自動更新。geo-update-interval: 24:更新間隔為 24 小時,單位是小時,不是分鐘。geox-url.geoip:DAT 格式 GeoIP 資料的下載網址。geox-url.geosite:GeoSite 資料的下載網址。
如果現有設定已經有 geox-url,請合併其子項目,保留仍在使用的其他來源,並避免重複新增同名的頂層鍵。使用 MMDB 模式時,應設定對應的 geox-url.mmdb,不能將 DAT 網址填入 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,可能會觸發 DNS 解析。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、命中規則和出站策略。全域模式會略過預期的規則分流判斷,不適合用來進行這項測試。
- 檢查載入結果:確認沒有檔案不存在、分類缺漏或資料解析錯誤。
- 檢查比對順序:如果命中前面的網域規則,即使更新了後面的 GEOIP 資料,該連線的策略也不會改變。
- 檢查新連線:已建立的 TCP 長連線通常不會因資料庫更新而立即改走其他路徑。
- 確認結果是否合理:IP 地理位置和網域服務分類是不同維度,CDN 位址變動也可能影響 GEOIP 判斷。
日常維護可設定每 24 小時自動更新,遇到異常時再手動更新一次並檢查記錄。若更新後出現問題,請還原舊資料庫和原設定,再逐項比對資料來源、分類和規則順序。基本操作請參閱FlClash 設定教學;DNS、模式與連線問題可搭配疑難排解進一步檢查。