很多家庭和小型办公场景会采用主路由接二级副路由的双路由器组网结构,这类环境下部署VPN连接时,DNS解析异常是最常见的故障类型,要么出现访问目标内网资源跳转到公网错误地址,要么VPN隧道建立后普通网页都打不开,很多用户排查时只盯着VPN客户端本身的设置,忽略了双路由层级带来的DNS转发冲突问题,本文梳理完整的DNS配置检查逻辑,帮用户定位这类场景下的配置疏漏。
配置前的基础前提确认
在启动正式检查前,首先要明确双路由器的组网层级,区分是主路由拨号副路由做AP桥接,还是主路由下副路由单独开NAT做二级子网,两种组网的DNS流转逻辑完全不同,前者所有终端的DNS请求默认都先经过主路由,后者二级子网的DNS请求会先经过副路由再转发到主路由,很多用户排查失败的核心原因就是没先理清自己的组网模式,直接照搬单路由环境的VPN配置方案。
同时还要确认VPN的部署位置,是在主路由上配置全局VPN,还是在副路由上给特定设备组走VPN隧道,亦或是终端单独安装VPN客户端,不同的部署位置对应的DNS配置生效优先级完全不一样,比如终端客户端的DNS策略优先级通常高于路由层面的强制DNS转发,很容易出现路由改了DNS但实际不生效的情况。
第一层:主路由侧的DNS基础配置检查
先登录主路由器的管理后台,查看主路由本身的WAN口DNS设置,确认没有被运营商默认强制推送的DNS劫持,也没有提前设置和VPN目标网段冲突的静态DNS规则,很多用户之前为了去广告或者做内网映射,在主路由里加了大量自定义DNS条目,部署VPN后这些旧规则会优先响应请求,直接覆盖VPN隧道内的DNS解析逻辑。
接下来检查主路由的DHCP服务分配的DNS地址,双路由环境下如果副路由是AP桥接模式,所有终端获取的DNS都是主路由DHCP下发的,要是主路由下发的DNS是公共第三方DNS,没有和VPN配置里指定的内网DNS做联动,就会出现VPN隧道建立后,普通域名走公网解析,只有特定内网域名走隧道解析的分裂DNS异常情况。
第二层:副路由侧的DNS转发规则校验
登录副路由的管理后台,先确认副路由的WAN口获取的DNS地址是否和主路由的LAN侧DNS一致,如果副路由开了独立NAT的二级子网模式,很多副路由默认会把自身的LAN口IP作为DHCP分配的DNS地址,所有终端的DNS请求都会先发给副路由,要是副路由没有配置对应VPN隧道的DNS转发规则,请求就会直接被副路由转发到主路由的公网DNS,完全绕开VPN隧道。
还要检查副路由有没有开启自带的DNS过滤、DNS代理类功能,不少路由器自带的广告拦截、恶意网站防护功能,会强制把所有53端口的DNS请求劫持到自身的内置解析服务,这类规则的优先级远高于VPN配置里的自定义DNS,哪怕VPN客户端指定了正确的内网DNS,请求也会被副路由的劫持规则拦截,导致解析完全失效。
VPN连接侧的DNS优先级验证步骤
在组网层面的路由DNS检查完成后,连接VPN后在终端上执行nslookup或者dig命令,分别测试公网域名和VPN内网专属域名的解析结果,先确认返回的DNS服务器地址是不是你在VPN配置里指定的地址,如果返回的是主路由或者副路由的LAN口IP,就说明路由层面的DNS劫持还没有解除,VPN的自定义DNS没有拿到最高执行权限。
如果是路由层面部署的全局VPN,还要检查VPN配置页面里的DNS泄漏防护选项,部分双路由环境下跨层级的DNS请求会绕过VPN隧道直接从主路由的WAN口发出,开启强制VPN隧道内解析的选项后,就能避免这类旁路泄漏的问题,不要直接套用单路由环境里关闭DNS防护提升速度的设置,双路由场景下这个设置很容易引发解析异常。
常见配置误区规避
很多用户为了图省事,直接在双路由环境里给VPN配置多个公共DNS作为备选,实际上双路由本身已经自带两层DNS转发,叠加VPN的多DNS配置后,很容易出现解析请求轮询走不同路径的问题,时而走隧道解析时而走公网解析,出现间歇性访问故障,正确的做法是VPN配置里只保留目标内网专属DNS,最多加一个可信的公共DNS作为公网域名的备选。
不要随意在双路由的两个层级同时配置VPN服务,主路由开全局VPN的同时副路由也开VPN客户端,两层VPN隧道嵌套后,DNS请求的转发路径会完全混乱,几乎不可能正常完成解析,这类嵌套配置除了特殊的多链路聚合场景外,普通用户完全不需要使用,排查故障时首先要确认整个组网里只有一个VPN接入点。
完成所有检查步骤后,不需要额外修改不必要的配置,逐段测试解析连通性即可,遇到解析异常时先顺着DNS请求的流转路径从终端到副路由再到主路由逐层排查,不要直接替换VPN配置里的DNS地址,避免引入更多不可控的配置冲突。
番茄VPN 
