Clash GeoIP、GeoSite 資料庫更新教學:設定 geox-url 與 GEOSITE 規則

說明 GeoIP、GeoSite 資料檔的用途與存放位置,示範設定 geox-url 自動更新、手動替換資料庫,以及 GEOIP/GEOSITE 規則的常見寫法。

先確認核心,再分清 GeoIP 與 GeoSite

先到用戶端的「關於」或核心資訊頁面,確認目前執行的核心。Clash 常用來泛指代理核心及其生態系;圖形介面用戶端則負責管理設定、系統代理與啟動核心。本文的 geox-url、GEOSITE 和自動更新範例適用於 mihomo,也就是原 Clash Meta 後續更名而來的專案,不能直接套用到所有舊版 Clash 核心。

先分清兩種資料庫,再決定要更新哪個檔案。GeoIP 會將 IP 位址範圍歸入國家或地區等集合;GeoSite 則將網域歸入網站服務或用途集合。這些資料用於比對規則,不會提供代理節點,也不能取代訂閱連結。更新資料庫無法讓已過期的節點恢復連線。

資料類型常見檔案對應規則與用途
GeoSitegeosite.datGEOSITE,cn,DIRECT,依網域集合比對
GeoIP,DAT 模式geoip.datGEOIP,CN,DIRECT,依 IP 位址範圍比對
GeoIP,MMDB 模式Country.mmdb同樣用於 GEOIP 規則,但資料格式與載入方式不同

先確認資料來源包含哪些集合,再填寫集合名稱。cn 是常見範例,但精簡版資料包不一定保留相同分類。GeoSite 分類通常使用小寫;含有屬性的分類也應以資料來源的說明為準。不要只憑網站名稱猜測標籤,再把載入失敗歸咎於網路問題。

找到實際資料目錄,避免更新錯誤檔案

先找出目前執行中的核心所使用的工作目錄。命令列的 -d 參數用來指定設定檔與資料目錄;圖形介面用戶端通常有自己的應用程式資料目錄,服務模式也可能使用不同的帳號或目錄。安裝程式所在資料夾、下載目錄和目前啟用的設定目錄,不一定是同一個位置。

  1. 開啟用戶端的目錄入口,尋找「設定目錄」、「資料目錄」或「開啟應用程式目錄」等選項。選單名稱會因用戶端和版本而異,請以實際介面為準。
  2. 查看核心啟動記錄或處理程序參數,確認 -d 指向的目錄。不要只因為搜尋到同名檔案就直接覆蓋。
  3. 在該目錄尋找 geosite.dat、geoip.dat 或 Country.mmdb,並記下檔案大小、修改時間及目前使用的設定。
  4. 分清訂閱原始內容與最後實際執行的設定。用戶端合併設定後,真正生效的欄位可能與訂閱編輯頁面不同。

使用獨立目錄執行命令列核心時,可以明確指定路徑。以下以 Linux 或 macOS 終端機為例,假設目前目錄中已準備好 mihomo-data/config.yaml。第一個指令查看版本,第二個檢查設定;檢查指令不會讓核心持續提供代理服務。

mihomo -v
mihomo -t -d "$PWD/mihomo-data" -f "$PWD/mihomo-data/config.yaml"

設定 geox-url 與定期更新

將更新欄位放在 YAML 頂層,與 rules、dns 同一層。YAML 透過縮排表示階層;請勿將這些欄位縮排到 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"
  • geodata-mode: true:讓 GEOIP 比對使用 DAT 格式的 GeoIP 資料。設為 false 時通常會使用 MMDB;這不是 GeoSite 的總開關。
  • geo-auto-update: true:啟用核心的地理資料定期更新功能。
  • geo-update-interval: 24:將更新間隔設為 24 小時,並非每天在固定時間更新。
  • geox-url:分別指定各類資料的下載來源。填入來源不代表資料會立即下載完成。

請依實際使用的模式設定資料來源。上例同時列出 DAT 與 MMDB 網址,方便說明兩者的對應關係;使用 DAT 模式不代表每次都必須使用這三個檔案。mmdb 是設定鍵;範例下載網址的檔名是小寫的 country.mmdb,核心本機常見的檔名則是 Country.mmdb,手動替換時請勿混淆。

儲存後重新載入設定,並查看載入記錄。如果用戶端提供「更新 Geo 資料」之類的操作,可以用來手動觸發更新;若沒有這個選項,請勿假設重新啟動一定會覆寫現有資料庫。自動更新會依核心機制排程;若需立即替換,可採用下一節介紹的離線方式。

先確認目前網路可以連線至下載網址。GitHub 發佈附件可能會重新導向,使用命令列下載時應跟隨重新導向;用戶端的系統代理開關也不保證核心下載資料時會使用相同路徑。若發生逾時,先查看記錄中的網域、連線錯誤與代理選擇,再考慮改用可信任的資料來源。

手動替換 geosite.dat 與 geoip.dat

先將檔案下載至暫存位置,再停止核心並進行替換。不要在核心執行時一邊寫入檔案、一邊讓核心讀取;也不要把網頁「另存新檔」的結果直接改名為資料庫。下載到的登入頁或錯誤頁,即使副檔名是 .dat,也不能當作資料使用。

以下沿用前面建立的獨立目錄,只示範 DAT 模式。第一步先下載檔案,-f 會讓 HTTP 錯誤以失敗回報,-L 則用來跟隨重新導向。兩個指令都成功後再繼續,請勿忽略終端機錯誤訊息。

curl -fL --retry 2 \
  "https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geoip.dat" \
  -o "./mihomo-data/geoip.dat.new"

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

接著結束圖形介面用戶端,或停止對應的核心服務,並確認它不會自動重新啟動。以下指令假設原本的兩個資料檔都存在,且備份檔名尚未使用;若是首次安裝、沒有原始檔案,請略過對應的備份指令。每次更新都保留獨立備份,避免覆蓋最後一份可用的副本。

cp "./mihomo-data/geoip.dat" "./mihomo-data/geoip.dat.before-update"
cp "./mihomo-data/geosite.dat" "./mihomo-data/geosite.dat.before-update"

mv "./mihomo-data/geoip.dat.new" "./mihomo-data/geoip.dat"
mv "./mihomo-data/geosite.dat.new" "./mihomo-data/geosite.dat"

mihomo -t -d "$PWD/mihomo-data" -f "$PWD/mihomo-data/config.yaml"

確認無誤後啟動核心,再查看初次載入及實際請求的記錄。設定檢查只能找出部分錯誤,不能取代實際執行驗證。如果出現分類不存在、檔案讀取失敗或解析異常,請先停止核心、還原備份,再檢查資料來源與檔案格式。

使用 MMDB 模式時,請下載相符格式的檔案,並替換實際目錄中的 Country.mmdb。不要將 geoip.dat 改名為 Country.mmdb,兩者的內部格式不同。Linux 檔名有大小寫之分,替換後也要確保執行帳號仍有讀取權限。

撰寫 GEOSITE 與 GEOIP 規則

先確認用戶端處於規則模式,再調整規則順序。規則模式會由上而下依序比對,通常符合一條規則後就不會再比對後續規則。全域模式不會依照這份清單為每個請求選擇出口;TUN 模式負責接管流量,無法取代規則模式。

以下範例假設現有設定已定義名為「代理選擇」的策略群組。DIRECT 是內建的直連出口,不必另外建立;「代理選擇」必須與實際群組名稱完全一致。範例中的網域僅用來展示語法,實際設定請依用途增減。

mode: rule

rules:
  - DOMAIN-SUFFIX,example.com,代理選擇
  - GEOSITE,cn,DIRECT
  - GEOIP,CN,DIRECT,no-resolve
  - MATCH,代理選擇

先寫例外規則,再寫大範圍集合

先將需要個別處理的明確網域寫在集合規則前。第一條 DOMAIN-SUFFIX 會比對指定網域及其子網域;第二條依 GeoSite 的 cn 分類處理網域;第三條針對中國大陸 IP 位址範圍;最後一條 MATCH 則接手其餘請求。請勿將 MATCH 移到清單開頭,否則後續地理資料規則就無法生效。

了解 no-resolve 的取捨

可以將 no-resolve 理解為「不要為了這條 IP 規則主動解析網域」。如果目標本身是 IP,仍可進行 GEOIP 比對;如果請求只有網域、沒有可用的目標 IP,這條規則就不會為了比對而額外觸發解析,請求可能會繼續套用 MATCH。因此,加入這個選項可以減少不必要的 DNS 查詢,但無法保證所有中國大陸網域都會符合 GEOIP。

不要把網域分類當成伺服器所在地的證明。同一個網域可能使用全球內容傳遞網路,同一項服務也可能對應多個網域分類;GeoSite 分類與 GeoIP 地區判斷回答的是不同問題。若要依服務分類,優先考慮網域規則;若要依目標位址範圍處理,再使用 IP 規則。

更新後確認規則是否命中,不只看檔案時間

先在用戶端的連線面板查看新請求所使用的規則與出口。檔案時間變新只表示檔案曾被寫入,不代表執行中的核心已重新載入,也不代表測試請求經過該核心。若瀏覽器沿用舊連線,請先關閉相關分頁或連線,再送出新請求。

  1. 確認目前啟用的是剛修改的設定,並檢查執行中設定的 geodata-mode 與規則順序。
  2. 查看記錄中是否有資料載入錯誤,尤其留意檔案不存在、權限不足或分類缺漏等訊息。
  3. 選擇一個確定屬於目標集合的網域,查看連線詳細資訊顯示的是 GEOSITE、GEOIP,還是順序更前面的網域規則。
  4. 確認出口是預期的 DIRECT 或策略群組,再檢查該群組目前選用的節點。
  5. 測試只有目標 IP 的連線時,請單獨驗證 GEOIP;不要用一次網域連線就同時證明兩種資料庫都正常。

使用終端機測試時,請明確指定本機代理連接埠。以下假設現有設定的 mixed-port 為 7890;若實際連接埠不同,請換成用戶端顯示的數值。這個指令用來確認請求進入代理連線;即使成功,也無法證明命中了哪個地理分類,仍須搭配連線面板確認。

curl -I --proxy http://127.0.0.1:7890 https://example.com

依錯誤訊息排查更新失敗

狀況優先檢查項目處理方式
無法辨識 GEOSITE 規則實際使用的核心與版本確認使用支援此規則的 mihomo,不要只根據用戶端名稱推斷核心
提示某個分類不存在規則標籤與資料來源分類改用資料來源確實提供的分類,或換回相符的資料庫
下載逾時或重新導向失敗更新網址與網路連線路徑先確認附件可以下載,必要時離線複製到資料目錄
更新後仍套用舊規則執行目錄、載入狀態與規則順序確認替換的是生效目錄中的檔案,重新載入核心並建立新連線
更新訂閱後設定消失變更是否只寫在訂閱原始內容中將更新欄位與自訂規則移至可持續保留的覆寫設定

分清 Geo 資料與 rule-providers

先確認規則使用的是 GEOSITE 還是 RULE-SET。rule-providers 是規則提供器,用來載入獨立規則集,並有各自的下載網址、格式與更新間隔。設定 geox-url 不會一併更新所有規則提供器;反過來,更新某個規則提供器也不代表替換了 geosite.dat。

保留可還原的最小變更

每次只修改一類內容:先更新資料庫並確認原有規則正常,再新增分類或調整規則順序。發生問題時,還原對應的資料檔與設定,比同時重裝用戶端、修改 DNS 和啟用 TUN 更容易找出原因。若要進一步檢查設定合併或流量接管方式,請參閱使用教學;遇到連線異常時,再依疑難排解逐項確認。

下載Clash選擇用戶端平台