适合已能通过 v2rayN 连接节点、准备检查 DNS 分流的用户。下文以 V2Ray 内核 JSON 为例,区分应用解析、内置 DNS 与代理出站,给出大陆域名优先本地解析、其余域名使用 DoH 的配置片段,并说明如何检查回退、路由与解析结果。代码不是完整客户端配置,也不能直接套进其他内核的 DNS 编辑器。
一、先确认 DNS 请求由谁处理
DNS 设置没有生效,常见原因不是服务器地址错误,而是查询根本没有进入预期的解析器。Windows 系统解析器、浏览器的安全 DNS、V2Ray 内置 DNS,以及代理服务器所在机器的解析器,是不同环节。修改其中一处,不代表其他环节会跟随改变。
上面的链路表示一种常见情况,不表示每个连接都会调用内置 DNS。例如,浏览器通过 HTTP 代理提交域名,代理出站可能把域名交给远端处理;如果应用先在本机解析,再把 IP 交给代理,内核收到的就可能只有 IP。仅启用“系统代理 → 自动配置系统代理”,并不会接管 Windows 的全部 DNS 请求。
- 系统代理:主要影响遵循系统代理设置的应用,不是全局 DNS 转发开关。
- TUN 模式:扩大流量接管范围,但 DNS 是否被接管,仍取决于实际使用的内核、TUN 配置和路由。
- 内置 DNS:为内核需要解析域名的场景提供结果,不会因为配置了
dns就自动成为系统的 53 端口服务。 - 浏览器安全 DNS:浏览器可能自行访问 DoH 服务,应先确定由浏览器还是客户端统一管理解析。
二、servers、domains、expectIPs 分别控制什么
servers 定义可用的上游解析器;服务器对象中的 domains 为指定域名建立优先查询关系;expectIPs 对该服务器返回的地址设置预期范围。三者分别对应“问谁”“哪些域名优先问”“什么结果可以接受”,不要把它们都理解成流量路由规则。
| 字段 | 示例 | 实际作用与边界 |
|---|---|---|
servers | 223.5.5.5、DoH URL | 配置解析上游,不决定网页连接一定走哪个出口。 |
domains | geosite:cn | 匹配后优先使用该服务器;需要相应的域名规则数据。 |
expectIPs | geoip:cn | 检查返回地址是否符合预期;不是可信度证明,也不等于拦截所有污染。 |
skipFallback | true | 该服务器不参与未命中域名规则时的通用回退,仍可用于自己匹配到的域名。 |
queryStrategy | UseIPv4 | 约束内置 DNS 的地址族策略,不会关闭操作系统的 IPv6。 |
domains 不是排他的访问控制。匹配服务器查询失败,或者结果不满足 expectIPs,后续仍可能进入回退流程。若希望大陆解析器只负责指定域名,就为它设置 skipFallback: true,再保留一个未限制域名的远程解析器作为默认候选。
结论:先限定本地解析器的适用域名
把大陆解析器放进带 domains 和 skipFallback 的服务器对象,比单纯把它排在列表第一位更明确;否则它可能在回退过程中收到原本打算交给远程解析器的查询。
三、分流 DNS 示例:大陆优先本地,其余走 DoH
下面采用 223.5.5.5 作为大陆域名的优先解析器,采用 https://1.1.1.1/dns-query 作为默认 DoH 上游。这里“本地解析”指从本机直连指定解析服务,不等于使用路由器或运营商自动下发的 DNS。地址只是配置示例,能否访问、返回结果是否合适,需要在自己的网络中验证。
{
"dns": {
"queryStrategy": "UseIPv4",
"servers": [
{
"address": "223.5.5.5",
"port": 53,
"domains": [
"geosite:cn"
],
"expectIPs": [
"geoip:cn"
],
"skipFallback": true
},
{
"address": "https://1.1.1.1/dns-query"
}
]
}
}
大陆域名优先解析
- 上游地址
- 223.5.5.5
- 传输端口
- UDP 53
- 域名范围
- geosite:cn
- 结果预期
- geoip:cn
skipFallback 设为 true,避免成为其他域名的通用回退服务器。
默认 DoH 解析
- 上游地址
- https://1.1.1.1/dns-query
- 传输端口
- HTTPS 443
- 域名范围
- 未限定,作为默认候选
- 出站要求
- 在路由中明确指定代理出口
配置 DoH URL 后,还要检查连接该地址的请求实际走哪条出站。
命中 geosite:cn 时,优先查询大陆解析器;未命中时,使用没有域名限制的 DoH 候选。大陆解析结果未满足地址预期时,也可能转向后续候选。不要再随手添加一个无域名限制的 localhost,否则系统解析器会重新进入回退路径,破坏原本希望建立的边界。
expectIPs: ["geoip:cn"] 是偏严格的策略。某些大陆站点使用境外 CDN,合法结果也可能被拒绝,从而增加查询时间。遇到这类站点,应先核对具体域名与返回 IP,再调整域名分组或该服务器的预期范围,而不是直接判定“境外 IP 就是污染”。
四、DoH 走代理:还要补上路由规则
DoH 加密的是到解析服务器的传输,不保证请求自动经过代理。V2Ray 中,普通 https:// DoH 请求可以进入路由调度;带 https+local:// 的本地模式则不按同样方式交给路由处理。希望远程 DoH 使用节点出口时,不应把这两个写法混用。
以下仍是需要合并到现有配置的片段。前提是 outbounds 中已经存在标签为 direct 的直连出站,以及标签为 proxy 的可用代理出站。若实际标签不同,必须改成真实标签。将这两条上游地址规则放在可能抢先命中的宽泛规则之前。
{
"routing": {
"domainStrategy": "AsIs",
"rules": [
{
"type": "field",
"ip": [
"223.5.5.5/32"
],
"port": "53",
"outboundTag": "direct"
},
{
"type": "field",
"ip": [
"1.1.1.1/32"
],
"port": "443",
"outboundTag": "proxy"
}
]
}
}
- 两种策略名称不要混淆:
dns.queryStrategy控制解析地址族;routing.domainStrategy控制路由匹配时如何对待域名,两者用途不同。 - AsIs 不主动为 IP 规则解析域名:如果一般网页连接只携带域名,不能期待仅靠
geoip:cn就自动完成所有网站分流。网站的域名分流规则仍需单独配置。 - 规则限定了地址和端口:示例不是将所有 443 流量都交给同一出口,只处理指定解析服务的连接。
- 使用 IP 形式的 DoH 地址:可减少解析上游主机名的引导步骤,但服务仍需提供匹配该地址的有效 TLS 证书,不能随意把任意 DoH 域名替换为 IP。
默认情况下,没有规则命中的连接会走默认出站,通常与出站排列有关。不要省略 DoH 的出站检查,再把“能返回结果”当作“已经通过代理解析”。同时,节点服务器若使用域名,也要有独立可用的引导解析路径,避免出现必须先连节点才能解析节点地址的循环依赖。
五、在 v2rayN 应用配置前,保留可回退的基线
v2rayN 是配置管理客户端,不是 DNS 协议本身。客户端界面保存的选项最终会转换成内核运行配置。直接修改临时生成文件,可能在切换节点或重启内核后被覆盖;把 V2Ray JSON 填进不对应的内核配置区,也可能导致启动失败。
- 记录当前状态。保存现有 DNS 内容、当前节点与路由模式。先确认原配置可以打开常用网页,再修改解析策略。
- 确认配置入口。在“设置 → DNS 设置”选择当前内核对应的配置区域。若该版本提供完整 DNS JSON 编辑区,只填写它要求的 DNS 对象层级,不把整个示例文件塞进去。
- 完整配置单独管理。需要自行维护路由和出站时,可使用“服务器 → 添加自定义配置服务器”导入完整内核配置。本文两个片段缺少入站、代理出站等内容,不能作为完整配置直接运行。
- 重新启动内核并读日志。先检查 JSON 语法、规则资源与出站标签错误,再做网络测试。保存成功不等于运行成功。
- 逐项增加功能。先验证默认 DoH,再加入大陆域名优先解析,最后检查 TUN 或浏览器自己的解析设置。一次只改一个层面,便于定位回归。
本地混合监听端口不是 DNS 端口。应用把 HTTP 或 SOCKS 代理指向该端口,与把 DNS 服务器填写为该端口,是两种完全不同的操作。应在“设置 → 参数设置”核对“本地混合监听端口”,不要把示例中的 53、443 和 10808 互相替换。
六、验证分流与防污染:分别检查查询、出站和结果
验证目标不是寻找一个“永远正确”的解析 IP,而是确认请求交给了预期上游,连接经过了预期出口,返回地址与网站实际部署相符。CDN 会根据解析器位置、节点出口与时间返回不同地址,两个解析器结果不同本身不能证明发生污染。
| 检查层面 | 具体动作 | 不能据此推断什么 |
|---|---|---|
| 系统解析基线 | 运行 nslookup www.baidu.com 223.5.5.5,记录应答与错误。 | 不能证明 V2Ray 内置 DNS 已调用该上游。 |
| 代理可用性 | 用显式代理请求一个 HTTPS 网站,确认节点可连接。 | 网页能打开不代表所有应用的 DNS 都已被接管。 |
| 上游出站 | 观察内核调试日志及路由记录,核对到 1.1.1.1:443 的连接出口。 | 仅看到加密连接不能直接读取或证明具体查询内容。 |
| 域名分流 | 分别测试命中大陆规则与未命中规则的域名,记录所选上游。 | 单个域名成功不能证明整份域名规则都已加载正确。 |
nslookup www.baidu.com 223.5.5.5
ipconfig /flushdns
curl.exe --proxy http://127.0.0.1:10808 --head https://www.microsoft.com/
上述命令是三个独立检查:第一条测试指定解析器;第二条清理 Windows DNS 缓存;第三条测试本地 HTTP 代理链路。运行第三条前,把端口改成界面实际值。它们不是内置 DNS 的自动验收脚本;尤其不能把 nslookup 的结果直接写成“DoH 分流已生效”。
清理系统缓存不会同时清理浏览器和内核的所有缓存。重测时,可重新启动内核并重启测试应用;如果临时提高日志级别,结束后恢复日常级别。调试日志可能包含访问域名,不应整份公开上传。
结论:DoH 解决传输暴露,不包办全部解析风险
只有同时确认上游可达、TLS 验证正常、出站符合预期,以及应用查询进入受控路径,才能评价这套配置是否达到目标;单看检测页显示的解析器名称不够。
七、DNS 分流常见问题
填了 DoH 地址,为什么还是超时?
先检查节点本身能否访问 HTTPS,再核对到 DoH 地址的路由。示例应将 1.1.1.1:443 交给有效的代理出站;同时检查系统时间和 TLS 错误。若改用域名形式的 DoH,还要排查上游域名的引导解析。
加上 expectIPs 后,大陆网站反而变慢了?
检查该域名的真实返回 IP 是否位于境外 CDN。结果不满足 geoip:cn 会触发拒绝或后续回退。先针对该域名调整分组或预期范围,不要反复增加解析器数量来掩盖错误分类。
设了 UseIPv4,为什么系统还能查到 IPv6?
UseIPv4 约束的是当前内置 DNS,不是 Windows 全局设置。检查测试是否来自浏览器独立 DoH、系统解析器或另一应用;若要统一解析,先把应用纳入同一条受控链路,再判断地址族策略。
开启 TUN 后,还需要检查 DNS 设置吗?
需要。TUN 解决流量入口覆盖范围,不自动保证上游选择和出站路径正确。先看实际运行内核,再核对 DNS 接管、局域网解析和远程上游路由;内核改变后,应重新按对应配置格式验证。
把所有域名都交给远程 DoH,会不会更简单?
配置更少,但大陆站点的 CDN 调度可能不适合本地直连,局域网域名也可能无法解析。先保留必要的本地域名策略,再决定是否把普通公网域名统一交给远程上游,不要把内部域名发送给不相关的公共解析服务。