GeoIP 與 GeoSite:分別比對 IP 位址和網域
Clash 分流是否準確,不只取決於規則順序,也與規則引用的資料有關。GeoIP 會將 IP 位址範圍歸類至國家或地區等集合;GeoSite 則會將網域歸類至網站、服務或地區類別。兩者提供比對依據,不會提供代理節點,也不會替使用者決定某個類別應直連或經由代理連線。
例如,GEOIP,CN,DIRECT 表示目的 IP 符合資料庫中的 CN 集合時採用直連;GEOSITE,cn,DIRECT 表示網域符合資料庫中的 cn 類別時採用直連。網站使用海外 CDN、跨區部署或共用 IP 位址時,兩種判斷可能會得出不同結果。這不一定代表資料庫損毀,而是比對的對象不同。
| 項目 | GeoIP | GeoSite |
|---|---|---|
| 主要比對對象 | 目的地 IPv4 或 IPv6 位址 | 連線關聯的網域 |
| 常見檔案 | geoip.dat、Country.mmdb | geosite.dat |
| 規則範例 | GEOIP,CN,DIRECT | GEOSITE,cn,DIRECT |
| 常見落差 | 位址歸屬與服務用途不同 | 新網域尚未收錄或分類不同 |
資料來源不代表固定標準
GeoSite 常見於 v2fly/domain-list-community 及其衍生版本;GeoIP 則可能是由不同 IP 位址資料專案轉換而來。MetaCubeX/meta-rules-dat 提供適用於 mihomo 的建置檔案。即使檔名相同,不同來源的類別、收錄範圍與更新頻率也可能不同。使用 geolocation-!cn 這類標籤前,請先確認目前的資料來源確實包含該類別,不要直接挪用其他規則庫的標籤。
設定前提:確認使用 mihomo 核心
以下的 geodata-mode、geox-url 與自動更新設定皆適用於 mihomo。Clash 是常見的用戶端生態稱呼,但介面相似不代表核心功能完全相同。舊版 Clash 核心不一定支援這些欄位;用戶端本身的版本號也不能取代核心版本資訊。
- 在用戶端的「關於」、「核心資訊」或啟動記錄中確認實際核心名稱與完整版本號,並確認標示為 mihomo。
- 確認目前啟用的是哪一份訂閱設定,以及是否套用了覆寫、合併或指令碼處理。
- 先備份目前生效的設定;優先透過用戶端提供的持久覆寫功能新增全域欄位,避免訂閱更新時覆蓋修改。
- 將運作模式設為規則模式。全域模式與直連模式不會依照以下分流規則選擇連線出口。
geox-url 與自動更新:可直接合併的設定
以下片段應放在 YAML 頂層,與 rules、dns 同一層,不要放進策略群組。範例啟用 DAT 格式的 GeoIP,並使用 MetaCubeX 的發佈檔案。這裡只有資料庫設定,不是包含節點的完整訂閱。
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 使用 DAT 資料模式;設為false則使用 MMDB 模式。這個開關不會一併停用或啟用 GEOSITE。geodata-loader: memconservative:選用較省記憶體的 geodata 載入器;此設定不會控制更新週期,也不會轉換下載檔案的格式。geo-auto-update: true:啟用核心的 GEO 資料自動更新功能,前提是實際執行的核心支援此欄位。geo-update-interval: 24:更新間隔為 24 小時,不是 24 分鐘,也不代表每天固定在午夜執行。geox-url:分別指定各類檔案的下載網址。MMDB 和 DAT 不能只靠更改副檔名互相轉換。
範例保留 mmdb 網址,方便日後切換模式,但不代表每次執行都會同時使用所有檔案。下載與載入哪些資源,取決於有效設定、規則引用方式及核心實作。已有快取時,單純更改網址不能視為「更新完成」;仍須執行更新並檢查記錄。
下載網址必須指向實際檔案
自訂網址必須回傳相應格式的二進位檔案,不能指向儲存庫首頁、登入頁面或下載說明頁。GitHub 發佈連結可能會重新導向,因此網路設定必須允許連線至初始網址,也能連線至最終檔案所在的主機。若發生逾時,請先檢查記錄中的目標網址與錯誤訊息,再決定是否改用可信的資料來源。
資料庫下載也可能受啟動順序影響:核心尚未取得分流所需資料時,依賴這些資料的規則可能無法正常載入。首次部署時,建議先確認下載網址可連線;必要時使用用戶端的手動更新功能,或離線放入資料庫,再載入包含 GEO 規則的設定。不要假設下載請求一定會經過目前選取的代理節點。
GEOIP、GEOSITE 規則:類別與策略群組都必須存在
規則會由上而下比對,第一個符合的項目決定策略。以下片段先處理區域網路位址,再處理國內網域與已分類的海外網域,接著檢查國內 IP,最後套用預設規則。此範例假設現有設定中已有名為 代理出口 的策略群組;使用前請換成設定中的實際群組名稱。
rules:
- IP-CIDR,127.0.0.0/8,DIRECT,no-resolve
- IP-CIDR,10.0.0.0/8,DIRECT,no-resolve
- IP-CIDR,172.16.0.0/12,DIRECT,no-resolve
- IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
- IP-CIDR6,::1/128,DIRECT,no-resolve
- IP-CIDR6,fc00::/7,DIRECT,no-resolve
- IP-CIDR6,fe80::/10,DIRECT,no-resolve
- GEOSITE,cn,DIRECT
- GEOSITE,geolocation-!cn,代理出口
- GEOIP,CN,DIRECT,no-resolve
- MATCH,代理出口
DIRECT 是內建的直連策略;代理出口 則是使用者自訂名稱,必須與策略群組名稱完全一致。如果現有群組名稱是 PROXY,請將兩處「代理出口」都替換掉。不要額外新增第二個頂層 rules 欄位;請合併或取代既有規則清單,並保留訂閱中確實需要的精確例外規則。
為什麼海外網域規則要放在 GEOIP 前面
假設某個海外服務的網域已分類,但解析後取得的是中國大陸 CDN 位址。如果 GEOIP,CN,DIRECT 先符合,連線就可能採用直連。將明確的網域規則放在 IP 歸屬判斷之前,便能優先表達服務層級的意圖。不過,geolocation-!cn 只是資料庫中的集合名稱,並非所有海外網站的完整清單;未收錄的連線仍須由後續規則處理。
no-resolve 不代表停用 DNS
no-resolve 表示不要只為了這條 IP 類規則而主動解析網域。如果連線已有實際目的 IP,GEOIP 仍可檢查;如果目前只有網域,尚未取得可用的實際 IP,這條規則可能會略過並繼續比對後續規則。它不是 DNS 防洩漏開關,也不是 GeoIP 自動更新開關。若希望未分類的網域在此處觸發解析,可以移除此參數,但請評估解析延遲與 DNS 流量的傳輸路徑。
更新流程:載入設定、更新檔案、確認規則命中
資料庫更新與訂閱更新是兩回事。訂閱更新通常會取得節點與設定;GEO 資料更新則會替換分類檔案。即使用戶端顯示訂閱更新成功,也不能據此判定 geosite.dat 已更新。
- 檢查有效設定。確認最後載入的 YAML 中,自動更新欄位和網址沒有被訂閱或覆寫機制蓋掉。
- 重新載入設定。檢查記錄中是否出現未知欄位、YAML 縮排錯誤、類別不存在或找不到策略群組等訊息。
- 執行一次 GEO 資料更新。使用用戶端明確標示的 GEO 資料更新功能;若沒有此功能,請依照該用戶端的文件操作,不要以更新訂閱按鈕取代。
- 確認更新結果。記錄下載成功或失敗的訊息,並檢查實際資料目錄中的檔案修改時間;修改時間只能證明檔案有變動,仍須確認載入結果。
- 建立新連線。重新連線至國內網域、已分類的海外網域與區域網路位址,並在連線詳細資訊中分別檢查規則類型、比對內容及最終策略。
測試時請建立新連線。瀏覽器連線重用、應用程式長連線與既有工作階段可能繼續沿用舊策略,只重新整理頁面不一定會重新建立連線。排查時可以關閉目標應用程式後重新開啟,或只中斷相關連線,避免一次中斷所有工作。
常見問題:下載失敗、類別缺漏與更新後分流錯誤
| 狀況 | 優先檢查項目 | 處理方式 |
|---|---|---|
| 下載逾時或連線失敗 | 網域解析、對外連線路徑、發佈檔案重新導向 | 先確認資源網址可連線,再重新嘗試更新 |
| 資料庫解析失敗 | 下載內容是否為網頁、檔案格式是否相符 | 取得正確的 DAT 或 MMDB 檔案 |
| 提示類別不存在 | 目前的資料來源是否包含規則引用的類別 | 調整類別,或改用包含該類別的資料版本 |
| 規則指定的策略不存在 | 策略群組名稱與大小寫 | 將規則目標改為現有策略群組的正確名稱 |
| 更新成功但分流結果未變 | 運作模式、前置規則、既有連線 | 切換回規則模式,並以新連線檢查第一個符合的規則 |
離線替換前先確認資料目錄
不同用戶端的資料目錄可能不同,服務模式與一般使用者模式也可能使用不同位置。請透過用戶端提供的目錄入口或核心啟動參數確認路徑,不要直接假設檔案都在安裝目錄中。手動替換前,先停止使用該目錄的核心並備份舊檔,再依預期檔名放入正確格式的資料庫,最後啟動核心並查看載入記錄。
如果只有一個網域被錯誤分類,不必馬上更換整套資料庫。可以先在相關 GEO 規則之前新增範圍明確的 DOMAIN 或 DOMAIN-SUFFIX 規則,確認策略是否符合預期,同時向資料來源回報分類問題。例外規則越精確,日後資料庫修正時就越容易清除。
維護範圍:分開檢查規則集、DNS 與 TUN
- rule-providers 各自更新。遠端規則集的
interval通常以秒為單位,例如86400代表一天;本文的geo-update-interval: 24則以小時為單位。兩種機制不能混用。 - DNS 決定可用的解析資訊。GeoSite 需要連線資訊關聯至網域;在 fake-ip 情境中,關聯對照有助於保留網域資訊,但無法自動將所有只有 IP 的連線轉成網域連線。
- TUN 決定接管範圍。啟用 TUN 可接管更多系統流量,但不會自動修正資料庫分類,也不會改變規則優先順序。
- GEO 資料不會提供節點。資料庫下載成功後,代理是否可用仍取決於訂閱、節點狀態與策略群組選擇。
穩定的維護順序是:先確認核心與有效設定,再確認資料庫來源及更新結果,最後透過新連線觀察比對流程。保留明確的網域例外、視需求設定 IP 預設備援,並讓訂閱更新與本機覆寫各自負責清楚的範圍,才能避免下次更新後又恢復舊行為。欄位說明請參閱 mihomo 一般設定文件;類別與檔案範圍可查閱 MetaCubeX 資料儲存庫。