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

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

我已经安装并配置了 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。这两项更改都可以在“网络”面板下的“系统偏好设置”中进行。

相关内容