即使没有互联网连接,也可以在OS X上设置DNS服务器

我已经安装,configurationDNS服务器(Dnsmasq的本地实例),解决到本地主机,我想,都可以。

当我离线时,它停止工作,因为OS X为resolv.conf的内容为空,并忽略尝试反映此文件中的更改。

任何想法,即使离线时如何configurationDNS?

类似的问题(未解决): 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,如.smackaho.st在127.0.0.1,但仍然无法在离线工作时使用。

编辑:试过scutil命令,但似乎你可以更改DNS,如果离线

注意:当您closures所有接口时,无法在Pref中设置DNS服务器。 面板。

看下面的更新!

我也喜欢在我的本地机器上使用Dnsmasq,而且我也有这个问题。 这是解决scheme:

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/默认不存在; 你必须自己创build它。

另外从手册页:

 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. 

所以,如果你想把dev的顶级域名的所有dns查询路由到本地域名服务器,你应该:

 # mkdir /etc/resolver # echo 'nameserver 127.0.0.1' > /etc/resolver/dev 

configd不会改变/etc/resolver/文件,所以这个设置将通过networking更改并重新启动。

更新2012年7月17日

不幸的是,从OS X Lion开始,当没有接口处于活动状态时,顶层parsing器(如scutil --dns所示)消失:

 # 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 

请注意,parsing器#1是空的,但/ etc / resolver派生的名称服务器条目仍然存在。

事实certificate,由于您可以直接在/ etc / resolver / file中指定parsing器域,因此可以指定特殊的Internet根域. 导致创build一个如下所示的全局parsing器条目:

 resolver #8 nameserver[0] : 127.0.0.1 

现在所有DNS查询都被路由到本地主机,即使在离线状态下。

当然,你仍然需要使用类似dnsmasq的–address选项来parsing你select的域名为127.0.0.1:

 # dnsmasq --address=/dev/127.0.0.1 

综上所述:

  • 将所有networking接口dns服务器设置为127.0.0.1:
     networksetup -setdnsservers以太网127.0.0.1
     networksetup -setdnsservers Wi-Fi 127.0.0.1
     ...
  • 创build一个文件/ etc / resolver / whatever:
    域名服务器127.0.0.1
    域。
  • build立一个本地的DNS服务器,并开心。

比照 http://opensource.apple.com/source/configd/configd-395.11/dnsinfo/dnsinfo_flatfile.c

为什么不在/ etc / hosts中创build条目呢? 我很难想到你需要真正运行一个完整的DNS服务器的情况。 我一直使用主机文件条目在我的Mac上完成这样的事情。

OS X中的parsing器与Linux或其他Unix中的parsing器不同。 这可能是导致你悲伤的部分原因。 例如,它首先使用哪种parsing方法,并在一段时间内caching所有查询的结果。

您是否已将networking首选项窗格中的界面添加到DNS服务器? 这应该确保parsing器在决定查找DNS条目时使用该服务器进行查询。

(回答B / C我还不能评论…)

你怎么离线?

(最好的答案我现在得到)

 # 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. 

所以,你应该能够在界面中input一些东西,而且应该坚持下去。 当我不喜欢我的本地DHCP服务器提供的DNS服务器时,我已经做了几次了。

OSX是否具有正常的Linux / UNIX DHCP客户端configuration所具有的/etc/dhcp3/dhclient.confconfiguration文件?

如果是这样,它应该有一条线,你可以取消注释

 prepend domain-name-servers 127.0.0.1; 

让DHCP客户端总是将该行添加到您的resolv.conf

尝试添加configuration了静态地址和127.0.0.1作为您的DNS服务器的第二个以太网服务。 或者,添加一个networking位置,将您的DNS服务器设置为127.0.0.1。 这两项更改都将在“networking”面板下的“系统偏好设置”中进行。

这可能有助于放置

 127.0.0.1 localhost 

进入/ etc / hosts,所以它不需要parsing器来查找localhost。