本文适合已经能连接节点、准备调整 DNS 分流的用户。先分清应用解析、内核解析与出站路由,再配置境内解析器和经代理访问的远端 DoH,最后用日志与对照测试检查结果。示例是需要合并的配置片段,不是可以直接替换订阅节点的完整配置。
1. DNS 分流与代理分流不是同一个设置
DNS 分流决定“由谁把域名转换成 IP”,路由分流决定“连接从哪个出口发出”。将境外域名指定给远端解析器,并不意味着访问这个解析器的请求已经经过代理;反过来,网页走代理,也不代表浏览器此前没有通过系统 DNS 查询域名。两条链路都要检查。
这条流程描述的是应用将域名交给内核、且路由策略需要解析的情况。若域名规则已直接选定代理出站,路由阶段可能根本不查询 DNS;目标域名也可能交给代理服务端解析。若应用只提交一个 IP,内核则通常无法可靠还原它最初查询的域名。
- 解析污染:得到错误或被干预的解析结果。地址变化本身不是污染证据,CDN 本来就可能按地域返回不同地址。
- DNS 泄漏:查询走了预期之外的解析路径。境内域名按计划直连境内 DNS,不应简单归类为泄漏。
- 解析绕路:境内服务被远端解析器返回较远的 CDN 地址,表现可能是图片加载慢或视频缓冲,而非完全无法连接。
2. 先区分三个配置位置的 domainStrategy
搜索 V2Ray DNS 配置时,经常会看到同名字段。字段所在位置不同,作用也不同。不要把路由里的 domainStrategy、直连出站里的同名字段,以及 DNS 的 queryStrategy 混为一谈。
| 配置位置 | 常见取值 | 实际作用 |
|---|---|---|
routing.domainStrategy | AsIs | 按已有目标信息匹配,不为路由主动解析域名;已经是 IP 的目标仍可匹配 IP 规则。 |
routing.domainStrategy | IPIfNonMatch | 域名阶段未匹配规则时,再解析并尝试 IP 规则。 |
routing.domainStrategy | IPOnDemand | 匹配过程遇到需要 IP 的规则时触发解析,对规则顺序更敏感。 |
freedom.settings.domainStrategy | AsIs、UseIP | 决定直连出站如何处理目标域名;使用 UseIP 时可调用内置 DNS。 |
dns.queryStrategy | UseIP、UseIPv4、UseIPv6 | 控制内置 DNS 查询的地址族,不负责选择代理出口。 |
初次调整可从 IPIfNonMatch 开始,优先用明确的域名规则决定出口,未命中时才使用 IP 地理规则补充。它不是“所有域名都先解析一次”的开关,也不会接管系统中每个应用的 DNS。
3. 按域名选择境内 DNS 与远端 DoH
dns.servers 中的服务器对象可以使用 domains 声明优先处理的域名集合。这里的域名匹配只是在选择解析服务器,不会顺带创建访问网站的路由规则。本文使用境内 UDP DNS 与远端 DoH 两条路径,分别说明选择条件和传输方式。
境内域名解析
- 解析地址
223.5.5.5- 传输端口
- UDP 53
- 匹配范围
geosite:cn- 后备查询
skipFallback: true
将此服务器排除在普通后备选择之外,减少未分类域名落到境内解析器的机会。
远端加密解析
- 解析地址
https://1.1.1.1/dns-query- 传输端口
- TCP 443
- 优先范围
geosite:geolocation-!cn- 预期出站
proxy
普通 HTTPS DNS 请求可交给内核路由;仍需显式指定解析器 IP 的代理出口。
geosite:cn 与 geosite:geolocation-!cn 是规则数据中的分类标签,并非严格互补的全集。某些新域名可能不在其中,所以上述远端解析器还承担未匹配域名的后备查询。两者有重叠或数据缺失时,要结合当前数据文件和日志判断,不能只根据域名后缀推断命中结果。
skipFallback: true不等于“永远不查询此服务器”,其明确匹配的域名仍可使用它;它主要影响后备候选选择。- 使用
https://与使用https+local://的请求路径不同。后者走本地模式,不能直接套用本文的内核路由假设。 - 使用域名形式的 DoH 地址时,还需要解决该解析器自身域名的引导解析。本文使用 IP 字面量,以减少这项依赖。
- DoH 加密的是到解析服务的查询传输,不保证解析服务始终返回合适结果,也不能代替路由检查。
4. 合并 DNS 与路由配置,先固定解析器出口
下面是核心 JSON 的合并示例。它假定现有配置已经有名为 proxy 的代理出站和名为 direct 的直连出站。实际标签若不同,必须逐处替换;同时保留原有 inbounds、节点认证、传输与 TLS 设置。不要直接把这一片段作为完整配置启动。
{
"dns": {
"queryStrategy": "UseIP",
"servers": [
{
"address": "223.5.5.5",
"port": 53,
"domains": [
"geosite:cn"
],
"skipFallback": true
},
{
"address": "https://1.1.1.1/dns-query",
"domains": [
"geosite:geolocation-!cn"
]
}
]
},
"routing": {
"domainStrategy": "IPIfNonMatch",
"rules": [
{
"type": "field",
"ip": ["1.1.1.1"],
"port": "443",
"network": "tcp",
"outboundTag": "proxy"
},
{
"type": "field",
"ip": ["223.5.5.5"],
"port": "53",
"network": "udp",
"outboundTag": "direct"
},
{
"type": "field",
"ip": ["geoip:private"],
"outboundTag": "direct"
},
{
"type": "field",
"domain": ["geosite:cn"],
"outboundTag": "direct"
},
{
"type": "field",
"domain": ["geosite:geolocation-!cn"],
"outboundTag": "proxy"
},
{
"type": "field",
"ip": ["geoip:cn"],
"outboundTag": "direct"
}
]
}
}
路由从上到下匹配,先命中的规则生效。解析器专用规则放在普通地理规则之前,是为了让 DNS 传输路径更容易预测。这些规则按目的 IP 和端口匹配,因此其他发往同一地址、同一端口的连接也会遵循它们。
- 核对默认出站:未命中任何规则的流量通常使用
outbounds的第一个出站。若目标是未分类流量默认走代理,应检查第一个出站是否确实为预期代理,而非只改规则。 - 核对规则数据:启动时若提示找不到
geosite分类或数据文件,应修正规则数据来源及路径。不要靠删除报错规则后继续运行来证明配置有效。 - 核对直连解析:若希望直连出站也使用内置 DNS,可在既有
freedom出站的settings中配置"domainStrategy": "UseIP",并确认当前内核支持。 - 核对节点引导:代理服务器地址若本身是域名,不能让它唯一的解析路径依赖尚未建立的代理连接。应为该域名安排可用的引导解析,避免启动循环。
5. 在客户端中落地,避免界面设置覆盖 JSON
v2rayN 会根据界面中的节点、DNS 与路由设置生成运行配置。直接修改临时生成的文件,可能在切换节点或重启后被覆盖。优先使用当前版本提供的 DNS 设置、路由设置或自定义配置入口;不同版本的菜单名称存在差异,不能把某一版路径当作所有版本的固定入口。
- 保存回退点:记录当前节点、系统代理模式和路由模式,导出配置或备份相关设置。一次只改 DNS 与必要路由,不同时更换协议或传输参数。
- 查看有效配置:保存设置并重启内核后,查看客户端提供的运行配置或配置预览,确认
dns.servers、规则顺序与出站标签确实存在。 - 确认应用入口:桌面应用需遵循系统代理,或明确连接本地 HTTP/SOCKS 入口。若测试 SOCKS,使用客户端显示的实际端口;不要把教程中的端口视为本机默认值。
- 确认 Android 接管范围:v2rayNG 与 v2flyNG 还应检查 VPN 模式、分应用设置以及 DNS 选项。被排除的应用可能继续使用原有网络路径。
- 隔离其他解析设置:测试期间记录浏览器“安全 DNS”和 Android“私人 DNS”的原始状态,按需暂时关闭后对照测试,结束后恢复预期设置。
浏览器自带的加密 DNS 可能绕过内核的域名分类逻辑,但其连接本身又可能经过代理。应分别判断“用了哪个解析器”和“连接走哪个出口”,不能看到 DoH 就认定整个 DNS 分流已正确实施。
6. 用端口、日志和对照测试验证分流
下列数字是协议端口和测试轮数,不是性能实测结果。验证时至少选择一个确定匹配境内规则的域名,以及一个确定匹配远端规则的域名;根据实际使用的数据集确认分类,避免拿未收录域名推断规则失效。
| 验证项 | 具体操作 | 结果解释 |
|---|---|---|
| 内核是否接受配置 | 重启内核,检查启动日志中的 JSON、字段与规则数据错误。 | 成功启动只说明语法及加载通过,不代表解析出口符合预期。 |
| DNS 是否发生 | 临时提高日志级别,清理相关缓存后访问测试域名,查找 DNS 查询及响应记录。 | 缓存命中或域名直接交给代理服务端时,本地可能没有新查询。 |
| 解析器出口 | 在日志支持的范围内检查到 1.1.1.1:443 的连接及出站;必要时配合本机抓包。 | 应与预设代理路径一致;仅看到返回 IP 不能证明传输经过代理。 |
| 网站业务出口 | 查看测试域名连接命中的出站标签,并比较境内与远端两组请求。 | DNS 走对了但业务走错,仍需修正规则顺序或应用接管范围。 |
Windows 可运行 ipconfig /flushdns 清理系统 DNS 缓存,但浏览器和内核还可能保留各自缓存。直接运行 nslookup 通常测试的是系统或指定 DNS 服务器,不会因为开启系统代理就自动变成对内核 DNS 的测试。只有明确配置了本地 DNS 监听,且查询确实发到该监听时,才能用它验证相应路径。
判断顺序:先证实解析链路,再比较打开速度
先确认查询由谁处理、解析器连接走哪个出站,再记录三轮访问是否成功及耗时。若解析链路尚未确认,单次页面变快或两个解析器返回不同 IP,都不足以证明防污染配置有效。
7. 分流解析常见问题与修正顺序
加了远端 DoH,为什么境外网站还是打不开?
先检查到 1.1.1.1:443 的路由是否命中 proxy,再检查该代理本身是否可用。若节点地址是域名,确认其引导解析不依赖同一条尚未建立的代理;最后再排查目标网站业务连接。
境内网站能打开,但图片突然变慢怎么办?
查图片实际使用的 CDN 域名是否被境内规则收录。可先对该已确认的域名使用 full: 精确规则做对照,分别检查 DNS 选择与业务路由。不要因一个域名异常就把所有查询都改成直连。
只返回 IPv4 能解决所有加载超时吗?
不能。可临时将 dns.queryStrategy 改为 UseIPv4,排除不可用 IPv6 路径的影响;若症状不变,应恢复原设置继续排查。应用缓存、浏览器独立解析和服务端解析不一定受此字段控制。
升级客户端后原来的 DNS 分流失效了?
先比较实际内核、运行配置和规则数据,而非只比较界面开关。确认 proxy、direct 标签没有变化,DNS 设置未被重新生成的配置覆盖;修正后重启内核,再按境内、远端两组域名重新测试。
最终保留的配置应能解释三件事:哪些域名由境内解析器处理,哪些查询通过代理到达远端解析器,以及没有命中分类时如何后备。需要更严格的 DNS 路径控制时,还应单独规划系统 DNS、浏览器解析和网络接管范围,不能仅靠一段 dns.servers 覆盖整台设备。