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 geodatageodata-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