1. 首頁
  2. 部落格
  3. Clash GeoIP 與 GeoSite 資料庫更新方法與分流規則搭配

Clash GeoIP 與 GeoSite 資料庫更新方法與分流規則搭配

GeoIP 與 GeoSite 是規則分流的資料基礎:前者回答「這個 IP 屬於哪個地區」,後者回答「這個網域屬於哪個類別」。本文說明兩類資料庫的檔案格式、手動與自動更新方法,以及在 rules 中引用 GEO 資料的常見寫法與順序搭配。

一、GeoIP 與 GeoSite 各管什麼

Clash 的分流規則本身不內建任何地理或站點資料。規則裡的 GEOIPGEOSITE 只是查詢語句,真正回答「這個 IP 屬於哪裡」「這個網域算哪類」的,是內核工作目錄下的資料庫檔案。內核啟動時把檔案載入記憶體,規則命中時才查得到結果。檔案缺失或長期不更新,分流結果就會出現偏差:該直連的走了代理,該代理的落了直連。

GeoIP:依 IP 歸屬地判斷

GeoIP 資料形如「IP 段對應地區代碼」的映射表。規則 GEOIP,CN,DIRECT 命中時,表示目標 IP 落在中國大陸位址段,連線直接放行。若請求目標本身是網域,內核會先做 DNS 解析再查表;在規則末尾加上 no-resolve,可跳過解析,只對目標已經是 IP 的請求生效,避免為了一條規則就把每個網域都解析一次。mihomo 預設使用 geoip.metadb(mmdb 格式);把 geodata-mode 設為 true 後,則改用 v2ray 格式的 geoip.dat。兩種格式二選一,依規則來源決定,不要混用。

GeoSite:依網域類別判斷

GeoSite 資料形如「網域對應類別標籤」的映射表,來自社群維護的 domain-list-community 專案,編譯產物是 geosite.dat。常用類別包括 cn(中國大陸站點)、geolocation-!cn(常見境外站點)、googlegithubtelegramprivate(內網與本機網域)。單一類別往往涵蓋數萬條網域,且隨社群提交持續增補,比逐條手寫 DOMAIN-SUFFIX 規則省事,也更不容易遺漏。

提示

GEOSITE 規則只比對網域,不觸發解析;GEOIP 規則只認 IP。兩者職責互補,實際設定中通常搭配使用:網域先查 GeoSite,查無結果的部分交給 GeoIP 依歸屬地兜底。

二、資料庫檔案與下載來源

mihomo 的 GEO 資料檔案放在內核工作目錄,通常與 config.yaml 同一目錄。常見檔案如下:

檔案格式用途
geoip.metadbmmdb預設 IP 歸屬庫,未開啟 geodata-mode 時使用
geoip.datv2ray geodata開啟 geodata-mode 後使用的 IP 歸屬庫
geosite.datv2ray geodataGEOSITE 規則的網域類別庫
country.mmdbmmdb選用,MaxMind 風格的國家/地區庫,可替代 metadb
GeoLite2-ASN.mmdbmmdb選用,IP-ASN 規則依自治域分流時使用

預設下載來源是 MetaCubeX/meta-rules-dat 儲存庫的 Release,每日構建一次。需要換位址時,在設定裡用 geox-url 指定:

# config.yaml 片段
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/geoip.metadb"

若直連 GitHub 不穩定,把位址換成可連通的鏡像即可;欄位留空則回退預設位址。記憶體吃緊的環境可另設 geodata-loader: memconservative,降低資料庫常駐記憶體的占用。

三、更新方法:手動與自動

自動更新

geo-auto-update: true
geo-update-interval: 24

geo-auto-update 開啟後,內核會依 geo-update-interval 指定的間隔(單位:小時)自動檢查並下載最新資料庫,下載完成即熱載入,不需重啟。間隔設 24 小時已經足夠:社群儲存庫每日構建一次,本機一天一更就跟得上;間隔設得更短只是重複下載同一份檔案,沒有實際效益。

手動更新

  1. 從發佈頁下載 geoip.metadb(geodata 模式下為 geoip.dat)與 geosite.dat,檔名保持原樣。
  2. 放入內核工作目錄:桌面用戶端通常在各自設定目錄下的內核工作目錄;命令列部署預設為 ~/.config/mihomo/,與 config.yaml 同一目錄。
  3. 重啟內核讓新資料庫生效;也可以在面板裡點選更新 Geo 資料庫按鈕,或呼叫外部控制器 API 的 PUT /configs/geo,讓內核立即重新下載並載入。

注意

更新失敗最常見的原因是下載來源無法連通。先確認目前網路能否直接打開 geox-url 裡的位址;打不開就換鏡像,或改用手動更新。每次更新後看一下日誌,確認 geosite 與 geoip 的載入條目數正常;若條目數為零或報錯,代表檔案損壞,或檔案格式與 geodata-mode 設定不相符。

四、在 rules 中引用 GEO 資料

規則寫法固定為 GEOSITE,類別,策略GEOIP,地區代碼,策略,後者可選加第四個參數 no-resolve。地區代碼用兩位字母表示,如 CNUSJP。常用範例:

規則範例含義
GEOSITE,private,DIRECT內網與本機網域直連
GEOSITE,cn,DIRECT中國大陸站點直連
GEOSITE,geolocation-!cn,PROXY常見境外站點走代理
GEOSITE,github,PROXYGitHub 相關網域走代理
GEOIP,CN,DIRECT,no-resolve目標已是 IP 且歸屬中國大陸,直連
GEOIP,CN,DIRECT網域先解析,歸屬中國大陸則直連

比對順序自上而下,命中即停止。網域類規則(GEOSITE、DOMAIN 系)放在前面,GEOIP 放在後面:若 GEOIP 排在前面,會迫使大量網域請求先做 DNS 解析,拖慢首個封包的回應時間,也讓本可避免的解析請求增加。以下是常見的「中國大陸直連、境外代理」收尾寫法:

rules:
  - GEOSITE,private,DIRECT
  - GEOSITE,cn,DIRECT
  - GEOSITE,geolocation-!cn,PROXY
  - 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
  - GEOIP,CN,DIRECT,no-resolve
  - MATCH,PROXY

最後兩條的含義:目標已經是 IP 且歸屬中國大陸的直連,其餘全部走代理。若希望「網域解析後歸屬中國大陸也直連」,把 GEOIP 那條的 no-resolve 拿掉即可,代價是所有未命中前面規則的網域都會被解析一次。

資料量大的類別還可以改用規則集。meta-rules-dat 同時發佈 mrs 格式的規則集檔案,用 rule-providers 依需求引用,載入更快、占用更低:

rule-providers:
  geosite-cn:
    type: http
    behavior: domain
    format: mrs
    interval: 86400
    path: ./ruleset/geosite-cn.mrs
    url: "https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/meta/geo/geosite/cn.mrs"

rules:
  - RULE-SET,geosite-cn,DIRECT

五、常見問題

GeoIP 與 GeoSite 一定要同時啟用嗎?

不一定。規則裡只寫 GEOIP,就不需要 geosite.dat;用到 GEOSITE 規則才必須備齊 geosite.dat。多數分流方案會兩者搭配:網域請求先查 GeoSite,查無結果的部分再用 GeoIP 依歸屬地兜底。

自動更新間隔設多少合適?

24 小時。社群資料庫每日構建發佈,本機一天一更已經夠新;間隔設得更短只是重複下載同一份檔案,沒有實際效益。

更新後分流結果沒有變化?

依序排查:先重啟內核或重新載入設定;再確認檔案是否放在內核實際讀取的工作目錄,而不是瀏覽器的下載目錄;最後查看啟動日誌中 geosite 與 geoip 的載入條目數,若條目數為零或報錯,代表檔案損壞,或檔案格式與 geodata-mode 設定不相符。

訂閱設定裡沒有 geo 相關欄位,需要補上嗎?

不寫也能用,內核會依預設位址自動下載所需資料庫。若需要固定鏡像位址、調整更新間隔,再於覆寫或全域設定裡補上 geox-url 與 geo-auto-update。

geodata-mode 要不要開啟?

視規則來源而定。只用 GEOIP、GEOSITE 常規寫法時,預設 mmdb 模式即可;若引用的規則集或教學明確要求 geoip.dat,再開啟此模式。開啟後必須確保 geoip.dat 存在,否則 GEOIP 規則無法載入,內核啟動會直接報錯。

六、小結

GeoIP 管 IP,GeoSite 管網域。檔案放對目錄、下載位址可連通、規則順序寫對,分流就會穩定。維持一天一次的自動更新,規則寫法再隨社群資料庫的演進調整即可。用戶端與內核依平台整理在下載中心,基礎設定步驟見使用教學。

下載 Clash 用戶端

全平台用戶端與內核依平台整理,版本號逐條列明。

下載Clash