适合已经在 v2rayN、v2rayNG 或 v2flyNG 中使用路由规则,但遇到标签缺失、更新后无法启动或分流结果变化的用户。重点是先备份规则与数据文件,再更新 GeoIP、GeoSite,随后用启动日志、命中结果和实际连接逐层确认;若出现异常,可按原文件、原规则、原内核三个层次回退。
先分清 GeoIP 与 GeoSite 各自匹配什么
GeoIP 与 GeoSite 都是供路由模块读取的分类数据,但输入对象不同。GeoIP 面向目标 IP 地址,例如规则中的 geoip:private 或 geoip:cn;GeoSite 面向域名,例如 geosite:cn、geosite:category-ads-all。前者不能直接判断域名属于哪个分类,后者也不会替代 IP 地址段匹配。
常见文件名是 geoip.dat 与 geosite.dat。文件只是分类容器,真正被规则引用的是内部标签。不同数据来源、构建日期或精简方案可能包含不同标签,因此“文件能下载”不等于“当前规则里的每个标签都存在”。更新前应记录自己实际使用的标签,而不是只看文件日期。
| 数据类型 | 匹配对象 | 规则示例 | 需要注意 |
|---|---|---|---|
| GeoSite | 请求中的域名 | geosite:cn |
标签必须存在于当前 geosite.dat,规则顺序也会影响结果。 |
| GeoIP | 目标 IPv4 或 IPv6 地址 | geoip:private |
域名是否先解析为 IP,受路由的域名解析策略影响。 |
| 显式域名 | 完整域名、后缀或关键词 | domain:example.com |
不依赖 GeoSite 标签,适合保留少量关键例外规则。 |
| 显式网段 | 指定 CIDR 地址段 | 192.168.0.0/16 |
不依赖 GeoIP 分类,局域网直连规则通常应放在前面。 |
这条流程并非每次都完整发生。以 Xray 路由的 domainStrategy 为例,AsIs 通常先按原始域名规则处理,不为 GeoIP 匹配主动解析域名;IPIfNonMatch 会在域名规则未命中时尝试解析并继续匹配 IP 规则;IPOnDemand 则可能在遇到需要目标 IP 的规则时触发解析。更新数据库后若分流结果改变,应把策略与规则顺序一起检查。
结论:先确认匹配对象,再讨论数据库是否失效
域名没有命中 geoip:cn,不一定是数据文件损坏;在 AsIs 策略下,它可能根本没有进入目标 IP 分类匹配。先看域名策略和日志中的目标地址,再决定是否更换数据文件。
更新前先保存三类可回退内容
更新 Geo 数据通常不会改变节点的 VMess、VLESS、TLS 或 REALITY 参数,但可能改变路由标签的可用性和分类范围。稳妥做法不是直接覆盖,而是先保存当前规则、当前数据文件以及客户端正在调用的内核信息。这样才能判断故障来自规则、数据还是核心切换。
在 v2rayN 中,先打开「设置」→「路由设置」,记录当前启用的路由规则集、规则顺序和默认出站。随后在主界面查看当前核心类型;若使用 Xray,常见解压版的数据文件位于对应核心资源目录中。不同 v2rayN 7.x 构建的目录组织可能不同,应以启动日志显示的资源路径或客户端实际选择的核心目录为准,不要凭相似文件名覆盖其他核心的资源。
- 导出或复制路由配置:保留启用中的规则顺序,特别是局域网直连、阻断、指定域名和最终兜底规则。
- 复制旧数据文件:将现有
geoip.dat、geosite.dat放入带日期的本地备份目录,避免与新文件混在同一路径。 - 记录核心与客户端状态:记下当前使用 Xray 或 v2fly 内核、更新前能否正常启动,以及测试节点是否可连接。
- 列出自定义标签:搜索路由配置中的
geoip:与geosite:,把不常见标签单独列出。 - 一次只更新一组资源:不要同时更换核心、订阅、DNS 和 Geo 数据,否则日志出现异常时难以定位变量。
桌面端可在关闭核心后复制文件,避免恰好处于读取或替换过程。Android 上的 v2rayNG 与 v2flyNG 通常由应用管理资源目录,不必寻找系统沙盒中的文件;优先使用应用内提供的 Geo 资源更新或导入入口,并在操作前导出自定义配置。v2rayNG 使用 Xray 内核,v2flyNG 使用 v2fly 内核,二者对基础 geoip.dat、geosite.dat 规则的支持方向相近,但不能据此假定所有扩展标签和配置字段完全一致。
更新入口只负责替换资源,不能证明规则仍然兼容
在 v2rayN 中通过「检查更新」→「Geo files」完成下载后,仍需重启核心并检查日志。进度提示结束只说明更新动作完成,不能代替标签加载和分流命中确认。
检查规则标签、顺序与内核兼容性
Geo 数据最常见的兼容问题不是文件完全无法读取,而是某个自定义标签在新数据中不存在。基础标签如 geoip:private 较常见,但地区、服务类别和扩展属性标签取决于数据集。若规则来自旧配置或其他数据来源,更新前必须确认新文件仍提供相同标签。
规则顺序同样重要。路由通常按顺序寻找匹配项,前面的宽泛规则可能覆盖后面的精确规则。例如先放置一个覆盖范围很大的 GeoSite 分类,再放单独域名直连规则,后者可能没有机会执行。处理关键域名时,可把明确的例外规则放在宽泛分类之前,并保留最终兜底出站。
域名分类规则
- 输入
- 请求域名
- 标签
- geosite:cn
- 出站
- direct
- 前提
- 标签存在且域名可见
适合先按域名分类处理,再由后续规则接管未命中的请求。
地址分类规则
- 输入
- 目标 IP
- 标签
- geoip:private
- 出站
- direct
- 策略
- 结合 domainStrategy
局域网地址应优先直连,避免管理页面或本地服务进入代理出站。
下面是用于理解结构的精简路由片段。实际导入 v2rayN 时,出站标签必须与当前配置中的标签一致;若客户端生成的是其他名称,应使用客户端现有值,不要机械照抄。
{
"routing": {
"domainStrategy": "IPIfNonMatch",
"rules": [
{
"type": "field",
"ip": ["geoip:private"],
"outboundTag": "direct"
},
{
"type": "field",
"domain": ["domain:intranet.example"],
"outboundTag": "direct"
},
{
"type": "field",
"domain": ["geosite:cn"],
"outboundTag": "direct"
}
]
}
}
其中 domain:intranet.example 是显式域名规则,不依赖 GeoSite 数据,适合作为关键内部服务的保护项。若新 GeoSite 文件缺少某个业务分类,先把少量关键域名改为显式规则,可以恢复基本使用;之后再决定寻找兼容数据还是调整分类设计。不要为了一个缺失标签一次性删除全部分流。
- 标签存在但没有命中:检查域名是否已经变成 IP、是否被更早规则处理,以及嗅探设置能否提供目标域名。
- 标签不存在:启动核心时通常直接报出分类列表缺失,应恢复旧文件或改用新数据确实包含的标签。
- GeoIP 没有生效:检查目标是否仍以域名形式进入路由,以及
domainStrategy是否允许继续进行 IP 匹配。 - 所有流量走同一出站:核对默认规则、最终兜底规则和出站标签,问题未必来自 Geo 文件。
从启动日志确认文件和标签是否加载
判断更新是否成功,第一步是完全停止旧核心并重新启动,而不是只关闭设置窗口。核心通常在启动或首次解析对应标签时读取 Geo 数据。若旧进程仍在运行,即使磁盘上的文件已经替换,当前连接也可能继续使用旧资源。
在 v2rayN 中可先停止服务,再重新启动所选配置,然后打开日志窗口观察最初 30 秒。测试环境若使用本地 SOCKS 端口 127.0.0.1:10808,应先确认该入站监听成功,再检查 Geo 相关错误;端口占用导致核心未启动时,后续分流测试没有参考价值。10808 只是本文测试值,实际端口以「设置」→「参数设置」中的本地监听配置为准。
| 日志或现象 | 可能原因 | 下一步 |
|---|---|---|
| 找不到 geoip.dat 或 geosite.dat | 文件不在当前核心读取的资源目录,或更新写入了另一套核心目录。 | 根据启动日志确认资源路径,将原文件恢复到当前核心实际读取的位置。 |
| list not found 或标签缺失 | 规则引用了新数据不包含的分类标签。 | 恢复旧数据,或将规则改为新文件存在的标签后重新启动。 |
| 核心启动成功但分流相反 | 规则顺序、域名策略或分类内容发生变化。 | 开启路由日志,用固定测试域名比较实际命中的出站。 |
| 本地端口没有监听 | 核心在读取配置或资源时已经退出,也可能是端口被占用。 | 先处理首个错误,不要用浏览器访问结果反推 Geo 数据状态。 |
不同内核版本的错误文字可能略有差异,但判断顺序相同:先找日志中的第一条致命错误,再看它指向文件路径、标签名称还是配置字段。后续出现的连接失败往往只是核心未成功启动的连锁结果。可重点搜索 geoip、geosite、routing、failed 和具体标签名称。
更新结束了,为什么日志仍显示旧规则结果?
先在客户端停止核心,再确认任务管理器中旧进程已经退出,然后重新启动配置。只替换文件而不重启核心,当前进程可能继续使用已经载入的旧数据。
提示找不到某个 GeoSite 标签怎么办?
打开「设置」→「路由设置」,定位日志中点名的 geosite: 标签。先恢复旧文件验证配置可启动,再确认新数据是否提供同名标签;若没有,应调整规则而不是反复覆盖文件。
核心能启动,但指定域名还是走错出站?
把该域名临时写成一条显式 domain: 规则并放到宽泛分类前面。若显式规则能够命中,说明连接链路正常,应继续检查 GeoSite 分类内容与规则顺序。
v2rayNG 更新后需要重新导入订阅吗?
通常不需要。Geo 资源与 VMess、VLESS 节点订阅负责不同内容。先重启当前配置并查看运行日志,只有订阅本身的节点参数变化时才需要更新订阅。
只测试网页打开,能确认分流正确吗?
不能。网页可访问只能证明存在可用出站。应分别测试预期直连、预期代理和局域网目标,并结合路由日志确认三个请求实际使用的出站标签。
更新异常时按文件、规则、内核逐层回退
回退的目标是尽快恢复更新前的已知状态,而不是在异常状态下继续叠加修改。先停止核心,将新 geoip.dat 与 geosite.dat 移出资源目录,再放回备份文件。重新启动后,如果原规则恢复正常,问题范围就已经收敛到新数据或标签兼容性。
如果恢复旧数据后仍然异常,再恢复更新前导出的路由配置,尤其要确认规则顺序、domainStrategy 和出站标签。若数据与规则都恢复后核心仍无法启动,检查更新过程中是否同时切换了 Xray 或 v2fly 内核。客户端版本、核心版本和数据文件应分别记录,避免把三个变量合并成一次更新。
- 第一层:恢复数据文件。适用于文件缺失、标签不存在、更新后分类结果突然改变。
- 第二层:恢复路由规则。适用于修改标签或规则顺序后出现全局直连、全局代理或局域网不可达。
- 第三层:恢复原内核选择。适用于更新时同时更换核心,且日志出现配置字段不兼容。
- 第四层:回到最小规则。只保留局域网直连和最终代理出站,确认基础连接后再逐条加回 Geo 规则。
恢复连接后,可以建立一个固定维护节奏:更新前保存两个数据文件与路由配置;更新后检查本地端口、首个日志错误和三个固定测试目标;确认无误后再删除临时备份。Geo 数据不需要为了日期变化而频繁替换,只有规则确实依赖新的地址段或域名分类时,更新才有明确收益。
最终判断:能启动、能连接、命中正确缺一不可
核心启动成功只证明资源可读取,网页可打开只证明某个出站可用。完成维护应同时满足日志没有 Geo 加载错误、固定测试请求能够连接、直连与代理目标命中预期出站。