Clash GeoIP 与 GeoSite 数据库更新方法:数据来源、自动更新与规则写法

介绍 GeoIP、GeoSite 数据文件的来源与用途,说明 mihomo 内核下自动更新的配置项、手动替换路径,以及 GEOSITE 规则的常见写法。

一、先区分 GeoIP、GeoSite 与规则集

Clash 配置里的地区分流,通常不是客户端现场判断网站属于哪个国家,而是使用内核加载的数据文件。GeoIP 根据目标 IP 匹配地区或分类;GeoSite 根据域名匹配站点分类。两者更新的对象不同,不能用一个文件替代另一个文件。

本文配置面向 mihomo,也就是原 Clash.Meta 演进而来的内核。使用前先在客户端的「关于」或内核信息页面确认实际内核名称,并记录版本。界面写着 Clash,不代表底层一定支持本文全部配置项;旧版 Clash 内核不应直接套用 mihomo 的 GeoSite 与自动更新设置。

数据类型匹配对象常见文件与配置
GeoIP,MMDB 格式IPv4、IPv6 地址所属地区Country.mmdb;geodata-mode: false
GeoIP,DAT 格式IP 地址对应的地区或数据源分类geoip.dat;geodata-mode: true
GeoSite域名集合,如 cn、geolocation-!cngeosite.dat;供 GEOSITE 规则使用
规则提供器由具体规则集决定rule-providers 与 RULE-SET;独立更新

更新数据库不会重写分流策略

数据库负责回答“这个域名或 IP 属于哪个集合”,规则负责决定“匹配后走哪里”。例如 GEOSITE,cn,DIRECT 中,cn 来自数据库,DIRECT 是规则指定的出站。更新数据可以改变集合内容,却不会自动把直连改成代理,也不会自动调整规则顺序。

二、数据来源与文件格式怎么选

常见来源包括社区维护的域名分类项目、地区 IP 数据项目,以及将这些上游数据重新整理、编译的发布仓库。以 MetaCubeX/meta-rules-dat 为例,它提供适合 mihomo 使用的多种构建产物。这里的“来源”要分两层看:发布仓库提供下载文件,上游项目决定分类内容;二者的更新节奏可能不同。

  • 先确定格式:使用 DAT 模式就配置 geoip 地址;使用 MMDB 模式就配置 mmdb 地址。仅仅改名不会转换格式。
  • 再检查分类名:cn 等标签也需要数据源实际包含。不同来源未必都有相同的站点、广告或服务分类。
  • 固定可信来源:记录仓库、发布渠道与下载日期。不要在每次失败时随意换成来历不明的镜像文件。
  • 区分下载格式:网页、压缩包、YAML 规则集、MRS 规则集和 DAT 数据库用途不同,不能直接互换。

geolocation-!cn 是数据集定义的域名类别,不是内核在运行时对所有域名计算“非中国”。未知域名可能不在其中。类似地,GeoIP 的国家或地区标记描述 IP 数据归属,不保证等同于网站运营主体、内容语言或用户访问时的实际线路。

三、mihomo 自动更新配置

下面示例使用 DAT 模式,自动更新间隔为 24 小时。这些字段应处于 YAML 顶层,与 rules、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"

geo-auto-update 启用内核的地理数据库自动更新;geo-update-interval 的单位是小时,不是秒。上例中的 mmdb 地址留作格式切换时使用,不意味着当前 DAT 模式会同时使用两套 GeoIP 数据。实际下载行为还受内核版本、已启用功能和客户端管理方式影响,应以运行日志为准。

保留 MMDB 模式时怎么改

如果原配置已经正常使用 Country.mmdb,可以将上例第一行改为 geodata-mode: false,并保留 geox-url.mmdb。不必为了更新数据库而切换数据模式。模式切换后仍要确认对应文件存在,并重新检查原有 GeoIP 分类是否受支持。

让设置在订阅更新后继续生效

  1. 备份当前生效配置,并记录原来的三个更新字段。
  2. 在客户端提供的覆写、合并或扩展配置入口中添加顶层设置。各客户端菜单名称不同,不要把示例粘贴进“节点订阅地址”输入框。
  3. 重新加载配置,检查内核启动日志是否出现未知字段、下载失败或数据解析错误。
  4. 打开客户端展示的运行配置,确认字段未被订阅模板覆盖;下一次更新订阅后再检查一次。

四、手动替换数据库与工作目录

手动更新最容易出错的地方,不是下载本身,而是找错目录。客户端的订阅配置目录、界面程序目录和内核工作目录可能互不相同。应先查看启动参数、日志中的目录信息,或客户端提供的数据目录入口;不能只搜索到一个同名文件就认定它正在被使用。

用启动参数明确实际路径

对于独立运行的 mihomo,可以用 -d 显式指定工作目录。以下为自定义部署示例,不是所有桌面客户端的默认路径:

# Linux:工作目录为 /home/lin/.config/mihomo
mihomo -d /home/lin/.config/mihomo

# Windows PowerShell:工作目录为 C:\mihomo\data
.\mihomo.exe -d C:\mihomo\data

在上述 Linux 示例中,常见目标路径为 /home/lin/.config/mihomo/geoip.dat、/home/lin/.config/mihomo/geosite.dat,或 MMDB 模式下的 /home/lin/.config/mihomo/Country.mmdb。如果已有配置或客户端指定了其他数据位置,应以实际设置为准。Linux 文件名区分大小写,下载所得 country.mmdb 与内核使用的 Country.mmdb 需要对应。

替换操作顺序

  1. 记录当前状态:保存生效配置、数据源地址、文件修改时间及当前可用的测试结果。
  2. 完整下载到临时位置:不要直接覆盖正在使用的文件。确认下载得到的是发布产物,而不是错误页面或仓库的文件预览页。
  3. 停止内核:桌面客户端使用停止服务或退出功能;容器部署停止对应容器。仅关闭设置窗口通常不会停止后台内核。
  4. 备份后替换:把原文件另存为 geosite.dat.bak 等名称,再放入新文件。Linux 服务用户需要对工作目录有读取权限,自动更新时还需要写入权限。
  5. 重启并观察:检查文件加载日志和规则命中。内核可能缓存数据,仅替换磁盘文件不保证运行中的数据立即刷新。

容器部署还要核对宿主机目录与容器内工作目录的挂载关系。替换宿主机未挂载的同名文件,不会影响容器内的数据。若更新后出现解析失败,先停止内核、恢复备份并重启,再检查新文件的来源和格式。

五、GEOSITE 与 GEOIP 规则写法

下面规则片段假设现有配置中已经定义名为 代理出口 的可用策略组。粘贴前应将这个名称与自己的策略组严格对应。规则按从上到下的顺序匹配,命中前面的规则后,不会继续向下寻找“更合适”的出口。

rules:
  - GEOSITE,cn,DIRECT
  - GEOSITE,geolocation-!cn,代理出口
  - GEOIP,CN,DIRECT,no-resolve
  - MATCH,代理出口
  • GEOSITE,cn,DIRECT:域名属于数据库中的 cn 集合时直连。
  • GEOSITE,geolocation-!cn,代理出口:匹配数据源中该类别的域名,并交给指定策略组。
  • GEOIP,CN,DIRECT,no-resolve:匹配中国 IP;no-resolve 表示不为这条匹配额外触发域名解析,不是关闭整个客户端的 DNS。
  • MATCH,代理出口:处理前面均未命中的连接,必须放在需要参与匹配的规则之后。

如果希望 GeoIP 对尚未解析的域名主动获取 IP 后再判断,可根据需求移除 no-resolve,但这会改变 DNS 查询行为和匹配过程。保留它时,域名连接能否命中该 IP 规则,取决于此时内核是否已有可用于判断的目标 IP。

按具体域名修正,不必改整套数据库

对少量业务域名需要固定出口时,可以在通用分类规则前添加 DOMAIN 或 DOMAIN-SUFFIX 规则。这比更换整套数据源更容易追踪。若配置中先有 DOMAIN-SUFFIX 规则,再有 GeoSite 规则,前者优先生效;更新 GeoSite 不会覆盖这项优先级。

另外,rule-providers 中的 interval: 86400 通常表示规则提供器每隔 86400 秒更新,与地理数据库的 geo-update-interval: 24 不是同一个字段,也不是同一种单位。看到规则集更新成功,不能据此认定 GeoSite 数据也已更新。

六、更新失败与规则不命中的排查顺序

现象优先检查处理方法
下载超时或 TLS 连接失败系统时间、DNS、发布地址可达性通过当前可用连接访问同一下载地址;必要时手动获取文件
更新提示权限不足内核运行用户和目录写权限修正实际工作目录权限,避免把服务数据放入不可写目录
出现数据解析错误文件格式、下载是否完整、是否误存网页恢复原文件,重新下载与模式对应的发布产物
提示分类不存在规则标签与数据源包含的分类核对标签拼写及来源说明,改用存在的分类或明确域名规则
更新成功但出口没变化生效模式、规则顺序、旧连接、实际加载文件切到规则模式,关闭目标旧连接后重试,并查看命中规则

用一次完整连接确认结果

  1. 确认当前是规则模式。全局模式和直连模式不会按上述分流规则得到相同结果。
  2. 选取一个实际需要排查的域名,在客户端连接面板中定位其新连接,记录目标域名、命中规则及出站策略组。
  3. 更新后关闭该站点的旧连接,重新发起请求。已经建立的 TCP 或 QUIC 连接通常不会因数据库变化自动重新选路。
  4. 如果应用直接连接 IP,或内核没有获得域名信息,先查 DNS、嗅探与应用连接方式;GeoSite 需要域名信息,单纯更新文件无法补齐它。

TUN 模式决定部分流量如何进入内核,不负责更新 GeoIP 或 GeoSite。系统代理与 TUN 接管范围不同,因此两种模式下看到的连接也可能不同。排查时一次只改变一个条件,先保持接管方式与 DNS 设置不变,再比较数据库更新前后的规则命中,避免把网络接管变化误判为数据更新效果。

下载Clash