很多使用OpenVPN搭建远程办公或者跨网段访问的用户,经常遇到连接VPN后本地浏览器还是解析出公网IP、内网资源打不开,甚至DNS泄漏的问题,这时候OpenVPN DNS推送功能就是专门解决这类域名解析路由问题的核心配置项,很多新手容易忽略它的正确设置,导致VPN连接后的实际使用体验大打折扣。

正确配置OpenVPN DNS推送可解决内网资源无法访问、DNS泄漏等常见问题
OpenVPN DNS推送的核心作用说明
首先要明确OpenVPN DNS推送的核心逻辑,是VPN服务端在客户端完成握手认证之后,主动把指定的DNS服务器地址下发给客户端系统,让客户端在VPN连接存续期间,优先使用推送的DNS完成域名解析,而不是继续用本地网卡原本配置的公共DNS。
这个功能最直接的使用场景,就是远程接入企业内网的用户,访问只有内网DNS才能解析的OA、文件服务器、内部业务系统域名时,不需要手动修改本地的DNS设置,断开VPN之后系统又会自动切回原本的DNS配置,不会影响日常公网访问。
除此之外,合理配置OpenVPN DNS推送,也能避免部分场景下的DNS泄漏问题,也就是用户明明已经接入VPN,解析请求却绕过VPN通道发送到本地运营商DNS的异常情况,当然这一效果需要配合系统路由规则才能完全生效,不能单靠推送功能本身实现。
配置前的必要前提检查
在动手修改OpenVPN服务端配置之前,首先要确认你准备推送的DNS服务器本身是可访问的,如果是内网场景下的私有DNS,必须保证OpenVPN客户端的虚拟网卡网段,已经被允许访问这台DNS的53端口TCP和UDP流量。
其次要区分不同客户端系统的适配逻辑,Windows、蜂窝VPNmacOS、Linux和移动端的OpenVPN客户端,对DNS推送的原生支持程度不一样,部分轻量客户端默认不会自动接管系统DNS,需要提前确认客户端版本是否支持对应参数的触发规则。
还要提前理清你的解析分流需求,如果不需要所有域名都走推送的DNS,后续还要配合推送路由、蜂窝VPN域名分流插件实现部分域名走内网DNS,其余域名走本地公共DNS的效果,不要一开始就把全局DNS推送给所有客户端。
服务端与客户端的基础配置步骤
最基础的OpenVPN DNS推送配置只需要在服务端配置文件里添加两行参数,分别是push "dhcp-option DNS 你要推送的DNS地址",如果需要指定备用DNS可以再追加一行同格式的参数替换地址即可。
部分Linux发行版的OpenVPN服务端,还需要额外添加对应IPv6 DNS参数,如果你的网络环境没有部署IPv6解析服务,也可以添加参数禁止IPv6 DNS请求绕过VPN通道。
配置完成后重启OpenVPN服务端,新接入的客户端就会收到下发的DNS配置,不需要修改客户端的ovpn配置文件就能生效,这也是推送功能相比手动在每个客户端设置DNS的最大优势,后续要更换DNS地址只需要修改服务端一处配置即可。
效果校验与常见误区排查
连接VPN之后,用户可以先在本地执行查看当前网卡DNS的命令,确认虚拟网卡对应的DNS地址已经变成服务端推送的地址,蜂窝再访问一个只有内网DNS能解析的域名,确认返回的IP是内网私有地址而不是公网地址。
很多新手的常见误区是以为配置了DNS推送就等于所有解析流量都走VPN通道,实际上部分老旧Windows系统的多DNS优先级逻辑存在异常,会优先调用本地物理网卡的DNS发起请求,这时候需要额外在服务端推送对应的DNS搜索域参数,强化系统对VPN网卡DNS的优先级判定。
还有部分用户遇到推送DNS之后,蜂窝VPN断开VPN本地DNS没有自动恢复的问题,这类情况大多是客户端的路由表残留导致的,只需要在客户端配置里添加对应参数,让VPN连接断开时自动刷新DNS缓存,就能解决这类配置残留的异常。
整体来看,OpenVPN DNS推送是兼顾易用性和灵活性的解析路由方案,只要提前理清自己的解析分流需求,做好不同客户端系统的适配校验,就能避免绝大多数VPN连接后的域名解析异常问题。
蜂窝VPN 
