很多配置了VPN分流规则的用户经常遇到部分网站解析异常、本该走公网的域名被分流到VPN隧道解析、或者指定走隧道的业务域名无法正常返回IP的问题,这类故障大多和分流规则绑定的DNS配置不匹配有关,本文从实际家用软路由、桌面端VPN客户端两类常见场景出发,给出可落地的完整诊断步骤,不需要依赖第三方付费工具,普通网络爱好者也能跟着操作定位根因。
第一步:先确认分流规则与DNS的绑定配置前提
很多用户配置VPN分流时的常见误区是只写了路由分流规则,没有给不同分流通道指定对应的DNS服务器,默认让所有流量都走系统全局DNS,这种情况下哪怕路由层面把指定域名的流量切到了公网,解析请求本身还是走了VPN隧道的DNS地址,自然会出现解析结果不符合预期的问题。
你可以先打开当前使用的VPN客户端或者软路由的分流配置页,检查分流规则的附属选项,正规的分流功能都会提供“对应分流组使用独立DNS”的勾选框,先确认你要排查的异常域名所在的分流组,有没有单独配置对应通道的DNS:走公网的分流组要配置本地运营商的公共DNS,走VPN隧道的分流组要配置VPN服务端允许的内网DNS或者合规公共DNS。
第二步:分通道抓包验证DNS请求的实际出口
不要直接相信客户端配置页显示的DNS设置,很多时候配置缓存或者规则优先级错误会导致设置没有生效,你可以在Windows系统下打开Wireshark,分别选择物理网卡(公网出口)和VPN虚拟网卡两个捕获接口,同时开启抓包,之后在命令行输入nslookup 你要排查的异常域名,回车触发解析请求。
抓包完成后分别在两个网卡的捕获结果里过滤DNS协议,查看这个域名的解析请求到底是从物理网卡发出去的还是从VPN虚拟网卡发出去的:如果本该走公网解析的域名出现在VPN虚拟网卡的DNS请求列表里,说明分流规则的域名匹配优先级低于全局DNS的强制转发规则,需要调整规则排序。如果本该走VPN隧道解析的域名出现在物理网卡的请求列表里,说明分流规则的域名匹配库没有收录这个域名的完整特征,比如漏了下级子域名的通配符配置。
第三步:排除系统本地DNS缓存的干扰项
很多用户调整完分流DNS配置之后直接刷新浏览器测试,结果发现解析结果还是旧的,就误以为配置没有生效,实际上操作系统和浏览器都会留存之前的DNS解析缓存,旧的解析结果不会立刻被新配置覆盖,导致误判故障点。
你可以先在命令行执行ipconfig /flushdns(Windows)或者sudo systemd-resolve --flush-caches(Linux/macOS)清空系统本地DNS缓存,之后再关闭浏览器完全退出,避免浏览器的预解析缓存影响结果,重新触发解析之后再对比之前的抓包结果,才能得到准确的诊断结论。
这里要注意一个常见误区,部分安装了安全防护软件的设备会自带独立的DNS代理服务,所有系统发出的DNS请求都会先经过这个代理转发,哪怕你配置了分流独立DNS,也会被代理规则覆盖,这种情况下你需要临时关闭系统里的第三方DNS防护类功能,再重复测试流程。
第四步:验证分流DNS的返回结果合规性
确认DNS请求的出口符合分流规则之后,如果还是出现访问异常,就要分别在两个通道下直接对指定DNS服务器发起解析测试,比如你要验证走VPN隧道的DNS是否正常,可以手动把系统DNS改成VPN分流组指定的地址,断开所有VPN相关的规则,直接发起nslookup请求,查看这个DNS服务器能不能正常返回对应域名的解析结果。
如果直接测试的时候解析超时或者返回了错误的内网IP,说明你配置的分流DNS本身没有访问权限,比如部分企业VPN的内网DNS只允许特定VLAN的地址访问,你通过隧道发起的解析请求不在白名单里,这种故障和分流规则本身无关,只需要更换对应分流组的可用DNS地址就能解决。
完成以上四步诊断之后,绝大多数VPN分流DNS的异常都能定位到具体根因,不需要盲目重装客户端或者重置整个网络配置,每次调整完一项配置之后都要单独做一次验证,不要同时修改多个规则参数,避免无法判断到底是哪项调整解决的问题,后续再遇到同类故障也可以按照这个流程逐步排查,避免无意义的试错。单次测试得到的结论只能指向部分可能原因,不能完全排除其他隐藏的配置冲突,遇到跨设备的复杂场景还可以在网关侧补充抓包进一步确认。
黑石VPN 
