很多用户在OpenWrt设备上搭建完VPN服务或者配置好VPN客户端之后,经常遇到明明隧道显示连接成功,却出现域名解析异常、DNS泄露、部分站点无法访问的问题,这类问题绝大多数都和DNS配置的优先级、路由规则不匹配有关,本文从基础校验、逐项排查到异常定位,完整覆盖OpenWrt VPN场景下的DNS配置检查全流程,帮用户快速定位配置疏漏。
VPN运行态基础校验
很多用户排查问题的第一步就直接修改DNS配置,反而忽略了VPN隧道本身的连通性校验,很容易浪费大量时间在无效操作上。你首先需要进入OpenWrt的终端界面,ping VPN对端的内网网关地址,如果是远程办公场景下的站点到站点VPN,就ping对端内网的任意一个可达主机地址,确认隧道层面的转发没有问题。
这一步的预期结果是可以正常收到对端的响应,没有持续的全部丢包情况,如果这一步测试失败,说明VPN的账号认证、加密套件匹配、防火墙转发规则还存在问题,需要先把隧道连通性调试完成,再进行后续的DNS配置检查,否则所有DNS相关的修改都不会生效。
OpenWrt VPN DNS配置逐项检查步骤
首先进行接口级的DNS配置检查,进入OpenWrt后台的「网络-接口」页面,找到你VPN对应的虚拟接口,比如OpenVPN对应的tun接口、WireGuard对应的wg接口,查看这个接口的「使用对端DNS服务器」选项状态,如果你的使用场景要求优先使用VPN对端下发的DNS,就需要勾选这个选项,如果你希望手动指定自定义DNS,就关闭这个选项,在下方的DNS服务器地址栏填入你选定的DNS地址。
接下来检查LAN侧DHCP的DNS通告配置,进入「网络-DHCP/DNS」的常规设置页面,查看DNS转发列表和DHCP服务的通告DNS设置,很多用户配置完VPN之后,忘记修改内网LAN接口的DHCP下发规则,导致连接这个路由的内网设备,拿到的还是运营商默认的DNS地址,就算流量走VPN隧道,解析请求也会直接发往运营商DNS,出现解析结果不匹配的问题。这里的预期结果是通告给内网设备的DNS,要么是OpenWrt自身的本地缓存地址,要么是你指定的VPN侧DNS,不存在运营商默认的DNS地址。
最后检查策略路由的DNS分流规则,不少用户使用VPN的时候配置了部分流量走隧道的分流规则,这时候要确认对应走VPN的流量的DNS请求,也同步被路由到VPN隧道里,如果你只把网页流量导去VPN,却没有把对应端口的DNS请求也加入路由规则,就会出现出口IP属于VPN节点,解析请求却发往本地运营商的情况,很容易触发运营商的域名劫持或者解析拦截。
常见异常现象定向排查
最常遇到的异常是VPN连接成功后,公网IP查询页面已经显示为VPN节点地址,但是部分站点依然无法打开,这种情况大概率是当前使用的DNS服务器出现了解析异常,你可以在OpenWrt终端内对无法访问的域名执行nslookup命令,查看返回的解析结果是否符合预期,如果返回的IP地址明显不属于对应站点的正常服务地址,说明当前DNS被干扰,可以尝试替换为其他合规的公共DNS再测试。
第二种常见异常是第三方DNS泄露检测工具,依然能扫描到本地运营商的DNS地址,这时候要分两端排查,首先检查你使用的终端设备,比如手机、电脑有没有手动设置过固定DNS,不少终端会默认使用系统预设的公共DNS,不会主动获取路由端DHCP下发的地址,其次回到OpenWrt后台重启DNSmasq服务,清空本地残留的DNS缓存之后再重新测试。
还有不少新手会遇到VPN隧道断开之后,所有内网设备都没法解析任何域名的问题,这属于典型的配置误区,很多用户把所有DNS服务器地址都替换成了VPN对端的专属DNS,一旦隧道中断,没有备用的公网DNS可用,自然就没法完成域名解析,正确的配置方式是在DNS列表里至少保留一个可以在本地公网直接访问的备用DNS,保证VPN故障的时候基础网络解析能力依然正常。
最终校验的标准流程
所有配置修改完成之后,不要只在单台设备上做验证,建议分三层依次测试,首先在OpenWrt系统本地执行解析命令,确认系统自身的解析请求是从VPN指定的DNS返回的,之后在内网的有线连接设备上测试解析结果,最后用无线连接的移动设备测试,排除终端自身自定义DNS的干扰,多设备验证都符合预期之后,整个OpenWrt VPN的DNS配置检查流程就全部完成了。
小鸟VPN 
