進階設定 預計閱讀 12 分鐘

GeoIP、GeoSite 資料庫更新與分流規則設定

了解 GeoIP、GeoSite 資料檔的用途與位置、手動和自動更新設定,以及 config.yaml 中 GEOIP、GEOSITE 規則的常見寫法。

GeoIP 與 GeoSite:先分清 IP 地理位置與網域分類

GeoIP 依目標 IP 的地理位置進行比對;GeoSite 則依網域集合進行比對。兩者都是分流規則的資料來源,不會提供代理節點,也不能取代訂閱。更新資料庫只會變更規則可查詢的資料,不會自動新增節點或修改節點連線參數。

本文的設定範例適用於使用 mihomo 核心的用戶端。Clash Meta 是該核心的舊稱。舊版 Clash 核心、不同分支及圖形用戶端的封裝方式各有差異,不能只憑用戶端名稱判斷是否支援所有欄位。操作前,請先在用戶端的「關於」頁面或執行記錄開頭確認實際使用的核心名稱。

資料用途常見檔案對應規則或設定
IP 地理位置比對,MMDB 模式Country.mmdbGEOIP;geodata-mode: false
IP 地理位置比對,DAT 模式geoip.datGEOIP;geodata-mode: true
網域集合比對geosite.datGEOSITE

geodata-mode 控制的是 GeoIP 資料格式,不是 GeoSite 的總開關。即使使用 MMDB 模式,只要核心支援且設定中引用了 GEOSITE,仍可能需要 geosite.dat。不要以為「Country.mmdb 已更新」,網域分類資料就也已更新。

資料庫放在哪裡:以執行中核心的資料目錄為準

用戶端安裝目錄、訂閱檔案目錄與核心資料目錄可能是三個不同位置。建議先在用戶端的設定、更多選單或系統匣選單中,尋找「開啟設定目錄」、「開啟資料目錄」等選項;名稱依用戶端而異。進入目錄後,查看現有的 Country.mmdb、geoip.dat 和 geosite.dat,不要直接把檔案放進下載資料夾。

獨立執行 mihomo 時,檢查啟動參數

從命令列啟動時,可用 -d 指定工作目錄。以下是 Linux 範例,資料目錄為 /var/lib/mihomo,設定檔則放在另一個位置:/etc/mihomo/config.yaml。兩者不必位於同一個資料夾。

mihomo -d /var/lib/mihomo -f /etc/mihomo/config.yaml
  • 手動啟動:檢查實際執行的命令,不要只看終端機目前所在的目錄。
  • systemd 服務:使用 systemctl cat mihomo 查看服務定義中的 ExecStart 和執行使用者;服務名稱須與本機實際名稱一致。
  • 以容器執行:檢查容器內資料目錄對應的主機掛載路徑,並將檔案寫入該掛載位置。
  • 圖形用戶端:確認檔案屬於目前啟用的核心執行個體,而非先前已停用的其他用戶端。

檔名大小寫也必須一致。在 Linux 上,Country.mmdb 和 country.mmdb 是不同檔案。部分核心支援自訂檔名或位置,此時應以實際生效的設定與記錄中顯示的路徑為準。

手動更新:備份、替換並重新載入

手動更新適合初次補齊資料庫、自動下載失敗,或需要還原舊版資料的情況。先確認目前使用 MMDB 還是 DAT 模式,再下載對應格式。資料來源應提供與 mihomo 相容的檔案,並說明收錄範圍與分類名稱;不同維護專案的分類集合不一定完全相同。

  1. 記錄目前狀態。保存有效設定,記下檔案路徑、修改時間與目前使用的資料來源。先將舊檔複製到備份目錄,不要直接刪除。
  2. 停止核心。在用戶端中停止核心服務,或結束用戶端後確認背景核心程序已停止。若以服務方式執行,請停止對應服務。
  3. 檢查下載檔案。確認下載的是資料庫檔案本身,而不是壓縮檔、專案說明頁或下載失敗時產生的 HTML 頁面。若下載的是壓縮檔,請先解壓縮,再使用其中正確的檔案。
  4. 沿用原路徑替換檔案。MMDB 模式替換 Country.mmdb;DAT 模式替換 geoip.dat;更新網域分類則替換 geosite.dat。
  5. 確認讀取權限。執行核心的使用者必須有權限存取目錄及讀取檔案。自動更新還需要資料目錄的寫入權限。
  6. 重新啟動並驗證。啟動核心後,檢查是否出現資料庫解析失敗、分類不存在或權限不足等錯誤,再測試新連線是否命中預期規則。

只替換磁碟上的檔案,不代表記憶體中的資料會立即更新。各用戶端的熱載入行為不盡相同;手動替換後重新啟動核心,更容易確認載入的是新檔案。若替換後無法啟動,先停止核心並還原備份,再檢查檔案格式是否相符;不要一再修改規則來掩蓋檔案問題。

自動更新:設定更新週期與下載來源

支援這些欄位的 mihomo 核心,可在設定檔頂層啟用資料庫自動更新。以下範例使用 DAT 模式,更新間隔為 24 小時;這不是訂閱更新週期,也不會在每次建立連線時都下載資料庫。

geodata-mode: true
geodata-loader: memconservative
geo-auto-update: true
geo-update-interval: 24

geodata-loader 用來指定 DAT 資料的載入方式,memconservative 是節省記憶體的載入器。它不負責指定下載網址,也不會改變規則優先順序。若要繼續使用 MMDB,請將 geodata-mode 設為 false,不要為了啟用自動更新而勉強切換格式。

geox-url 的鍵名須與檔案類型相符

需要自訂來源時,可在頂層的 geox-url 對應表中設定下載網址。geoip 對應 GeoIP DAT、geosite 對應 GeoSite DAT、mmdb 對應 MMDB。請填入資料維護者提供的完整 HTTPS 檔案網址,而不是專案首頁或需要互動登入的頁面。

本文不提供固定的遠端資料網址:分類規則能否使用,取決於所選的資料專案。若沿用用戶端已設定的可信來源,就不必另外新增 geox-url;若用戶端會覆寫來源,則須檢查最終生效的設定,不能只看訂閱原始內容。

  • 訂閱託管設定:使用用戶端提供的覆寫、合併或擴充功能加入頂層欄位,避免下次更新訂閱時遭到覆蓋。
  • 獨立設定:直接修改啟動時實際使用的設定檔;不要重複設定兩組同名的頂層鍵。
  • 下載失敗:先查看記錄中的請求網址與錯誤類型,再檢查網路、系統時間、磁碟空間及目錄權限。

GEOIP 與 GEOSITE 規則寫法:順序決定比對結果

規則模式會依序比對,通常由第一條符合的規則決定流量去向。以下片段先處理指定網域,再以 GeoSite 分類比對網域,接著以 GeoIP 判斷 IP,最後交由兜底策略組處理。範例假設目前訂閱已定義名為「節點選擇」的策略組;若沒有此策略組,必須改用設定中實際存在的名稱。

mode: rule

rules:
  - DOMAIN-SUFFIX,example.org,DIRECT
  - GEOSITE,cn,DIRECT
  - GEOIP,CN,DIRECT,no-resolve
  - MATCH,節點選擇

GEOSITE:分類名稱取決於資料庫

GEOSITE,cn,DIRECT 表示將目前 GeoSite 資料庫中符合 cn 集合的網域交由 DIRECT 處理。這不是單純比對網域是否以 .cn 結尾。能否使用 cn 或其他分類,須查看資料維護者提供的分類清單;更換資料來源後,也要再次確認舊規則引用的分類仍然存在。

GEOIP:no-resolve 不會停止所有 DNS 查詢

GEOIP,CN,DIRECT,no-resolve 表示依目標 IP 的地理資訊進行比對,並避免只為檢查這條 IP 規則而主動解析尚未解析的網域。如果請求已帶有目標 IP,仍可參與比對。這個參數不會全域停用 DNS,也不會阻止應用程式自行發出解析請求。

若希望未命中網域規則的請求也能透過解析結果判斷地區,可視實際需求移除 no-resolve。代價是規則判斷可能需要額外的 DNS 解析。使用 Fake-IP 時,目標網域還原方式、既有解析結果與實際請求路徑都會影響結果;請配合連線記錄判斷,不要只看規則文字推測。

MATCH:兜底規則一律放在最後

MATCH 會接收前面規則都未命中的請求。若將它放在 GEOSITE 或 GEOIP 前面,後續規則就沒有機會執行。自訂網域例外通常應放在大範圍分類規則之前,否則即使資料庫收錄了該網域,實際流量也可能不會依預期路由。

GeoIP 顯示的地理位置,不代表伺服器所有者或業務所在地。使用 CDN、跨區部署或 Anycast 的網站,可能出現網域分類與 IP 地理位置不一致的情況。若要讓特定服務固定使用指定策略,建議優先新增明確的網域規則,不要只依賴國家或地區判斷。

更新後仍未分流:檢查有效設定、記錄與新連線

驗證時,請分開確認「檔案是否成功更新」和「流量是否命中規則」。資料庫載入成功,只能證明資料可讀;應用程式的流量還必須經過這個核心,且目前處於規則模式,相關規則才有機會執行。

現象優先檢查項目檢查位置
提示分類不存在資料庫是否包含規則所用的分類名稱資料來源的分類清單與 GEOSITE 規則
提示檔案不存在工作目錄、大小寫與資料格式啟動參數與核心資料目錄
提示解析失敗是否誤下載網頁、壓縮檔或其他格式下載結果與對應的資料庫檔案
檔案已更新,但規則未命中前置規則、運作模式、目標網域或 IP有效設定與連線詳細資訊
每次更新訂閱後設定就消失變更是否只寫入暫存產生的檔案用戶端覆寫或合併設定
  1. 查看最終設定。確認執行中的 rules、geodata-mode 與更新欄位確實存在,而不只是修改了未啟用的設定檔。
  2. 確認規則模式。全域模式或直連模式的結果,不會與這份規則清單相同。
  3. 建立新連線。關閉測試網站目前的連線後重新瀏覽。已建立的長連線通常不會因更新資料庫而立即改道。
  4. 查看連線詳細資訊。記錄目標網域、目標 IP、命中的規則及最終策略鏈。每次只調整一項,方便比較變更前後的差異。
  5. 檢查流量入口。系統代理只會影響遵循該代理設定的應用程式;TUN 可接管哪些流量,還取決於路由與排除設定。未經過核心的請求不會命中 Geo 規則。

暫時排查時可提高記錄詳細程度,完成後再調回日常等級,以免記錄檔過大。分享記錄前,請遮蔽訂閱網址、權杖、節點憑證及敏感瀏覽記錄。保留可還原的設定與資料庫備份,比頻繁更換來源更容易找出問題。

Clash 安裝包下載