GeoIP 与 GeoSite 数据库更新指南:下载源配置、手动替换与规则联动

讲清两个地理数据库在规则匹配中的分工,如何配置自动更新的下载源、离线环境下手动替换数据文件的路径,以及数据库版本过旧导致分流失准的判断与处理。

先分清 GeoIP 与 GeoSite 的匹配对象

GeoIP 和 GeoSite 都能把大量规则压缩成一个简短条件,但两者处理的对象不同。GeoIP 根据连接目标的 IP 地址判断国家或地区;GeoSite 根据域名所属分类匹配。它们不是同一份数据库,也不能互相替代。

项目 GeoIP GeoSite
主要文件 GeoIP.dat 或 Country.mmdb GeoSite.dat
输入对象 IPv4、IPv6 地址 域名及域名分类标签
典型规则 GEOIP,CN,DIRECT GEOSITE,cn,DIRECT
常见用途 按目标 IP 所在地区兜底 按站点、服务或类别提前分流
主要限制 CDN、Anycast 与云服务地址可能跨地区 连接阶段需要保留或还原域名信息

GeoSite 适合放在 GeoIP 前面

多数配置采用自上而下的规则匹配。域名规则通常比 IP 地理归属更接近业务含义,因此应优先处理。例如某个服务使用分布在多个国家的 CDN,GeoIP 只能看到当前解析到的节点地址,GeoSite 则可以根据原始域名稳定归类。

rules:
  - GEOSITE,category-ads-all,REJECT
  - GEOSITE,cn,DIRECT
  - GEOIP,CN,DIRECT,no-resolve
  - MATCH,节点选择

这组规则先拦截广告分类,再处理中国大陆常见域名,然后用 GeoIP 补充没有命中域名规则的中国大陆地址,最后交给默认策略组。实际标签是否存在取决于所选 GeoSite 数据源;更换数据源前应确认标签命名一致。

确认 Mihomo 实际使用的数据格式

Clash Meta 后续以 Mihomo 名称维护。不同客户端可能内置不同核心版本,也可能保留旧版 Clash 风格的配置入口。开始更新前,先在客户端的「设置」→「内核」或「设置」→「版本信息」查看核心名称与版本;命令行部署可执行 mihomo -v

Mihomo 的 geodata-mode 会影响 GeoIP 数据的读取方式。启用时通常读取 GeoIP.dat;关闭时通常使用 MMDB 格式的 Country.mmdb。GeoSite 分类仍由 GeoSite.dat 提供。不要只替换一个同名文件就假定核心一定会读取它,配置模式与工作目录同样需要核对。

geodata-mode: true
geodata-loader: memconservative

rules:
  - GEOSITE,private,DIRECT
  - GEOSITE,cn,DIRECT
  - GEOIP,private,DIRECT,no-resolve
  - GEOIP,CN,DIRECT,no-resolve
  - MATCH,节点选择

geodata-loader: memconservative 适合更看重内存占用的环境。具体可用值与行为会随核心版本调整,修改后应通过客户端配置检查或命令行测试确认。对于内存充足的桌面设备,保持客户端生成的默认值通常更稳妥。

no-resolve 不是通用必选项

当 GEOIP 规则接收到的目标仍是域名时,核心可能需要先解析 IP 才能完成地区匹配。规则末尾加上 no-resolve,表示不要为了这条规则额外触发解析。它可以减少不必要的 DNS 请求,但也意味着尚未获得目标 IP 时,该条 GEOIP 规则不会主动解析并命中。

配置自动更新下载源

Mihomo 可通过 geox-url 指定地理数据库地址,并由 geo-auto-update 控制自动更新。下面示例使用同一发布仓库中的 GeoIP 与 GeoSite 文件,避免两个数据集的发布时间和分类口径相差过大。

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"

geo-update-interval: 24 的单位是小时,表示每 24 小时检查一次。桌面客户端每天更新一次已经足够;没有必要设置成 1 小时或更短。数据库发布频率通常低于代理节点状态变化频率,过于频繁只会增加启动阶段的网络请求。

下载源需要同时满足四个条件

  1. 文件格式匹配。GeoIP 地址必须返回核心当前模式支持的数据文件,不能把网页下载页当成二进制文件地址。
  2. 文件名与内容对应。geoip 项指向 IP 数据,geosite 项指向域名分类数据。
  3. 标签口径可确认。配置中使用的 cnprivatecategory-ads-all 等标签需要存在于该数据源。
  4. 核心启动时可以访问。首次下载发生在规则生效前时,下载链路不能依赖尚未载入的同一套规则形成循环。

修改后先检查配置,再重载核心

命令行环境可使用核心自身检查 YAML。-d 指向运行目录,数据库也会从这个目录读取;-f 指向主配置文件。路径含空格时需要加引号。

mihomo -d "/opt/mihomo" -f "/opt/mihomo/config.yaml" -t

客户端用户可在「配置」页面选择当前配置,再执行「检查」或「重载」。菜单名称会因客户端版本不同而略有差异,但操作顺序应保持为:保存可回退副本、检查 YAML、重载核心、查看日志。若日志出现无法下载、文件格式错误或标签不存在,应先恢复旧文件,不要连续修改多项设置。

离线环境手动替换数据库

服务器不能直接访问下载源、企业网络限制外部连接,或需要固定某个数据库版本时,可以离线替换。关键点不是把文件复制进程序安装目录,而是找到 Mihomo 的工作目录。命令行部署的工作目录由 -d 参数决定;图形客户端通常会在「设置」→「配置目录」或「设置」→「应用目录」提供打开入口。

标准替换流程

  1. 在可联网设备下载与当前配置匹配的 GeoIP.datGeoSite.datCountry.mmdb
  2. 记录发布版本与下载日期,例如 2026-05-28,便于之后判断是否需要更新。
  3. 在目标设备停止 Mihomo 核心,确认托盘菜单或服务管理器显示核心已退出。
  4. 打开工作目录,将旧文件改名为 GeoIP.dat.bakGeoSite.dat.bak
  5. 复制新文件,并保持核心预期的大小写和文件名。
  6. 运行配置检查,然后启动核心并观察前 30 秒日志。
  7. 完成三类测试:私有地址、常用国内域名、默认代理域名。

Linux 服务部署可以先复制为临时名称,再使用同一文件系统内的重命名操作替换,减少进程读到半个文件的风险。以下路径仅示范由 -d /etc/mihomo 确定的工作目录。

sudo systemctl stop mihomo
sudo cp /mnt/offline/GeoIP.dat /etc/mihomo/GeoIP.dat.new
sudo cp /mnt/offline/GeoSite.dat /etc/mihomo/GeoSite.dat.new
sudo mv /etc/mihomo/GeoIP.dat /etc/mihomo/GeoIP.dat.bak
sudo mv /etc/mihomo/GeoSite.dat /etc/mihomo/GeoSite.dat.bak
sudo mv /etc/mihomo/GeoIP.dat.new /etc/mihomo/GeoIP.dat
sudo mv /etc/mihomo/GeoSite.dat.new /etc/mihomo/GeoSite.dat
mihomo -d /etc/mihomo -f /etc/mihomo/config.yaml -t
sudo systemctl start mihomo

Windows 图形客户端不要在核心仍运行时直接覆盖文件。先通过托盘菜单退出核心或退出客户端,再操作配置目录。如果文件被占用,强行覆盖可能留下临时文件,而客户端下次启动仍读取旧数据库。

数据库过旧时会出现哪些分流偏差

地理数据库过旧通常不会让客户端直接崩溃,而是产生局部、间歇性的分流异常。这类问题容易被误判为节点不稳定,因为同一个网站可能只有部分 CDN 地址或新域名命中错误策略。

GeoIP 过旧的典型表现

GeoSite 过旧的典型表现

单个域名走错策略并不能直接证明数据库过旧。它也可能由规则顺序、DNS 缓存、Fake-IP 映射、嗅探设置或用户自定义覆写造成。判断时应先在连接页面查看实际命中的规则,再对照目标域名、目标 IP 和策略组。

用日志和连接记录验证规则联动

更新完成后,不要只检查文件日期。更有效的验证方式是观察真实连接命中了哪条规则。打开客户端的「连接」页面,清空旧记录,再分别访问私有地址、国内站点与应走默认策略的站点。记录中应能看到目标域名、目标 IP、规则类型和最终策略。

建议执行的四组测试

  1. 私有网络:访问路由器或局域网服务,确认 GEOSITE,privateGEOIP,private 或显式网段规则优先命中。
  2. 域名分类:访问一个分类明确的域名,确认命中 GEOSITE,而不是直接落到 GEOIP 或 MATCH。
  3. IP 兜底:对仅有目标 IP 的连接观察 GEOIP 是否按预期分流。
  4. 默认规则:选择不属于前述分类的域名,确认最后进入 MATCH 指定的策略组。

若使用 TUN 模式,应用流量可能先以 IP 形式进入核心。Mihomo 可以结合 DNS 映射与域名嗅探恢复部分域名信息,但结果受协议、加密方式和客户端设置影响。GEOSITE 长期不命中时,应同时检查「设置」→「网络」中的 TUN、DNS 与嗅探选项,而不是反复更换数据库。

log-level: info

rules:
  - GEOSITE,private,DIRECT
  - GEOSITE,cn,DIRECT
  - GEOIP,private,DIRECT,no-resolve
  - GEOIP,CN,DIRECT,no-resolve
  - MATCH,节点选择

info 级别通常足以查看连接与规则结果。只有在定位数据库加载失败、DNS 映射或嗅探问题时,才临时切换到 debug。完成排查后恢复原级别,避免长期积累大量日志。

常见更新失败与处理顺序

下载成功但重启后仍使用旧结果

先确认新文件进入的是核心工作目录,而不是安装包目录或下载目录。随后检查 geodata-mode:配置要求 MMDB 时,仅替换 GeoIP.dat 不会改变 GeoIP 判断。图形客户端还可能管理多个核心目录,应以当前启用核心的日志路径为准。

日志提示 GeoSite 标签不存在

这通常是规则标签与数据源口径不一致。先定位报错规则,例如 GEOSITE,category-ads-all,REJECT,再查看当前数据源是否提供该分类。不要把标签名相近视为完全等价;不同维护项目可能合并、拆分或重命名分类。

自动更新在启动阶段超时

先把更新间隔恢复为 24 小时,并确认下载地址直接返回数据文件。首次部署可以在可联网环境手动放入数据库,再启动核心。这样即使远程更新暂时失败,已有规则仍可加载。对于服务端部署,还要检查 systemd 服务用户是否拥有工作目录的写入权限。

更新后大量流量改走其他策略

立即恢复成套备份,然后比较新旧数据源、标签覆盖范围与规则顺序。数据库更新会改变分类结果,但不应在没有记录的情况下同时修改规则表、DNS 和 TUN 设置。一次只改变一个变量,才能判断偏差来自数据还是配置。

建立可重复的维护周期

个人桌面设备可采用每天自动检查、每月人工复核的节奏。长期运行的服务器则应记录核心版本、数据库来源、发布日期、启用模式和最近验证结果。发生分流异常时,这五项信息比单纯记录“已经更新”更有用。

GeoIP 与 GeoSite 的维护重点不是追求最高更新频率,而是让数据格式、标签口径、规则顺序和核心工作目录保持一致。自动更新解决文件获取,手动备份提供回退能力,连接记录则负责验证最终分流。三部分同时具备,数据库更新才算真正完成。

前往客户端下载 Windows、macOS、Android、iOS、Linux