一、GeoIP 与 GeoSite 各管什么
Clash 的分流规则本身不内置任何地理或站点数据。规则里的 GEOIP 与 GEOSITE 只是查询语句,真正回答「这个 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(常见境外站点)、google、github、telegram、private(内网与本地域名)。一个类别往往覆盖数万条域名,并随社区提交持续增补,比逐条手写 DOMAIN-SUFFIX 规则省事,也更难遗漏。
提示
GEOSITE 规则只匹配域名,不触发解析;GEOIP 规则只认 IP。两者职责互补,实际配置里通常搭配使用:域名先查 GeoSite,落空的部分交给 GeoIP 按归属地兜底。
二、数据库文件与下载来源
mihomo 的 GEO 数据文件放在内核工作目录,通常与 config.yaml 同目录。常见文件如下:
| 文件 | 格式 | 用途 |
|---|---|---|
| geoip.metadb | mmdb | 默认 IP 归属库,未开启 geodata-mode 时使用 |
| geoip.dat | v2ray geodata | geodata-mode 开启后的 IP 归属库 |
| geosite.dat | v2ray geodata | GEOSITE 规则的域名类别库 |
| country.mmdb | mmdb | 可选,MaxMind 风格的国家/地区库,可替代 metadb |
| GeoLite2-ASN.mmdb | mmdb | 可选,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 小时足够:社区仓库按日构建,本地一天一更已经跟得上;间隔更短只是重复下载同一份文件,没有收益。
手动更新
- 从发布页下载
geoip.metadb(geodata 模式下为geoip.dat)与geosite.dat,文件名保持原样。 - 放入内核工作目录:桌面客户端一般在各自配置目录下的内核工作目录;命令行部署默认是
~/.config/mihomo/,与config.yaml同目录。 - 重启内核让新库生效;也可以在面板里点击更新 Geo 数据库按钮,或调用外部控制器 API 的
PUT /configs/geo,让内核立即重新下载并加载。
注意
更新失败最常见的原因是下载源不可达。先确认当前网络能直接打开 geox-url 里的地址;打不开就换镜像,或改走手动更新。每次更新后看一眼日志,确认 geosite 与 geoip 的加载条目数正常;条目数为零或报错,说明文件损坏,或文件格式与 geodata-mode 设置不匹配。
四、在 rules 中引用 GEO 数据
规则写法固定为 GEOSITE,类别,策略 与 GEOIP,地区代码,策略,后者可选第四个参数 no-resolve。地区代码用两位字母,如 CN、US、JP。常用示例:
| 规则示例 | 含义 |
|---|---|
| GEOSITE,private,DIRECT | 内网与本地域名直连 |
| GEOSITE,cn,DIRECT | 中国大陆站点直连 |
| GEOSITE,geolocation-!cn,PROXY | 常见境外站点走代理 |
| GEOSITE,github,PROXY | GitHub 相关域名走代理 |
| 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 管域名。文件放对目录、下载地址可达、规则顺序写对,分流就稳定。保持一天一次的自动更新,规则写法随社区库的演进再调整即可。客户端与内核按平台整理在下载中心,基础配置步骤见使用教程。