先釐清 GeoIP、GeoSite 與規則集的差異
網站流量走錯出口,不一定是節點故障。分流結果至少受三個環節影響:連線帶有的網域或目標 IP、設定中的規則順序,以及規則引用的資料。更新 Geo 資料只能處理最後一項,無法取代 DNS 排查,也不會自動將新規則加進設定。
本文適用於使用 mihomo 核心的 Clash 用戶端。Clash 是用戶端生態系中常見的名稱,不代表所有核心都支援相同欄位;舊版 Clash 核心不能直接套用本文的 GEOSITE 與自動更新設定。操作前,請先在用戶端的核心資訊中確認實際執行的是 mihomo,而不只是看視窗標題。
| 資料或設定 | 內容與用途 | 呼叫方式 |
|---|---|---|
geoip.dat | 依國家、地區或資料來源分類整理的 IP 網段 | DAT 模式中的 GEOIP |
country.mmdb | MMDB 格式的 IP 地理分類資料,本機檔案常見名稱為 Country.mmdb | MMDB 模式中的 GEOIP |
geosite.dat | 依網站、服務或類別整理的網域集合 | GEOSITE |
rule-providers | 獨立宣告、下載及更新的規則集合 | RULE-SET |
GeoSite 分類並非即時辨識網站用途,而是由資料維護者整理的網域清單。GeoIP 也不是精準定位工具:雲端服務、CDN、跨境流量調度及 IP 位址移轉,都可能使地理分類與實際連線需求不符。對重要服務而言,明確指定網域的規則,通常比單純依國家分類 IP 更容易控管。
設定 geox-url:資料下載來源與自動更新間隔
以下是用來合併至現有設定的頂層片段,並非包含節點的完整訂閱設定。此設定採用 GeoIP DAT 模式,指定 GeoIP、GeoSite 和 MMDB 的下載網址,並啟用每 24 小時更新一次 Geo 資料。範例使用 MetaCubeX 的 meta-rules-dat 發佈檔案;實際使用前,請確認目前的網路可以連線至這些網址。
geodata-mode: true
geodata-loader: memconservative
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"
逐一檢視欄位,別把小時誤當成秒
geodata-mode: true:讓GEOIP使用 GeoIP DAT 資料;設為false時則使用 MMDB 資料。這個開關不是啟用或停用 GeoSite 的總開關。geodata-loader: memconservative:選擇較節省記憶體的 DAT 載入方式。這不會改變規則優先順序,也不是加速下載的開關。geo-auto-update: true:啟用核心的 Geo 資料定期更新功能;用戶端也可能另外提供手動更新入口。geo-update-interval: 24:單位是小時,也就是 24 小時,不是 24 秒。核心執行期間才會進行定期更新;電腦關機時不會繼續下載。geox-url:指定資料來源。只修改網址,不代表目前使用的資料已經替換,還需要實際完成一次更新並載入。
範例也保留 mmdb 網址,方便日後切換 GeoIP 資料模式;這不代表一次 GEOIP 判斷會同時查詢 DAT 和 MMDB。若使用的 MMDB 資料只有國家代碼,就不能直接套用其他 DAT 資料來源才提供的自訂分類名稱。
訂閱用戶端如何保留更新設定
許多用戶端會先下載遠端訂閱,再產生執行時使用的設定檔。直接編輯產生的檔案可能暫時生效,但下次更新訂閱時就會被覆蓋。請先分清楚「訂閱原文」、「用戶端覆寫」和「核心最終設定」這三個位置。
- 記錄目前環境。在用戶端的核心資訊或啟動記錄中,記下 mihomo 版本、目前設定名稱,以及 Geo 資料所在目錄。檔案目錄請以用戶端提供的「開啟設定目錄」或類似入口為準,不要直接套用其他用戶端的路徑。
- 備份可正常運作的設定。保留目前的覆寫內容和舊資料庫。包含訂閱網址、節點密碼的檔案請只留在本機,不要張貼到公開討論區。
- 寫入持久化設定層。如果用戶端提供 Merge、覆寫或擴充設定功能,請透過該功能合併上述頂層欄位;若自行維護本機 YAML,則直接編輯該檔案。
- 檢查最終設定。重新載入後,確認實際執行的設定中保留了
geodata-mode、geox-url和更新間隔。只在編輯器中看到欄位,還不能證明設定已傳入核心。 - 手動觸發一次更新。使用用戶端提供的 Geo 資料更新功能,並查看核心記錄。不同用戶端的選單名稱可能不同,「更新訂閱」不等於「更新 Geo 資料」。
如果用戶端沒有 Geo 資料更新按鈕,可以先保留自動更新設定,或依照下文的離線替換流程處理。首次啟動時若缺少必要資料,核心可能會嘗試下載檔案;但如果此時尚未建立可用的代理,就會形成「啟動需要資料,下載資料又需要代理」的依賴問題。先離線準備資料,通常比反覆重新啟動更直接。
GEOIP 與 GEOSITE 的正確呼叫方式
以下規則片段假設現有設定中已有一個名為 代理選擇 的策略群組。若實際群組名稱不同,請一併修改;DIRECT 是內建的直連策略,不必自行建立。請將片段合併至現有的 rules,不要再新增第二個 rules 鍵。
mode: rule
rules:
- DOMAIN,example.com,DIRECT
- GEOSITE,cn,DIRECT
- GEOSITE,geolocation-!cn,代理選擇
- GEOIP,CN,DIRECT,no-resolve
- MATCH,代理選擇
由上而下比對,符合後即停止
DOMAIN,example.com,DIRECT 是精確網域規則,用來示範單一網站的例外應放在大類規則之前。接著兩條 GeoSite 規則會依網域分類選擇出口。範例中的 cn 和 geolocation-!cn 必須確實存在於目前使用的資料來源;若改用精簡版資料庫,請重新確認這些分類是否仍在。
GEOIP,CN,DIRECT,no-resolve 則會檢查已知的目標 IP 是否屬於 CN 分類。尾端的 no-resolve 表示這條 IP 規則不會額外發起網域解析;如果連線已經有可用的目標 IP,仍可進行比對。它不是「關閉 DNS」,也不會讓所有請求都略過 DNS 模組。
最後的 MATCH 會接手前面規則都未命中的連線。若將它放在第一行,後面的 GeoSite 和 GeoIP 規則就沒有機會執行。使用全域模式時,流量會依全域策略轉送,無法用來驗證這份分流規則的順序。
缺少網域資訊時,GeoSite 不會自動補上
如果應用程式直接連線至 IP,或流量進入核心時沒有可對應的網域,GeoSite 規則可能無法命中。TUN 只是一種流量接入方式,不代表每條連線都會自然帶有網域資訊。此時應檢查 DNS 是否經過預期路徑、Fake-IP 對應是否有效,以及是否需要並正確啟用流量嗅探;不要只靠反覆更換 GeoSite 檔案來解決資訊不足的問題。
更新後如何確認確實生效
「下載完成」、「檔案已替換」和「新連線命中新資料」是三個不同的檢查點。只看到檔案修改時間變動,不能證明目前的核心已載入新資料;只看到某個網站能開啟,也不能證明流量走的是預期出口。
- 確認下載與載入結果。檢查更新操作後的記錄,區分網路逾時、下載失敗、資料解析失敗和分類不存在等狀況。記錄原文會因核心版本而異,請記下具體錯誤訊息與發生時間。
- 確認執行模式與規則。切換至規則模式,並在最終設定中確認 Geo 規則位於
MATCH前面,且目標策略群組確實存在。 - 重新建立測試連線。先關閉測試應用程式的既有連線,再重新送出請求。資料庫更新後,已建立的 TCP 連線通常不會自動切換至另一條代理路徑。
- 查看連線詳細資訊。核對目標網域、目標 IP、命中規則及實際出口。如果顯示命中前置的
DOMAIN-SUFFIX,表示這次連線並未套用後面的 Geo 規則。
| 狀況 | 優先檢查項目 | 處理方式 |
|---|---|---|
| 更新持續逾時 | 下載來源是否連得上、DNS、網路出口 | 先排除下載路徑問題,必要時離線替換 |
| 顯示分類不存在 | 資料來源是否包含規則引用的分類 | 確認分類名稱,或改用相容的資料來源 |
| 更新後仍走舊出口 | 既有連線、規則順序、執行中的設定 | 重新建立連線並查看實際命中的規則 |
| GeoIP 更新後看起來沒有作用 | geodata-mode 與實際使用的檔案 | 確認更新的是 DAT 還是 MMDB |
| 更新訂閱後設定消失 | 是否只修改了產生的檔案 | 將設定移至持久化覆寫層 |
排查時可以暫時提高記錄詳細程度,完成後再恢復平常使用的等級,避免長時間記錄大量連線資訊。回報問題前,請移除訂閱網址、存取權杖和私人網域;提供核心版本、規則片段、資料來源及錯誤前後文,通常就足以判斷問題方向。
離線替換、還原與維護頻率
若啟動階段無法下載資料,離線替換是可重複使用的修復方式。先從選定的資料來源取得相應格式的檔案,再透過用戶端確認核心實際使用的資料目錄。不要憑安裝程式所在目錄猜測:桌面介面、系統服務和免安裝執行方式可能使用不同的工作目錄。
- 備份目前的資料檔,並記錄來源與取得日期。
- 停止實際執行中的核心;若使用服務模式,請確認背景服務也已停止,而不只是關閉視窗。
- 使用原本的檔名替換資料,例如
geoip.dat、geosite.dat或Country.mmdb,並確認執行帳戶有讀取權限。 - 啟動核心,檢查載入記錄,再以新連線確認規則是否命中。
- 如果發生解析失敗或分流異常,請停止核心並還原備份,同時排查格式、分類及來源差異。
若下載取得的檔案實際上是登入頁面、流量限制提示頁或錯誤文件,即使重新命名為 .dat 也無法使用。請先確認下載內容來自預期的發佈檔案,再處理核心錯誤。也不要用 GeoSite 檔案覆蓋 GeoIP 檔案;副檔名相同不代表內容可以互換。
日常維護可以先設定每 24 小時更新一次,不必縮短成每小時反覆下載。網站分流異常時,先查看命中的規則和網域資訊,再判斷是要更新資料、新增單一網站例外,還是修復 DNS 路徑。逐一釐清問題所在環節,比反覆替換整份設定更容易保留可正常運作的基準。其他欄位說明請參閱技術參考;流量接入和基礎設定則可從設定教學開始。