当前位置: 首页>>技术问答>>正文


如何清除DNS缓存?

, ,

问题描述

我刚更新了我托管的网站的DNS记录(ns1ns2ns3.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,我建议将pdnsdresolvconf一起安装。 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 DNSHow to clear Chrome’s DNS cache。其他浏览器(和应用程序)可能有自己的机制。

  • 我在这里讨论这个桶,但也许你已经在Ubuntu中安装了non-standard DNS服务器,而不是在dnsmasq中开启缓存。有很多:nscd,DJBDNS dnscache(又名TinyDNS),pdnspdnsd,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服务器数量。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/350.html,未经允许,请勿转载。