在 OS X 中,如何将 127.0.0.1 添加到通过 DHCP 获取的 DNS 服务器列表中?

Mic*_*out 2 networking dns dhcp dnsmasq macos

我正在尝试使用 dnsmasq 使用其配置来解析某些已知域,但让其余请求通过 DHCP 分配的普通 DNS 服务器。我不能让它工作。当我通过网络面板将 DNS 设置为 127.0.0.1 时,我必须将 DHCP 分配的 DNS 服务器硬编码为 dnsmasq 的配置。但是,当我在不同的网络上时,例如在工作中,在客户端,这些地址是不同的。每当我改变网络时,我都必须重新配置。

如何配置 OS X 以使用 127.0.0.1 和通过 DHCP 分配的任何 DNS 服务器?

如果这是不可能的,那么我如何告诉 dnsmasq 通过 DHCP 获取上游 DNS 服务器?

这是我目前所知道的。

  1. OS X 上的 /etc/resolv.conf 是动态的,它会根据您在网络首选项中设置的内容或使用 DHCP 进行更改。它会在您重新连接时随时更改。当您离线时,它甚至会被删除。所以一旦我使用 127.0.0.1 这就会反映在 /etc/resolv.conf 中,我不知道是否有任何地方可以找到以前 DHCP 分配的 DNS 地址。

  2. OS X 不使用 /etc/resolv.conf.head。

  3. OS X 不使用 /etc/dhclient.conf,您可以在其中将 DNS 服务器添加到 DHCP 提供的列表中。

  4. /etc/resolver/tld.conf 不是一个解决方案,因为它会尝试使用基于匹配 tld 的 DNS 服务器(如果您使用 .dev 或其他内容会很好)。

编辑:有网络DNS的设置截图这里看起来像我想要的,但我不知道这篇文章的作者是如何实现的。

Gor*_*son 5

首先,使用 127.0.0.1 和 DHCP 分配的 DNS 服务器将无法工作。如果 OS X 配置了多个 DNS 服务器,它不会按顺序尝试它们,它更像是轮询——或多或少地随机向不同的服务器发送不同的请求。最终结果:您希望由 dnsmasq 处理的某些查找将转到常规服务器(并得到错误的结果),而您希望发送到常规服务器的某些查找将转到 dnsmasq(并失败)。不好。

告诉 dnsmasq 使用 DHCP 提供的 DNS 服务器可能是可能的,但我没有看到一种干净的方法来做到这一点。相反,我建议使用 DNS 配置,该配置覆盖您想要特别处理的域的常规 DNS 配置。有两种选择:

  1. 跳过 dnsmasq,把你要特别处理的主机放到 /etc/hosts 中(例如看这篇文章)。
  2. 使用 /etc/resolver/ 文件将特定域的查询定向到 127.0.0.1,覆盖通用(DHCP 提供的)DNS 服务器(请参阅/etc/resolver手册页这篇 Mac OS X 提示文章。本质上,您创建/etc/resolver 文件夹,并在其中为要覆盖的每个域放置一个文件。例如,/etc/resolver/somedomain.com 将包含“名称服务器 127.0.0.1”。