本文适合需要维护 v2rayN 分流规则的用户。先区分域名库和 IP 库,再更新内核实际读取的数据文件,最后用规则顺序、域名解析策略与日志验证结果。Android 上的 v2rayNG、v2flyNG 也可参考原理,但文件入口与桌面端不同。
GeoIP 与 GeoSite 分别匹配什么
geosite.dat 保存按标签组织的域名规则,geoip.dat 保存按标签组织的 IP 地址段。它们是路由数据,不是订阅,也不是节点配置。更新数据文件不会修改 VMess、VLESS 等连接参数,更不会自动新增可用节点。
GeoSite 域名库
- 文件名
geosite.dat- 匹配对象
- 域名及库内定义的域名规则
- 引用位置
- 路由规则的
domain - 常见写法
geosite:cn
分类取决于数据源;同名标签不保证在不同规则库中完全一致。
GeoIP 地址库
- 文件名
geoip.dat- 匹配对象
- 目标 IP 地址
- 引用位置
- 路由规则的
ip - 常见写法
geoip:private、geoip:cn
地址分类不等于网站归属,CDN 与跨区域服务可能造成两者不同。
geosite:cn 引用规则库预先整理的 cn 域名分类,匹配范围由库中的条目决定,而非仅限于以 .cn 结尾的域名。geoip:cn 则引用对应的地址段分类,两者不能互相替代。
V2Ray 与 Xray 的常见部署使用这类 DAT 数据。v2rayNG 使用 Xray 内核,v2flyNG 使用 v2fly 内核;v2rayN 的数据格式需求还要看当前选用的内核。若实际运行的是使用其他规则格式的内核,不应仅凭文件名相似就套用本文的 DAT 配置。
规则文件来源与更新方式选择
常见数据来自 v2fly 的域名分类与地址数据构建项目,以及社区维护的兼容规则库。域名清单经整理、编译后生成 DAT 文件;它不是可以直接用文本编辑器修改的域名列表。一个库是否包含 cn、private 或某个服务标签,要看该库自己的分类说明。
客户端内置更新
推荐使用客户端预设的数据源与目标目录,减少文件放错位置的风险。更新前仍需确认选用的内核,以及内置数据源是否包含现有规则引用的标签。
适合:常规分流、没有自定义数据源的用户
手动替换文件
适用于固定数据源或离线维护。需要自行确认格式、标签与实际资源目录,并保留上一份可用文件。不要把不同日期、不同来源的数据随意混合后直接投入使用。
适合:受控部署、需要回退的自定义规则
v2rayN 更新 Geo 文件的操作步骤
以下按带有「检查更新」→「更新 Geo 文件」入口的 v2rayN 界面说明。不同界面分支可能将入口放进设置或更新菜单;若本机没有该菜单,不要寻找一个猜测出来的目录直接覆盖。先查看客户端帮助与当前内核日志,确认资源路径。
-
记录现有配置
打开「设置」→「路由设置」,记录当前启用的路由配置、规则顺序和默认出站。备份现有 Geo 文件,并记下备份来自哪个目录,便于恢复。
-
确认当前内核
查看启动日志中的内核名称和启动参数,确认当前使用 Xray 或 v2fly 的 DAT 路线。不要把程序安装目录、工作目录与资源目录当成同一个位置。
-
执行数据更新
进入「检查更新」→「更新 Geo 文件」。等待下载与替换结果,确认两份文件的处理均已完成;若提示网络错误,先解决下载连接,再重试,不要把部分成功当成完整成功。
-
重启当前内核
通过客户端重启服务,或退出客户端后重新打开,让内核重新载入文件。仅关闭主窗口可能只是最小化到托盘,并不代表服务已经重启。
-
核对启动日志
检查是否出现资源文件不存在、分类未找到或配置解析失败。随后测试一个直连域名、一个应代理域名和一个局域网地址,逐项确认分流。
手动更新时,应先停止内核,再把兼容的文件放进已确认的资源目录,保留准确文件名 geoip.dat 与 geosite.dat。不要把下载到的网页、压缩包或带重复扩展名的文件改名后充当数据文件。若更新后启动失败,恢复备份并重启,再排查新库的标签与格式。
Android 设备应使用 v2rayNG 或 v2flyNG 自己提供的 Geo 数据更新、资源导入入口。菜单名称随版本变化,不能照抄桌面路径;应用私有目录也不等于系统「下载」目录。无法确认入口时,先保留当前可用配置,不要清除应用数据来尝试更新。
geosite:cn 与 geoip:private 的路由写法
以下是原生 V2Ray/Xray 配置中的 routing 对象示例,不是可以直接导入的完整客户端配置。它假定现有出站标签为 direct 与 proxy:前者对应直连出站,后者对应代理出站。实际标签不同,必须先替换成配置中已经存在的名称。
{
"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"
},
{
"type": "field",
"network": "tcp,udp",
"outboundTag": "proxy"
}
]
}
}
- 私有地址优先:
geoip:private用于避免内网目标误入代理。数据源中必须存在这个标签;它不是“所有无需代理地址”的统称。 - 域名分类直连:目标域名命中
geosite:cn时,按该规则选择直连,不需要再用 IP 分类证明一次。 - 地址分类补充:
geoip:cn能匹配已知目标 IP;域名连接能否进入地址匹配,还受域名解析策略影响。 - 最后兜底:示例把剩余 TCP、UDP 流量交给代理。若客户端已经生成兜底规则,不要重复添加相互冲突的末尾规则。
在 v2rayN 的「设置」→「路由设置」里编辑时,通常需要分别填写域名条件、IP 条件和出站,不能把整段 JSON 粘贴进“域名”输入框。单条规则同时填写 domain 与 ip 通常表示条件需要同时满足,不是任意一项满足即可;想表达“域名或地址命中就直连”,应像示例一样拆成两条。
用具体地址验证分流结果
判断更新是否生效,不能只看网页是否打开。成功访问可能来自代理兜底、应用缓存或旧连接。应先重启内核,关闭测试应用已有连接,再观察新请求的目标与出站记录;若现有日志级别没有路由信息,可临时提高日志详细程度,完成后恢复。
| 测试目标 | 预期观察 | 需要排除的干扰 |
|---|---|---|
实际存在的内网设备,如 192.168.1.1 | 请求确实进入内核时,私有地址规则选择直连 | 系统代理绕过内网时,内核可能根本收不到请求 |
确认属于当前库 cn 标签的域名 | 域名规则选择直连 | 请求只有 IP、域名未传入或分类来源不同 |
| 明确写入代理规则的测试域名 | 选择预设代理出站 | 前面已有更宽泛的直连规则 |
| 没有显式分类的目标 | 按解析策略及兜底规则处理 | 误把兜底成功当成 Geo 分类命中 |
IPv4 私有地址的三段分别是 10.0.0.0/8、172.16.0.0/12、192.168.0.0/16。这组地址可用于理解 CIDR,但不是 geoip:private 在所有库里的完整内容;实际库还可能包含回环、链路本地及 IPv6 相关范围,应以数据源定义为准。
Geo 文件也不能单独保证 DNS 请求按预期出站。传统 DNS 的 53 端口、应用自己的加密解析,以及内核内置 DNS,可能走不同路径。若域名分流异常,应同时检查请求是否保留域名、DNS 配置和 TUN 接管范围;不要通过反复更换分类库掩盖解析路径问题。
更新失败与规则不命中的常见问题
文件已经替换,为什么分流还是老样子?
先重启当前内核,再核对启动参数和资源目录。电脑上可能留有多份 v2rayN,桌面快捷方式启动的未必是刚替换文件的那一份。最后检查当前启用的路由配置是否正确,避免只修改了未启用的方案。
日志提示找不到某个 GeoSite 标签,怎么办?
检查规则中的标签拼写,再查看当前数据源是否提供该分类。不要假设不同来源的库具有同一套标签。可恢复原数据文件,或将该规则改为明确的域名条件;修改前保存原规则,便于对照。
更新 Geo 文件一直超时,需要重装吗?
先确认更新地址能够访问。若客户端提供通过代理下载的选项,可使用已经可用的代理后重试;也要检查更新任务是否会随内核重启而中断。重装不能解决数据源不可达,优先保留现有可用文件。
更新后国内网站反而走代理了,怎么定位?
按“启用的路由方案→规则顺序→域名是否传入→标签是否包含目标→解析策略”检查。必要时在分类规则之前添加一条精确域名测试规则,如 full:example.com,仅用于验证规则链路,测试完删除;不要直接把所有流量改成直连来替代定位。
长期维护时,建议一次只改一类变量:先更新数据文件并验证,再调整规则或 DNS。记录数据来源、替换位置和本地操作时间即可形成可回退的维护记录。更新频率应服从实际分类变化,不必为追求文件日期而频繁替换一套已经验证可用的规则。