Mac OS X 连接速度慢 - mdns 4-5 秒 - bonjour 慢

Rya*_*ier 4 php macos ldap active-directory domaincontroller

我终于束手无策了。我已经用谷歌搜索这个问题一周了。我已经尝试对我的 Mac (10.12 Sierra) 和域控制器 (Windows Server 2016) 进行故障排除,但距离解决问题还很遥远。

\n\n

我的问题是,当使用 PHP 的ldap_connect()函数时,大约需要 5 秒才能得到响应。事情只是挂起 5 秒钟,然后我就成功连接了。复制此内容的确切命令(假设我的 DC 的 IP 地址为192.168.2.5):

\n\n

$ldap = ldap_connect(\'ldap://192.168.2.5:389\');

\n\n

我没有使用 SSL 或 TLS。这只是与 DC 的简单明文连接,其防火墙完全关闭。我最终在我的 DC 上安装了 Wireshark 以获取有关正在发生的情况的更多信息,我注意到了这一点:

\n\n

No. | Time | Source | Destination | Protocol | Length | Info

\n\n

1 | 327 | 192.168.2.108 | 224.0.0.251 | MDNS | 83 | Standard query 0x0000 A Ryans-MacBook-Pro.local, "QU" question

\n\n

2 | 328 | 192.168.2.108 | 224.0.0.251 | MDNS | 83 | Standard query 0x0000 A Ryans-MacBook-Pro.local, "QM" question

\n\n

3 | 331 | 192.168.2.108 | 224.0.0.251 | MDNS | 83 | Standard query 0x0000 A Ryans-MacBook-Pro.local, "QM" question

\n\n

4 | 332 | 192.168.2.108 | 192.168.2.5 | TCP | 78 | 49860 > 389 [SYN] Seq=0 Win=65535 Len=0 MSS=1460 WS=32 TSval=371626102 TSecr=0 SACK_PERM=1

\n\n

5 | 332 | 192.168.2.5 | 192.168.2.108 | TCP | 74 | 389 > 49860 [SYN, ACK] Seq=0 Ack=1 Win=8192 Len=0 MSS=1460 WS=256 SACK_PERM=1 TSval=2494847497 TSecr=371626102

\n\n

6 | 332 | 192.168.2.108 | 192.168.2.5 | TCP | 66 | 49860 > 389 [ACK] Seq=1 Ack=1 Win=131744 Len=0 TSval=371626102 TSecr=2494847497

\n\n

7 | 332 | 192.168.2.108 | 192.168.2.5 | LDAP | 96 | bindRequest(1) "ldap" simple

\n\n

8 | 332 | 192.168.2.5 | 192.168.2.108 | LDAP | 88 | bindResponse(1) success

\n\n

正如您所看到的,当我启动该ldap_connect()功能时,我立即在 327 秒处看到第一个数据包(自运行 Wireshark 以来)。我看到 3 个 mdns 数据包总共 5 秒。然后在第四个、第五个和第六个数据包上,我看到 TCP 三向握手,然后它继续为我提供成功的 LDAP 连接。因此,我看到的 5 秒延迟是所有 mdns 数据包还是 Apple 的 Bonjour?此时,我不知道如何解决这个问题。

\n\n

免责声明:我正在使用Laravel Valet,它使用 dnsmasq。我不知道这是否导致我的问题。我还没有卸载这个软件,还没找到答案。

\n\n

编辑:我已经排除了 Laravel Valet。我完全卸载了它,但它仍然是一个问题。我也排除了 Laravel。我正在运行此脚本,但问题仍然存在:

\n\n
<?php\n\n$start = microtime(true);\n\n$ldap = ldap_connect(\'ldap://192.168.2.5:389\');\n\n$end = microtime(true);\n\necho $end - $start;\n
Run Code Online (Sandbox Code Playgroud)\n\n

edit2:好的,我已经进一步解决了这个问题。我在 Mac 上安装了 Wireshark,并注意到以下内容。

\n\n

在此输入图像描述

\n\n

然后我运行这个命令:\n \xe2\x9e\x9c ~ scutil --dns\n DNS 配置

\n\n
resolver #1\n  search domain[0] : corp.[redacted].com\n  nameserver[0] : 192.168.2.4\n  nameserver[1] : 192.168.2.5\n  if_index : 7 (en3)\n  flags    : Request A records\n  reach    : Reachable, Directly Reachable Address\n\nresolver #2\n  domain   : local\n  options  : mdns\n  timeout  : 5\n  flags    : Request A records\n  reach    : Not Reachable\n  order    : 300000\n
Run Code Online (Sandbox Code Playgroud)\n\n

这是我的主机名!我的主机名在尝试使用多播 DNS 解析时导致 5 秒延迟。为什么?.local是一个保留域,那么 Apple 为什么要将它附加到我的主机名中?

\n\n

在此输入图像描述

\n\n

如您所见,它会自动附加.local.

\n\n

无论如何,我已经通过添加127.0.0.1 Ryans-MacBook-Pro.local到我的/etc/hosts文件解决了我的问题。由于某种原因它不在那里。

\n\n

我的ldap_connect()现在是即时的,就像它应该的那样!

\n

Rya*_*ier 5

确保您的主机名在/etc/hosts文件中如下所示:

127.0.0.1 localhost Ryans-MacBook-Pro.local

只需将我的主机名替换为你的主机名即可。