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

Modified on: Sun, 10 Nov 2019 20:00:02 +0800

我已经安装了,配置了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服务器。面板。

作者:,daeltar

最佳答案

见下面的更新!

我也喜欢在我的本地机器上使用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.

因此,如果您希望对dev的顶级域进行所有dns查询
路由到本地名称服务器,您将:

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.

configd不会改变/etc/resolver/中的文件,所以此设置将
坚持网络变化并重新启动。

2012年7月17日更新

不幸的是,从OS X Lion开始,顶级解析器(如scutil --dns)会消失:

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

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

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

# 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

现在所有DNS查询都会路由到localhost,即使在离线时也是如此。

当然,您仍然必须将所选域名解析为
127.0.0.1使用类似dnsmasq的--address选项:

resolver #8
  nameserver[0] : 127.0.0.1

总结:

  • 将所有网络接口dns服务器设置为127.0.0.1:
# dnsmasq --address=/dev/127.0.0.1
  • 创建文件/ etc / resolver / whatever:
    networksetup -setdnsservers Ethernet 127.0.0.1
    networksetup -setdnsservers Wi-Fi 127.0.0.1
    ...
  • 设置本地DNS服务器并感到高兴。

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

作者:,guns

相关问答

添加新评论