geoip.dat 与 geosite.dat 更新方法:路由规则文件的来源与写法

解释 GeoIP、GeoSite 数据库在路由分流中的作用,演示在客户端内更新规则文件,以及在规则里引用 geosite:cn、geoip:private 等常用标签。

本文速览

本文面向使用 v2rayN、v2rayNG 或 v2flyNG 配置路由分流的用户。先区分域名库与 IP 库,再按客户端入口更新文件,最后用 Xray/V2Fly 格式的规则解释标签引用、匹配顺序和 DNS 条件。读完可以判断问题来自数据源、文件路径,还是路由本身,而不是反复重装客户端。

一、GeoIP 与 GeoSite 分别匹配什么

geosite.dat 保存按标签组织的域名规则,geoip.dat 保存按标签组织的 IP 地址段。它们是内核读取的二进制数据文件,不是节点列表,也不是 DNS 服务器。文件更新只改变集合里的成员,不会自动改变规则的出站方向。

对象引用示例判断依据
域名集合geosite:cn数据源归入 cn 集合的域名规则;不等同于只匹配 .cn 后缀。
IP 地理集合geoip:cn目标 IP 是否位于数据源收录的相应地址段。
私有及特殊地址集合geoip:private数据源定义的私有、保留等地址段,具体范围以该来源为准。

一次连接可能先以域名进入内核,也可能只有目标 IP。域名规则需要内核拿到域名;IP 规则需要目标地址,或允许路由阶段解析域名。浏览器能打开某个网站,不代表域名集合、IP 集合都参与了这次匹配。

例如访问局域网管理地址 192.168.1.1,可以直接按地址段判断。访问一个域名时,即使它被收入 geosite:cn,解析结果也可能落在境外 CDN。两套数据库表达的不是同一种属性,不能互相替代。

10.0.0.0/8
RFC 1918 私有 IPv4 地址段
172.16.0.0/12
范围到 172.31.255.255
192.168.0.0/16
常见局域网地址段

判断:局域网规则优先验证地址范围

先用实际网关地址检查直连规则,再检查网站分类。上面三段是明确的私有 IPv4 范围,不是某份数据库的完整 private 清单;若还需要回环、链路本地或 IPv6 地址,应继续核对数据源内容。

二、规则文件来源与标签兼容性

常见来源包括 V2Fly 的 domain-list-community 域名集合、geoip 数据项目,以及 Loyalsoldier 等维护的规则数据构建。源项目可能提供文本列表,构建产物才是内核实际读取的 .dat 文件。不要把网页内容或原始域名文本改名为 geosite.dat。

客户端预设来源

推荐

沿用客户端已经配置的 Geo 数据下载来源,先确认现有路由所用标签均能加载。减少同时更换来源和规则造成的排查变量。

适合:常规分流、首次更新、恢复已有配置

维护项目的构建产物

需要特定分类时,再选择明确支持这些标签的来源。记录来源名称、更新时间和文件名,并核对其标签说明与内核格式。

适合:自定义分类、固定数据来源、排查标签缺失

同名文件不代表标签完全一致。cn 通常可见,但细分服务、广告分类、带属性的集合可能只存在于部分来源。配置引用了不存在的标签,可能使内核加载配置失败,而不只是让某条规则失效。

三、v2rayN 内更新 Geo 文件的操作顺序

桌面端先确认当前配置运行的是 Xray 还是 V2Fly 内核,再处理对应的数据文件。以下使用提供「更新 Geo 文件」入口的 v2rayN 界面;不同发行版的入口分组可能变化,不能把界面文案差异当作文件损坏。

  1. 备份路由

    打开「设置」→「路由设置」,记录当前启用的路由方案与自定义规则。若已经手动维护 Geo 文件,另外复制原文件到备份目录。

  2. 更新数据

    在主窗口打开「检查更新」→「更新 Geo 文件」。等待更新结果,分别确认 geoip.dat 与 geosite.dat 的处理状态,不把节点订阅更新提示当成规则库更新结果。

  3. 检查日志

    查看主窗口日志或消息区。下载失败先处理网络与来源地址;提示无法加载标签时,核对引用名称和数据源,不要直接删除整套路由。

  4. 重新载入

    通过客户端停止并重新启动当前连接,使内核重新读取数据。若客户端更新操作已经触发重启,仍应在启动日志里确认没有 Geo 文件加载错误。

  5. 复测规则

    保留原节点、代理模式与 DNS 设置,只更换数据文件后测试同一批目标。这样才能区分数据更新效果与其他设置变化。

在 v2rayNG 与 v2flyNG 中,先查看侧边菜单的「路由设置」,确认当前规则和可用的数据更新入口。安卓客户端不同版本的菜单并不完全一致;若没有独立的 Geo 更新项,应按该版本说明使用文件导入或资源更新功能,不要照搬桌面目录。更新订阅主要刷新节点信息,不能据此判断 Geo 数据已经刷新。

四、geosite:cn 与 geoip:private 的规则写法

下面是 Xray/V2Fly 的 routing 对象示例。它先保护私有地址直连,再处理域名集合,最后用中国 IP 集合作为补充。标签名称依赖已安装的数据文件;规则自上而下检查,先匹配到的规则决定出站。

{
  "routing": {
    "domainStrategy": "IPIfNonMatch",
    "rules": [
      {
        "type": "field",
        "ip": ["geoip:private"],
        "outboundTag": "direct"
      },
      {
        "type": "field",
        "domain": ["geosite:cn"],
        "outboundTag": "direct"
      },
      {
        "type": "field",
        "ip": ["geoip:cn"],
        "outboundTag": "direct"
      }
    ]
  }
}
字段正确用法常见误用
domain填写 geosite:cn 等域名匹配项。将 geoip:cn 当作域名集合填写。
ip填写 geoip:private 或 CIDR。把网站域名直接写进 IP 地址数组。
outboundTag引用当前完整配置中已定义的标签。把界面上的节点名称直接当成内核出站标签。
rules将范围明确的例外规则置于宽泛规则之前。在末尾追加修正规则,却被前面的规则先匹配。

同一条规则中的多个不同条件通常需要同时满足;同一数组里的多个候选项则用于匹配其中任一项。若目标是“域名属于 cn,或者 IP 属于 cn 就直连”,应像示例一样拆成两条规则,不能把两个字段放进同一条后仍期待“或者”的效果。

五、domainStrategy 与 DNS 为什么影响分流

routing.domainStrategy 决定路由判断时如何处理域名解析,不等同于整个客户端的 DNS 配置。尤其不要把它与出站中的同名或相近设置混淆:路由阶段决定走哪个出站,出站阶段还要决定如何建立连接。

因此,示例采用 IPIfNonMatch:已知域名集合先完成判断,未命中的目标再尝试 IP 分类。不过 DNS 查询本身走哪条路径,还取决于 DNS 服务器、查询规则与连接配置;仅更新两个数据文件不能修复解析污染或 DNS 请求超时。

操作:先确定内核拿到的是域名还是 IP

遇到“域名直连规则没生效”,先查请求目标和路由日志。应用若只交给内核一个 IP,单独更新 geosite.dat 不会补回域名;应检查应用代理方式,必要时核对嗅探配置及其适用范围,再决定是否调整规则。

六、手动替换、验证与常见报错

自动更新失败时,可以手动取得同一维护来源的两个构建文件。替换前停止内核,找到当前内核实际读取的资源目录,保留准确文件名,再重新启动。桌面安装版、便携版和安卓应用的资源位置不同,不存在一条通用目录路径。

  1. 确认读取位置:以客户端目录说明、资源设置或日志为准。不要因为程序目录里有一个同名文件,就认定内核运行时读的是它。
  2. 确认下载结果:文件不应为空,也不应是登录页、错误提示页或压缩包。系统隐藏扩展名时,还要防止保存成 geosite.dat.dat。
  3. 确认启动成功:重新启动后检查是否出现文件不存在、数据解析失败、集合标签找不到等提示。启动失败时先恢复备份,避免继续叠加修改。
  4. 确认真实路由:在应用确实使用客户端代理的前提下,分别访问局域网目标、预期直连目标和预期代理目标,结合可用的访问日志检查出站标签。
现象优先检查处理方向
下载成功但仍报找不到文件运行内核的资源目录与文件名。将文件放到实际读取位置,重新启动内核。
更新后提示某个标签不存在新来源是否提供该标签。恢复旧数据,或按新来源分类调整对应规则。
网站仍走错误出站规则顺序、域名可见性、当前选中方案。检查先命中的规则,确认编辑的是正在使用的路由。
启动正常但网站打不开节点连接、DNS、目标服务状态。先分离连接故障与分类问题,参考故障排查逐项验证。
Geo 文件需要每天更新吗?

没有统一的每日更新要求。分类变化、地址分配调整和维护项目修正才是更新的实际收益。可先按周检查,有明确分类错误或新增标签需求时再主动更新;若客户端没有 Geo 定时更新功能,不要把订阅自动刷新间隔当成替代项。

更新数据库会自动启用国内直连吗?

不会。数据文件只提供集合,仍需有规则引用 geosite:cn 或 geoip:cn,并指向有效的直连出站。当前模式若绕过这套路由,数据库再新也不会改变结果。

为什么文件修改时间变了,分类仍没变化?

修改时间只能说明本地文件被写入,不能证明所需条目发生变化,也不能证明内核已经重新读取。依次核对来源内容、运行时路径、内核重启和实际命中的规则,比反复下载更有效。

下载客户端