本文面向已经导入订阅、准备调整路由分流的用户。先区分 IP 数据库与域名数据库,再通过 v2rayN 更新 Geo 文件、确认内核实际读取的位置,最后配置国家与广告类别规则。示例采用 V2Ray/Xray 的 DAT 路由语法;执行前应确认当前连接使用的内核,以及数据源是否包含所引用的类别。
GeoIP 与 GeoSite:分别匹配什么
geoip.dat 保存按国家或其他标签组织的 IP 网段;geosite.dat 保存按标签组织的域名规则。它们是供内核读取的数据文件,不是节点列表,也不是订阅地址。更新订阅会刷新服务器配置,但不能据此判断 Geo 文件也已经更新。
| 项目 | GeoIP | GeoSite |
|---|---|---|
| 常见文件名 | geoip.dat | geosite.dat |
| 匹配对象 | 目标 IPv4 或 IPv6 地址 | 连接携带或嗅探得到的域名 |
| 规则示例 | "ip": ["geoip:cn"] | "domain": ["geosite:cn"] |
| 主要限制 | 不能仅凭 IP 归属判断经营主体所在地 | 类别范围取决于数据源,且需要域名信息 |
geoip:cn 的含义是引用数据库中的 cn IP 集合,不是“所有中文网站”。geosite:cn 引用的是域名类别,两者并不一一对应。网站可能使用跨国 CDN,同一域名在不同网络下也可能解析到不同地址,因此域名规则与 IP 规则需要分开理解。
在 v2rayN 中更新 Geo 文件
先确认当前节点使用的是 V2Ray 或 Xray,以及当前启用的路由方案。v2rayN 负责生成配置和管理内核,真正读取数据库、匹配路由的是内核。下列步骤以提供「检查更新」→「更新 Geo 文件」入口的桌面界面为例;不同界面版本的名称或位置可能变化,不应把更新订阅当成替代操作。
-
记录现状
记下当前活动路由方案、节点所用内核,以及本次准备修复的域名。先保存路由配置副本,避免把规则修改与数据库更新混在一次操作中。
-
执行更新
打开主界面的「检查更新」→「更新 Geo 文件」。观察界面消息或日志,确认下载任务完成;仅看到菜单被点击,不能证明文件已经写入成功。
-
核对文件
定位正在运行的这份客户端的数据目录,核对
geoip.dat与geosite.dat的修改时间、文件大小和更新日志。若存在多个同名文件,应继续确认内核实际使用哪一份。 -
重启验证
重启当前内核;若界面没有独立重启入口,可完整退出客户端后重新启动。确认日志没有 Geo 文件加载错误,再重新建立测试连接,观察规则是否命中预期出站。
如果更新失败,先按错误类型处理:下载超时检查访问更新源的网络路径;证书错误先检查系统日期与时间;写入失败检查目录权限以及文件是否被其他进程占用。订阅分组中的“通过代理更新”属于订阅更新选项,不能直接推断它也控制 Geo 文件下载。
存放位置:以当前实例和内核日志为准
不要只凭网上的一条固定路径覆盖文件。便携目录、安装目录、用户数据目录,以及不同发行包的资源布局可能不同。尤其是电脑里保留了两份 v2rayN 时,更新旧目录中的文件,不会自动改变当前实例读取的数据。
定位方案:先找到实例,再确认资源目录
Windows
- 通过任务管理器对当前进程执行「打开文件所在的位置」,确认运行的是哪份程序。
- 在当前实例相关目录搜索两个 DAT 文件,并查看更新后的修改时间。
- 结合客户端日志、生成配置及内核启动信息判断实际资源路径。
macOS 与 Linux
- 区分应用安装位置和当前用户的数据目录,不要假定资源都在程序旁边。
- 检查启动环境及内核日志,确认资源目录是否被显式指定。
- 手动替换前停止内核,保留原文件,并确认目标目录具有写入权限。
存在同名文件不代表该文件正在被读取;当前实例、启动环境与加载日志应相互印证。
例如,在 Windows 的 PowerShell 中,可以进入已确认的客户端目录后执行下面的只读搜索。结果仅列出该目录树下的文件,不会自动覆盖任何内容;若资源位于用户数据目录,还需到对应目录继续查找。
Get-ChildItem -Path . -Recurse -File -Filter '*.dat' |
Where-Object { $_.Name -in @('geoip.dat', 'geosite.dat') } |
Select-Object FullName, Length, LastWriteTime
手动管理内核时,还要留意资源目录环境变量,例如 V2Ray 的 V2RAY_LOCATION_ASSET 或 Xray 的 XRAY_LOCATION_ASSET。客户端托管内核时不要随意新增这些变量,否则可能让内核绕过刚更新的目录。只有确认启动方式和实际读取路径后,手动替换才有意义。
规则写法:广告拦截、域名直连与 IP 直连
下面是 V2Ray/Xray 配置中的 routing 片段,不是可直接运行的完整客户端配置。它演示三条规则:广告类别交给阻断出站,国内域名和国内 IP 交给直连出站。使用前必须核对实际出站标签;block 与 direct 在这里是示例标签,不会因为写进规则就自动创建出站。
{
"routing": {
"domainStrategy": "AsIs",
"rules": [
{
"type": "field",
"domain": [
"geosite:category-ads"
],
"outboundTag": "block"
},
{
"type": "field",
"domain": [
"geosite:cn"
],
"outboundTag": "direct"
},
{
"type": "field",
"ip": [
"geoip:cn"
],
"outboundTag": "direct"
}
]
}
}
- 广告规则放前面:规则按顺序匹配,先命中的规则决定出口。若宽泛的直连规则在前,后面的广告规则可能没有机会处理该连接。
- 域名与 IP 分成两条:同一条
field规则中同时填写domain和ip,不是简单的“任意一个匹配即可”。为表达两类条件任一命中就直连,应分别建立规则。 - 阻断需要对应出站:
block应指向已定义的阻断出站,例如使用blackhole协议的出站;直连标签应指向freedom出站。实际名称以生成配置为准。 - 补齐默认出口:本片段没有定义未匹配流量的去向。V2Ray/Xray 通常使用第一个出站处理未匹配流量,应检查客户端生成配置中的出站顺序或其兜底规则。
在 v2rayN 的路由编辑界面填写时,域名条件使用 geosite:category-ads,IP 条件使用 geoip:cn,不要把整个 JSON 对象粘到单个条件输入框。保存后还要确认这套方案已经成为当前活动路由。完整字段关系可参阅本站的配置大全。
域名策略:为什么 IP 规则没有命中
示例选择 AsIs,意味着路由阶段不会为了匹配 IP 规则而额外解析一个域名目标。若连接本来携带的是 IP,仍可匹配 geoip:cn;若连接携带域名但没有命中域名规则,则不能指望它必然落入国内 IP 直连规则。
AsIs:先用域名分类
推荐适合作为本教程的排查起点。域名类别与 IP 条件的作用边界清楚,避免把额外 DNS 解析引入同一次测试;它并不代表所有网络环境都应固定使用此策略。
适合:先确认 GeoSite 规则与顺序是否正确。
IPIfNonMatch:解析后再匹配
当域名未命中现有规则时,尝试解析并继续用 IP 条件匹配。采用前应检查内核 DNS 配置、解析结果及默认出口,避免把解析差异误判成数据库过期。
适合:明确需要用解析后的 IP 为域名流量补充分流。
如果应用直接连接 IP,GeoSite 可能拿不到域名。嗅探可以从部分协议流量中提取域名,但不是所有连接都能恢复域名;应用使用的传输方式和加密机制也会影响结果。更新 geosite.dat 不能单独解决“路由根本没有域名可匹配”的问题。
更新后仍异常:按日志缩小范围
验证时不要只观察网页能否打开。先记录一个待测域名、预期出口与访问时间,再查看同一时间段的内核日志。日志详细程度由当前日志级别决定;必要时临时提高详细程度,完成排查后恢复,并避免公开包含订阅地址或认证信息的完整日志。
提示找不到 category-ads,文件不是已经更新了吗?
先核对数据源是否提供这个类别。若来源只提供其他广告集合,应按其实际标签修改规则;不要不断重下同一份文件。修正后重启内核,确认类别加载错误消失,再进行访问测试。
提示无法打开 geoip.dat,要放到哪里?
从日志中的失败路径入手,确认目录是否存在、文件名是否正确以及进程是否有读取权限。再检查启动环境是否指定了另一资源目录。不要把文件复制到多个目录碰运气。
广告规则保存了,为什么仍然显示广告?
确认活动方案、规则顺序和阻断出站标签,再检查广告请求使用的域名是否在类别中。与正文内容共用域名的广告很难仅靠域名列表区分,页面缓存或已有连接也可能保留旧结果。
国内网站走了代理,是 GeoIP 过期吗?
先看连接目标是域名还是 IP。使用 AsIs 时,域名未命中并不必然触发 IP 匹配。还需检查是否有更靠前的代理规则、目标是否使用境外 CDN,以及 DNS 结果是否符合预期。
同一套规则在另一个内核里不能用?
先确认目标内核支持的规则格式。本文的 DAT 文件与 geosite:、geoip: 引用面向 V2Ray/Xray,不能通过改扩展名转换成其他内核的规则集。应使用目标内核对应的数据格式和配置字段。
后续维护:数据库与规则分开更新
数据库更新改变类别成员,路由更新改变条件、顺序和出口。两者会分别影响分流结果。一次只调整一个变量,更容易判断问题来自数据变化、规则覆盖,还是 DNS 解析差异。没有必要在每次订阅刷新后手动替换全部文件。
- 变更前留副本:保存当前可用的 Geo 文件与路由配置,记录数据源及更新时间,方便异常时回退。
- 更新后查启动:先看内核是否正常加载,再测试直连、代理和阻断三种预期结果,避免只验证单个网页。
- 重新建立连接:旧连接可能继续使用建立时的路径。重启内核并重新发起请求,才能更清楚地观察新配置。
- 区分桌面与安卓:v2rayNG 使用 Xray 内核,v2flyNG 使用 V2Fly 内核,但客户端的数据管理入口和资源目录不同,不能照搬桌面端文件路径。
遇到无法启动或网络中断时,优先恢复上一份可用配置,再分项定位。常见连接问题可继续查看疑难解答。Geo 数据只是路由条件的一部分;入口接管、规则顺序、DNS 策略与出站标签共同决定最终连接路径。