GeoIP 與 GeoSite 資料庫更新指南:下載來源設定、手動替換與規則聯動

說明 GeoIP 與 GeoSite 在規則匹配中的分工、如何設定自動更新來源、離線時手動替換資料檔案的路徑,以及資料庫過舊造成分流失準時的判斷與處理方式。

先分清 GeoIP 與 GeoSite 的匹配對象

GeoIP 和 GeoSite 都能將大量規則濃縮成簡短條件,但兩者處理的對象不同。GeoIP 會根據連線目標的 IP 位址判斷國家或地區;GeoSite 則依網域所屬分類進行匹配。兩者不是同一個資料庫,也無法互相取代。

項目 GeoIP GeoSite
主要檔案 GeoIP.dat 或 Country.mmdb GeoSite.dat
輸入對象 IPv4、IPv6 位址 網域及網域分類標籤
典型規則 GEOIP,CN,DIRECT GEOSITE,cn,DIRECT
常見用途 依目標 IP 所在地區作為備援 依網站、服務或類別預先分流
主要限制 CDN、Anycast 與雲端服務位址可能跨越不同地區 連線階段需要保留或還原網域資訊

GeoSite 適合放在 GeoIP 前面

多數設定採用由上而下的規則匹配。網域規則通常比 IP 地理歸屬更貼近服務意義,因此應優先處理。例如某項服務使用分布於多個國家的 CDN,GeoIP 只能看到目前解析到的節點位址,GeoSite 則能依原始網域穩定分類。

rules:
  - GEOSITE,category-ads-all,REJECT
  - GEOSITE,cn,DIRECT
  - GEOIP,CN,DIRECT,no-resolve
  - MATCH,節點選擇

這組規則會先攔截廣告分類,再處理中國大陸常見網域,接著以 GeoIP 補充未命中網域規則的中國大陸位址,最後交由預設策略組處理。實際標籤是否存在取決於所選 GeoSite 資料來源;更換資料來源前,應確認標籤命名一致。

確認 Mihomo 實際使用的資料格式

Clash Meta 後續以 Mihomo 名稱維護。不同用戶端可能內建不同核心版本,也可能保留舊版 Clash 風格的設定入口。開始更新前,先在用戶端的「設定」→「核心」或「設定」→「版本資訊」查看核心名稱與版本;命令列部署可執行 mihomo -v

Mihomo 的 geodata-mode 會影響 GeoIP 資料的讀取方式。啟用時通常讀取 GeoIP.dat;關閉時通常使用 MMDB 格式的 Country.mmdb。GeoSite 分類仍由 GeoSite.dat 提供。不要只替換一個同名檔案,就假定核心一定會讀取它;設定模式與工作目錄同樣需要核對。

geodata-mode: true
geodata-loader: memconservative

rules:
  - GEOSITE,private,DIRECT
  - GEOSITE,cn,DIRECT
  - GEOIP,private,DIRECT,no-resolve
  - GEOIP,CN,DIRECT,no-resolve
  - MATCH,節點選擇

geodata-loader: memconservative 適合更重視記憶體用量的環境。實際可用值與行為會隨核心版本調整,修改後應透過用戶端設定檢查或命令列測試確認。對於記憶體充足的桌機,保留用戶端產生的預設值通常更穩妥。

no-resolve 不是通用必選項

當 GEOIP 規則收到的目標仍是網域時,核心可能需要先解析 IP 才能完成地區匹配。在規則末尾加上 no-resolve,表示不要為這條規則額外觸發解析。它可以減少不必要的 DNS 請求,但也代表尚未取得目標 IP 時,該條 GEOIP 規則不會主動解析並命中。

設定自動更新下載來源

Mihomo 可透過 geox-url 指定地理資料庫網址,並由 geo-auto-update 控制自動更新。以下範例使用同一個發布儲存庫中的 GeoIP 與 GeoSite 檔案,避免兩個資料集的發布時間與分類標準差異過大。

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"

geo-update-interval: 24 的單位是小時,表示每 24 小時檢查一次。桌面用戶端每天更新一次已經足夠,沒有必要設定為 1 小時或更短。資料庫發布頻率通常低於代理節點狀態的變化頻率,過於頻繁只會增加啟動階段的網路請求。

下載來源需要同時符合四個條件

  1. 檔案格式相符。GeoIP 位址必須回傳核心目前模式支援的資料檔案,不能把網頁下載頁面當成二進位檔案網址。
  2. 檔名與內容相符。geoip 項目指向 IP 資料,geosite 項目指向網域分類資料。
  3. 標籤標準可確認。設定中使用的 cnprivatecategory-ads-all 等標籤必須存在於該資料來源。
  4. 核心啟動時可以存取。首次下載發生在規則生效前時,下載鏈路不能依賴尚未載入的同一套規則,形成循環依賴。

修改後先檢查設定,再重新載入核心

命令列環境可使用核心本身檢查 YAML。-d 指向執行目錄,資料庫也會從這個目錄讀取;-f 指向主要設定檔。路徑包含空格時需要加上引號。

mihomo -d "/opt/mihomo" -f "/opt/mihomo/config.yaml" -t

用戶端使用者可在「設定檔」頁面選取目前設定,再執行「檢查」或「重新載入」。選單名稱會因用戶端版本不同而略有差異,但操作順序應維持為:儲存可回復的備份、檢查 YAML、重新載入核心、查看日誌。若日誌出現無法下載、檔案格式錯誤或標籤不存在,應先還原舊檔案,不要連續修改多項設定。

離線環境手動替換資料庫

伺服器無法直接存取下載來源、企業網路限制外部連線,或需要固定某個資料庫版本時,可以離線替換。關鍵不在於將檔案複製到程式安裝目錄,而是找到 Mihomo 的工作目錄。命令列部署的工作目錄由 -d 參數決定;圖形用戶端通常會在「設定」→「設定檔目錄」或「設定」→「應用程式目錄」提供開啟入口。

標準替換流程

  1. 在可連線的裝置下載與目前設定相符的 GeoIP.datGeoSite.datCountry.mmdb
  2. 記錄發布版本與下載日期,例如 2026-05-28,方便日後判斷是否需要更新。
  3. 在目標裝置停止 Mihomo 核心,確認系統匣選單或服務管理員顯示核心已退出。
  4. 開啟工作目錄,將舊檔案重新命名為 GeoIP.dat.bakGeoSite.dat.bak
  5. 複製新檔案,並維持核心預期的大小寫與檔名。
  6. 執行設定檢查,然後啟動核心並觀察前 30 秒的日誌。
  7. 完成三類測試:私有位址、常用中國大陸網域、預設代理網域。

Linux 服務部署可以先複製為暫存名稱,再使用同一檔案系統內的重新命名操作進行替換,降低程序讀取到不完整檔案的風險。以下路徑僅示範由 -d /etc/mihomo 所決定的工作目錄。

sudo systemctl stop mihomo
sudo cp /mnt/offline/GeoIP.dat /etc/mihomo/GeoIP.dat.new
sudo cp /mnt/offline/GeoSite.dat /etc/mihomo/GeoSite.dat.new
sudo mv /etc/mihomo/GeoIP.dat /etc/mihomo/GeoIP.dat.bak
sudo mv /etc/mihomo/GeoSite.dat /etc/mihomo/GeoSite.dat.bak
sudo mv /etc/mihomo/GeoIP.dat.new /etc/mihomo/GeoIP.dat
sudo mv /etc/mihomo/GeoSite.dat.new /etc/mihomo/GeoSite.dat
mihomo -d /etc/mihomo -f /etc/mihomo/config.yaml -t
sudo systemctl start mihomo

Windows 圖形用戶端不要在核心仍執行時直接覆寫檔案。先透過系統匣選單退出核心或退出用戶端,再操作設定檔目錄。如果檔案被占用,強行覆寫可能留下暫存檔,而用戶端下次啟動時仍會讀取舊資料庫。

資料庫過舊時會出現哪些分流偏差

地理資料庫過舊通常不會讓用戶端直接崩潰,而是產生局部且間歇性的分流異常。這類問題容易被誤判為節點不穩定,因為同一個網站可能只有部分 CDN 位址或新網域命中錯誤策略。

GeoIP 過舊的典型表現

GeoSite 過舊的典型表現

單一網域走錯策略不能直接證明資料庫過舊。也可能是規則順序、DNS 快取、Fake-IP 對映、嗅探設定或使用者自訂覆寫造成。判斷時應先在連線頁面查看實際命中的規則,再對照目標網域、目標 IP 與策略組。

透過日誌與連線紀錄驗證規則聯動

更新完成後,不要只檢查檔案日期。更有效的驗證方式是觀察實際連線命中了哪條規則。開啟用戶端的「連線」頁面,清除舊紀錄,再分別存取私有位址、中國大陸網站與應採用預設策略的網站。紀錄中應能看到目標網域、目標 IP、規則類型與最終策略。

建議執行的四組測試

  1. 私有網路:存取路由器或區域網路服務,確認 GEOSITE,privateGEOIP,private 或明確網段規則優先命中。
  2. 網域分類:存取一個分類明確的網域,確認命中 GEOSITE,而不是直接落到 GEOIP 或 MATCH。
  3. IP 備援:觀察只有目標 IP 的連線,確認 GEOIP 是否依預期分流。
  4. 預設規則:選擇不屬於上述分類的網域,確認最後進入 MATCH 指定的策略組。

若使用 TUN 模式,應用程式流量可能先以 IP 形式進入核心。Mihomo 可以結合 DNS 對映與網域嗅探還原部分網域資訊,但結果會受協定、加密方式與用戶端設定影響。GEOSITE 長期未命中時,應同時檢查「設定」→「網路」中的 TUN、DNS 與嗅探選項,而不是反覆更換資料庫。

log-level: info

rules:
  - GEOSITE,private,DIRECT
  - GEOSITE,cn,DIRECT
  - GEOIP,private,DIRECT,no-resolve
  - GEOIP,CN,DIRECT,no-resolve
  - MATCH,節點選擇

info 層級通常足以查看連線與規則結果。只有在定位資料庫載入失敗、DNS 對映或嗅探問題時,才暫時切換到 debug。完成排查後恢復原有層級,避免長期累積大量日誌。

常見更新失敗與處理順序

下載成功但重新啟動後仍使用舊結果

先確認新檔案放入的是核心工作目錄,而不是安裝套件目錄或下載目錄。接著檢查 geodata-mode:設定要求 MMDB 時,只替換 GeoIP.dat 不會改變 GeoIP 判斷。圖形用戶端還可能管理多個核心目錄,應以目前啟用核心的日誌路徑為準。

日誌提示 GeoSite 標籤不存在

這通常是規則標籤與資料來源標準不一致。先定位報錯規則,例如 GEOSITE,category-ads-all,REJECT,再查看目前資料來源是否提供該分類。不要將名稱相近的標籤視為完全等價;不同維護專案可能合併、拆分或重新命名分類。

自動更新在啟動階段逾時

先將更新間隔恢復為 24 小時,並確認下載網址會直接回傳資料檔案。首次部署可以在可連線環境手動放入資料庫,再啟動核心。如此即使遠端更新暫時失敗,現有規則仍可載入。對於伺服器部署,還要檢查 systemd 服務使用者是否擁有工作目錄的寫入權限。

更新後大量流量改用其他策略

立即還原成套備份,然後比較新舊資料來源、標籤涵蓋範圍與規則順序。資料庫更新會改變分類結果,但不應在沒有紀錄的情況下同時修改規則表、DNS 與 TUN 設定。一次只變更一個變數,才能判斷偏差來自資料還是設定。

建立可重複的維護週期

個人桌機可採用每天自動檢查、每月人工複核的節奏。長期執行的伺服器則應記錄核心版本、資料庫來源、發布日期、啟用模式與最近驗證結果。發生分流異常時,這五項資訊比單純記錄「已更新」更有用。

GeoIP 與 GeoSite 的維護重點不是追求最高更新頻率,而是讓資料格式、標籤標準、規則順序與核心工作目錄保持一致。自動更新負責取得檔案,手動備份提供回復能力,連線紀錄則負責驗證最終分流。三者同時具備,資料庫更新才算真正完成。

前往用戶端下載 Windows、macOS、Android、iOS、Linux