在使用VPN的情况下,如果涉及到同时需要访问公私网的域名,那么对于私网域名应该到内网DNS服务器解析,对于客户端来说,怎么能将私网域名的DNS解析流量引导到隧道中,到达内网DNS服务器进行解析。这里使用F5的APM模块搭建VPN隧道,进行实验。
环境:
内网DNS服务器 10.1.10.240
公网DNS服务器 跟随系统
VPN隧道地址 10.1.10.20
1、不配置域名解析公私网分离,隧道下发内网DNS服务器地址
这里搭建了一个VPN,并且向客户端下发内网DNS服务器的地址。
使用wireshark抓包分析,左边抓的是公网网卡,右边抓的是内网网卡。使用dig命令测试公网域名解析,DNS解析全部走隧道,隧道获取不到结果。
2、配置域名解析公私网分离
curl访问公网域名,先到私网DNS服务器解析,再到公网DNS服务器解析。实现DNS的公私网分离。
更换域名验证,同上
3、实现原理测试
由于配置参数比较多,对DNS的相关参数进行了测试。最后得到结果,调整如下参数后,只剩下单边DNS解析流量,全部去往公网,无法访问和解析。说明该参数是实现域名解析公私网分离的关键。
4、原理分析
查看官方对该参数的解释,如下:
这里理解是将VPN的DNS设置为主用DNS,本地的DNS设置为备用DNS
`When this setting is enabled, APM continuously checks the DNS order on the network interface, and sets the network access-supplied entries first in the list if they change during a session. To use your local DNS settings as primary and the network access-supplied DNS settings as secondary, clear this setting. This might be useful w`hen split tunneling is in use and the client connects remotely.
查看VPN隧道建立后,本机的DNS配置:
可以看出来,隧道建立以后,自动把私网DNS加入到所有网卡的DNS里,包括公网网卡里。利用了windows对多DNS解析尝试的机制,来实现同时使用公私网DNS服务器进行解析。测试环境的内网DNS服务器,对于不存在的域名会直接回应REFUSED,所以客户端会直接尝试下一个DNS服务器。
如果DNS服务器对不存在的域名不作回应的话,Windows系统过1秒之后也会尝试下一个DNS服务器。
无线局域网适配器 WLAN 2:
连接特定的 DNS 后缀 . . . . . . . :
描述. . . . . . . . . . . . . . . : Realtek 8811CU Wireless LAN 802.11ac USB NIC
物理地址. . . . . . . . . . . . . : 24-69-8E-8E-D5-19
DHCP 已启用 . . . . . . . . . . . : 是
自动配置已启用. . . . . . . . . . : 是
IPv4 地址 . . . . . . . . . . . . : 172.16.21.2(首选)
子网掩码 . . . . . . . . . . . . : 255.255.252.0
获得租约的时间 . . . . . . . . . : 2023年8月17日 9:21:55
租约过期的时间 . . . . . . . . . : 2023年8月18日 3:25:52
默认网关. . . . . . . . . . . . . : 172.16.20.1
DHCP 服务器 . . . . . . . . . . . : 172.16.20.1
DNS 服务器 . . . . . . . . . . . : 10.1.10.240
223.5.5.5
223.6.6.6
TCPIP 上的 NetBIOS . . . . . . . : 已启用
5、windows server DNS解析机制
查了一下没有查到windows系统,只查到了windows server的DNS解析机制:
0 客户端查询列表的第一个 DNS 服务器
1 如果 1 秒后没有收到响应,则客户端查询列表中的第二个 DNS 服务器
2 如果再过 1 秒没有收到响应,客户端再次查询列表中的第二个 DNS 服务器
4 如果超过 2 秒没有收到响应,客户端同时查询列表中的所有服务器
8 如果再过 4 秒没有收到响应,客户端同时查询列表中的所有服务器
10 如果再过 2 秒没有收到响应,则客户端停止查询