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


33

如果我选择了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文件。我该如何解决我的新条目resolv.conf?如果没有,OSX使用什么?

Answers:


17

主机工具不只是解析名称(例如,使用系统名称解析器),而是实际查询dns服务器(例如,将数据包发送到udp / 53以及可能的tcp / 53):它不知道也不使用本地hosts文件。

如果要测试操作系统的解析器(如gethostbyname()和类似的libc函数),则可以尝试ping您添加的名称/etc/hosts,它会兑现您在该文件中放置的名称。

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


1
我为getaddrinfo找到了一个perl包装器:search.cpan.org/~pevans/Socket-GetAddrInfo-0.22
Ben Flynn

26

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

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的符号链接)。您可以验证语法并且正在编辑正确的文件吗?


所以我可以使用此命令添加主机文件吗?
Ben Flynn

您不能,也不需要
Luke404

不,如果要将名称添加到主机文件中,只需直接添加即可。解析名称时,首先检查hosts文件,然后是本地解析缓存,然后是配置的DNS服务器。使用“ host”命令进行测试虽然不会检查本地主机文件。一种简单的测试方法是使用诸如ping之类的网络实用程序。
phoebus

1
有时,接口会获取愚蠢的名称,以获取您需要的确切名称,您也可以执行networksetup -listallnetworkservices 此操作。此外,如果包含空格,则需要单引号将整个名称sudo networksetup -setdnsservers 'white space' 8.8.8.8 8.8.4.4
括起来

2
是否可以将解析器配置为使用与53不同的端口?
符文FS
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.