适合已经导入订阅、节点能够连接,但希望境内网站直连、境外网站走代理的 v2rayN 用户。先分清域名集与 IP 集,再选择域名解析策略,最后按顺序配置规则并用日志验证。本文特别说明“末尾全代理规则”为什么可能让 geoip 回退失效,示例是内核路由片段,不是可以直接导入客户端的完整配置。
一、geosite 与 geoip 分别匹配什么
v2rayN 是客户端界面,实际处理连接的是所选内核。订阅主要提供服务器地址、协议、认证与传输参数;路由决定进入本地内核的连接采用哪个出站。更新订阅不等于更新路由数据库,也不会自动纠正自定义规则的顺序。
geosite 根据域名集合匹配,geoip 根据 IP 地址集合匹配。两者都依赖相应的数据文件,不能只凭名称理解成实时定位服务。尤其是 geosite:cn,它表示数据库维护的域名分类,不是“所有以 .cn 结尾的网站”,更不是对服务器物理位置的保证。
| 条件 | 匹配对象 | 常见用途 | 需要注意 |
|---|---|---|---|
geosite:cn | 目标域名 | 数据库收录的境内站点直连 | 分类取决于所用 geosite 数据 |
geosite:category-ads-all | 广告相关域名 | 交给 block 出站 | 数据文件须包含该分类 |
geoip:cn | 目标 IP | 中国 IP 范围直连 | 域名连接可能需要先解析 |
geoip:private | 私有与本地地址集合 | 内网设备访问 | 以数据集定义为准,不等于所有局域网域名 |
full:example.com | 完整域名 | 单个域名的例外规则 | 不会同时匹配其子域名 |
domain:example.com | 域名及其子域名 | 同一站点家族统一出站 | 比完整域名规则覆盖更广 |
这里的 example.com 仅用于说明语法,不是实际应添加的业务规则。检查自己的站点时,应使用浏览器或内核日志中出现的真实主机名。同一个页面可能加载多个域名,首页直连成功,不代表登录接口、图片与视频也会命中相同规则。
二、domainStrategy 怎么选:先域名还是先 IP
routing.domainStrategy 决定路由匹配时是否解析目标域名。它不是 DNS 服务器地址,也不是 direct 出站内部的解析策略。设置名字相似,作用位置却不同:一个为“选择出站”提供 IP,另一个可能为“实际建立直连”解析地址。
IPIfNonMatch
推荐先按现有目标信息匹配规则。域名阶段没有命中任何规则时,再解析域名并尝试 IP 条件。适合本文的“域名优先、IP 补漏”方案,但必须保留真正的未匹配状态,不能先被全流量规则接走。
适合:域名规则为主,geoip 补充,默认出站已明确的配置
AsIs
路由阶段不额外解析域名。以域名进入的连接主要依靠域名规则;以 IP 进入的连接仍可匹配 IP 规则。它并不意味着整个连接过程都不会使用 DNS。
适合:域名规则覆盖明确,希望避免路由阶段额外查询的配置
IPOnDemand
匹配过程中遇到需要 IP 的规则时解析域名。如果私有地址或国家 IP 规则位于前面,域名连接可能较早触发 DNS 查询。它能让末尾兜底前的 IP 规则参与匹配,但也更依赖解析结果。
适合:需要按目标 IP 判断,且已验证 DNS 行为的配置
最容易忽略的情况是:使用 IPIfNonMatch,同时在末尾添加 network: tcp,udp → proxy。这条规则在第一次匹配时就能接住连接,因此并不存在“完全未匹配”;域名解析回退可能不会触发,前面的 geoip:cn 也就无法为这次域名连接补漏。
- 沿用本文方案:不放全流量兜底规则,确认生成配置中的第一个出站是
proxy。没有路由规则命中时,内核使用第一个出站。 - 必须显式写末尾兜底:考虑改用
IPOnDemand,并把需要判断的 IP 规则放在兜底之前,再验证 DNS 与出站日志。 - 仅用域名分流:可以选择
AsIs,但不要再期待域名连接通过geoip:cn自动补漏。
三、direct、proxy、block 与规则顺序
内核按规则列表从上往下查找,第一条匹配的规则决定出站。这里的 direct、proxy、block 都是出站标签,不是随便写上就生效的关键字。完整配置必须存在同名出站;自定义配置若使用别的标签,需要同步修改路由引用。
直连与代理出站
- 直连标签
direct- 直连实现
- 通常使用 freedom 出站
- 代理标签
proxy- 代理目标
- 当前选中的可用节点
- 未匹配流量
- 本文要求第一个出站为 proxy
切换节点会改变代理连接目标,但不应改变这套规则的匹配顺序。
拦截与规则前提
- 拦截标签
block- 拦截实现
- 通常使用 blackhole 出站
- 域名数据库
geosite.dat- IP 数据库
geoip.dat- 匹配原则
- 从上到下,首条命中生效
数据文件缺失或分类不存在时,核心可能无法加载配置,应先处理启动日志里的错误。
建议的顺序是:必要的单站例外、广告拦截、内网地址直连、境内域名直连、境内 IP 直连,最后由默认出站代理。例外规则之所以放最前,是为了避免被更宽的分类覆盖;但它也会覆盖后面的广告规则,只应添加确实需要的域名。
| 优先级 | 规则用途 | 出站 | 放置理由 |
|---|---|---|---|
| 1 | 单个站点的人工例外 | direct 或 proxy | 覆盖后面的广泛分类 |
| 2 | 广告域名集合 | block | 避免先命中境内直连分类 |
| 3 | 私有 IP 与本地网段 | direct | 内网连接不应发往远端节点 |
| 4 | 境内域名集合 | direct | 域名可直接判断时不必等待 IP 回退 |
| 5 | 境内 IP 集合 | direct | 补充纯 IP 连接与未收录域名 |
| 默认 | 没有规则命中的连接 | proxy | 使用生成配置中的第一个出站 |
四、在 v2rayN 中建立一套独立路由
以下菜单入口以 v2rayN 7.x 的 Windows WPF 界面为参照。桌面版及不同小版本的按钮名称可能有差异;找不到同名入口时,先在当前界面的设置菜单中确认路由编辑功能,不要把下面的核心 JSON 粘到节点地址栏或订阅地址栏。配置前,保留原来的路由方案,方便切回。
-
确认节点可用
在主界面选中一个可用节点并设为活动服务器。先用原有路由验证网页能够访问;节点本身超时、认证失败或 TLS 握手失败,应先按故障排查处理,分流规则不能修复远端连接。
-
打开路由设置
进入「设置」→「路由设置」,新建一套路由方案,命名为“境内直连测试”。如果该界面提供高级路由开关,确认高级规则已启用,并选择新建方案作为当前使用的路由。
-
选择域名策略
在路由方案的域名策略项选择
IPIfNonMatch。随后检查是否存在“全部 TCP、UDP 走代理”的末尾规则;本文方案不保留这种规则,而是要求默认出站为 proxy。 -
分开添加条件
依次添加广告域名、私有 IP、境内域名、境内 IP 四条规则。
geosite:写入域名条件,geoip:写入 IP 条件。不要在同一条规则中同时填写域名条件和 IP 条件来表达“二者任选其一”。 -
保存并核对
保存方案,让内核重新加载配置。核对生成配置中的规则顺序、出站标签与
outbounds顺序;若默认出站不是 proxy,应按当前版本提供的默认出站设置调整,或者改用前文介绍的显式兜底方案。 -
逐项测试
保持节点、浏览器和代理接入方式不变,分别测试境内域名、境外域名、内网 IP。每次调整后新建连接,避免浏览器沿用旧连接;只有日志出站与预期一致,才算规则生效。
一条 field 规则内,不同类型的条件通常需要同时满足;同一个条件数组中的多个值才表示任一值匹配。将 domain 和 ip 合进同一条规则,不能代替两条独立的直连规则。这是手写配置与图形界面编辑时都容易遇到的错误。
五、核心路由片段:域名优先,IP 补漏
下面只展示 routing 对象。它没有入站、节点凭据、DNS 或出站定义,不是完整配置,也不是 v2rayN 路由方案的导入格式。可以据此在界面中逐条填写;使用自定义核心配置时,则需要与已有配置结构合并,并确认三个出站标签都存在。
{
"routing": {
"domainStrategy": "IPIfNonMatch",
"rules": [
{
"type": "field",
"domain": [
"geosite:category-ads-all"
],
"outboundTag": "block"
},
{
"type": "field",
"ip": [
"geoip:private"
],
"outboundTag": "direct"
},
{
"type": "field",
"domain": [
"geosite:cn"
],
"outboundTag": "direct"
},
{
"type": "field",
"ip": [
"geoip:cn"
],
"outboundTag": "direct"
}
]
}
}
- 默认代理前提:完整配置的
outbounds[0].tag必须是proxy。仅有上面的路由片段,不能保证未匹配连接走代理。 - 类别前提:当前数据文件包含
cn、private与category-ads-all。替换数据库后,先确认这些类别仍可加载。 - 纯 IP 连接:访问
192.168.1.1时可直接用 IP 条件匹配,不需要等待域名解析。实际设备不在这个地址时,用自己的设备地址测试。 - 域名连接:先尝试广告与境内域名分类;未匹配时,再按策略解析并尝试 IP 条件。解析失败不会凭空产生可用的目标 IP。
如果有一个境内分类中的站点需要固定走代理,可在广告规则之前加入独立域名例外,并指向 proxy。如果只是某个子域名异常,优先使用 full: 精确匹配,不要立即放宽成整个主域名及其全部子域名。
六、怎么验证分流:检查接入、DNS 与出站
网页能打开只说明某条路径可用,不能证明采用了预期出站。测试时先固定一个节点,再确认应用使用的本地代理端口。v2rayN 常见的本地监听端口是 10808,但已有安装可能被修改,应以当前设置与内核启动日志为准,不要把它当成永远固定的端口。
| 测试对象 | 预期结果 | 核对内容 |
|---|---|---|
| 已确认在 cn 集中的域名 | direct | 日志中的目标域名、出站标签 |
| 未命中直连分类的境外域名 | proxy | 默认出站是否为代理 |
192.168.1.1 等实际内网地址 | direct | 连接是否进入内核、是否命中私有 IP 规则 |
| 日志中实际出现的广告域名 | block | 分类是否收录、是否先被例外规则匹配 |
需要明确保留域名交给 SOCKS 代理时,可使用下面的测试命令。socks5h 中的 h 表示由代理侧处理目标域名解析,避免本地先解析后只向内核提交 IP。命令要求本地端口提供 SOCKS 服务,系统也需要已经具备 curl 工具。
curl --proxy socks5h://127.0.0.1:10808 --connect-timeout 10 --max-time 20 https://www.baidu.com/ --output /dev/null
上述输出目标适用于 Linux、macOS 终端;Windows 命令提示符中可将 /dev/null 改为 NUL,需要时使用 curl.exe 调用。这里的 10 秒连接超时和 20 秒总超时只是测试边界,不是实测延迟,也不是速度承诺。对该域名的直连预期仍应以自己的数据文件与日志为准。
- 没有连接日志:先查应用是否绕过代理、监听端口是否正确、内核是否已启动,不要先改 geosite。
- 有域名但出站不对:查规则顺序、类别内容、当前路由方案,以及是否存在先命中的全流量规则。
- 日志只有 IP:应用可能已在本地解析。域名规则无法直接匹配纯 IP 目标;嗅探在适用协议中可能提供域名信息,但不能保证还原所有流量。
- 解析失败或地址异常:查当前 DNS 配置与解析路径。路由选择与 DNS 查询如何出站是相关但不同的问题,不应把所有 DNS 请求一概直连。
七、常见问题:规则不生效与广告误拦截
写了 geoip:cn,境内网站为什么还是走代理?
进入「设置」→「路由设置」,先确认当前方案与域名策略。若使用 IPIfNonMatch,检查末尾是否有 tcp,udp 全代理规则;它可能使首次匹配直接结束。再确认日志中目标是域名还是 IP,以及实际解析地址是否属于当前 geoip 数据中的 cn 分类。
广告规则放最后,怎么一点效果也没有?
把 geosite:category-ads-all → block 移到境内直连和宽泛代理规则之前,保存后重新加载配置并新建浏览器连接。若仍未命中,检查该域名是否在当前分类中。不要仅凭页面还出现广告判断失败,共用内容域名的广告不一定适合域名拦截。
改完路由后核心启动失败,先查哪里?
先切回原来的路由方案恢复连接,再查看核心启动日志。重点找数据文件无法读取、分类不存在、出站标签引用错误与 JSON 语法错误。若提示无法加载 geosite.dat 或指定类别,应修复数据来源和文件位置,而不是继续追加规则。
内网管理页面打不开,要加什么规则?
先用设备的实际 IP 访问,并确认私有 IP 规则指向 direct。若使用自定义内网域名,还要确认本地 DNS 能正确解析该域名;可为实际域名添加精确直连例外。域名路由本身不会自动把一个不存在的 DNS 记录变成可访问地址。
这套规则能直接复制到安卓客户端吗?
v2rayNG 使用 Xray 内核,v2flyNG 使用 V2Fly 内核;基础路由概念相近,但界面字段、导入格式、数据分类和内核能力需要分别确认。可以迁移“规则条件与顺序”,不要直接把 v2rayN 的客户端备份当作通用配置。迁移后仍需检查默认出站与 DNS。
最后保留一份已经验证的路由方案。后续遇到单站异常时,一次只修改一个变量:先判断是域名分类、IP 分类、DNS 还是节点连接,再添加最小范围的例外。这样能看清变化的原因,也更容易在修改无效时恢复。
- 保存前确认:域名与 IP 条件没有填错字段,广告规则没有被更宽规则覆盖。
- 启用后确认:默认出站为 proxy,内网与境内测试连接使用 direct。
- 更新数据后确认:核心正常加载,原有类别存在,关键站点没有出现意外分流。
- 分享排查信息时:只提供必要的规则和已脱敏日志,不公开订阅地址或节点认证参数。