Clash GeoIP、GeoSite 資料庫更新教學:資料來源、自動更新與規則設定

了解 GeoIP、GeoSite 資料檔來源與用途,掌握 mihomo 自動更新設定、手動替換路徑及 GEOSITE 規則寫法。

一、先分清 GeoIP、GeoSite 與規則集

Clash 設定中的地區分流,通常不是由用戶端即時判斷網站屬於哪個國家,而是使用核心載入的資料檔。GeoIP 依目標 IP 位址比對地區或分類;GeoSite 則依網域比對網站分類。兩者更新的資料不同,不能用同一個檔案互相取代。

本文設定適用於 mihomo,也就是由原 Clash.Meta 演進而來的核心。使用前,請先在用戶端的「關於」或核心資訊頁面確認實際使用的核心名稱,並記下版本。介面顯示 Clash,不代表底層核心一定支援本文提到的所有設定;舊版 Clash 核心不應直接套用 mihomo 的 GeoSite 與自動更新設定。

資料類型比對對象常見檔案與設定
GeoIP,MMDB 格式IPv4、IPv6 位址所屬地區Country.mmdb;geodata-mode: false
GeoIP,DAT 格式IP 位址對應的地區或資料來源分類geoip.dat;geodata-mode: true
GeoSite網域集合,例如 cn、geolocation-!cngeosite.dat;供 GEOSITE 規則使用
規則提供者依個別規則集而定rule-providers 與 RULE-SET;獨立更新

更新資料庫不會改寫分流策略

資料庫負責判斷「這個網域或 IP 屬於哪個集合」,規則則決定「符合條件後要走哪裡」。例如 GEOSITE,cn,DIRECT 中,cn 來自資料庫,DIRECT 是規則指定的出口。更新資料可能改變集合內容,但不會自動將直連改為代理,也不會自動調整規則順序。

二、如何選擇資料來源與檔案格式

常見來源包括社群維護的網域分類專案、地區 IP 資料專案,以及重新整理、編譯這些上游資料的發布儲存庫。以 MetaCubeX/meta-rules-dat 為例,它提供多種適用於 mihomo 的建置產物。「來源」可分成兩個層面:發布儲存庫提供下載檔案,上游專案決定分類內容;兩者的更新時程可能不同。

  • 先確認格式:使用 DAT 模式就設定 geoip 網址;使用 MMDB 模式就設定 mmdb 網址。只改檔名不會轉換格式。
  • 再確認分類名稱:cn 等標籤也必須是資料來源實際包含的分類。不同來源未必有相同的網站、廣告或服務分類。
  • 固定使用可信來源:記下儲存庫、發布管道與下載日期。不要每次更新失敗就隨意改用來路不明的鏡像檔案。
  • 分清下載格式:網頁、壓縮檔、YAML 規則集、MRS 規則集與 DAT 資料庫用途各異,不能直接互換。

geolocation-!cn 是資料集定義的網域分類,不是核心在執行時對所有網域計算「非中國」。未知網域可能不在其中。同樣地,GeoIP 的國家或地區標記代表 IP 資料所屬地區,不一定等同於網站營運者所在地、內容語言或使用者實際連線的路由。

三、設定 mihomo 自動更新

以下範例使用 DAT 模式,自動更新間隔為 24 小時。這些欄位應位於 YAML 最上層,與 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"
  mmdb: "https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/country.mmdb"

geo-auto-update 用來啟用核心的地理資料庫自動更新;geo-update-interval 的單位是小時,不是秒。範例中的 mmdb 網址是切換格式時使用,不代表目前的 DAT 模式會同時使用兩種 GeoIP 資料。實際下載情況也會受核心版本、已啟用功能與用戶端管理方式影響,請以執行記錄為準。

若要保留 MMDB 模式,該如何修改

如果原設定已能正常使用 Country.mmdb,可將範例第一行改為 geodata-mode: false,並保留 geox-url.mmdb。不必為了更新資料庫而切換資料模式。切換模式後,仍須確認對應檔案存在,並重新檢查原有 GeoIP 分類是否受支援。

讓設定在更新訂閱後繼續生效

  1. 備份目前生效的設定,並記下原有的三個更新欄位。
  2. 在用戶端提供的覆寫、合併或擴充設定入口中加入最上層設定。各用戶端的選單名稱不同,請勿將範例貼到「節點訂閱網址」欄位。
  3. 重新載入設定,檢查核心啟動記錄是否出現未知欄位、下載失敗或資料解析錯誤。
  4. 開啟用戶端顯示的執行設定,確認欄位沒有被訂閱範本覆寫;下次更新訂閱後再檢查一次。

四、手動替換資料庫與工作目錄

手動更新最容易出錯的地方不是下載,而是找錯目錄。用戶端的訂閱設定目錄、介面程式目錄與核心工作目錄可能各不相同。請先查看啟動參數、記錄中的目錄資訊,或用戶端提供的資料目錄入口;不能只因找到同名檔案,就認定核心正在使用它。

透過啟動參數確認實際路徑

獨立執行 mihomo 時,可以使用 -d 明確指定工作目錄。以下是自訂部署範例,不代表所有桌面用戶端的預設路徑:

# Linux:工作目錄為 /home/lin/.config/mihomo
mihomo -d /home/lin/.config/mihomo

# Windows PowerShell:工作目錄為 C:\mihomo\data
.\mihomo.exe -d C:\mihomo\data

以上述 Linux 範例而言,常見目標路徑包括 /home/lin/.config/mihomo/geoip.dat、/home/lin/.config/mihomo/geosite.dat,或 MMDB 模式使用的 /home/lin/.config/mihomo/Country.mmdb。如果現有設定或用戶端指定了其他資料位置,請以實際設定為準。Linux 檔名有大小寫之分,下載的 country.mmdb 必須對應核心使用的 Country.mmdb。

替換步驟

  1. 記錄目前狀態:保存生效中的設定、資料來源網址、檔案修改時間,以及目前可用的測試結果。
  2. 完整下載至暫存位置:不要直接覆寫正在使用的檔案。確認下載的是發布產物,而不是錯誤頁面或儲存庫的檔案預覽頁。
  3. 停止核心:使用桌面用戶端的停止服務或結束功能;容器部署則停止對應容器。只關閉設定視窗通常不會停止背景核心。
  4. 備份後替換:先將原檔另存為 geosite.dat.bak 等名稱,再放入新檔案。Linux 服務帳號必須有權讀取工作目錄;自動更新時還需要寫入權限。
  5. 重新啟動並檢查:查看檔案載入記錄與規則命中情況。核心可能會快取資料,只替換磁碟上的檔案,不保證執行中的資料會立即更新。

容器部署還須確認主機目錄與容器內工作目錄之間的掛載關係。替換主機上未掛載的同名檔案,不會影響容器內的資料。若更新後發生解析失敗,請先停止核心、還原備份並重新啟動,再檢查新檔案的來源與格式。

五、GEOSITE 與 GEOIP 規則寫法

以下規則片段假設現有設定已定義名為 代理出口 的可用策略組。貼上前請確認名稱與自己的策略組完全一致。規則會由上而下比對,符合前面的規則後,就不會繼續往下尋找「更適合」的出口。

rules:
  - GEOSITE,cn,DIRECT
  - GEOSITE,geolocation-!cn,代理出口
  - GEOIP,CN,DIRECT,no-resolve
  - MATCH,代理出口
  • GEOSITE,cn,DIRECT:網域屬於資料庫中的 cn 集合時,直接連線。
  • GEOSITE,geolocation-!cn,代理出口:比對資料來源中屬於該分類的網域,並交由指定的策略組處理。
  • GEOIP,CN,DIRECT,no-resolve:比對中國 IP;no-resolve 表示不為這次比對額外觸發網域解析,並非關閉整個用戶端的 DNS。
  • MATCH,代理出口:處理前面規則都未比對到的連線,必須放在所有需要比對的規則之後。

如果希望 GeoIP 主動取得尚未解析之網域的 IP 位址再進行判斷,可依需求移除 no-resolve,但這會改變 DNS 查詢行為與比對流程。保留此設定時,網域連線能否符合該 IP 規則,取決於核心當下是否已有可用的目標 IP。

針對特定網域調整,不必更換整套資料庫

少數業務網域若需要固定出口,可在通用分類規則前加入 DOMAIN 或 DOMAIN-SUFFIX 規則。這比更換整套資料來源更容易追蹤。如果設定中先有 DOMAIN-SUFFIX 規則,再有 GeoSite 規則,前者會優先生效;更新 GeoSite 不會改變這項優先順序。

另外,rule-providers 中的 interval: 86400 通常表示規則提供者每隔 86400 秒更新一次,與地理資料庫的 geo-update-interval: 24 不同欄位,單位也不同。看到規則集更新成功,不能因此認定 GeoSite 資料也已更新。

六、更新失敗或規則未命中的排查順序

狀況優先檢查項目處理方式
下載逾時或 TLS 連線失敗系統時間、DNS、發布網址是否可連線透過目前可用的連線存取相同下載網址;必要時手動下載檔案
更新時顯示權限不足核心執行帳號與目錄寫入權限修正實際工作目錄的權限,避免將服務資料放在無法寫入的目錄
出現資料解析錯誤檔案格式、下載是否完整、是否誤存成網頁還原原檔,重新下載符合目前模式的發布產物
顯示分類不存在規則標籤與資料來源包含的分類確認標籤拼字與來源說明,改用存在的分類或明確指定網域規則
更新成功,但出口沒有變化目前生效的模式、規則順序、既有連線、實際載入的檔案切換至規則模式,關閉目標網站的舊連線後重試,並查看命中規則

透過一次完整連線確認結果

  1. 確認目前使用的是規則模式。全域模式與直連模式不會依照上述分流規則產生相同結果。
  2. 選一個實際需要排查的網域,在用戶端的連線面板找出該網域的新連線,記下目標網域、命中規則與出口策略組。
  3. 更新後關閉該網站的舊連線,再重新發出請求。已建立的 TCP 或 QUIC 連線通常不會因資料庫更新而自動重新選擇路由。
  4. 如果應用程式直接連線至 IP,或核心沒有取得網域資訊,請先檢查 DNS、嗅探功能與應用程式的連線方式;GeoSite 需要網域資訊,單純更新檔案無法補上這些資訊。

TUN 模式會影響部分流量如何進入核心,但不負責更新 GeoIP 或 GeoSite。系統代理與 TUN 的接管範圍不同,因此兩種模式下看到的連線也可能不同。排查時一次只變更一個條件,先維持流量接管方式與 DNS 設定不變,再比較資料庫更新前後的規則命中情況,避免將網路接管方式的變化誤認為資料更新效果。

下載Clash