先確認核心,再分清 GeoIP 與 GeoSite
先到用戶端的「關於」或核心資訊頁面,確認目前執行的核心。Clash 常用來泛指代理核心及其生態系;圖形介面用戶端則負責管理設定、系統代理與啟動核心。本文的 geox-url、GEOSITE 和自動更新範例適用於 mihomo,也就是原 Clash Meta 後續更名而來的專案,不能直接套用到所有舊版 Clash 核心。
先分清兩種資料庫,再決定要更新哪個檔案。GeoIP 會將 IP 位址範圍歸入國家或地區等集合;GeoSite 則將網域歸入網站服務或用途集合。這些資料用於比對規則,不會提供代理節點,也不能取代訂閱連結。更新資料庫無法讓已過期的節點恢復連線。
| 資料類型 | 常見檔案 | 對應規則與用途 |
|---|---|---|
| GeoSite | geosite.dat | GEOSITE,cn,DIRECT,依網域集合比對 |
| GeoIP,DAT 模式 | geoip.dat | GEOIP,CN,DIRECT,依 IP 位址範圍比對 |
| GeoIP,MMDB 模式 | Country.mmdb | 同樣用於 GEOIP 規則,但資料格式與載入方式不同 |
先確認資料來源包含哪些集合,再填寫集合名稱。cn 是常見範例,但精簡版資料包不一定保留相同分類。GeoSite 分類通常使用小寫;含有屬性的分類也應以資料來源的說明為準。不要只憑網站名稱猜測標籤,再把載入失敗歸咎於網路問題。
找到實際資料目錄,避免更新錯誤檔案
先找出目前執行中的核心所使用的工作目錄。命令列的 -d 參數用來指定設定檔與資料目錄;圖形介面用戶端通常有自己的應用程式資料目錄,服務模式也可能使用不同的帳號或目錄。安裝程式所在資料夾、下載目錄和目前啟用的設定目錄,不一定是同一個位置。
- 開啟用戶端的目錄入口,尋找「設定目錄」、「資料目錄」或「開啟應用程式目錄」等選項。選單名稱會因用戶端和版本而異,請以實際介面為準。
- 查看核心啟動記錄或處理程序參數,確認
-d指向的目錄。不要只因為搜尋到同名檔案就直接覆蓋。 - 在該目錄尋找
geosite.dat、geoip.dat或Country.mmdb,並記下檔案大小、修改時間及目前使用的設定。 - 分清訂閱原始內容與最後實際執行的設定。用戶端合併設定後,真正生效的欄位可能與訂閱編輯頁面不同。
使用獨立目錄執行命令列核心時,可以明確指定路徑。以下以 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 規則。
更新後確認規則是否命中,不只看檔案時間
先在用戶端的連線面板查看新請求所使用的規則與出口。檔案時間變新只表示檔案曾被寫入,不代表執行中的核心已重新載入,也不代表測試請求經過該核心。若瀏覽器沿用舊連線,請先關閉相關分頁或連線,再送出新請求。
- 確認目前啟用的是剛修改的設定,並檢查執行中設定的
geodata-mode與規則順序。 - 查看記錄中是否有資料載入錯誤,尤其留意檔案不存在、權限不足或分類缺漏等訊息。
- 選擇一個確定屬於目標集合的網域,查看連線詳細資訊顯示的是
GEOSITE、GEOIP,還是順序更前面的網域規則。 - 確認出口是預期的
DIRECT或策略群組,再檢查該群組目前選用的節點。 - 測試只有目標 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 更容易找出原因。若要進一步檢查設定合併或流量接管方式,請參閱使用教學;遇到連線異常時,再依疑難排解逐項確認。