我有一个网络,我们主要安装 Ubuntu 18 和本地唯一的 DNS 服务,用于网络上的东西。
我想要的是系统在启动时使用 DHCP 正常获取名称服务器。他们应该为本地机器使用本地 DNS 服务器,而不是将这些请求发送到 Internet,但使用 Internet 服务器进行所有其他查找。
当用户连接到 NetworkManager 控制的 VPN 客户端(在菜单栏中)时,它应该只使用 VPN 的 DNS 服务器来处理非本地请求,从不使用从 DHCP 获得的那些,但仍然继续使用本地服务器来处理本地请求.
我想我已经设法使用 dnsmasq 的“服务器”选项进行本地解析,除了它仍然将请求转发到 Internet,即使对于完全限定的本地名称也是如此。
我已经尝试首先使用本地服务器设置旧式 resolv.conf(服务器配置为拒绝请求而不是转发它们),但这失败了,因为 Ubuntu 的解析器不会立即尝试在 resolv.conf 中使用第二个服务器。 conf 当第一个拒绝请求时,强制它在 5 秒后超时,然后再尝试第二个服务器。我可以使用选项 timeout:1 将超时减少到 1 秒,但这仍然不够理想,而且我还没有找到一种方法让网络管理器在每次 VPN 运行时重写文件时将该选项写入 resolv.conf上或下。我更喜欢不与 NetworkManager 冲突的解决方案,但任何有效的解决方案都会很棒。
对于其他偶然发现这个问题的人,我目前使用的答案是:
如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?
不过它确实有问题。每次查询远程地址时,它都会向本地服务器发送一连串请求,尽管文档说了什么。由于我的本地服务器速度很快,而且实验室里没有很多人,这是可以接受的,但作为一般解决方案,它可能无法很好地扩展。