先分清 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 規則不會主動解析並命中。
- 連線已帶有目標 IP:GEOIP 可直接判斷,
no-resolve通常不會妨礙匹配。 - 目標仍是網域:優先依靠 DOMAIN、DOMAIN-SUFFIX 或 GEOSITE 規則處理。
- 設定依賴 GEOIP 判斷網域解析結果:不要未經測試就加入
no-resolve。
設定自動更新下載來源
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 小時或更短。資料庫發布頻率通常低於代理節點狀態的變化頻率,過於頻繁只會增加啟動階段的網路請求。
下載來源需要同時符合四個條件
- 檔案格式相符。GeoIP 位址必須回傳核心目前模式支援的資料檔案,不能把網頁下載頁面當成二進位檔案網址。
- 檔名與內容相符。
geoip項目指向 IP 資料,geosite項目指向網域分類資料。 - 標籤標準可確認。設定中使用的
cn、private、category-ads-all等標籤必須存在於該資料來源。 - 核心啟動時可以存取。首次下載發生在規則生效前時,下載鏈路不能依賴尚未載入的同一套規則,形成循環依賴。
修改後先檢查設定,再重新載入核心
命令列環境可使用核心本身檢查 YAML。-d 指向執行目錄,資料庫也會從這個目錄讀取;-f 指向主要設定檔。路徑包含空格時需要加上引號。
mihomo -d "/opt/mihomo" -f "/opt/mihomo/config.yaml" -t
用戶端使用者可在「設定檔」頁面選取目前設定,再執行「檢查」或「重新載入」。選單名稱會因用戶端版本不同而略有差異,但操作順序應維持為:儲存可回復的備份、檢查 YAML、重新載入核心、查看日誌。若日誌出現無法下載、檔案格式錯誤或標籤不存在,應先還原舊檔案,不要連續修改多項設定。
離線環境手動替換資料庫
伺服器無法直接存取下載來源、企業網路限制外部連線,或需要固定某個資料庫版本時,可以離線替換。關鍵不在於將檔案複製到程式安裝目錄,而是找到 Mihomo 的工作目錄。命令列部署的工作目錄由 -d 參數決定;圖形用戶端通常會在「設定」→「設定檔目錄」或「設定」→「應用程式目錄」提供開啟入口。
標準替換流程
- 在可連線的裝置下載與目前設定相符的
GeoIP.dat、GeoSite.dat或Country.mmdb。 - 記錄發布版本與下載日期,例如
2026-05-28,方便日後判斷是否需要更新。 - 在目標裝置停止 Mihomo 核心,確認系統匣選單或服務管理員顯示核心已退出。
- 開啟工作目錄,將舊檔案重新命名為
GeoIP.dat.bak與GeoSite.dat.bak。 - 複製新檔案,並維持核心預期的大小寫與檔名。
- 執行設定檢查,然後啟動核心並觀察前 30 秒的日誌。
- 完成三類測試:私有位址、常用中國大陸網域、預設代理網域。
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 過舊的典型表現
- 新分配的 IP 區段落入
MATCH,沒有命中預期的GEOIP,CN。 - 雲端服務或 CDN 調整位址歸屬後,連線被分配到與預期不同的策略組。
- IPv4 命中正常,新增的 IPv6 區段卻採用預設策略。
- 同一網域每次解析到不同位址,導致策略在 DIRECT 與預設代理之間變動。
GeoSite 過舊的典型表現
- 服務啟用新網域後,新網域沒有被納入原有分類。
- 廣告分類無法涵蓋近期增加的追蹤網域。
- 設定引用某個新標籤時,核心日誌提示對應的 GeoSite 類別不存在。
- 資料來源調整標籤結構後,舊規則仍能載入,但涵蓋範圍已經改變。
單一網域走錯策略不能直接證明資料庫過舊。也可能是規則順序、DNS 快取、Fake-IP 對映、嗅探設定或使用者自訂覆寫造成。判斷時應先在連線頁面查看實際命中的規則,再對照目標網域、目標 IP 與策略組。
透過日誌與連線紀錄驗證規則聯動
更新完成後,不要只檢查檔案日期。更有效的驗證方式是觀察實際連線命中了哪條規則。開啟用戶端的「連線」頁面,清除舊紀錄,再分別存取私有位址、中國大陸網站與應採用預設策略的網站。紀錄中應能看到目標網域、目標 IP、規則類型與最終策略。
建議執行的四組測試
- 私有網路:存取路由器或區域網路服務,確認
GEOSITE,private、GEOIP,private或明確網段規則優先命中。 - 網域分類:存取一個分類明確的網域,確認命中 GEOSITE,而不是直接落到 GEOIP 或 MATCH。
- IP 備援:觀察只有目標 IP 的連線,確認 GEOIP 是否依預期分流。
- 預設規則:選擇不屬於上述分類的網域,確認最後進入
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 設定。一次只變更一個變數,才能判斷偏差來自資料還是設定。
建立可重複的維護週期
個人桌機可採用每天自動檢查、每月人工複核的節奏。長期執行的伺服器則應記錄核心版本、資料庫來源、發布日期、啟用模式與最近驗證結果。發生分流異常時,這五項資訊比單純記錄「已更新」更有用。
- 每天:由
geo-auto-update按 24 小時間隔檢查。 - 每月:核對 GeoIP、GeoSite 來源是否仍在維護,抽樣測試四類規則。
- 升級核心後:重新確認
geodata-mode、檔名與工作目錄。 - 更換資料來源時:先檢查標籤清單,再調整規則,不直接覆寫正式環境檔案。
- 出現偏差時:儲存連線紀錄、命中規則、目標 IP 與日誌時間點。
GeoIP 與 GeoSite 的維護重點不是追求最高更新頻率,而是讓資料格式、標籤標準、規則順序與核心工作目錄保持一致。自動更新負責取得檔案,手動備份提供回復能力,連線紀錄則負責驗證最終分流。三者同時具備,資料庫更新才算真正完成。