目标:我希望使用 tunnelblick 的 macOS 上的 openvpn 客户端首先使用 VPN 提供商的 DNS 服务器,如果它无法在那里解析 DNS 名称,则应该使用我的本地 DNS 服务器。
情况:本地 DNS 服务器为 LAN 上的机器提供名称/IP,还解析远程 DNS 服务器上的名称以获取 WAN 上的机器名称。连接到 VPN 提供商时,openvpn 服务器会推送 dhcp-option DNS 。在这种情况下,如果连接到提供商的 openvpn 服务器,则无法解析本地机器的 DNS 名称。这显然不是我们想要的。我知道现代 macOS 不使用 /etc/resolv.conf,因此我使用浏览器访问本地或远程机器来测试解析度,并使用 dnsleaktest.com 检查使用了哪个 DNS 服务器!
问题:使用“dhcp-option DNS”时,它将优先于 VPN DNS 服务器。这样本地机器名称就会得到解析,但在 WAN 上解析名称时,这也将由本地 DNS 服务器完成,这表示 DNS 泄漏(可使用 dnsleaktest.com 进行验证)。这显然也不是我们想要的。
不幸的是,在“dhcp-option DNS ”之前或之后使用:pull-filter accept“dhcp-option DNS”不会(!)影响查询 DNS 服务器的顺序。事实上,似乎只有 1 个 DNS 服务器被查询,即使答案是 NXDOMAIN,也不会查询其他 DNS 服务器。
我确实希望先查询 VPN DNS 服务器,如果失败,则查询本地 DNS 服务器。那么 DNS 泄漏的可能性应该很小/为零?
总的来说,我被困在这里,我似乎找不到像目标语句描述的那样使用隧道块的方法。你能确认这是不可能的吗,或者你能提供解决方案吗?
答案1
是的,我尝试了各种 dhcp 选项,但都无济于事。与此同时,我找到了一个适用于 macOS 的解决方案:
您创建 /etc/resolver/lan 并包含以下内容:
domain lan
nameserver 10.0.1.1 <- the local dns server
search_order 1
search lan <- important! otherwise you must append .lan every time by yourself
现在系统的行为完全符合我的要求。本地机器名称无需附加“.lan”即可正确解析,外部名称则通过 VPN 提供商的 DNS 服务器重新解析。不存在 DNS 泄漏。