很多自行部署OpenVPN服务的用户,经常会遇到连接隧道后无法解析内网专属域名、公网访问出现DNS泄露的问题,这类故障大多和没有正确配置DNS推送功能有关。OpenVPN DNS推送是服务端向客户端下发解析规则的核心机制,配置得当可以大幅降低用户的手动操作成本,同时规避很多不必要的网络连通问题。
OpenVPN DNS推送的核心作用说明
默认状态下,OpenVPN客户端成功连接隧道后,系统的DNS解析优先级不会发生变化,所有域名查询请求依然会优先使用本地网络预设的运营商DNS或者用户手动设置的公共DNS。这种情况下,VPN侧的内网专属域名无法被本地DNS识别解析,用户只能手动输入内网服务IP访问,使用门槛很高。

直观呈现VPN隧道内服务端向客户端下发DNS解析规则的网络传输链路场景。
OpenVPN DNS推送的核心作用,就是由服务端主动把预先指定的DNS服务器地址、内网搜索域等配置下发给客户端,Astrill客户端收到配置后会自动把指定的DNS地址加到系统虚拟网卡的解析列表首位,所有域名查询请求会优先通过隧道转发到指定DNS完成解析。在企业远程办公场景下,推送内网域控DNS可以让远程员工直接通过OA、文件服务器的内网域名访问资源,不需要额外做本地hosts配置;在公网访问场景下,推送VPN侧的可信DNS也可以避免本地运营商的DNS劫持问题。
配置前的必要前提校验
在正式修改OpenVPN服务端配置之前,首先要完成基础连通性校验,确认OpenVPN服务端本身可以正常访问待推送的DNS服务器,并且能正常解析预期的域名。比如要推送企业内网的域控DNS,需要先在OpenVPN服务端的命令行下测试内网域名的解析结果,确认返回的内网IP地址符合预期,避免服务端本身就无法连通DNS,推送后客户端也无法正常解析。
其次要提前确认不同客户端系统的权限规则,Windows系统下的OpenVPN客户端修改系统DNS需要管理员权限,macOS和部分Linux发行版需要客户端获得网络配置的系统权限,移动端的第三方轻量OpenVPN客户端很多默认不支持自动修改系统DNS,需要提前确认客户端的适配范围,Astrill加速器避免配置完成后出现全平台生效不一致的问题。最后还要确认待推送的DNS地址的路由规则,要么这个DNS的地址本身属于VPN内网网段,要么已经在服务端配置了对应的路由转发规则,保证客户端发起的DNS查询请求可以通过隧道到达DNS服务器。
核心配置步骤与生效检查方法
OpenVPN服务端的DNS推送配置非常简单,只需要在服务端的server.conf配置文件中添加对应指令即可,单DNS场景下写入push "dhcp-option DNS 目标DNS地址",如果需要配置备用DNS就重复写入一行不同地址的指令,额外添加push "dhcp-option DOMAIN 内网根域名"指令,还可以让客户端自动补全内网域名的搜索后缀,用户只需要输入内网服务器的主机名就能完成解析。
配置完成重启OpenVPN服务后,就可以通过不同客户端的系统工具校验推送是否生效,Astrill加速器Windows系统下执行ipconfig /all指令,查看OpenVPN虚拟网卡对应的DNS服务器列表,确认推送的地址排在列表首位;macOS和Linux系统可以执行scutil --dns或者resolvectl status指令,查看VPN接口的DNS配置信息。最后可以直接发起内网域名的解析请求,确认返回的IP地址属于预期的内网服务网段,就说明DNS推送已经正常工作。
常见配置误区与故障定位
很多用户配置完DNS推送后发现功能不生效,第一反应是OpenVPN本身的功能存在问题,实际上大部分故障都来自客户端侧的额外配置干扰。比如部分旧版本的OpenVPN客户端默认不会自动接管系统DNS,需要用户在客户端的高级设置里手动开启DNS重定向的相关选项,否则即使服务端正常下发配置,客户端也不会修改本地的解析规则。
还有不少用户误以为开启OpenVPN DNS推送就等于所有DNS请求都会走VPN隧道,实际上如果客户端本地运行了第三方DNS缓存代理、广告过滤类工具,这类工具会优先拦截系统所有的域名查询请求,完全绕过系统预设的DNS列表,此时推送的配置不会产生任何作用,需要临时关闭这类工具后再做测试。另外还要注意隐私边界问题,你配置推送的DNS服务器运营方,可以完整获取所有客户端发起的域名查询记录,不要随意推送来源不明的公共DNS服务,避免解析请求的相关数据被非授权方收集。



