升级到Mac OSX Lion后,我发现不再首先查找/ etc / hosts进行名称解析。这会导致一些副作用,例如:
- / etc / hosts中的条目解析速度很慢
- 您不能覆盖现有域,例如127.0.0.1 www.google.com
- 如果您从DHCP获取搜索域条目,请说.lan,然后某个有趣的家伙将localhost.lan配置为其他名称,然后在本地DNS中将127.0.0.1配置为您无法再访问localhost。
这种行为是故意的吗?有什么意义吗?最重要的是,我该如何回到过去的行为。
升级到Mac OSX Lion后,我发现不再首先查找/ etc / hosts进行名称解析。这会导致一些副作用,例如:
这种行为是故意的吗?有什么意义吗?最重要的是,我该如何回到过去的行为。
Answers:
我认为他很重要,因为Lion保留了某些组播DNS功能(由Bonjour使用),因此Lion处理.local TLD的方式有所不同。我发现解决此问题的唯一方法是对开发主机使用不同的TLD(即:.dev)。它对我来说很好,希望对其他人有帮助!
http://foo.dev/
; 之后,Chrome将意识到这foo.dev
是一个域而不是查询。
关于在hosts文件中覆盖域,我发现在某些情况下,Lion如果感觉到在IPv4网络上无法访问某个域,便查询该域的IPv6地址。
当我发现一些我以前从未在Snow Leopard上看到过的广告时发现了这一点,因为我将广告域重定向到127.0.0.1
。我启动了Wireshark,并AAAA
在IPv4 A
查询(IPv4)之后注意到了(IPv6 DNS记录)查询。广告服务器确实具有IPv6地址,并且能够向我提供其内容。
解决方案是
::1 mydomain.com
每个条目
127.0.0.1 mydomain.com
主机文件中的条目。
有趣的是,如果您碰巧正在运行本地Web服务器,127.0.0.1:80
并且您的浏览器收到来自Web服务器的响应(错误或其他),则不会AAAA
发出查询,因为似乎可以满足至少可以进行TCP连接的要求。
与此相关的是,如果您大量使用hosts文件(用于adblocking,本地Web开发等),则可能需要考虑运行自己的本地DNS解析器。必须读取/etc/hosts
每个请求会对磁盘/ CPU造成很大的影响,因此,使该文件非常轻便是您的最大利益。
dnsmasq
在本地运行类似内容(除了可以显着提高性能)的一个优势是,您可以将整个顶级域重定向回本地计算机。这样,您就可以拥有整个* .dev命名空间进行开发(例如),而不必单独输入要本地解析的每个域。/etc/hosts
/etc/hosts
-如果频繁使用文件,操作系统将缓存该文件。
问题是我链接了/ etc / hosts文件。如果/ etc / hosts是一个普通文件,则一切正常。
更新(2):OSX 10.10.5带来了返回mDNSResponder
。
更新:OSX 10.10 Yosemite已将mDNSResponder替换为“ discoveryd”。我尚未升级,因此不确定所发现的带有w / r / t DNS查找行为/etc/hosts
。
Lion上的系统DNS解析器就是该mDNSResponder
过程。
您可能会想“但是mDNSResponder是多播dns响应器。” 你是对的; 这就是原来的目的,并且仍然可以实现此功能。但是,在较新的MacOS版本上,它也会执行标准主机查找。
在Lion中,它似乎不会/etc/hosts
在更改时自动重新读取,至少并非总是如此。杀死mDNSResponder
(并允许它自动重新启动)似乎可以解决问题。
sudo killall mDNSResponder
应该可以。
以下是我后代的原始答案。我想在某些情况下可能仍然是一个问题。
确保您的/etc/hosts
文件是unix样式的文本文件,以换行作为结尾而不是cr。
使用TextWrangler或UNIX文本编辑器进行编辑应保留该文件。
如果您的文件已被弄乱,请尝试此修复
tr '\015' '\012' < /etc/hosts > /tmp/hosts.$$
mv /etc/hosts /etc/hosts.bad
mv /tmp/hosts.$$ /etc/hosts
# fix up permissions while we are at it
chown root:wheel /etc/hosts
chmod 644 /etc/hosts
将此修复归功于:
http://techpatio.com/2011/guides-how-to/fixed-mac-osx-lion-etc-hosts-bugs-dns
香港专业教育学院有这个问题一段时间,因为在工作一个开发团队时,有必要实际使用.local而不是.dev或.localhost,我发现本文非常有用。
综上所述;
但是,如果必须使用.local,我发现的最优雅的解决方案是dscl实用程序。使用它非常简单。要添加名为mydev.local的主机并将其指向localhost,只需执行以下操作:
sudo dscl localhost -create /Local/Default/Hosts/mydev.local IPAddress 127.0.0.1
查看所有当前定义的主机及其IP
sudo dscl localhost -list /Local/Default/Hosts IPAddress
并删除主机:
sudo dscl localhost -delete /Local/Default/Hosts/mydev.local
总体而言,非常简单明了,效果很好。我仍然更希望能够编辑/ etc / hosts,但是这比重命名我们所有的.local服务器更好。
从Snow Leopard迁移到Lion之前,我在中有几个特定于应用程序的条目/etc/hosts
,如下所示:
127.0.0.1 foo.bar.local
更新后,加载我的本地应用程序非常慢。我注意到延迟是在请求出现在日志文件中之前发生的,并且一旦发生,应用程序本身的运行速度便与往常一样。
现在,每个应用程序有两行,如下所示:
127.0.0.1 foo.bar.local
::1 foo.bar.local
...一切又很快了。
显然这会添加IPv6地址吗?确实,我不太了解它,但是它有效。
我的情况与此类似,但是延迟仅5秒,只发生在以'.local'结尾的URL上。当查看以“ .dev”结尾的网站时,没有延迟。
我办公室中的其他一些开发人员存在此问题,而另一些则没有。我希望有一个简单的修复程序,由于其他依赖性,我不想将站点重命名为“ .local”。
我在终端中运行以下命令,并将输出与办公室中的其他一些用户进行比较。
scutil --dns
本节是唯一的区别:
resolver #2
domain : 00000000.members.btmm.icloud.com
options : pdns
timeout : 5
order : 150000
我的Mac已链接到我的iCloud帐户,并且启用了“返回我的Mac”。一旦禁用“回到我的Mac”,其他解析器就会消失,5秒的延迟也消失了。
哇,真是一场噩梦。我已经阅读了关于该主题的所有内容,到目前为止,所有建议都非常接近我所经历的内容,但是没有一种解决方案适合我。
我想出了原因。
与其他人不同,我没有使用/ etc / hosts来设置本地域。我的/ etc / hosts文件很普通,仅包含回送接口和广播主机所需的条目。而且,这是一个正确编码的unix文件,因为我是那种只能使用emacs从命令行对其进行编辑的人。而且,谢天谢地,我不必借助自己的DNS服务器(例如DNSmasq)来解决此问题。
(很明显,导致我遇到此问题的症状是emacs大约需要10秒钟才能启动,但仅在使用wifi时才启动。如果关闭wifi,emacs会立即按预期方式启动。)
我的解决方案:我的笔记本电脑有一个名字“终结者”。(是的,它有光泽的铝制外观使我想到了Arnold Schwarzenegger角色。)我只需要在/ etc / hosts中添加机器本身名称的条目:
127.0.0.1 terminator
::1 terminator
我通过在终端中运行一个简单的命令来找到主机的名称:
hostname
...返回的输出是:“ terminator”。将/ etc / hosts更改为包含这两个条目后,emacs现在可以快速解析我的笔记本电脑的名称。
我希望这可以帮助别人。
我认为已修复了一些错误。我已经看到很多提到的问题,而且这些问题目前似乎都不适用(例如,现在将多个别名放在一行上对我来说很好)。
无论如何,Apple似乎对Lion进行了大幅度更改,使mDNSResponder可以处理所有DNS查找,并且(至少与Lion一起)还可以处理/ etc / hosts缓存。对我来说,正向查找现在也有效。但是反向查找(例如,查找1.2.3.4而不是google.com)无效。
经过许多痛苦之后,看起来mDNSResponder将此查找转换为4.3.2.1.in-addr.arpa并进行了名称查找。这很可能是DNS首选的操作方式,但对于/ etc / hosts根本不起作用。
除非您当然为每个主机添加一个别名4.3.2.1.in-addr.arpa,其中4.3.2.1是与您看到它相反的IP地址。这为我解决了所有问题。这是/ etc / hosts条目的示例:
1.2.3.4 foo foo.example.com alias.example.com 4.3.2.1.in-addr.arpa