很多自行部署OpenVPN的运维人员都遇到过服务器系统升级、硬件迁移之后,之前调试了很久的DNS推送规则丢失的问题,轻则出现客户端DNS泄漏、内网域名无法解析,重则不同用户组的DNS访问权限错乱,引发合规风险,本文的OpenVPN DNS推送备份与恢复实操流程,全部基于通用发行版的OpenVPN部署环境验证,不需要额外安装商业插件,普通运维人员就可以跟着操作。
OpenVPN DNS推送配置的核心存储位置
绝大多数基于Debian、Ubuntu、CentOS官方源安装的OpenVPN服务端,主配置文件都存放在/etc/openvpn/server目录下,所有带push标识的dhcp-option DNS行,就是全局生效的DNS推送规则。很多部署场景下运维会给不同用户组设置差异化的DNS推送策略,比如给运维组推送IDC内网专属DNS,给普通用户推送公共加密DNS,这类自定义规则不会存在主配置文件里,而是单独存放在ccd客户端专属配置目录下,很多人备份时只复制主配置文件,恢复后就会出现部分客户端DNS规则不符合预期的问题。

运维人员在服务器端校验OpenVPN DNS推送配置的备份文件
除了DNS地址本身,配套的DNS搜索域推送规则、IPv6 DNS推送规则也属于DNS推送配置的一部分,这类规则经常和DNS地址写在同一段配置块里,备份时很容易被遗漏,导致恢复后内网短主机名无法正常解析。
备份前的前置检查步骤
正式执行备份操作前,首先要登录OpenVPN服务端运行全局检索命令,把所有分散在不同目录下的DNS推送相关配置全部列出来,核对所有规则和当前业务要求的策略是否一致,避免把错误的临时配置备份进去。
接下来还要检查当前在线客户端的实际连接日志,确认服务端正在运行的推送规则和磁盘上存储的配置文件完全一致,安易加速器排除之前调试时临时修改了内存中运行参数、没有同步写入磁盘配置的情况,避免备份的文件和实际生效的规则存在差异。
完整备份的实操流程
不要手动逐行复制粘贴DNS推送规则,避免出现漏行、错写地址的问题,可以直接把整个/etc/openvpn配置目录打包归档,同时把之前检索出来的所有DNS推送规则单独导出成清单文本文件,安易VPN后续校验时可以快速对比差异。
还要同步备份和DNS推送配套的关联配置,比如服务端本地部署的DNS转发服务配置、iptables里针对DNS端口的转发放行规则,很多场景下推送的内网DNS地址就是OpenVPN服务端本地的转发服务,只备份OpenVPN的推送规则,恢复后本地DNS服务没有同步部署,推送的地址也无法正常响应解析请求。
恢复操作的分步验证
恢复时先把备份的归档文件解压到新部署的OpenVPN服务端对应目录,不要直接重启服务,先核对新环境的OpenVPN监听端口、协议类型等基础参数,和备份配置有没有冲突,比如新服务器的1194默认端口已经被其他服务占用,要先调整端口配置再继续后续操作。
配置替换完成后,先执行OpenVPN自带的配置语法校验命令,确认所有配置行没有语法错误,不会出现服务启动失败的问题,校验通过后再重启OpenVPN服务,查看系统服务日志确认所有DNS推送规则都被正常加载,没有出现参数不支持的报错。
最后要做客户端侧的实际验证,找不同分组的测试客户端依次连接VPN,分别在Windows、macOS、Linux系统下查看当前获取的DNS地址列表,确认和备份的规则完全一致,安易VPN尝试访问内网专属域名,确认解析结果符合预期,没有出现请求泄漏到本地运营商DNS的情况。
常见操作误区排查
很多运维恢复配置后发现DNS推送不生效,安易VPN第一时间就修改OpenVPN配置反复调试,实际上很多场景下问题根本不在OpenVPN本身,比如新部署的服务器默认开启了systemd-resolved服务,占用了本地53端口,之前备份的本地DNS转发服务启动失败,推送的DNS地址自然无法正常响应。还有不少人备份时只存了IPv4的DNS推送规则,遗漏了IPv6的相关配置,恢复后客户端的IPv6 DNS请求直接走本地链路,出现隐性的DNS泄漏问题。
日常运维过程中每次修改DNS推送规则之后,都要同步更新对应的备份文件,不要等配置丢失了才去调用几个月前的旧备份,定期做小规模的恢复演练,确认备份包可以正常解压、配置可以正常加载,避免故障发生时找不到可用的恢复资源。



