很多使用OpenVPN组网的运维人员经常遇到客户端接入后域名解析异常、内网资源无法通过域名访问的问题,多数情况都和DNS推送配置未生效或者配置冲突有关,这份日常检查实用指南从实际故障场景出发,梳理标准化的OpenVPN DNS推送日常检查方法,帮你快速定位配置疏漏,减少跨站点访问的解析故障。
先确认故障现象缩小排查范围
很多运维排查OpenVPN DNS推送问题时一上来就改服务端配置,反而容易把原本正常的配置改乱,第一步先在接入VPN的客户端侧收集基础现象,不要直接动服务端参数。
你可以先断开OpenVPN连接,在客户端执行nslookup或者dig命令测试公网域名、内网预留给VPN的域名的解析结果,记录下断开状态下的默认DNS地址,之后再重新接入VPN,再次执行同样的解析测试,对比两次返回的DNS服务器地址差异。
如果接入VPN后访问公网域名直接超时,但是用公网IP访问站点完全正常,大概率是DNS推送后客户端没有正确加载推送的DNS地址;如果是内网专属域名解析失败,公网域名解析正常,大概率是推送的DNS服务器本身没有配置对应内网域名的解析规则。
服务端侧OpenVPN配置项合规性检查
完成客户端侧的现象收集之后,就可以登录OpenVPN服务端,检查核心的DNS推送相关配置行是否存在语法错误,很多时候配置行拼写错误、参数顺序不对都会导致推送失效。
首先确认配置文件里包含push "dhcp-option DNS 你预设的DNS服务器地址"这类语句,如果你需要推送多个DNS地址,要写多条独立的push语句,不要把两个DNS地址写在同一条dhcp-option参数后面,这类不符合规范的写法不会被OpenVPN识别。
接下来检查是否同时配置了push "redirect-gateway def1"这类全局流量走VPN网关的参数,如果只推送了DNS却没有配置重定向网关,部分客户端系统会优先使用本地原有DNS,不会调用VPN推送的DNS地址,这是很多新手运维容易踩的配置误区。
客户端系统层面DNS规则生效校验
不同操作系统对OpenVPN推送DNS的适配逻辑不一样,不能只看OpenVPN客户端的连接成功提示就判定推送生效,要进入系统的网络配置面板查看当前活跃的DNS列表。
Windows系统可以在接入VPN后打开命令提示符执行ipconfig /all,找到对应OpenVPN虚拟网卡的配置项,查看“DNS服务器”字段下是否出现你在服务端推送的地址;Linux系统可以查看/etc/resolv.conf文件的生成内容,或者用nmcli命令查看对应VPN连接的DNS属性;macOS系统可以在网络设置里找到OpenVPN生成的虚拟接口,确认DNS列表的优先级。
如果虚拟网卡的DNS列表里已经出现了推送的地址,但是解析还是走本地原有DNS,大概率是客户端系统的DNS优先级规则把物理网卡的DNS排在了前面,你可以调整客户端系统的网卡跃点值,把虚拟网卡的优先级调高,部分特殊发行版还需要额外配置DNS解析服务的绑定规则。
推送后连通性与解析可用性验证
完成前面的配置校验之后,最后一步要做端到端的解析测试,不要只看配置项存在就结束检查,要确认推送过去的DNS地址本身可以被VPN客户端正常访问。
你可以在接入VPN的客户端上,直接指定推送的DNS地址做解析测试,比如执行nslookup 内网测试域名 推送的DNS地址,如果返回正常的解析结果,说明DNS服务器本身和VPN客户端的三层连通性没问题,问题只出在DNS推送的加载环节;如果直接指定DNS也解析失败,说明推送的DNS地址没有放通VPN客户端虚拟网段的访问权限,需要调整DNS服务器的白名单规则。
日常巡检的时候可以把这套OpenVPN DNS推送日常检查方法做成标准化的核对表,每次升级OpenVPN版本、修改服务端配置之后都走一遍全流程校验,就能避免很多隐性的解析故障,不会等到用户反馈无法访问内网资源才定位问题。单次测试得到的结论只能指向部分可能原因,不能完全排除系统层面其他网络规则的干扰,遇到复杂场景还需要结合路由跟踪工具进一步排查。
飞鸟加速器 

