Mac OS X 上的本地 DNS 解析非常慢

Mac OS X 上的本地 DNS 解析非常慢

我在 Mac OS 10.8.2 上的 Virtual Box 中以虚拟机形式运行 centos linux。虚拟机的 IP 地址为 172.17.33.2。我在 /etc/hosts 中创建了一个条目,其中

172.17.33.2 centos.dev

当我尝试通过

ping centos.dev

第一次 ping 大约需要 30 秒,之后一切都按预期工作:

meckbuck2:~ mimi$ ping -n centos.dev
PING centos.dev (172.17.33.2): 56 data bytes
64 bytes from 172.17.33.2: icmp_seq=0 ttl=64 time=0.521 ms
64 bytes from 172.17.33.2: icmp_seq=1 ttl=64 time=0.294 ms
64 bytes from 172.17.33.2: icmp_seq=2 ttl=64 time=0.274 ms

如果我使用 ping 172.17.33.2(无 DNS 解析),一切都很快,第一次 ping 会在几分之一秒内开始。所以看起来我的电脑上的名称解析出了问题。有人能告诉我如何解决这个问题吗?这是一台新的 MacBook Retina 15",不到一周前我从头开始设置的。

我也尝试过使用 centos.localhost 作为域名 - 同样存在此问题。

一旦域名解析成功,并且 IP 到位,一切就会按预期运行(ssh、smb、http……)。欢迎提供任何提示!

编辑:当我 ping 服务器名称时,我使用 dtruss 获取系统调用的转储。ping 卡在跟踪的末尾。您可以在此处找到它:http://pastebin.com/JXgeHsBu

编辑 2:我按照http://blog.root-of-all-evil.com/2012/07/how-to-bypass-os-x-lions-reverse-dns-lookup-order-to-resolve-slow-local-host-lookups/设置本地 DNS 服务器。问题依然存在。

当我在虚拟机上启动 ping 时,tcpdump 给出了以下输出:

01:16:27.668409 IP 192.168.6.101.62932 > 8.8.8.8.53: 26754+ A? www.isg-apple.com.akadns.net. (46)
01:16:27.668456 IP 192.168.6.101.20149 > 8.8.8.8.53: 41456+ AAAA? www.isg-apple.com.akadns.net. (46)
01:16:27.670650 IP 8.8.8.8.53 > 192.168.6.101.62932: 26754 3/8/0 CNAME www.apple.com.edgekey.net., CNAME e3191.c.akamaiedge.net., A 23.1.61.15 (275)
01:16:27.670932 IP 8.8.8.8.53 > 192.168.6.101.20149: 41456 2/1/0 CNAME www.apple.com.edgekey.net., CNAME e3191.c.akamaiedge.net. (176)
01:16:33.178960 IP 192.168.6.101.41429 > 8.8.8.8.53: 21942+ A? e3191.c.akamaiedge.net. (40)
01:16:33.180452 IP 8.8.8.8.53 > 192.168.6.101.41429: 21942 1/8/0 A 23.1.61.15 (200)
01:16:46.876547 IP 192.168.6.101.24354 > 8.8.8.8.53: 6871+ A? 1.courier-push-apple.com.akadns.net. (53)
01:16:46.877900 IP 8.8.8.8.53 > 192.168.6.101.24354: 6871 8/10/5 A 17.149.36.102, A 17.149.36.169, A 17.149.32.52, A 17.149.36.115, A 17.149.36.178, A 17.149.36.127, A 17.149.36.181, A 17.149.36.108 (494)
01:16:53.863153 IP 192.168.6.101.61304 > 8.8.8.8.53: 32328+ A? e3191.c.akamaiedge.net. (40)
01:16:53.884441 IP 8.8.8.8.53 > 192.168.6.101.61304: 32328 1/8/0 A 23.1.61.15 (200)

编辑 3:这是我的 scutil --dns 输出

meckbuck2:~ mimi$ scutil --dns
DNS configuration

resolver #1
  search domain[0] : hil-allhw.phl.wayport.net
  search domain[1] : phl.wayport.net
  nameserver[0] : 127.0.0.1
  reach    : Reachable,Local Address

resolver #2
  domain   : local
  options  : mdns
  timeout  : 5
  order    : 300000

resolver #3
  domain   : 254.169.in-addr.arpa
  options  : mdns
  timeout  : 5
  order    : 300200

resolver #4
  domain   : 8.e.f.ip6.arpa
  options  : mdns
  timeout  : 5
  order    : 300400

resolver #5
  domain   : 9.e.f.ip6.arpa
  options  : mdns
  timeout  : 5
  order    : 300600

resolver #6
  domain   : a.e.f.ip6.arpa
  options  : mdns
  timeout  : 5
  order    : 300800

resolver #7
  domain   : b.e.f.ip6.arpa
  options  : mdns
  timeout  : 5
  order    : 301000

DNS configuration (for scoped queries)

resolver #1
  search domain[0] : hil-allhw.phl.wayport.net
  search domain[1] : phl.wayport.net
  nameserver[0] : 127.0.0.1
  if_index : 4 (en0)
  flags    : Scoped

到达:可达,本地地址

答案1

我在 OSX 上10.13.6遇到了这个问题.local。诀窍是指定两个都、IPv4IPv6:

127.0.0.1    php.local
::1          php.local

取自让 .local 域名在 macOS 中不再变慢

答案2

可能是某个程序正在尝试更新。我猜你已经考虑过将域名服务器设置为 Google DNS 之类的东西。Apple 有一款名为 NameBench 的免费软件,它可能会提供更多数据。

答案3

就我而言,解析本地定义的名称myserver.local很慢,通过以下修改解决了这个问题 -

10.0.0.5    myserver.local alias.local               # original config

更改为(添加了 ServerName 并将 myserver.local 移至列表末尾)-

10.0.0.5    ServerName alias.local myserver.local    # altered config

问题已解决。现在dscacheutil -q host -a name myserver.local立即生效。

我之所以想到这一点,是因为dscacheutil另一台主机的上述输出打印了 -

name: localhost
alias: mypc.local 
ip_address: 10.0.0.1

所以理论上第一个项目应该是主持人的名字,不知道是否真的如此,但它解决了我的问题。

相关内容