先釐清:IP 位置資料庫、網域分類資料庫與訂閱

節點訂閱更新成功,不代表分流資料庫也已更新。訂閱通常提供節點、策略群組與規則;GeoIP 和 GeoSite 則是核心讀取的本機資料檔。若發現「某個網域突然套用兜底規則」,應分別檢查規則順序、分類是否存在,以及資料庫是否已載入,而不是一再點選訂閱更新。

本文以 mihomo 核心為例。原版 Clash、部分舊版 Premium 與目前的 mihomo,支援的設定欄位不盡相同,不能將以下設定直接套用到所有名稱含 Clash 的程式。請先從用戶端的核心資訊或啟動記錄確認實際使用的核心;使用命令列時,可執行 mihomo -v 查看版本資訊。

檔案儲存內容主要用途
Country.mmdbIP 位址與國家或地區的對應資料geodata-mode: false 時的 GeoIP 查詢
geoip.dat依標籤分類的 IP 網段集合geodata-mode: true 時的 GeoIP 查詢
GeoSite.dat依標籤分類的網域集合GEOSITE 規則與相關網域比對

確認資料來源與核心工作目錄

選資料來源時,也要確認分類標籤

mihomo 常用的資料來源包括 MetaCubeX 的 meta-rules-dat 專案。網域分類常見於 domain-list-community 及其衍生版本;IP 分類則有多種 GeoIP 建置專案。重點不在挑下載最快的檔案,而是確認檔案格式、包含哪些標籤,以及維護者的發布說明。

  • 規則若寫成 GEOSITE,cn,DIRECT,網域資料庫就必須包含 cn 分類。
  • 規則寫了某個服務名稱,不代表每個資料來源都收錄同名分類;更換資料庫後,請重新測試設定。
  • 不要把純文字網域清單、規則集 YAML 或下載失敗時取得的 HTML 頁面存成 GeoSite.dat。
  • 使用一致的資料來源有助減少分類差異,但仍應查看更新說明;資料更新可能改變比對結果。

找出核心目錄,別猜安裝目錄

圖形用戶端的程式目錄、設定目錄與核心資料目錄可能各不相同。Windows 上的核心也可能由服務程序啟動,讀取的是服務使用的目錄,而不是目前使用者手動啟動程式時的目錄。請優先查看啟動記錄中的設定載入、資料庫載入或下載路徑;即使用戶端提供「開啟設定目錄」功能,也要確認該目錄是否包含核心實際使用的資料檔。

命令列部署可用 -d 明確指定工作目錄。以下指令會將資料目錄設為目前使用者的 .config/mihomo,並從該目錄讀取設定。路徑必須事先存在,且其中要有可用的 config.yaml。

mihomo -d "$HOME/.config/mihomo" \
  -f "$HOME/.config/mihomo/config.yaml"

此範例適用於類 Unix Shell,不代表所有用戶端都使用這個預設路徑。Linux 檔名有區分大小寫:發布檔案可能名為 geosite.dat,存入目錄時仍應依核心預期命名為 GeoSite.dat;Country.mmdb 也要留意大小寫。目錄找錯,換一百次也只是在更新沒人讀取的檔案。

手動替換:先備份、測試,再重新啟動

離線裝置、自動下載失敗、需要固定資料版本,或剛更換資料來源時,都適合手動更新。請勿在用戶端持續下載資料庫時同時覆寫檔案;先關閉用戶端或停止相關服務,並確認核心程序已結束。

  1. 記錄目前使用的模式。查看最終生效設定中的 geodata-mode。值為 false 時,GeoIP 使用 MMDB;值為 true 時,GeoIP 使用 DAT。GeoSite 則仍使用獨立的網域資料庫。
  2. 保留備份以便還原。備份即將替換的舊檔,並記下資料來源與下載日期;不要刪除唯一可用的副本。
  3. 先下載至暫存檔。確認 HTTP 請求成功後,再將檔案移入核心工作目錄。不要讓尚未下載完成的檔案佔用正式檔名。
  4. 測試完整設定。測試時必須使用與正式執行相同的核心、設定檔與資料目錄。
  5. 重新啟動核心。只重新整理介面或重開連線頁面,不一定會重新載入資料庫。之後請查看啟動記錄與實際命中的規則。

以下以 Bash 更新 GeoSite.dat 為例,假設已確認資料目錄且核心已停止。其他資料庫請依實際模式分別處理,不要只改副檔名。

cd "$HOME/.config/mihomo" || exit 1

if [ -f GeoSite.dat ]; then
  cp -p GeoSite.dat GeoSite.dat.bak || exit 1
fi

curl --fail --location --retry 2 \
  --output GeoSite.dat.new \
  "https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geosite.dat" \
  && mv GeoSite.dat.new GeoSite.dat

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

curl --fail 可讓常見的 HTTP 錯誤回報失敗,但無法保證檔案內容正確。格式與分類是否有效,仍須由核心驗證。測試失敗時,先保留錯誤訊息,再還原備份;若舊檔仍在,可執行 cp -p GeoSite.dat.bak GeoSite.dat,然後重新測試。測試通過後再啟動服務。

自動更新:設定 geox-url 與更新間隔

支援這些欄位的 mihomo,可透過 geox-url 指定下載來源、以 geo-auto-update 控制定期更新,並用 geo-update-interval 設定更新間隔(小時)。只設定下載網址,不代表已啟用定期更新。以下是頂層設定片段,請合併至現有設定;它不是包含節點與策略群組的完整設定檔。

# 頂層欄位,與 dns、rules 同層
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"
  • geoip 對應 geoip.dat;本例啟用 DAT 模式,GeoIP 規則會使用此檔案。
  • geosite 對應 GeoSite.dat;GEOSITE 網域分類需依賴此檔案。
  • mmdb 對應 Country.mmdb;切換回 MMDB 模式時使用。列出資料來源,不代表每次都要下載所有檔案。
  • 24 代表 24 小時,不是每天午夜,也不是 24 分鐘;裝置休眠或核心未執行時,不能期待它像常駐服務一樣更新。

首次載入時若缺少檔案,可能會觸發下載。如果下載需要依賴尚未載入的分流規則,或尚未可用的代理,就會形成啟動相依問題。這時先手動放入一套可用的資料庫,再排查更新流程,比看著錯誤記錄不斷重啟更有效。

規則寫法:GEOSITE 在前,GEOIP 在後

網域規則依網域分類,IP 規則依目的位址分類,兩者處理的是不同問題。「這是某項服務的網域」不代表「它的伺服器一定位於某個國家或地區」。網站可能使用境外 CDN,也可能讓同一網域解析至不同地區的位址,因此通常先寫明確的網域規則,再寫範圍較廣的 IP 規則,最後保留 MATCH。

以下假設現有設定已定義名為 PROXY 的策略群組。名稱有區分大小寫,實際使用時必須與自己的策略群組完全一致;不要只複製規則,卻漏掉規則引用的出站。

mode: rule

rules:
  - DOMAIN-SUFFIX,example.com,PROXY
  - GEOSITE,cn,DIRECT
  - GEOIP,private,DIRECT,no-resolve
  - GEOIP,CN,DIRECT
  - MATCH,PROXY

逐條了解比對方式

  1. DOMAIN-SUFFIX 用於明確指定網域例外,應放在分類規則之前,避免先被範圍較廣的集合比對。此處的 example.com 僅用來示範語法。
  2. GEOSITE,cn,DIRECT 會比對網域資料庫中的 cn 分類,不必先將網域解析成實際 IP,才能進行網域集合比對。
  3. GEOIP,private,DIRECT,no-resolve 使用私有位址分類;所選資料來源必須支援此標籤。MMDB 模式與 DAT 模式支援的標籤不一定完全相同。
  4. GEOIP,CN,DIRECT 會依目的 IP 判斷歸屬。若連線只有網域名稱,可能會觸發解析。
  5. MATCH,PROXY 會處理前面規則都未命中的連線。它不是「自動辨識」,而是最後一道兜底規則。

no-resolve 不是防止 DNS 洩漏的開關

no-resolve 表示不為了比對這條 IP 規則而主動解析網域。若連線已有可用的目的 IP,規則仍可能命中;若只有網域名稱、沒有適用的 IP,便會繼續檢查後續規則。所有 GEOIP 規則都加上此選項,可能使原本依賴解析結果的直連規則失效,讓更多連線落入 MATCH。

fake-ip 模式不會讓 GeoSite 失效。核心可透過 fake-ip 對應關係連結網域,但這不代表 GEOIP 應將 198.18.0.0/16 範圍內的合成位址,當成伺服器的實際所在地。排查時應一併查看網域、實際解析結果與命中規則,不要只盯著連線清單中的單一位址。

更新後仍未命中:依記錄逐步排查

狀況優先檢查項目處理方式
啟動時顯示分類不存在規則標籤與資料庫來源不一致查看該來源的分類清單,修正規則或改用原本的資料庫
解析資料庫失敗檔案格式錯誤、下載不完整,或下載到的是網頁還原備份,重新下載至暫存檔並執行設定測試
記錄仍顯示缺少資料檔,並嘗試下載目錄、檔名大小寫或實際執行帳號有誤確認核心啟動參數與服務工作目錄
定時更新下載逾時檢查下載網域解析、網路路徑與代理是否可用先手動更新以恢復啟動,再單獨測試下載流程
資料庫載入成功,但連線仍走兜底規則檢查規則順序、分類內容,或連線是否缺少網域資訊查看該連線命中的規則資訊,不要只看出口 IP

建議每次只修改一個變數:先更新檔案並維持規則不變,確認核心能啟動;再調整規則順序;最後才切換 geodata-mode 或資料來源。三項一起改,記錄會很熱鬧,問題可不會因此更快找出來。

驗證前先確認用戶端處於規則模式,再關閉目標應用程式的舊連線並重新送出請求。既有 TCP 連線通常不會因規則或資料庫變更而自動切換出口;瀏覽器重用連線也會影響觀察結果。請使用正在排查的網域進行測試,並在連線記錄中核對命中的規則類型、規則內容與最終策略鏈。

若為排查而暫時提高記錄等級,完成後請還原原本設定;分享記錄前,請隱藏訂閱網址、存取權杖、節點憑證與控制介面金鑰。排查資料庫問題只需要載入路徑與錯誤訊息,不需要整份帳號資料。

維護記錄:保留可還原的資料組合

  • 記下核心資訊:保存 mihomo -v 的輸出,避免用戶端升級後仍依舊版核心判斷欄位支援情況。
  • 記下資料來源:記錄儲存庫、下載日期、使用的標籤與 geodata-mode,方便追查比對結果變化。
  • 保留可執行的設定:備份資料庫時,也一併保存相對應的設定,避免還原後新規則引用到舊資料庫沒有的分類。
  • 分別檢查兩種更新流程:訂閱負責節點與設定,地理資料更新負責分類檔;其中一項成功的提示不能取代另一項。

最後確認三件事即可:核心能載入正確目錄中的檔案、規則引用的分類確實存在、新建立的連線命中預期策略。符合這三項後,再調整更新頻率與下載來源。資料庫越新,不代表越符合個人分流需求;明確規則始終應排在範圍較廣的分類之前。