如果我 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)。