如何为 OSX Mountain Lion 配置 DNS 查找?

如何为 OSX Mountain Lion 配置 DNS 查找?

如果我 cat 我的 resolv.conf,我会看到以下消息:

#
# Mac OS X Notice
#
# This file is not used by the host name and address resolution
# or the DNS query routing mechanisms used by most processes on
# this Mac OS X system.
#
# This file is automatically generated.
#

我正在尝试添加 DNS 条目。我编辑了 hosts 文件并刷新了 dns 缓存,但如果使用 ,则名称无法解析host servername。我想也许host没有配置查看hosts文件。我怎样才能解析我的新条目,如果没有,OSX 会使用什么resolv.conf

答案1

主机工具并不简单地解析名称(例如,使用系统名称解析器)但实际上查询 DNS 服务器(例如,将数据包发送到 udp/53 和可能的 tcp/53):它不知道也不使用本地hosts文件。

如果您想测试操作系统的解析器(如 gethostbyname() 和类似的 libc 函数),您可以尝试 ping 您添加的名称/etc/hosts,它将遵守您在该文件中输入的内容。

此外,正如您已经发现的那样,Mac OSX 上的 DNS 查找不使用/etc/resolv.conf,而配置查询哪些 DNS 服务器的正确方法是在网络设置 GUI 和/或networksetup命令行工具中。老实说,我不知道您是否可以配置尝试源的顺序,但标准行为是/etc/hosts先尝试,然后再尝试 DNS 服务器。

答案2

可以通过以下命令在 OS X 中添加 DNS 解析器networksetup

sudo networksetup -setdnsservers Wi-Fi 8.8.8.8 8.8.4.4

根据需要插入网络连接的名称。这些解析器将出现在 resolv.conf 中,因为它是自动生成的,但直接编辑 resolv.conf 不会导致使用这些解析器。我假设解析器存储在某个 plist 中;我会搜索并报告。

编辑以添加:看起来存储 DNS 服务器的 XML plist 文件是/Library/Preferences/SystemConfiguration/preferences.plist

/private/etc/hosts 中的主机文件应该可以强制解析特定名称(/etc 是 /private/etc 的符号链接)。您能否验证您的语法以及您正在编辑正确的文件?

答案3

要设置自定义 DNS 解析器,例如在您自己的机器上运行 dnsmasq,您需要创建以下目录:

/etc/resolver/(例如sudo mkdir -p /etc/resolver

然后为每个要添加自定义查找的域添加一个文件。

该文件/etc/resolver/my-domain.dev可能如下所示:

nameserver 127.0.0.1
port 5353

(如果使用标准端口,则省略端口53

这将指示 macOS 始终使用本地解析器来解析此域下的 IP。例如,该解析器可以在您的机器上运行,也可以是数据中心中的解析器(通过 Wireguard/VPN)。

相关内容