适合已经能在 v2rayN 中连接节点、但遇到域名解析异常或分流结果不符合预期的读者。先确认请求是否进入内核,再区分 DNS 服务器选择与流量路由;最后用浏览器、终端和核心日志分别验证,不把一次网页打不开直接归因于 DNS。
先划清边界:DNS 分流不等于流量分流
访问一个域名时,解析负责取得地址,路由负责决定连接从哪个出站发送。这是两个不同的判断。境内域名交给本地 DNS、其他域名交给远端 DNS,只规定了查询交给谁;如果路由规则仍把某个连接送到直连出站,它不会因为使用了远端 DNS 就自动改走代理。
还要先确认查询是否到达内核。仅开启系统代理时,浏览器可能通过操作系统解析域名,也可能自行发起加密 DNS 请求;终端程序的行为又取决于各自的代理设置。V2Ray 或 Xray 的内置 DNS 配置,只能直接控制交由内核处理的解析请求。若应用已经在本机解析成 IP,再把 IP 交给代理,内核可能看不到原始域名。
排查时按这条顺序走:先看应用提交的是域名还是 IP,再看 DNS 选了哪台服务器,最后看连接匹配了哪条路由规则。不要用“节点已连接”推断 DNS 已按预期分流;节点状态只能说明连接建立,并不能说明浏览器的解析路径。
给境内域名与其他域名安排解析器
内置 DNS 的常见安排是:匹配境内域名规则的查询使用本地解析,其余查询使用远端解析。域名规则来自内核可用的规则数据;在不同内核和规则数据版本下,覆盖范围可能不同。没有命中的域名会走默认解析器,因此“默认交给谁”比额外堆叠许多细碎规则更值得先确认。
境内域名
- 匹配依据
- geosite:cn 等域名规则
- 解析器
- 系统本地 DNS
- 示例地址
- 192.0.2.53
192.0.2.53 是文档示例地址,不是可直接使用的 DNS 服务器;实际配置应填写当前网络可用的解析器。
其余域名
- 匹配依据
- 未命中前述规则
- 解析器
- 远端 DoH
- 示例端点
- dns.example.net/dns-query
示例域名仅展示 URL 形态;测试前须换成自己可访问、支持 DoH 的实际服务。
“境内外”在这里是域名规则的分类,不是逐次检测服务器所在位置。一个域名可能使用跨地区的服务设施,分类也可能随规则数据更新而变化。对工作网站或内部域名,优先添加明确规则;不要只凭域名后缀判断它应使用哪条网络路径。
在 v2rayN 中核对设置与配置格式
先在 v2rayN 的「设置」→「参数设置」确认当前使用的内核与代理模式,再打开客户端提供的 DNS 设置入口。不同版本的设置页布局可能调整,以当前界面显示的选项为准。修改前保留原配置;如果订阅、预设配置或自定义模板会重新生成核心配置,重启后还要核对修改是否仍在生效。
以下是供阅读字段关系的 Xray DNS 片段,不是可直接运行的完整配置。它把命中 geosite:cn 的域名交给 localhost 所代表的系统本地解析,其余查询落到后面的 DoH 项。实际使用前,需确认内核支持所用字段、规则数据可用,并把示例 DoH 地址换成有效端点。
{
"dns": {
"servers": [
{
"address": "localhost",
"domains": ["geosite:cn"]
},
"https://dns.example.net/dns-query"
],
"queryStrategy": "UseIP"
}
}
queryStrategy 指定查询地址族的策略,不负责选择直连或代理。若某个站点只有 IPv6 记录,而当前网络没有可用 IPv6,排查时可先确认地址族选择,避免把地址族问题误判为远端 DNS 故障。上面的 dns.example.net 是示例域名,对应端点不承担实际解析服务。
配置后的第一项检查:看生成结果
保存并重启核心后,检查客户端实际生成的核心配置和日志;若生成结果里没有刚设置的 DNS 服务器,先处理配置覆盖问题,再测试网页访问。
DoH 与 fakedns:各自解决什么问题
DoH 使用 HTTPS 传送 DNS 查询。它可以减少查询在应用与指定解析器之间被普通明文 DNS 路径改写的机会,但并不替代路由规则,也不能保证解析器返回的每个地址都适合当前出站。远端 DoH 的请求本身还需要建立连接:若端点使用域名,首次连接时可能涉及端点域名的解析,应在日志中检查它实际经过的出站路径。
fakedns 则是另一种机制:内核先向应用返回一个用于映射的虚拟地址,等应用连接该地址时,再找回原始域名用于处理。它适用于需要保留域名信息的特定透明代理场景;它不是公共 DNS 服务器,也不是把所有真实查询“加密一次”的开关。是否启用,要结合 TUN、入站接管和嗅探配置判断。
这两个端口号只是识别请求类型的线索,不能据此推断所有查询都经过内核。例如,浏览器若启用了自己的 DoH,其请求可能表现为普通 HTTPS 连接;只看是否存在 53 端口流量,无法判断浏览器最终采用了哪台解析器。
结论:先选接管方式,再考虑 fakedns
只使用普通系统代理且域名已能交给核心处理时,先验证 DNS 服务器选择和路由规则;只有确认透明代理场景丢失原始域名,才进一步评估 fakedns。
让解析结果与路由规则相互配合
路由中的域名规则与 IP 规则承担不同任务:前者可以直接依据域名决定出站,后者需要有可用的目标 IP。以 Xray 的 domainStrategy 为例,IPIfNonMatch 会在域名规则未匹配时尝试解析,以便继续匹配 IP 规则;IPOnDemand 则会在路由判断需要 IP 时进行解析。不要把路由的 domainStrategy 与 DNS 的 queryStrategy 混成同一个设置。
- 域名规则:先写明确的内部服务或业务域名规则,再采用通用分类规则;核对规则顺序和实际命中的出站。
- IP 规则:需要根据解析后的地址判断时,再确认路由是否会触发解析;不要假设每个域名请求都会预先查一次 IP。
- 应用提交 IP:如果应用在进入代理前已自行解析,域名规则可能无法直接匹配;应回头检查代理模式及原始域名是否可见。
一个实用的验证样例是先选择两个自己能控制访问结果的域名:一个明确写入本地解析规则,一个留给默认远端解析器。分别记录 DNS 查询、路由命中和最终出站,而不是只比较网页加载速度。若 DNS 已选对、连接仍走错路径,调整的是路由规则;反过来,若路由正确但解析地址异常,就先检查 DNS 命中与上游解析器。
按现象排查:从客户端到核心日志
测试前先记录 v2rayN 当前的本地代理端口,并确认系统代理指向同一个端口。不同设备和配置的端口值可能不同;不要把示例端口写入长期配置。使用浏览器测试时,暂时核对其独立 DNS 设置与扩展行为;使用终端测试时,检查命令是否明确使用了代理,避免拿直连结果验证内核 DNS。
- 先确认请求入口。分别测试浏览器与终端,并在 v2rayN 日志中找对应时间的连接记录。若没有记录,先检查系统代理、应用代理设置或 TUN 接管状态。
- 再确认域名是否保留。日志若只显示目标 IP,检查应用是否提前解析;若显示域名,再检查 DNS 与路由规则是否分别命中。
- 最后比较结果。同一域名多次测试时记录时间、所用解析器、返回的地址族和出站。更换网络后重新测试,避免沿用上一次网络的缓存结论。
出现“浏览器能打开,终端打不开”时,不要立即切换 DoH。终端程序可能没有读取系统代理,也可能只读取了自己的代理环境变量。出现“境内网站绕到远端”时,先看域名分类和路由命中;出现“只有某些域名失败”时,再检查 DNS 返回值、IPv4/IPv6 可用性和该域名是否需要特殊规则。
改了 DNS,日志里却没有查询记录?
先确认应用请求是否进入核心。核对 v2rayN 的系统代理或 TUN 状态,再检查浏览器是否启用了独立的加密 DNS;仅修改核心配置不会接管所有应用的解析。
本地解析规则命中了,连接还是走代理?
分别查看 DNS 命中和路由命中。解析器选择不决定连接出站;需要直连时,在路由设置中为该域名添加或核对对应规则。
DoH 端点换上后,所有域名都解析失败?
先确认端点 URL 是实际可用的 DoH 服务,再查看核心日志中该端点的连接错误。若使用域名形式的端点,还要检查其首次解析与出站路径。
开启 fakedns 后看到虚拟 IP,算解析出错吗?
虚拟地址可能正是 fakedns 的预期返回值。重点检查后续连接能否映射回原域名,以及当前入站与路由是否按该模式配置;不要把虚拟地址当作网站的真实服务器地址。