GeoIP 與 GeoSite:依 IP 或網域分流
mihomo 是負責建立代理連線、解析 DNS 與執行規則的核心。Clash Verge Rev 等桌面用戶端則提供操作介面並管理核心。本文設定適用於 mihomo,無法直接套用至不支援這些欄位的舊版 Clash 核心。
GEOIP 與 GEOSITE 都是規則類型,但比對的對象不同。GeoIP 會將 IP 位址範圍歸類至國家、地區或其他資料集;GeoSite 則將網域歸類至網站、服務或主題類別。兩者都依賴外部維護的資料檔,並非由核心即時查詢線上地理位置服務。
| 比較項目 | GeoIP | GeoSite |
|---|---|---|
| 比對對象 | 連線的目標 IP 位址 | 核心已知的目標網域 |
| 常見規則 | GEOIP,CN,DIRECT | GEOSITE,cn,DIRECT |
| 常見檔案 | geoip.dat 或 country.mmdb | geosite.dat |
| 常見限制 | IP 所屬地區不等於網站服務的所在地 | 分類可能未收錄新網域,也不會自動涵蓋純 IP 連線 |
例如,某項服務可能透過分布在多個地區的 CDN 提供內容。只看伺服器 IP 所屬地區,未必能判斷服務類型;先用 GeoSite 比對網域,再用 GeoIP 處理其餘連線,通常更能清楚表達分流需求。GeoIP 的結果也不能當作實際地理位置的證明,資料更新頻率及 IP 範圍歸屬變動都會影響判斷。
資料庫來源與檔案格式:先確認載入模式
資料通常由社群專案整理並發布。常見來源包括 MetaCubeX 的 meta-rules-dat,以及其他維護網域和 IP 分類的專案。即使檔名同為 geosite.dat,不同發布者收錄的分類名稱、更新頻率和內容也可能不同。規則中的 cn、google 等名稱,必須確實存在於目前使用的資料集。
geodata-mode 決定 GeoIP 使用的格式
geodata-mode: true:GeoIP 使用 DAT 格式,並讀取geox-url.geoip指定的資料來源。geodata-mode: false:GeoIP 使用 MMDB 格式,並讀取geox-url.mmdb指定的資料來源。GEOSITE使用geosite.dat;GeoIP 改用 MMDB 格式,不會讓 GEOSITE 自動停用。
副檔名不會轉換檔案格式。將 MMDB 檔改名為 geoip.dat,DAT 載入器仍無法讀取。同樣地,規則集使用的 YAML、文字或 MRS 檔案,也不能直接填入 geox-url.geosite 作為資料庫網址。
自動更新設定:geox-url 與更新週期
以下範例使用 DAT 模式,資料來源為 MetaCubeX 發布的檔案。範例網址是資料庫來源,並非用戶端安裝檔網址。請將這些項目設在設定檔最上層,與 dns、rules 同一層;不要縮排到策略群組或 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"
geo-auto-update: true:啟用核心的 Geo 資料自動更新功能。geo-update-interval: 24:更新週期為 24 小時,不是 24 秒。geox-url.geoip:DAT 模式下的 GeoIP 資料來源。geox-url.geosite:GeoSite 資料來源,供GEOSITE規則使用。
此範例只設定實際會用到的兩種檔案。如果目前設定使用 MMDB,請保留 geodata-mode: false,並設定適用的 geox-url.mmdb;不要只改下載網址,卻忘了切換載入模式。設定更新週期為 24 小時,也不代表資料每 24 小時一定會變動:上游未發布新資料、下載失敗,或核心未持續執行,都會影響更新結果。
在 Clash Verge Rev 中保存持久設定
- 開啟「設定檔」,確認目前啟用的是哪一份訂閱設定。
- 使用用戶端提供的合併設定或覆寫功能,加入上述最上層欄位。不同版本的編輯入口名稱可能不同,請檢查最後生效的設定確認結果。
- 重新載入設定;如果更新工作或資料庫狀態沒有如預期變動,再重新啟動核心並查看啟動記錄。
- 檢查生效設定中是否只有一組明確的
geox-url,以及geo-auto-update是否仍為true。
直接編輯訂閱下載的檔案,可能在下次更新訂閱時被覆寫。使用覆寫功能時也要留意清單的合併方式:某些操作會取代整段 rules,而不是接續在原清單後方。修改前請先備份現有設定,並確認用戶端目前採用的合併順序。
GEOIP、GEOSITE 與規則執行順序
以下片段示範一種常見順序:先處理明確指定的網域,再處理網域分類,最後處理 IP 分類與預設規則。範例中的「節點選擇」必須是現有設定已定義的策略群組名稱;若實際名稱不同,請一併修改。這只是規則片段,不是包含節點、DNS 和監聽連接埠的完整設定。
rules:
- DOMAIN-SUFFIX,example.com,DIRECT
- GEOSITE,google,節點選擇
- GEOSITE,cn,DIRECT
- GEOIP,CN,DIRECT,no-resolve
- MATCH,節點選擇
mihomo 的一般規則會依清單順序由上而下檢查,符合後就採用對應策略。因此,排在前面的明確網域規則可以優先於後方的分類規則,而 MATCH 應放在最後作為預設規則。若將 MATCH 放在第一行,後續 Geo 規則就沒有機會決定這些連線的去向。
GEOSITE 分類名稱並非通用固定字典
GEOSITE,google,節點選擇 表示使用目前資料庫中的 google 分類,並不代表核心會自動收集所有包含該單字的網域。更換 GeoSite 資料來源後,請確認使用的分類仍然存在;若載入時提示分類不存在,應修正規則或改用相容的資料來源,而不是一再切換節點。
GeoSite 比對需要核心掌握網域資訊。若應用程式直接連線至 IP,或接管流量的鏈路未保留或還原網域資訊,就不能期待它只憑目標 IP 命中某個網站分類。TUN 模式擴大的是流量接管範圍,不代表每條連線都會帶有可供 GeoSite 判斷的網域。
no-resolve:避免規則為了比對而主動解析網域
在 GEOIP,CN,DIRECT,no-resolve 中,no-resolve 是規則參數。它會告訴核心:執行這條 IP 規則時,不要只為了判斷 IP 歸屬,就主動將目標網域解析成 IP。它不會全域關閉 DNS,也不會阻止應用程式、代理連線或前置規則進行解析。
| 連線狀態 | 使用 no-resolve | 未使用 no-resolve |
|---|---|---|
| 目標已有可用的實際 IP | 可使用現有 IP 判斷歸屬 | 可判斷歸屬 |
| 只有網域,尚無可用的實際 IP | 不為此規則主動解析,繼續檢查後續規則 | 可能觸發解析,再判斷歸屬 |
| 前面的網域規則已命中 | 不會執行到這條規則 | 不會執行到這條規則 |
如果想減少不必要的本機解析,可以先用 GeoSite 涵蓋主要網域,再為 GeoIP 補充規則加上 no-resolve。但這也代表,未被網域規則涵蓋且沒有實際目標 IP 的連線,可能直接套用後方的 MATCH。這是規則設計的結果,不應立即判定為 GeoIP 資料損毀。
如果希望其餘網域都先解析,再依 IP 地區決定是否直連,可以使用 GEOIP,CN,DIRECT。此時也要檢查 DNS 解析路徑、上游連線能力及隱私需求。使用 fake-ip 模式時,尤其要區分虛擬位址與實際目標位址,不能把看到的 fake-ip 位址當成 GeoIP 應查詢的公網位址。
驗證更新與分流:分別檢查設定、檔案和連線
驗證時應分成三個層面。設定成功載入,只代表欄位和必要資源通過相關檢查;資料庫下載成功,只代表資源可以取得;實際連線命中預期規則,才表示這次分流達到目的。不要只看用戶端開關或網頁是否能開啟。
第一層:檢查核心版本與設定語法
獨立執行 mihomo 時,可以使用以下指令。資料目錄和設定檔路徑必須指向實際使用的位置,否則測試的可能是另一套檔案。桌面用戶端通常有自己的工作目錄;核心執行期間,請勿用其他程序同時改寫該目錄。
mihomo -v
mihomo -t -d ./mihomo-data -f ./config.yaml
-v 用來確認實際執行的核心版本;-t 用來測試設定。若出現未知欄位或資源載入錯誤,請先確認核心是否為支援相關設定的 mihomo,再檢查 YAML 縮排和資料來源;不要只憑用戶端名稱推斷核心功能。
第二層:檢查下載記錄與實際工作目錄
- 在用戶端的「記錄」頁面,搜尋 Geo 資料載入、下載或更新相關記錄,並留意逾時、HTTP 狀態碼及解析失敗。
- 請在核心實際使用的工作目錄中檢查
geoip.dat、geosite.dat,或 MMDB 模式所用的對應檔案,不要只查看訂閱檔所在的目錄。 - 記錄更新前後的檔案修改時間、大小及錯誤記錄。修改時間變動可作為輔助線索,但無法單獨證明分類內容有所更新。
第三層:透過新連線確認命中規則
- 將用戶端切換至「規則」模式。全域模式或直連模式不適合用來驗證這份分流清單。
- 關閉目標應用程式已有的連線,或在「連線」頁面關閉對應連線,再重新開啟測試網域。
- 查看新連線的目標網域、目標 IP、命中規則及策略鏈,確認命中的是
GEOSITE、GEOIP還是MATCH。 - 每次只調整一項設定,重新載入後再測試一次並記錄結果。
資料庫更新後,舊連線不會自動重新選擇路徑。瀏覽器也可能重複使用 HTTP/2、HTTP/3 連線,因此重新整理頁面不一定會建立全新連線。如果同時啟用系統代理和 TUN,請先確認測試應用程式的流量確實進入目前的核心,再判斷規則是否異常。
常見問題:下載失敗、分類不存在與規則未命中
瀏覽器能開啟資料庫網址,核心卻下載失敗
瀏覽器可能使用代理,而核心的資源下載路徑、DNS 狀態或啟動階段可用的策略都可能不同,兩者不能直接畫上等號。先確認記錄中的實際下載網址和失敗階段:連線逾時優先檢查網路路徑;HTTP 404 優先檢查發布網址;解析失敗則確認下載到的是否為 HTML 錯誤頁或錯誤格式。
首次啟動時若缺少資料庫,也可能遇到依賴循環:規則載入需要資料庫,下載資料庫又需要尚未可用的代理路徑。可以先在網路可連線時取得相關檔案,放入實際工作目錄,再啟動核心。手動放入檔案後,仍應保留正確的來源設定,以便日後更新。
更新成功,卻提示某個 GeoSite 分類不存在
通常是規則名稱與資料來源不相符。請先核對資料發布專案提供的分類清單,再檢查規則拼字和分類屬性。不要把某個訂閱使用的自訂分類名稱,當成所有資料庫都有的標準名稱;也不要試圖透過變更副檔名來修復。
連線至中國大陸網站仍命中 MATCH
請依序檢查:目前使用的 GeoSite 分類是否收錄該網域;前方是否已有其他規則先行命中;連線是否只有網域,而 GeoIP 規則又使用了 no-resolve;最後生效的設定是否被訂閱更新覆寫。確認資料庫確實缺少相關內容後,再考慮新增範圍明確的 DOMAIN 或 DOMAIN-SUFFIX 規則。
需要了解基礎概念時,可參閱術語表;想進一步了解 DNS、規則與核心如何配合,請閱讀協定手冊。排查問題時,保留原始設定和記錄,比同時更換資料庫、節點和 DNS 更容易找出原因。