使用 VPN 和本地 DNS 解析名称而不会泄漏

使用 VPN 和本地 DNS 解析名称而不会泄漏

我有一个网络,其中主要安装了 Ubuntu 18,并且为网络上的内容提供了仅限本地的 DNS 服务。

我想要的是系统在启动时能够通过 DHCP 正常获取其名称服务器。他们应该将本地 DNS 服务器用于本地计算机,而不是将这些请求发送到 Internet,但应使用 Internet 服务器进行所有其他查找。

当用户与 NetworkManager 控制的 VPN 客户端(在菜单栏中)连接时,它应该仅使用 VPN 的 DNS 服务器来处理非本地请求,切勿使用从 DHCP 获得的 DNS 服务器,但仍继续使用本地服务器来处理本地请求。

我想我已经成功地使用 dnsmasq 的“服务器”选项进行本地解析,除了它仍然将请求转发到互联网,即使对于完全限定的本地名称也是如此。

我尝试先在本地服务器上设置旧式的 resolv.conf (服务器配置为拒绝请求而不是转发请求),但是失败了,因为 Ubuntu 的解析器不会立即尝试在解析中使用第二个服务器。当第一个服务器拒绝请求时,请在尝试第二个服务器之前强制其在 5 秒后超时。我可以使用 options timeout:1 将超时减少到 1 秒,但这仍然不太理想,而且我还没有找到一种方法让网络管理器在每次 VPN 运行时重写文件时将该选项写入 resolv.conf上或下。我更喜欢一个不与 NetworkManager 冲突的解决方案,但任何有效的解决方案都会很棒。

答案1

对于其他偶然发现这个问题的人,我目前使用的答案是:

如何配置 systemd-resolved 和 systemd-networkd 使用本地 DNS 服务器解析本地域,使用远程 DNS 服务器解析远程域?

然而它确实有一个问题。每次您查询远程地址时,无论文档如何说明,它都会向本地服务器发送一系列请求。由于我的本地服务器速度很快,而且实验室里没有很多人,这是可以接受的,但作为通用解决方案,它可能无法很好地扩展。

相关内容