适合已经能用 v2rayN 连接节点、但遇到域名解析异常或分流结果不稳定的读者。先分清谁在解析域名,再用境内 DNS、境外 DoH 和路由规则各司其职;最后按请求路径检查缓存、日志与实际出口。
先确认 DNS 请求由谁发出
DNS 分流不是把两个服务器地址填进列表就结束了。浏览器可能自行解析域名,操作系统也可能先得到 IP;只有域名进入 V2Ray 或 Xray 内核的解析流程时,配置中的 dns 规则才有机会参与。v2rayN 开启「系统代理」主要影响遵循系统代理的应用,不等于接管整台设备的全部 DNS 请求。
先用一个正常可用的节点建立连接,再记录同一网站在浏览器和其他应用中的表现。如果只有某个浏览器异常,优先检查它自己的安全 DNS 设置;如果只有直连应用异常,先确认该应用的流量是否经过客户端。不要一开始就同时改系统 DNS、TUN 和路由规则,否则很难判断哪一步起效。
按域名选择境内 DNS 与境外 DoH
下面是供理解结构的 dns 片段,不是可直接导入 v2rayN 的完整配置。示例用 geosite:cn 匹配常见境内域名,交给普通 DNS;用 geosite:geolocation-!cn 匹配相应域名,交给 DoH。未被前两组命中的域名交给最后的兜底上游。实际生效还取决于所用内核、规则数据和配置生成方式。
{
"dns": {
"servers": [
{
"address": "223.5.5.5",
"port": 53,
"domains": ["geosite:cn"],
"expectIPs": ["geoip:cn"]
},
{
"address": "https://1.1.1.1/dns-query",
"domains": ["geosite:geolocation-!cn"]
},
"localhost"
]
}
}
address 指定上游;普通 DNS 示例使用 53 端口,DoH 地址使用 HTTPS,通常通过 443 端口建立连接。domains 决定域名优先匹配哪一项,不是访问控制名单。expectIPs 是返回地址的筛选条件:示例要求境内上游的结果落在 geoip:cn 范围内;它不能证明一个域名必然应该解析到境内 IP,跨区域部署的网站尤其可能出现不符合预期的结果。
localhost 是未命中前述域名规则时的兜底解析方式,会使用本机解析环境;如果正在排查本机 DNS 污染,不要把兜底结果误认为已经经过 DoH。DoH 地址本身也必须能够连通。遇到超时,应分别确认当前网络能否访问该上游,以及内核发出的 DNS 连接实际从哪个出口离开;仅修改 servers 列表无法保证查询一定经过代理。
在 v2rayN 中保存设置并核对路由
v2rayN 的界面会随版本调整,先在「设置」中找到「DNS 设置」,查看当前使用的配置模式和可编辑项。若界面提供自定义 DNS 配置,先备份原内容,再按其要求填写;不要把上面的片段贴进只接受服务器地址的输入框。保存后重新启动内核,并查看客户端日志是否出现 JSON 解析错误或 DNS 上游连接失败。
解析侧:先确定查询对象
- 入口
- 「设置」→「DNS 设置」
- 境内匹配
- geosite:cn
- 境外匹配
- geosite:geolocation-!cn
- 兜底
- 检查 localhost 的实际结果
编辑前留存原配置;确认所用模式允许修改内核 DNS 规则。
路由侧:再确定连接出口
- 入口
- 「设置」→「路由设置」
- 境内规则
- 按域名匹配直连
- 境外规则
- 按域名匹配代理
- 默认出口
- 核对未命中规则的去向
同时检查规则优先级与当前启用的路由方案,不只看规则是否存在。
路由规则和 DNS 规则要表达一致的意图。例如,境内域名由境内上游解析,却被一条更靠前的宽泛代理规则抢先匹配,就可能出现“解析正常但出口不对”。在「设置」→「路由设置」里确认当前启用的规则集,再查看具体规则的先后顺序。订阅更新通常负责服务器列表,不应假定更新订阅会同步修好本机 DNS 与路由配置。
如果连接进入内核时仍保留域名,路由可以先按域名规则匹配;domainStrategy 会影响何时为路由判断解析 IP。AsIs 不为路由主动解析域名,IPIfNonMatch 在域名规则未命中时尝试解析,IPOnDemand 遇到需要 IP 判断的规则时可触发解析。这些选项解决的是路由判断时机,不会让未进入内核的系统 DNS 请求自动改走指定上游。
区分 DNS 污染、缓存和分流失配
排查时固定一个域名、一个应用和一个节点,每次只改一项。先看域名能否打开,再看内核日志是否记录 DNS 查询、查询失败或路由命中。若只有个别域名失败,优先比较不同上游返回的地址;若所有域名都失败,先检查节点连接、DoH 可达性和配置语法,别直接断定是 DNS 污染。
- 确认入口。在浏览器中测试,再用另一款遵循系统代理的应用对照。只有直连应用失败时,检查系统代理或 TUN 状态,而不是先增加 DNS 规则。
- 确认查询。在 v2rayN 日志中查找目标域名及 DNS 错误。日志完全看不到对应请求时,检查应用自身的安全 DNS、系统缓存,以及流量是否进入内核。
- 确认出口。对照「路由设置」里启用的规则与日志中的出站结果。返回 IP 正常但连接失败时,再检查路由、节点与目标服务,而不是反复替换上游。
- 清除旧结果后复测。Windows 可在命令提示符运行
ipconfig /flushdns清理系统 DNS 缓存;随后重启测试应用,避免把旧解析结果当作新配置的效果。
若域名已在应用侧解析成 IP 才交给代理,内核可能只能按 IP 规则判断。流量嗅探在适用的 HTTP 或 TLS 连接中可能帮助恢复域名信息,但不能覆盖所有协议,也不能替代正确的 DNS 入口。先弄清请求路径,再决定是否调整嗅探和 IP 路由规则。
常见问题:改了 DNS 仍然不生效?
填了 DoH 地址,网页反而一直等待?
先检查 https://1.1.1.1/dns-query 所需的 HTTPS 连接是否可达,再看内核日志有无超时。DoH 查询的连接出口需要单独核对,不能仅凭目标网站走代理来推断。
境内网站被判成境外怎么办?
先检查 geosite 规则数据与启用的路由方案,再查看该域名是否命中指定的 domains 项。跨区域服务不一定符合按 IP 所在地划分的预期,可针对该域名建立更明确的规则。
只有一个浏览器显示解析错误?
检查该浏览器自己的安全 DNS 设置,关闭后重新测试,并重启浏览器清掉旧连接。若其他应用一直正常,先不要改动全局 DNS 配置。
保存配置后所有网站都打不开?
先恢复备份,在日志里找配置解析报错。确认输入位置接受完整的 dns 对象,而不是只接受上游地址;每次只加入一条规则,保存并重启内核测试。
改完路由,DNS 返回值怎么还是旧的?
路由规则不会主动刷新已经缓存的解析结果。先清理系统缓存、重启测试应用,再确认内核是否发出了新查询;不要把连接出口变化当作 DNS 返回值变化。
配置完成后的验收标准很简单:选一个境内域名、一个境外域名,分别确认它们的解析上游、路由命中结果与实际可访问性。三项都对上,再扩大到日常使用的应用。若问题只出现在 v2rayNG 或 v2flyNG,也应分别核对安卓端所用内核和客户端配置;桌面端 v2rayN 的设置不会自动复制到其他设备。