请参阅下面的更新!
我也喜欢在本地计算机上使用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
域。
cf. http://opensource.apple.com/source/configd/configd-395.11/dnsinfo/dnsinfo_flatfile.c