问题描述
我刚更新了我托管的网站的DNS记录(ns1
,ns2
,ns3.myhostingcompany.com
),但我仍然获得域名注册商停放页面。
我想看看问题是否是Ubuntu的缓存DNS记录。有没有办法清除Ubuntu的DNS缓存? (如果存在这样的事情?)
最佳解决办法
11.10及以下
Ubuntu默认不会缓存dns记录,所以除非你安装了dns缓存,否则没有什么可以清除的。
DNS记录可能由您的提供商的DNS服务器缓存,因此如果您想检查您所做的DNS更改是否成功,您可以使用dig查询域名托管服务中的DNS服务器:
dig -t a ns1.myhostingcompany.com @domain_registrar_dns_server
您希望Ubuntu开始缓存dns,我建议将pdnsd
与resolvconf
一起安装。 nscd
是越野车,不可取。
次佳解决办法
12.04
Ubuntu 12.04使用内置于network-manager
中的dnsmasq
,但它不缓存dns,因此不需要刷新它。这是来自我的syslog
的示例行,以证明这一点:
dnsmasq[2980]: started, version 2.59 cache disabled
也不需要dnsmasq
的任何配置。如果您正在使用库存设置运行,则它不会缓存dns,因为它必须按照Ubuntu article描述的那样明确设置它。
如果你想刷新你的设置,你可以禁用,然后启用网络或运行
sudo service network-manager restart
这将重新启动dnsmasq
,因为它内置于network-manager
;请检查您的syslog
以获取相关证据。
如果您使用的是dhcp的有线连接network manager
将直接从您的路由器获取设置,并且您登录到Ubuntu时将自动建立连接。如果您可以通过Web界面访问它,您可以检查路由器中的设置是否正确,并在必要时重新启动它。如果这是dns的一个常见问题,那么可以尝试使用Google dns而不是您的isp dns,关于该问题的更多信息是detailed here。
第三种解决办法
默认情况下,DNS不会在Ubuntu中缓存(但可能缓存在网络或应用程序中)
要确认dnsmasq
是否缓存,请运行ps ax | grep dnsmasq
并查看运行命令。这是我的默认13.10机器的细目:
/usr/sbin/dnsmasq \
--no-resolv \
--keep-in-foreground \
--no-hosts \
--bind-interfaces \
--pid-file=/var/run/NetworkManager/dnsmasq.pid \
--listen-address=127.0.1.1 \
--conf-file=/var/run/NetworkManager/dnsmasq.conf \
--cache-size=0 \
--proxy-dnssec \
--enable-dbus=org.freedesktop.NetworkManager.dnsmasq \
--conf-dir=/etc/NetworkManager/dnsmasq.d
/etc/NetworkManager/dnsmasq.d
默认为空。所以没有任何重写进来,只是检查--cache-size=0
意味着我们认为它的意思(而不是无限制的缓存),man dnsmasq
显示:
-c, --cache-size=<cachesize>
Set the size of dnsmasq's cache. The default is 150 names.
Setting the cache size to zero disables caching.
因此,虽然dnsmasq
可以缓存DNS,但它并未缓存出去。你可以检查你的机器和各种配置目录来检查你是否在同一页面上。
如果你看到缓存问题,这可能发生在几个地方之一:
-
从计算机上游。一些路由器缓存。许多公司网络将缓存DNS。许多ISP-run DNS服务器将使用自己的缓存。保证网络缓存的唯一方法是使用可以手动刷新的缓存。这就是我喜欢OpenDNS的原因。
-
在客户端应用程序(特别是浏览器)中。应用程序可以做各种各样的自己的缓存,Ubuntu没有任何影响。 How Firefox caches DNS。 How to clear Chrome’s DNS cache。其他浏览器(和应用程序)可能有自己的机制。
-
我在这里讨论这个桶,但也许你已经在Ubuntu中安装了non-standard DNS服务器,而不是在
dnsmasq
中开启缓存。有很多:nscd
,DJBDNSdnscache
(又名TinyDNS),pdns
,pdnsd
,Bind9(及其变体),以及更多,我甚至不记得。这些可能会在/etc/resolv.conf
中得到证明(在/etc /resolvconf /中配置为自动生成该文件)。以下显示了本地拦截的DNS查询:$ nslookup askubuntu.com Server: 127.0.1.1 Address: 127.0.1.1#53 Non-authoritative answer: Name: askubuntu.com Address: 198.252.206.24
如果你没有达到8.8.8.8(或者你希望你的DNS服务器是什么),请检查你打的是什么。在我的情况下,我可以看到这只是
dnsmasq
设置为反映DNS查询回LXC,但在你的情况下,它可能会做坏的事情。如果您已完成列出的缓存,则清除每个缓存的过程各不相同:
sudo /etc/init.d/nscd reload # nscd sudo /etc/init.d/named restart # bind9
在一个稍微相关的说明中,请参阅以在dnsmasq
中启用缓存。
第四种办法
12.04:
Ubuntu 12.04使用dnsmasq缓存DNS(请参阅man dnsmasq
)。使用以下命令清除缓存:
sudo kill -HUP $(pgrep dnsmasq)
第五种办法
sudo /etc/init.d/nscd restart
http://www.ubuntugeek.com/howto-clearflush-dns-cache-in-ubuntu.html
同样作为一个注释,您可以检查并查看您的DNS更改是否已使用dig传播并查看除默认DNS服务器之外的其他人。在这种情况下,谷歌DNS。
dig @8.8.8.8 example.com
第六种办法
就我个人而言,我使用use OpenDNS并使用其Cache Check function强制进行刷新,以确保所做的更改能够正常工作,但您无法保证在48小时内为您的用户刷新。
DNS是一个缓慢的野兽。耐心会让你保持清醒。
第七种办法
如果您使用nscd:
sudo /etc/init.d/nscd restart
值得一提的是,它可能不是缓存它的操作系统。每个人都喜欢缓存DNS ……一些测试:
检查它是新的还是旧的IP。大多数浏览器都会缓存DNS,因此如果您尚未重新启动Chromium或任何可能没有看到最新的内容。
ping yourdomain.com
在/etc/resolv.conf中将本地名称服务器切换到另一个提供程序,谷歌或级别示例:
nameserver 8.8.8.8
nameserver 4.2.2.2
然后再次ping。
检查以确保您的路由器不以任何形式缓存DNS。 (因路由器/固件等而异)
最后,耐心。 DNS可能需要一点时间在整个互联网上传播。
第八种办法
不确定究竟是什么版本的Ubuntu,但是对于Ubuntu 17.04,我的问题是systemd-resolve
。您可以像这样刷新systemd的缓存:
sudo systemd-resolve --flush-caches
第九种办法
上述所有答案在名称解析中忘记了一件重要的事情:通常您请求名称解析的DNS服务器不是自己持有记录的那个(权威服务器)。由于每个DNS记录都带有一个生存时间值,它将强制解析链中的每个DNS服务器在该值提及的秒数内进行缓存。因此,不仅可以缓存在您的机器中,而且某些名称查找的结果将被缓存在您不受控制的服务器上的某处。
要立即通知名称记录更改的唯一解决方案是在创建/更新权威名称服务器中的条目时使用TTL值0。但是这意味着对于每个名称解析,服务器将会被击中,通常这是注册商不允许的。例如,他们可以提供您可以选择的pre-defined TTL值列表。
我管理不同的域名,并确保这些更改在权威名称服务器中得到了很好的应用,我正在使用名为dnstracer
的工具,它可以在DNS根目录中显示每台服务器上的查找结果。
总而言之,即使没有任何DNS缓存解决方案,在您更改DNS记录和在PC上看到更改之间仍然存在延迟。这种延迟很大程度上取决于记录的TTL以及PC和授权名称服务器之间的DNS服务器数量。