我已经安装并配置了 DNS 服务器(Dnsmasq 的本地实例),它可以按照我的要求解析为本地主机,一切正常。
当我离线时,它停止工作,因为 OS X 清空了 resolv.conf 的内容并忽略了反映此文件中的更改的尝试。
有什么想法吗,即使在离线时如何配置 DNS?
类似问题(未解决):http://blog.steamshift.com/geek/leopard-lookupd-and-local-web-development-sites
主要动机是简化使用子域作为帐户密钥的 RoR 应用程序的开发。并且您不能在 /etc/hosts 中使用 127.0.0.1 *.yourapp.local。有些人注册了域名 smackaho.st 并为其设置了 srt DNS,例如 127.0.0.1 处的 .smackaho.st,但您仍然无法在离线工作时使用它。
编辑:尝试了 scutil 命令,但似乎你可以在离线时更改 DNS
注意:当所有接口都关闭时,您无法在首选项面板中设置 DNS 服务器。
答案1
请参阅下面的更新!
我也喜欢在本地机器上使用 Dnsmasq,我也遇到了这个问题。解决方案如下:
从man 5 resolver
:
The configuration for a particular client may be read from a file
having the format described in this man page. These are at present
located by the system in the /etc/resolv.conf file and in the files
found in the /etc/resolver directory.
/etc/resolver/
默认情况下不存在;您必须自己创建它。
另请参阅手册页:
domain
Domain name associated with this resolver configuration. This
option is normally not required by the Mac OS X DNS search system
when the resolver configuration is read from a file in the
/etc/resolver directory. In that case the file name is used as the
domain name.
因此,如果您希望将顶级域名的所有 DNS 查询dev
路由到本地名称服务器,您可以:
# mkdir /etc/resolver
# echo 'nameserver 127.0.0.1' > /etc/resolver/dev
configd
不会改变中的文件/etc/resolver/
,因此此设置在网络更改和重启后仍会持续存在。
2012 年 7 月 17 日更新
scutil --dns
不幸的是,从 OS X Lion 开始,当没有活动接口时,顶级解析器(如图所示)就会消失:
# scutil --dns # Online
DNS configuration
resolver #1
nameserver[0] : 127.0.0.1
...
resolver #8
domain : dev
nameserver[0] : 127.0.0.1
# scutil --dns # Offline
DNS configuration
resolver #1
...
resolver #8
domain : dev
nameserver[0] : 127.0.0.1
请注意,解析器 #1 是空的,但 /etc/resolver 派生的名称服务器条目仍然存在。
事实证明,由于您可以在 /etc/resolver/ 文件中直接指定解析器域,因此指定特殊的 Internet 根域.
会导致创建如下所示的全局解析器条目:
resolver #8
nameserver[0] : 127.0.0.1
现在,所有 DNS 查询都被路由到本地主机,即使离线也是如此。
当然,您仍然必须使用类似 dnsmasq 的 --address 选项将您选择的域解析为 127.0.0.1:
# dnsmasq --address=/dev/127.0.0.1
总之:
- 将所有网络接口 DNS 服务器设置为 127.0.0.1:
networksetup -setdnsservers 以太网 127.0.0.1 networksetup -setdnsservers Wi-Fi 127.0.0.1 ...
- 创建文件 /etc/resolver/whatever:
名称服务器 127.0.0.1 领域 。
- 设置本地 DNS 服务器并高兴即可。
参见http://opensource.apple.com/source/configd/configd-395.11/dnsinfo/dnsinfo_flatfile.c
答案2
为什么不在 /etc/hosts 中创建条目呢?我很难想象在什么情况下你需要真正运行一个完整的 DNS 服务器。我经常使用主机文件条目在我的 Mac 上完成这样的事情。
OS X 中的解析器与 Linux 或其他 Unix 中的解析器的工作方式不同。这可能是导致您烦恼的部分原因。例如,它有一个优先使用哪种解析方法的首选项,并且它会在一段时间内缓存所有查询的结果。
您是否已将 DNS 服务器添加到“网络”偏好设置面板中的界面?这应确保解析器在决定查找 DNS 条目时使用该服务器进行查询。
答案3
(回答是因为我还不能发表评论……)
你怎么离线?
(目前我得到的最佳答案)
# man -S 5 resolver
.
.
.
Note that the /etc/resolv.conf file,
which contains configuration for the default (or "primary") DNS resolver
client, is maintained automatically by Mac OS X and should not be edited manu-
ally. Changes to the DNS configuration should be made by using the Network
Preferences panel.
因此,您应该能够在 UI 中输入一些内容,并且它应该会保留下来。当我不喜欢本地 DHCP 服务器提供的 DNS 服务器时,我曾这样做过几次。
答案4
尝试添加第二个以太网服务,配置静态地址并将 127.0.0.1 作为 DNS 服务器。或者,添加网络位置,将您的 DNS 服务器设置为 127.0.0.1。这两项更改都可以在“网络”面板下的“系统偏好设置”中进行。