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


17

我已经安装并配置了DNS服务器(Dnsmasq的本地实例),该服务器可以根据需要解析为localhost,一切正常。

当我脱机时,它将停止工作,因为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,例如.smackaho.st,位于127.0.0.1,但仍然,当您脱机工作时,您将无法使用它。

编辑:尝试过scutil命令,但似乎可以更改DNS,如果脱机

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


相关:在超级用户的OS X Yosemite中dnsmasq在没有Internet连接的情况下无法工作(没有解决方案,但有一些参考)。
Arjan 2015年

Answers:


29

请参阅下面的更新!

我也喜欢在本地计算机上使用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日更新

不幸的是,从OS X Lion开始,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

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

事实证明,由于您可以直接在/ etc / resolver /文件中指定解析器域,因此指定特殊的Internet根域. 会导致创建一个全局解析器条目,如下所示:

resolver #8
  nameserver[0] : 127.0.0.1

现在,即使离线,所有DNS查询都将路由到localhost。

当然,您仍然需要使用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 /以下文件:
    域名服务器127.0.0.1
    域。
  • 设置本地DNS服务器并感到高兴。

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


这就是pow正在使用的(pow.cx)。
daeltar 2011年

但不幸的是,它不起作用-github.com/37signals/pow/issues/104
daeltar 2012年

3
@guns这个解决方案在优胜美地仍然有效吗?在升级之前,dnsmasq可以在脱机状态下正常工作。现在,当我scutil --dns没有连接到互联网时跑步时,我得到的就是No DNS configuration available 我按照您的上述指示但没有运气
MatthewLee 2014年

1
@MatthewLee,是的,是的,似乎唯一的解决方法是在hosts文件中添加条目。
2014年

1
有人找到优胜美地解决方案了吗?
jmagnusson 2015年

2

为什么不在/ etc / hosts中输入条目呢?我在考虑实际需要运行完整的DNS服务器的情况时遇到了麻烦。我一直使用主机文件条目来在Mac上完成此类操作。

OS X中的解析器与Linux或其他Unix中的解析器不同。这可能是导致您悲伤的原因之一。例如,它具有优先选择哪种解析方法的首选项,并在一段时间内缓存所有查询的结果。

是否已将DNS服务器添加到“网络”首选项窗格中的界面?这应该确保解析器决定查找DNS条目时使用该服务器进行查询。


在客户端计算机上使用DNS 转发器的原因之一是维护了一个很大的广告/恶意软件黑名单,而不会受到解析程序守护程序对每个请求都g血的主机文件的性能影响。尽管有这种方法的优点,但dnsmasq将/ etc / hosts加载到内存中,从而使查找时间变得微不足道。另外,如果您进行Web开发,则可以避免为正在处理的每个站点添加本地域的麻烦。

1

(回答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.

因此,您应该能够在UI中输入某些内容,并且该内容应该会保留下来。当我不喜欢本地DHCP服务器提供的DNS服务器时,我做了几次。


在NetworkPreferences中更改DNS配置会更改/etc/resolv.conf文件。
Fabian Zeindl 2012年

0

OSX是否具有普通Linux / UNIX DHCP客户端配置所具有的/etc/dhcp3/dhclient.conf配置文件?

如果是这样,它应该有一行您可以取消注释

prepend domain-name-servers 127.0.0.1;

使DHCP客户端始终将该行添加到您的resolv.conf中


添加到resolv.conf在OS X上无济于事。resolv.conf的内容已生成,并且本身是/var/run/resolv.conf上的符号链接,即使我更改了/var/run/resolv.conf也无法反映更改。
daeltar

0

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


-2

放一下可能会有所帮助

127.0.0.1       localhost

到/ etc / hosts中,因此它不需要解析器即可找到localhost。


1
我需要用于子域,所以这不是不。
daeltar
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.