先确认内核,再区分 GeoIP 与 GeoSite
先在客户端的「关于」或内核信息页面确认正在运行的内核。Clash 是一套代理内核及其生态的常见称呼,图形客户端则负责配置管理、系统代理和启动内核。本文的 geox-url、GEOSITE 与自动更新示例面向 mihomo,也就是原 Clash Meta 后续更名的项目,不能直接套给所有历史版 Clash 内核。
分清两类数据库,再决定更新哪个文件。GeoIP 把 IP 地址段归入国家或地区等集合;GeoSite 把域名归入网站服务或用途集合。它们提供规则匹配的数据,不提供代理节点,也不会替代订阅链接。更新数据库不会让已经过期的节点恢复连接。
| 数据类型 | 常见文件 | 对应规则与用途 |
|---|---|---|
| GeoSite | geosite.dat | GEOSITE,cn,DIRECT,按域名集合匹配 |
| GeoIP,DAT 模式 | geoip.dat | GEOIP,CN,DIRECT,按 IP 地址段匹配 |
| GeoIP,MMDB 模式 | Country.mmdb | 同样服务于 GEOIP 规则,数据格式和加载方式不同 |
先检查数据源包含哪些集合,再写集合名称。cn 是常见示例,但不是每个精简数据包都保留同样的类别。GeoSite 的类别通常使用小写;带属性的类别也要以数据源说明为准。不要根据网站名称猜一个标签,然后把加载失败归因于网络。
找到实际数据目录,避免更新错文件
先找到正在运行的内核使用的工作目录。命令行的 -d 参数用于指定配置与数据目录;图形客户端通常有自己的应用数据目录,服务模式还可能使用不同的账户或目录。安装程序所在文件夹、下载目录、当前启用的配置目录,三者不一定相同。
- 打开客户端的目录入口,寻找「配置目录」「数据目录」或「打开应用目录」等项目。菜单名称随客户端和版本变化,以实际界面为准。
- 查看内核启动日志或进程参数,确认
-d指向哪里。不要只凭搜索到一个同名文件就直接覆盖。 - 在该目录寻找
geosite.dat、geoip.dat或Country.mmdb,记录文件大小、修改时间和现用配置。 - 区分订阅原文与最终运行配置。客户端合并配置后,真正生效的字段可能与订阅编辑页不同。
用独立目录运行命令行内核时,可以明确指定路径。下面以 Linux 或 macOS 的终端为例,假定当前目录下已经准备好 mihomo-data/config.yaml。第一条命令查看版本,第二条检查配置;检查命令不会让内核持续提供代理服务。
mihomo -v
mihomo -t -d "$PWD/mihomo-data" -f "$PWD/mihomo-data/config.yaml"
配置 geox-url 与定时更新
把更新字段放到 YAML 顶层,与 rules、dns 同级。YAML 是用缩进表达层级的配置格式;这里不要把字段缩进到 dns 或某个代理节点下面。以下是需要合并到现有配置中的片段,不是一份包含节点和策略组的完整配置。
geodata-mode: true
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 格式的 GeoIP 数据。设为false时通常走 MMDB 路径;它不是 GeoSite 的总开关。geo-auto-update: true:开启内核的地理数据定时更新。geo-update-interval: 24:把更新间隔设为 24 小时,不是每天某个固定钟点。geox-url:分别指定各类数据的下载来源。填写来源并不等于立即完成下载。
按实际模式配置数据源。上例同时列出 DAT 与 MMDB 地址,便于说明对应关系;使用 DAT 模式不代表每轮都必须使用这三份文件。mmdb 是配置键,示例下载地址末尾是小写的 country.mmdb,内核本地常见文件名则是 Country.mmdb,手动替换时不要混淆。
保存后重新加载配置,并查看加载日志。若客户端提供「更新 Geo 数据」一类操作,可用它主动触发更新;没有该入口时,不要假定重启一定会覆盖已有数据库。自动更新按内核机制调度,需要立即替换时可以采用下一节的离线方式。
先确认下载地址在当前网络下可达。GitHub 发布附件可能发生重定向,命令行下载应跟随跳转;客户端的系统代理开关也不保证内核自身的下载一定走同一路径。遇到超时,先读日志中的域名、连接错误与代理选择,再考虑更换可信数据来源。
手动替换 geosite.dat 与 geoip.dat
先下载到临时文件,再停止内核并替换。不要在内核运行时一边写文件一边让它读取,也不要把网页的“另存为”结果直接改名为数据库。下载到的登录页或错误页,即使扩展名是 .dat,也无法作为数据使用。
下面继续使用前面的独立目录,只演示 DAT 模式。第一步下载文件,-f 让 HTTP 错误返回失败,-L 用于跟随重定向。两条命令都成功后再继续,不要忽略终端报错。
curl -fL --retry 2 \
"https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geoip.dat" \
-o "./mihomo-data/geoip.dat.new"
curl -fL --retry 2 \
"https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geosite.dat" \
-o "./mihomo-data/geosite.dat.new"
接着退出图形客户端或停止对应内核服务,确认它不会自动拉起。以下命令假定原有两个数据文件均存在,且备份文件名尚未使用;首次安装缺少原文件时,应跳过对应的备份命令。每次更新保留独立备份,避免覆盖最后一份可用副本。
cp "./mihomo-data/geoip.dat" "./mihomo-data/geoip.dat.before-update"
cp "./mihomo-data/geosite.dat" "./mihomo-data/geosite.dat.before-update"
mv "./mihomo-data/geoip.dat.new" "./mihomo-data/geoip.dat"
mv "./mihomo-data/geosite.dat.new" "./mihomo-data/geosite.dat"
mihomo -t -d "$PWD/mihomo-data" -f "$PWD/mihomo-data/config.yaml"
检查通过后启动内核,再查看首次加载和实际请求的日志。配置检查只能发现一部分错误,不能代替运行验证。如果提示类别不存在、文件读取失败或解析异常,先停止内核,恢复备份,再排查来源与文件格式。
使用 MMDB 模式时,下载匹配格式的文件,并替换实际目录中的 Country.mmdb。不要把 geoip.dat 重命名成 Country.mmdb,两者内部格式不同。Linux 文件名区分大小写,替换后还应保留运行账户的读取权限。
编写 GEOSITE 与 GEOIP 规则
先确认客户端处于规则模式,再调整规则顺序。规则模式按列表从上往下匹配,命中后通常不再继续寻找后面的规则。全局模式不会按这一列表为每个请求选择出口;TUN 模式则负责流量接管,并不会替代规则模式。
下面的示例假设现有配置已经定义名为「代理选择」的策略组。DIRECT 是内置直连出口,不需要额外创建;「代理选择」必须与真实组名逐字一致。示例中的域名用于展示语法,实际配置应按自己的用途增删。
mode: rule
rules:
- DOMAIN-SUFFIX,example.com,代理选择
- GEOSITE,cn,DIRECT
- GEOIP,CN,DIRECT,no-resolve
- MATCH,代理选择
先放例外规则,再放大范围集合
把明确需要单独处理的域名写在集合规则前。第一条 DOMAIN-SUFFIX 匹配指定域名及其子域名;第二条根据 GeoSite 的 cn 类别处理域名;第三条针对中国大陆 IP 地址范围;最后一条 MATCH 接住剩余请求。不要把 MATCH 提到列表开头,否则后面的地理数据规则无法发挥作用。
理解 no-resolve 的取舍
把 no-resolve 理解为“不要为了这条 IP 规则主动解析域名”。当目标本来就是 IP,仍可进行 GEOIP 匹配;当请求只有域名且没有可用的目标 IP 时,这条规则不会为匹配额外触发解析,可能继续走到 MATCH。因此,加入它可以减少不必要的 DNS 查询,但不能保证所有国内域名都命中 GEOIP。
不要把域名集合当成服务器所在地证明。一个域名可能使用全球内容分发网络,同一服务也可能有多个域名类别;GeoSite 分类与 GeoIP 地区判断回答的是不同问题。希望按服务分类时优先考虑域名规则,希望按目标地址范围处理时再使用 IP 规则。
更新后验证命中,而不只看文件时间
先在客户端连接面板查看新请求的规则和出口。文件时间变新只说明文件发生过写入,不代表运行中的内核已经重新加载,也不代表测试请求经过了该内核。浏览器复用旧连接时,先关闭相关标签页或连接,再发起一次新请求。
- 确认当前启用的是刚修改的配置,并检查运行配置里的
geodata-mode与规则顺序。 - 查看日志是否出现数据加载错误,尤其留意文件不存在、权限不足、类别缺失等信息。
- 选一个已知属于目标集合的域名,查看连接详情中显示的是
GEOSITE、GEOIP,还是更靠前的域名规则。 - 确认出口是预期的
DIRECT或策略组,再检查策略组当前选中的节点。 - 测试只有目标 IP 的连接时,单独验证 GEOIP;不要拿一次域名访问同时证明两套数据库都有效。
使用终端测试时,明确指定本地代理端口。下面假设现有配置的 mixed-port 为 7890;如果实际端口不同,请替换为客户端显示的值。这个命令用于确认请求进入代理链路,返回成功本身不能证明命中了哪个地理集合,仍要结合连接面板判断。
curl -I --proxy http://127.0.0.1:7890 https://example.com
按报错类型排查更新失败
| 现象 | 优先检查 | 处理方向 |
|---|---|---|
| 不识别 GEOSITE 规则 | 实际内核及版本 | 确认使用支持该规则的 mihomo,不按客户端名称推断内核 |
| 提示某个类别不存在 | 规则标签与数据源类别 | 改用数据源确实提供的类别,或换回配套数据库 |
| 下载超时或重定向失败 | 更新地址与网络路径 | 先验证附件可下载,必要时离线传入数据目录 |
| 更新后仍使用旧规则 | 运行目录、加载状态与规则顺序 | 确认替换的是生效目录,重载内核并重新建立连接 |
| 订阅刷新后配置消失 | 改动是否只写在订阅原文 | 将更新字段和自定义规则迁移到持久覆写配置 |
区分 Geo 数据与 rule-providers
先看规则写的是 GEOSITE 还是 RULE-SET。rule-providers 是规则提供器,用于加载独立规则集,拥有自己的下载地址、格式与更新间隔。配置 geox-url 不会顺带更新所有规则提供器;反过来,更新某个规则提供器也不等于替换了 geosite.dat。
保留能够回退的最小改动
每次只改一类内容:先更新数据库并验证原规则,再添加新的类别或调整规则顺序。出现故障时,恢复对应数据文件与配置,比同时重装客户端、修改 DNS 和开启 TUN 更容易定位原因。需要继续检查配置合并或流量接管,可查看使用文档;遇到连接异常,再按问题诊断逐项确认。