由于某种原因,我的两台机器开始遭遇极其缓慢的 DNS 查找。
‘host’ 命令的定时输出示例:
[root@ns507403 ~]# time host www.google.com
www.google.com has address 172.217.5.4
www.google.com has IPv6 address 2607:f8b0:4006:80d::2004
real 0m3.050s
user 0m0.000s
sys 0m0.004s
无论使用哪个地址或查询多少次,查询似乎至少需要 3 秒钟。我见过的最长时间是 9 秒查询 www.paypal.com
我已经排除了 DNS 服务器速度慢的可能性,因为我在位于同一数据中心的其他 4 台服务器上使用了相同的 DNS 解析器,所有服务器都运行正常。(查找时间 < 1ms)
我已经尝试过但没有成功的事情:
- 添加
options single-request
到 /etc/resolv.conf - 添加
options single-request-reopen
到 /etc/resolv.conf - 使用以下方式禁用 IPv6
sysctl -w net.ipv6.conf.all.disable_ipv6=1
- 禁用 NetworkManager(我的服务器上未安装它)
这是我当前的 /etc/resolv.conf 文件:
nameserver 127.0.0.1
nameserver 213.186.33.99
search ovh.net
该dig
命令似乎运行良好,显示查询时间为 0ms。
有什么想法可能导致这种情况吗?我在两台机器上都使用 CentOS 6。
答案1
127.0.0.1
是您的本地主机环回接口,这意味着您正在访问您自己的服务器。由于各种原因,您的服务器首先使用该接口来查找 DNS,并且由于您的服务器不知道如何回答 DNS 查询,因此您必须等到查询超时并转到第二个名称服务器。
只需使用真实的 DNS 名称服务器作为唯一条目:
nameserver 213.186.33.99
为什么您甚至将 127.0.0.1 作为名称服务器?
答案2
反转名称服务器顺序将会加快速度。
nameserver 213.186.33.99
nameserver 127.0.0.1
答案3
您被指向 127.0.0.1 (localhost) 的可能性很大,因为您的发行版使用了缓存名称服务守护进程。您可以将其视为在您自己的计算机上运行的缓存 DNS 服务器。使用这种守护进程的有效性值得商榷。
它确实有助于加快某些类型的互联网使用速度,因为它可以减少发送到互联网的 DNS 请求数量。但是,我也看到过它们自己崩溃,导致出现“网络速度慢”的错误,而我们很多人都喜欢这种错误。
如果我没记错的话,CentOS 使用 nscd(名称服务缓存守护程序)来执行此功能。快速sudo service nscd restart
修复它应该可以。
或者,您可以按照您之前的做法,省去中间人。如果是这种情况,并且您不想运行缓存守护进程,则应使用以下命令禁用它:
sudo service nscd stop
sudo chkconfig nscd off
答案4
就我而言,我使用了谷歌的 DNS,而不是我的路由器(网关)
我替换192.168.1.1
并添加:
nameserver 8.8.8.8
nameserver 8.8.4.4