很多用户在配置VPN静态路由实现指定业务流量走VPN通道、其余公网流量走本地网关的分流场景时,经常遇到内部私有域名解析失败、公网DNS请求意外泄露到VPN对端的问题,本质上是没有做好VPN静态路由和DNS规则的匹配适配。本文从实际运维的实操角度出发,梳理配置全流程的校验点、操作方法和排障逻辑,帮用户在不改动原有分流规则的前提下,实现两类域名的解析需求同时满足。

运维人员正在开展VPN静态路由DNS适配配置前的规则校验工作
配置前的必要前提校验
首先要确认当前VPN静态路由的生效范围,明确你配置的分流规则是仅把指定的内部业务网段流量指向VPN网关,而非全流量强制走VPN通道,这类半分流场景才需要单独适配DNS规则,全流量走VPN的场景直接把全局DNS指向对端DNS服务器即可,不需要额外做配合配置。
接下来要提前梳理两类完全隔离的域名解析需求,一类是仅能通过VPN访问的私有业务域名,比如企业内部OA、私有存储节点、内部测试平台的专属域名,这类域名的解析请求必须发往VPN对端的内部DNS服务器,另一类是普通公网域名,这类域名的解析请求走本地原有公共DNS即可,海外加速器七天试用不需要绕路VPN通道。
最后要提前确认VPN网关侧的基础配置已经生效,VPN对端的内部DNS服务器本身已经配置了指向内部业务网段的回程路由,同时本地VPN虚拟网卡已经获取到合法的内网地址,没有出现虚拟网卡被系统防火墙拦截数据包的情况,避免后续配置完DNS之后出现基础连通性故障。
主流场景下VPN静态路由:DNS配合方式的分步配置
针对Windows桌面系统的配置,不要直接把虚拟网卡的全局DNS全部替换成VPN对端的内部DNS,优先保留本地运营商或者常用公共DNS作为全局备用,之后打开系统网络设置的高级选项,添加自定义DNS后缀搜索列表,把企业内部的私有域名后缀全部录入列表中,再通过本地路由表确认所有指向内部DNS服务器地址的路由条目,都绑定到VPN虚拟网卡下。
针对Linux发行版的配置,不要直接手动修改/etc/resolv.conf文件写入全局DNS,这类临时配置很容易在网络服务重启后被覆盖,推荐使用systemd-resolved自带的路由DNS功能,把VPN对端的内部DNS服务器绑定到VPN虚拟网卡上,同时配置域名匹配规则,只有查询指定内部后缀的域名时,系统才会把解析请求发往VPN对端的DNS节点。
针对旁挂VPN静态路由的家用或企业小型路由器场景,不要直接把路由器WAN口的全局DNS改成VPN对端的内部DNS,不然所有接入路由器的设备的公网解析请求都会被强制转发到VPN通道,正确的做法是在路由器的自定义DNS规则模块中,添加域名匹配条目,仅把预先梳理好的内部私有域名的解析请求,指向VPN对端的内部DNS服务器地址。
配置完成后的有效性校验步骤
首先完成路由匹配校验,随便选择一个已经加入VPN静态路由规则的内部业务IP,用ping命令测试连通性,同时用路由追踪工具确认数据包的下一跳是VPN虚拟网卡的网关地址,没有走本地默认的公网网关,这一步是后续DNS请求能正确转发的基础前提。
之后完成公网域名解析校验,使用nslookup或者dig工具查询任意普通公网域名,查看返回结果中提供解析服务的DNS服务器地址,确认是之前设置的本地公共DNS节点,没有出现公网解析请求被转发到VPN对端内部DNS的情况,避免不必要的解析绕路问题。
最后完成内部私有域名的解析校验,直接输入内部业务系统的短域名发起访问,确认返回的业务IP属于预设的内部私有网段,同时追踪该IP的访问路径,确认业务流量完全按照之前配置的VPN静态路由规则转发,海外加速器七天试用没有出现流量回流本地公网的异常情况。
常见配置误区排查
最常见的误区是直接替换系统全局DNS为VPN对端的内部DNS,这种操作会导致所有公网域名的解析请求都被发往内部DNS服务器,网络加速器不仅会拉高公网解析的延迟,部分管控严格的企业内部DNS甚至会直接拦截外部公网域名的解析请求,导致用户出现大面积网页无法打开的问题。
第二个高频误区是没有同步配置DNS后缀搜索列表,很多用户配置完DNS规则之后,发现只能输入完整的全限定内部域名才能访问业务系统,短域名始终解析失败,就误以为是VPN静态路由规则出了问题,实际上只是系统没有自动补全内部域名后缀的能力,补充对应的搜索域配置即可解决问题。
还要注意部分现代浏览器默认开启的加密DNS功能,网络加速器会直接绕过操作系统本地的DNS配置规则,就算本地的VPN静态路由:DNS配合方式配置完全正确,浏览器还是会优先调用自带的公共加密DNS节点发起请求,导致内部私有域名解析失败,遇到这类问题只需要在浏览器设置中关闭自定义加密DNS功能,切换为使用系统默认DNS配置即可。


