Clash GeoIP 与 GeoSite 数据库怎么更新:geox-url 配置与 GEOSITE 规则写法

讲清 GeoIP、GeoSite 数据文件的作用与存放位置,演示 geox-url 自动更新、手动替换方法,以及 GEOIP/GEOSITE 规则的常见写法。

先确认内核,再区分 GeoIP 与 GeoSite

先在客户端的「关于」或内核信息页面确认正在运行的内核。Clash 是一套代理内核及其生态的常见称呼,图形客户端则负责配置管理、系统代理和启动内核。本文的 geox-url、GEOSITE 与自动更新示例面向 mihomo,也就是原 Clash Meta 后续更名的项目,不能直接套给所有历史版 Clash 内核。

分清两类数据库,再决定更新哪个文件。GeoIP 把 IP 地址段归入国家或地区等集合;GeoSite 把域名归入网站服务或用途集合。它们提供规则匹配的数据,不提供代理节点,也不会替代订阅链接。更新数据库不会让已经过期的节点恢复连接。

数据类型常见文件对应规则与用途
GeoSitegeosite.datGEOSITE,cn,DIRECT,按域名集合匹配
GeoIP,DAT 模式geoip.datGEOIP,CN,DIRECT,按 IP 地址段匹配
GeoIP,MMDB 模式Country.mmdb同样服务于 GEOIP 规则,数据格式和加载方式不同

先检查数据源包含哪些集合,再写集合名称。cn 是常见示例,但不是每个精简数据包都保留同样的类别。GeoSite 的类别通常使用小写;带属性的类别也要以数据源说明为准。不要根据网站名称猜一个标签,然后把加载失败归因于网络。

找到实际数据目录,避免更新错文件

先找到正在运行的内核使用的工作目录。命令行的 -d 参数用于指定配置与数据目录;图形客户端通常有自己的应用数据目录,服务模式还可能使用不同的账户或目录。安装程序所在文件夹、下载目录、当前启用的配置目录,三者不一定相同。

  1. 打开客户端的目录入口,寻找「配置目录」「数据目录」或「打开应用目录」等项目。菜单名称随客户端和版本变化,以实际界面为准。
  2. 查看内核启动日志或进程参数,确认 -d 指向哪里。不要只凭搜索到一个同名文件就直接覆盖。
  3. 在该目录寻找 geosite.dat、geoip.dat 或 Country.mmdb,记录文件大小、修改时间和现用配置。
  4. 区分订阅原文与最终运行配置。客户端合并配置后,真正生效的字段可能与订阅编辑页不同。

用独立目录运行命令行内核时,可以明确指定路径。下面以 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 规则。

更新后验证命中,而不只看文件时间

先在客户端连接面板查看新请求的规则和出口。文件时间变新只说明文件发生过写入,不代表运行中的内核已经重新加载,也不代表测试请求经过了该内核。浏览器复用旧连接时,先关闭相关标签页或连接,再发起一次新请求。

  1. 确认当前启用的是刚修改的配置,并检查运行配置里的 geodata-mode 与规则顺序。
  2. 查看日志是否出现数据加载错误,尤其留意文件不存在、权限不足、类别缺失等信息。
  3. 选一个已知属于目标集合的域名,查看连接详情中显示的是 GEOSITE、GEOIP,还是更靠前的域名规则。
  4. 确认出口是预期的 DIRECT 或策略组,再检查策略组当前选中的节点。
  5. 测试只有目标 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 更容易定位原因。需要继续检查配置合并或流量接管,可查看使用文档;遇到连接异常,再按问题诊断逐项确认。

下载Clash选择客户端平台