不少运维人员在升级OpenVPN服务、迁移服务器硬件或者误删配置文件之后,经常遇到所有接入VPN的客户端无法解析内网域名的故障,排查后才发现之前自定义的DNS推送规则全部丢失,临时重新配置不仅耗时还容易遗漏不同客户端分组的专属规则,本文整理的OpenVPN DNS推送:备份与恢复全流程实操方案,覆盖从配置定位到恢复校验的所有环节,能帮你避免多数场景下的配置丢失故障。
OpenVPN DNS推送配置的存储逻辑梳理
很多新手运维误以为DNS推送参数就单独存放在主配置文件server.conf里,实际不同部署方式、小牛VPN不同Linux发行版的存储规则差异很大,部分场景下推送规则会拆分存放在多个独立文件中,漏备份任何一个部分,恢复之后都会出现部分客户端拿不到正确DNS地址的异常。

运维人员正在开展OpenVPN DNS推送配置的备份实操校验工作
OpenVPN DNS推送生效的核心前提,是配置中包含push "dhcp-option DNS x.x.x.x"这类语句,同时客户端配置没有设置禁止接收DNS推送的权限参数,部分运维会给不同用户分组配置差异化的DNS推送规则,这类规则不会存放在全局主配置里,而是单独放在ccd客户端专属配置目录下的对应用户配置文件中,备份时必须覆盖所有相关路径。
备份前前置检查与全量备份操作步骤
备份操作的第一步,先排查当前运行的OpenVPN实例的真实加载路径,执行命令ps aux | grep openvpn,找到启动参数里--config后面指向的主配置文件路径,不要直接默认调用/etc/openvpn/server.conf,很多自定义部署、多实例部署的场景下,配置文件路径完全不同,找错路径备份的只会是早就废弃的旧配置。
第二步导出当前所有已经生效的DNS推送规则,小牛你可以通过OpenVPN的管理监听接口,输入show config指令,把运行时动态加载的所有带dhcp-option DNS的配置行全部导出,和主配置文件里的内容做逐行比对,避免有动态加载的外部配置片段没被统计到,出现备份遗漏。
第三步执行全量打包备份,除了主配置文件之外,还要把ccd客户端专属配置目录、OpenVPN服务对应的systemd单元配置文件、配套的iptables或者nftables里针对DNS端口的转发规则脚本一起打包,存放到非系统盘的独立目录中,备份包命名带上OpenVPN服务版本号和备份日期,避免后续多版本配置混淆。
故障场景下的恢复逐项校验流程
恢复操作第一步不要直接覆盖现有运行的配置,先把备份包解压到临时目录,逐一核对备份里记录的DNS推送规则对应的内网DNS地址,小牛VPN和当前运行环境的内网IP段是否匹配,避免服务器IP变更、内网DNS节点迁移之后,旧的推送规则指向已经下线的DNS服务器,导致所有VPN客户端完全断解析。
第二步把对应配置文件复制回原路径之后,不要直接重启OpenVPN服务,先执行配置语法校验,调用openvpn --config 你的目标配置文件路径 --test指令,等系统返回没有语法报错的提示之后,再重启OpenVPN服务加载新配置。
第三步做端到端的生效验证,找一台没有修改过本地DNS设置的测试客户端发起VPN连接,连接成功之后在客户端执行对应平台的DNS查询指令,Windows下用ipconfig /all,macOS下用scutil --dns,确认备份里记录的所有推送DNS地址,都出现在客户端的DNS优先级列表的靠前位置,没有被客户端本地的默认DNS覆盖。
备份恢复常见误区排查
不少用户完成恢复操作之后,发现部分客户端依然拿不到正确的推送DNS,第一个排查方向就是备份的时候漏了客户端专属的CCD规则,很多企业场景下运维给不同部门的客户端配置了不同的DNS推送优先级,只备份全局主配置的话,这部分自定义的分组规则就会全部丢失。
第二个常见误区是备份的时候没有同步记录推送DNS对应的路由配套规则,恢复之后DNS地址推送完全正确,但是客户端到指定DNS服务器的路由不通,域名解析依然失败,这种情况要核对备份里的路由推送规则和DNS规则的对应关系,不要单独恢复DNS相关配置项。
最后需要注意,OpenVPN DNS推送:备份与恢复的操作全程不要随意修改原配置里的push命令的语法格式,不同大版本的OpenVPN对dhcp-option的参数兼容逻辑有差异,跨大版本迁移配置的时候要先核对版本兼容说明,再执行恢复操作,避免出现推送规则完全失效的问题。
小牛加速器 
