進階設定 預計閱讀 12 分鐘

Clash GeoIP、GeoSite 資料庫更新教學:MMDB/DAT 來源與規則設定

說明 GeoIP.mmdb 與 GeoSite.dat 的用途、更新網址設定與手動替換方式,以及 GEOIP、GEOSITE 規則寫法與常見問題排除。

先確認核心與資料庫格式

GeoIP 依目標 IP 的歸屬地分類,GeoSite 則依網域集合分類。兩者都不是節點訂閱,也不會提供代理伺服器。更新資料庫只會改變相關規則的比對依據,不會增加節點,也不會變更策略群組的出口選擇。

本文的自動更新設定以 Clash Meta 後續發展的 mihomo 核心為例。舊版 Clash 核心及不同用戶端內建的核心,在欄位支援與資料目錄方面可能有所差異。請先前往用戶端的「關於」或核心資訊頁面,記下核心名稱與版本;獨立執行時可輸入 mihomo -v。請勿只憑用戶端名稱判斷是否支援 GEOSITE。

資料檔案 儲存內容 對應設定與規則
country.mmdb MMDB 格式的 IP 歸屬資料 geodata-mode: false 時供 GEOIP 使用
geoip.dat GeoData 格式的 IP 分類集合 geodata-mode: true 時供 GEOIP 使用
geosite.dat 依標籤分類的網域集合 供 GEOSITE 使用,不受上述模式開關影響

搜尋資料時,經常會看到 GeoIP.mmdb、Country.mmdb 或 GeoSite.dat 這類名稱。這些可能是專案檔名、舊稱或概念名稱,不能據此推斷實際載入路徑。mihomo 常用的資料檔名如表所列,皆為小寫;Linux 檔案系統通常會區分大小寫。副檔名相同也不代表內容相容,MMDB 與 DAT 不能只靠更改檔名互換。

資料來源:確認格式與標籤

可參考 MetaCubeX/meta-rules-dat 專案提供的建置檔案。該專案提供適用於相關核心的 GeoIP、GeoSite 等資料。選擇來源時,除了下載網址,也應查看資料說明:IP 歸屬資料的來源、網域集合的產生方式、保留哪些標籤,以及更新週期。

  • MMDB:確認檔案是核心可讀取的國家或地區歸屬資料庫。請勿將城市資料庫或 ASN 資料庫直接當成同用途的替代品。
  • GeoIP DAT:確認檔案確實包含所需的國家或地區代碼,以及規則引用的額外分類。
  • GeoSite DAT:確認檔案包含規則會使用的標籤,例如 cn。精簡版可能會移除部分服務分類。
  • 更新網址:選擇二進位檔案的實際發布網址,而不是儲存庫首頁或瀏覽器顯示的檔案預覽頁面。

本文範例使用該專案的 latest 發布資源。這類網址會指向持續更新的內容,並非固定版本快照。若要重現特定時間的分流結果,應保留當時的資料檔案,並記錄取得日期、來源網址與核心版本。不同來源對同一 IP 或網域的分類可能不同,不能以檔案更新時間代替分類正確性的判斷。

mihomo 自動更新設定

以下欄位放在 YAML 最上層,與 dns、rules 同一層。範例採用 MMDB 模式,更新間隔為 24 小時;geo-update-interval 的單位是小時,不是秒。這裡列出三種資源網址,方便日後切換模式;實際載入的資料仍取決於核心、規則引用與載入方式。

geodata-mode: false
geodata-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"
  mmdb: "https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/country.mmdb"

合併至現有設定,勿重複新增

先確認目前設定中是否已經有 geox-url。同一層級不要重複定義相同的鍵,重複鍵的處理方式可能因解析器而異。若設定由訂閱產生,請使用用戶端支援的持久覆寫或合併機制;直接修改暫存產生的檔案,下一次更新訂閱時可能會被覆蓋。

若改為 geodata-mode: true,GEOIP 會使用 geoip.dat。只替換 country.mmdb 不會更新目前模式使用的 IP 資料。GeoSite 仍使用 geosite.dat,不需要因此切換 GEOIP 模式。

處理首次下載的相依問題

自動更新需要核心能連線至資源網址。DNS 解析失敗、TLS 交握失敗或網路逾時,都可能造成更新中斷。若下載又依賴尚未載入的地理規則,也可能出現啟動相依問題。此時先手動放入可用檔案,再檢查更新請求的連線路徑,比反覆重新啟動更容易找出問題。

用戶端提供的「更新地理資料庫」操作,與重新整理節點訂閱並非同一回事。選單名稱會隨用戶端版本而變,操作後應查看核心日誌中的下載與載入結果。設定中寫了 true,不代表剛才已成功完成更新。

手動替換:先確認資料目錄,再停止核心

資料目錄不一定是安裝目錄,也不一定與訂閱 YAML 位於同一個目錄。圖形介面用戶端可能會另外管理服務模式使用的資料檔案。請優先透過用戶端提供的設定目錄入口、執行日誌或核心啟動參數確認路徑;不要只因為在磁碟中找到同名檔案就直接覆蓋。

以下以獨立執行的 mihomo 為例。明確指定 -d 可固定資料目錄,避免從不同工作目錄啟動時誤讀其他檔案。請在專案工作目錄執行以下命令,並確認已有有效的 mihomo-data/config.yaml,且系統已安裝 curl。

mkdir -p ./mihomo-data

curl -fL --output ./mihomo-data/country.mmdb.new \
  https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/country.mmdb

curl -fL --output ./mihomo-data/geosite.dat.new \
  https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geosite.dat

-f 會讓 HTTP 錯誤狀態導致命令失敗,-L 則會跟隨發布資源的重新導向。兩條命令都成功後,請確認檔案不是零位元組,也不是閘道回傳的 HTML 頁面。下載成功只代表請求已完成,最後仍須確認核心能否讀取檔案。

  1. 停止正在使用該資料目錄的核心。使用圖形介面用戶端時,請停止由它管理的核心或服務,不要另外啟動程序搶占連接埠。
  2. 將現有的 country.mmdb 和 geosite.dat 複製到獨立的備份目錄,並保留目前的設定。
  3. 將下載完成的 .new 檔案改成正式檔名。DAT 模式則應下載、備份並替換 geoip.dat。
  4. 使用相同的資料目錄測試設定,然後重新啟動,檢查日誌與實際連線的規則命中結果。
mv ./mihomo-data/country.mmdb.new ./mihomo-data/country.mmdb
mv ./mihomo-data/geosite.dat.new ./mihomo-data/geosite.dat

mihomo -t -d ./mihomo-data -f ./mihomo-data/config.yaml
mihomo -d ./mihomo-data -f ./mihomo-data/config.yaml

這組重新命名命令會覆蓋同名檔案,因此必須先完成備份。設定測試是在啟動前檢查,並非完整驗證所有存取路徑。若失敗,請先查看具體錯誤,再還原先前的資料;不要接連更換多個來源,以免混淆格式問題與網路問題。

GEOIP、GEOSITE 與規則順序

Clash 規則通常由上而下比對,命中第一條規則後就會採用相應策略。以下只是規則片段,並非完整設定。其中的 代理選擇 必須與現有 proxy-groups 中某個策略群組名稱完全一致;也可以替換成已有的出口名稱。

rules:
  - DOMAIN-SUFFIX,internal.test,DIRECT
  - IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
  - IP-CIDR,10.0.0.0/8,DIRECT,no-resolve
  - GEOSITE,cn,DIRECT
  - GEOIP,CN,DIRECT,no-resolve
  - MATCH,代理選擇

網域分類不等於 IP 分類

GEOSITE,cn,DIRECT 使用資料庫中的 cn 網域集合,並不是「所有以 .cn 結尾的網域」的簡寫語法。GEOIP,CN,DIRECT 則會查詢目標 IP 的歸屬地。網域可能透過 CDN 取得不同地區的 IP,因此兩種規則可能產生不同結果。

將網域規則放在 IP 規則前面,可先依網域集合做判斷,減少對解析結果歸屬地的依賴。不過,GeoSite 需要連線資訊中有可用的網域資料。若應用程式直接連線至 IP,且沒有其他機制還原網域,就不能期待 GeoSite 自動辨識原始服務。

no-resolve 的實際作用

no-resolve 表示不會只為了比對這條 IP 類規則而觸發網域解析。如果連線已帶有可用的目標 IP,仍會嘗試進行比對。它不會全域停用 DNS,也不是「DNS 請求直連」的開關。

因此,若某個網域沒有命中 GeoSite,後續 GEOIP 規則又帶有 no-resolve,而目前沒有可用的目標 IP,就可能繼續命中 MATCH。這是規則設計的結果,不能直接歸咎於資料庫損毀。MATCH 應放在最後;若放在地理規則之前,後續規則就沒有機會生效。

更新後沒有生效:依錯誤類型排查

現象 優先檢查項目 處理方式
無法辨識 GEOSITE 規則 目前執行的核心及其規則支援情況 確認用戶端是否仍在使用舊版核心,不要只替換資料檔案
顯示找不到網域集合 目前的 geosite.dat 是否包含該標籤 查看資料來源的標籤說明,修正規則或改用包含該集合的資料
讀取資料庫失敗 格式、檔案大小、權限與大小寫 排除下載到 HTML 頁面的情況,還原可讀取的備份後重新下載
更新成功但命中結果沒有改變 資料目錄、模式、規則順序與連線重用 確認載入的是新檔案,並以新連線觀察命中結果
定時更新持續逾時 資源網域解析與下載請求路徑 先手動放入檔案恢復運作,再檢查更新連線流程

查看連線紀錄驗證,不要只確認網頁能否開啟

測試時請使用規則模式,選擇一個實際需要確認的網域,記錄連線面板中的目標網域、目標 IP、命中規則與最終策略。全域模式不適合驗證這裡的規則順序;網頁能開啟,只能證明有一條可用的連線路徑,無法證明命中的是 GeoSite 或 GeoIP。

更新資料庫通常不會讓所有既有連線重新分流。請關閉測試頁面或應用程式的舊連線,再重新發出請求;必要時使用用戶端的連線管理功能,結束對應連線。若結果仍不如預期,先用一條精確的 DOMAIN 規則確認策略名稱與規則是否載入,再檢查分類集合本身。

更新與還原檢查清單

  • 記錄核心版本、目前的 geodata-mode、資料目錄與來源網址。
  • 確認 GeoSite 標籤存在,並確認 GEOIP 目前讀取的是 MMDB 還是 DAT。
  • 備份舊檔案與設定,並將下載暫存檔與正式檔案分開保存。
  • 完成設定測試與重新載入後,以新連線查看實際命中的規則。
  • 發生異常時,請一併還原設定與相應資料,避免新規則引用舊資料庫中不存在的標籤。
  • 恢復定時更新後,查看下次更新日誌,確認持久覆寫設定沒有被訂閱更新覆蓋。

更新 GeoIP 與 GeoSite 的關鍵,是讓「規則引用的分類」、「核心選用的格式」與「實際載入的檔案」彼此一致。請先確認這三項,再調整更新週期。其他欄位可參閱設定大全;若要釐清規則、策略群組與訂閱的差異,可搭配閱讀術語表。

下載 Clash用戶端與系統需求