GeoIP、GeoSite 資料庫更新教學:mihomo geodata 模式與規則比對
了解 GeoIP、GeoSite 資料檔的來源與格式差異,掌握 mihomo 的 geodata-mode、自訂更新網址及自動更新設定,並排查資料過舊的常見問題。
GeoIP 與 GeoSite:先分清 IP 資料和網域分類
在 mihomo 的規則設定中,GEOIP,CN,DIRECT 和 GEOSITE,cn,DIRECT 看起來相近,實際上使用的是兩種不同資料。GeoIP 會將 IP 位址範圍歸類至國家、地區或資料集定義的類別;GeoSite 則將網域歸類至網站、服務或主題類別。資料庫只提供比對依據,連線最終直連或經由代理,仍取決於規則右側指定的策略。
例如,造訪中國大陸的網站時,網域可能先符合 GEOSITE,cn;若未符合,後續規則也可能透過解析出的目標 IP 符合 GEOIP,CN。網站若使用境外 CDN、共用雲端服務或新網域,兩者比對結果不同不一定代表資料庫損毀,也可能是分類標準與實際部署方式不同。
| 資料檔 | 主要用途 | 注意事項 |
|---|---|---|
geoip.dat | DAT 模式下,提供 GEOIP 規則所需的 IP 分類 | 檔案包含哪些分類,取決於發布來源 |
Country.mmdb | MMDB 模式下,提供 IP 地理位置資料 | 格式不同於 DAT,不能只改副檔名替換 |
geosite.dat | 為 GEOSITE 規則提供網域分類 | 分類名稱與屬性會因資料集而異 |
資料來源與分類標準
常見來源包括 Loyalsoldier 的 v2ray-rules-dat,以及 MetaCubeX 的 meta-rules-dat。這些是資料建置與發布專案,並非代理節點供應商。即使兩個來源都提供 geosite.dat,也不能假設分類、附加屬性和收錄範圍完全相同。切換來源前,請確認設定中使用的每個分類都存在於目標資料集。
GeoIP 的國家歸屬不等於服務所屬公司的國家,也不代表連線時一定會經過該網路路徑。GeoSite 的分類標籤也不代表網站的每個子網域都採用相同部署方式。
geodata-mode:決定 GEOIP 使用哪種格式
geodata-mode 是 mihomo 的頂層設定項目。設為 true 時,GEOIP 使用 DAT 資料;設為 false 時,則使用 MMDB 資料。這個開關不是「啟用所有地理規則」的總開關,也不會自動將網域規則轉換為 IP 規則。GeoSite 仍會讀取自己的網域資料庫。
# 頂層設定,與 rules、dns 等欄位同層
geodata-mode: true
geo-auto-update: true
geo-update-interval: 24
geox-url:
geoip: "https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geoip.dat"
geosite: "https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geosite.dat"
mmdb: "https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/country.mmdb"
這組範例將自動更新間隔設為 24 小時,並明確指定三個資料網址。這不是完整的代理設定,無法取代訂閱中的節點和策略群組。啟用 DAT 模式時,排查 GEOIP 應優先檢查 geoip 網址及對應檔案;切換回 MMDB 模式時,則應檢查 mmdb。不要只因「某個檔案剛下載成功」,就認定目前使用的資料也已更新。
設定欄位必須寫入最終生效的設定檔
Clash Nyanpasu 的介面設定、訂閱設定和覆寫設定可能會共同產生核心執行檔。實際操作入口會隨用戶端版本而異,請以「最終生效的設定中是否包含上述頂層欄位」為準。若直接修改下載的訂閱檔案,下次更新訂閱時可能會覆蓋變更;需要長期保留的自訂設定,應透過用戶端支援的覆寫或設定合併機制儲存。
- 確認目前啟用的是 mihomo,而非只支援另一套設定欄位的核心。
- 將
geox-url放在 YAML 頂層,不要縮排到dns或profile之下。 - 修改後重新載入設定;若目前版本不會重新初始化相關設定,請重啟核心確認。
- 開啟執行記錄檢查解析錯誤,不要只憑編輯器顯示「儲存成功」就認定設定已生效。
更新資料庫:自動排程、手動更新與離線替換
訂閱更新、規則集更新和 geodata 更新是三條不同的流程。訂閱更新通常會下載 YAML 或節點資訊;rule-providers 依照自己的網址和更新間隔更新;只有 geo-auto-update 是地理資料庫的自動更新設定。按一次訂閱更新,不代表 GeoIP 和 GeoSite 已完成更新。
自動更新須同時檢查開關與網路連線
- 確認生效的設定中有
geo-auto-update: true,並確認geo-update-interval: 24的單位是小時。 - 確認執行環境可以連線至實際下載網址。GitHub 發布檔案可能會重新導向,只測試能否開啟網站首頁並不足夠。
- 查看核心記錄中的下載、載入和錯誤訊息,確認失敗發生在網域解析、連線逾時、HTTP 回應還是檔案解析階段。
- 若用戶端提供地理資料庫更新功能,可手動執行一次測試;若介面沒有此功能,請勿將訂閱更新按鈕當作替代方案。
有些連線需要透過代理才能取得資料,但啟動代理又需要本機資料庫,因而形成啟動依賴。處理時應先保留可用的舊檔案,讓核心能夠啟動,再修復下載路徑。不要先清空整個資料目錄,否則問題可能從「資料較舊」變成「核心無法載入設定」。
依檔案類型離線替換
線上下載持續失敗時,可在能連線至發布來源的網路環境取得相應檔案,再傳送至目標裝置。先透過用戶端的執行資訊或記錄找出核心實際使用的資料目錄,備份舊檔案並停止核心,再依照原有檔名替換對應資料,最後重新啟動。不要憑安裝目錄的位置猜測資料目錄;可攜式模式與一般安裝的儲存位置可能不同。
下載的檔案必須是發布的原始檔案。若儲存的是登入頁面、錯誤頁面或壓縮檔,卻將檔名改成 geosite.dat,核心仍會解析失敗。可檢查 HTTP 狀態、檔案類型與發布說明;檔案修改時間變新,並不能證明內容可用。
不要在核心讀取檔案時直接覆寫資料庫,也不要將 MMDB 檔案改名為 DAT。替換後若無法啟動,請先還原備份,再依據記錄找出格式或分類相容性問題。
規則比對:更新資料後仍須檢查規則順序
mihomo 會依照由上而下的順序比對規則,最先符合的規則會決定連線去向。更新資料庫不會改變規則順序。若最上方已有範圍寬泛的網域規則或 MATCH,後面的 GEOIP、GEOSITE 規則可能根本不會執行。
# 規則片段:PROXY 必須是已存在的節點或策略群組名稱
rules:
- IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
- IP-CIDR,10.0.0.0/8,DIRECT,no-resolve
- IP-CIDR,172.16.0.0/12,DIRECT,no-resolve
- GEOSITE,cn,DIRECT
- GEOIP,CN,DIRECT
- MATCH,PROXY
以上片段只示範比對順序,並非完整的區域網路與 IPv6 分流方案。前三條涵蓋常見的 IPv4 私有網段;網域分類規則排在國家 IP 分類之前,最後才交由代理策略處理。若現有設定已有 rules,請合併規則項目,不要再新增第二個同名頂層鍵。PROXY 也不是所有設定中都內建的策略,請改成實際使用的策略群組名稱。
no-resolve 會影響 IP 規則的比對結果
IP 類規則可以使用 no-resolve,表示不會為了比對這條規則而主動解析網域。如果連線中繼資料沒有可用的目標 IP,這條規則可能無法符合。因此,若在 GEOIP,CN,DIRECT 後直接加上 no-resolve,可能會改變原本必須透過解析才能完成的分流行為。是否加入,應依 DNS、連線中繼資料和實際需求決定。
使用 fake-ip 時,應用程式看到的可能是用於映射的位址,不能直接用來判斷真實伺服器所在國家。請查看連線詳細資訊中的還原網域、目標資訊、符合的規則和最終出口。若應用程式使用自己的加密 DNS,或只將 IP 傳給核心,GEOSITE 是否有機會參與比對,還取決於能否取得網域資訊,以及嗅探等相關設定。
資料過舊的症狀:先分辨缺少分類與分類不符預期
| 症狀 | 優先檢查項目 | 驗證方式 |
|---|---|---|
| 新網域未符合預期分類 | 資料尚未收錄,或分類標準不同 | 核對發布來源的分類內容與本機更新時間 |
| 載入設定時提示分類不存在 | 規則標籤拼字錯誤,或已更換資料來源 | 檢查來源是否提供該分類及屬性 |
| 更新後仍符合舊規則 | 檔案未重新載入,或前置規則已先符合 | 重新載入後建立新連線,查看比對詳細資訊 |
| 檔案下載成功但解析失敗 | 下載的內容不是預期格式 | 檢查回應內容及 DAT、MMDB 檔案類型 |
| CDN 位址的路由方式改變 | DNS 回傳位址改變,或 GeoIP 歸屬改變 | 比較更新前後實際的解析結果 |
「中國大陸網站走了代理」不代表 GeoSite 一定過舊。還要排除代理模式設為全域、目標網域被自訂規則提前比對、連線缺少網域資訊,以及策略群組選錯出口等情況。反過來說,即使資料庫中的國家歸屬正確,也不一定符合某項服務對帳戶地區或著作權地區的要求。
rule-providers 不是 geosite.dat 的另一種檔名
RULE-SET 引用的是 rule-providers 定義的規則集,可採用 YAML、文字或支援的 MRS 格式;GEOSITE 則查詢地理網域資料庫。兩者的資料來源、格式和更新機制各不相同。將規則集網址填入 geox-url.geosite,或將 DAT 檔案放進一般文字規則集,都不會自動轉換格式。
更新後的驗證順序:每次只變更一個變數
資料庫更新是否有效,最終要看「同一個目標的新連線符合了哪條規則」。瀏覽器可能會重複使用 HTTP/2 或 HTTP/3 連線,已建立的連線也不會因規則檔更新而自動切換出口。因此,請關閉相關連線或重新啟動測試應用程式,再重新連線。
- 記錄基準:選定一個需要直連的網域和一個需要代理的網域,記錄目前的規則模式、符合的規則、策略群組與出口。
- 只更新資料:暫時不要同時修改 DNS、TUN 和規則順序,避免結果改變後無法判斷原因。
- 確認載入成功:檢查記錄中是否有下載或解析錯誤;必要時重新啟動核心,確認設定能正常啟動。
- 建立新連線:重新造訪相同網域,並在連線詳細資訊中確認符合的是 GEOSITE、GEOIP 還是其他規則。
- 處理例外情況:若來源中的分類與實際需求不同,可新增範圍明確的網域規則,並將其放在相關的寬泛規則之前。
若要暫時讓特定網域直連,可新增 DOMAIN,example.com,DIRECT 這類精確規則;只有確實需要涵蓋子網域時,才考慮使用 DOMAIN-SUFFIX。不建議為了解決單一網站的問題,就將整個雲端服務供應商的大量 IP 設為直連,這可能影響使用共用位址的其他服務。
日常維護可固定執行三項工作:保留一份可供啟動的資料庫備份、檢查自動更新是否成功,再透過新連線測試重要網站。GeoIP 與 GeoSite 更新處理的是「比對依據是否足夠新且可用」;規則順序、DNS 行為和策略群組的路由仍須分別檢查。相關設定概念請參閱技術參考;初次設定則可從使用指南開始。