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 頁面。下載成功只代表請求已完成,最後仍須確認核心能否讀取檔案。
- 停止正在使用該資料目錄的核心。使用圖形介面用戶端時,請停止由它管理的核心或服務,不要另外啟動程序搶占連接埠。
- 將現有的
country.mmdb和geosite.dat複製到獨立的備份目錄,並保留目前的設定。 - 將下載完成的
.new檔案改成正式檔名。DAT 模式則應下載、備份並替換geoip.dat。 - 使用相同的資料目錄測試設定,然後重新啟動,檢查日誌與實際連線的規則命中結果。
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 的關鍵,是讓「規則引用的分類」、「核心選用的格式」與「實際載入的檔案」彼此一致。請先確認這三項,再調整更新週期。其他欄位可參閱設定大全;若要釐清規則、策略群組與訂閱的差異,可搭配閱讀術語表。