如何清除DNS缓存?

我刚刚为我托管的网站更新了DNS记录( ns1ns2ns3.myhostingcompany.com ),但我仍然获得了域名注册商停放页面。

我想看看问题是否是Ubuntu的缓存DNS记录。 有没有办法清除Ubuntu的DNS缓存? (如果存在这样的事情?)

为18.04及更高

看看Mike Shultz的回答 。

对于11.10及以下

默认情况下,Ubuntu不会缓存dns记录,因此除非您安装了dns缓存,否则无法清除任何内容。

DNS记录可能由您的提供商的DNS服务器缓存,因此如果您想检查您所做的DNS更改是否成功,您可以使用dig从您的域托管服务查询DNS服务器:

dig -ta ns1.myhostingcompany.com @domain_registrar_dns_server

你希望Ubuntu开始缓存dns我建议与resolvconf一起安装pdnsdnscd是越野车,不可取。

12.04

Ubuntu 12.04使用内置于network-manager dnsmasq ,但它不会缓存dns,因此不需要刷新它。 这是我的syslog一个示例行来certificate这一点:

 dnsmasq[2980]: started, version 2.59 cache disabled 

也不需要任何dnsmasq配置。 如果你使用库存设置运行它将不会缓存dns,因为它必须明确地设置它,因为这个Ubuntu文章描述。

如果要刷新设置,可以禁用然后启用网络或运行

 sudo service network-manager restart 

这会重新启动dnsmasq因为它内置于network-manager ; 检查你的syslog以获取相关证据。

如果您使用dhcp有线连接, network manager将直接从您的路由器进行设置,并在您登录Ubuntu时自动建立连接。 如果您可以通过Web界面访问路由器,则可以检查路由器中的设置是否正确,如果需要,可以重新启动它。 如果这是dns的一般问题,您可以尝试使用Google dns而不是isp dns,有关详细信息,请参阅此处 。

请注意,Ubuntu从17.04开始使用systemd-resolve,因此这个答案不再适用于最近的Ubuntu版本。 请参阅“ Ubuntu 17.04及更高版本(18.04)中的刷新DNS缓存 ”

默认情况下,DNS不会缓存在Ubuntu <17.04中(但它可能会缓存在网络或应用程序中)

要确认dnsmasq是否正在缓存,请运行ps ax | grep dnsmasq ps ax | grep dnsmasq并查看运行命令。 这是我的默认13.10机器的细分:

  / usr / sbin / dnsmasq \
   --no-resolv \
   - 保持在前景\
   - 没有主持人
   - 绑定接口
   --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 /网络管理器/ dnsmasq.d 

/etc/NetworkManager/dnsmasq.d默认为空。 因此,没有任何覆盖进入那里只是为了检查--cache-size=0意味着我们认为它意味着(而不是无限制的缓存), man dnsmasq显示:

 -c, --cache-size= Set the size of dnsmasq's cache. The default is 150 names. Setting the cache size to zero disables caching. 

因此,虽然dnsmasq 可以缓存DNS,但它并没有缓存出来。 您可以检查您的机器和各种配置目录,以检查您是否在同一页面上。

如果您看到缓存问题,可能会发生以下几种情况之一:

  • 从您的计算机上游。 一些路由器缓存。 许多企业网络将缓存DNS。 许多ISP运行的DNS服务器将使用自己的缓存。 保证网络缓存的唯一方法是使用可以手动刷新的缓存。 这就是我喜欢OpenDNS的原因。
  • 在客户端应用程序(特别是浏览器)中。 应用程序可以执行各种自己的缓存,Ubuntu对它们没有影响。 Firefox如何缓存DNS 。 如何清除Chrome的DNS缓存 。 其他浏览器(和应用程序)可能有自己的机制。
  • 我在这里刮桶,但也许你已经在Ubuntu中安装了一个非标准的DNS服务器而不是在dnsmasq中打开缓存。 有很多: nscd ,DJBDNS dnscache (又名TinyDNS), pdnspdnsd ,Bind9(及其变体),还有更多我甚至都记不住了。 这些可能会在/etc/resolv.conf中certificate(在/ etc / resolvconf /`中配置autogen该文件)。 以下显示了本地截获的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设置为LXC镜像DNS查询,但在你的情况下,它可能会做不好的缓存事情。

    如果您已完成列出的缓存,则清除每个缓存的过程会有所不同:

     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) 

Ubuntu 17.04及更高版本(18.04)

从Ubuntu 17.04开始,systemd-resolve用于DNS。 您可以像这样刷新systemd的缓存:

 sudo systemd-resolve --flush-caches 

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

就个人而言,我使用OpenDNS并使用他们的缓存检查function来强制刷新,以确保更改有效,但您不能保证他们将在48小时内为您的用户刷新。

DNS是一种缓慢的野兽。 耐心会让你保持理智。

如果您使用的是nscd:

 sudo /etc/init.d/nscd restart 

值得一提的是,它可能不是缓存它的操作系统。 每个人都喜欢缓存DNS …一些测试:

检查它是新IP还是旧IP。 大多数浏览器也会缓存DNS,因此如果您还没有重新启动Chromium,或者您可能没有看到最新版本。

 ping yourdomain.com 

将/etc/resolv.conf中的本地名称服务器切换到另一个提供商,谷歌或级别,示例:

 nameserver 8.8.8.8 nameserver 4.2.2.2 

然后再次ping。

检查以确保您的路由器不以任何forms缓存DNS。 (因路由器/固件等而异)

最后,耐心。 DNS可能需要一些时间才能在整个互联网上传播。

上面的所有答案都忘记了名称解析中的一个重要问题:通常,您请求名称解析的DNS服务器不是自己保存记录的服务器(权威服务器)。 由于每个DNS记录都带有生存时间值,这将使分辨率链中的每个DNS服务器在此值提到的秒数内执行缓存。 因此,不仅可以在您的计算机中缓存,而且名称查找的结果将被缓存在您无法控制的服务器上的某个位置。

立即通知名称记录更改的唯一解决方案是在权威名称服务器中创建/更新条目时使用TTL值0。 但这意味着对于每个名称解析,服务器都会被命中,通常这是注册商不允许的。 例如,他们可以提供您可以选择的预定义TTL值列表。

我管理不同的域名,并确保更改在权威名称服务器中得到很好的应用,我使用的是名为dnstracer的工具,可以在DNS根目录中显示每个服务器上的查找结果。

总之,即使没有任何DNS缓存解决方案,在您更改DNS记录和在PC上看到更改之间仍然存在延迟。 此延迟很大程度上取决于记录的TTL以及PC和权威名称服务器之间的DNS服务器数量。

对于ubuntu 14.04,我建议使用以下命令:

 sudo service dns-clean 

我使用以下命令刷新我的12.10 ubuntu盒子上的dns缓存,它工作得很棒。

 sudo kill -HUP $(pgrep dnsmasq) 

另一个有用的信号是SIGUSR1,它将一些统计信息转储到syslog或者来自man dnsmasq注释:

在–no-daemon模式下或启用完全日志记录(-q)时,将完成缓存内容的完整转储。

我也发现了矛盾,但是这个: https: //superuser.com/a/521562 woks for me(Ubuntu 13.10有最新的更新,没有安装特殊的网络包)。
简而言之,就这样使用它
sudo /etc/init.d/dns-clean

我特意在远程Ubuntu服务器上推荐openDNS,它减轻了很多痛苦……

怎么做? 好…

 cd /etc/dhcp sudo nano dhclient.conf 

在“请求子网掩码…”行之前插入此项

 supersede domain-name-servers 208.67.222.222,208.67.220.220; 

这将以如此快的速度重新启动接口,甚至不会丢失SSH连接

 sudo ifdown eth0 && sudo ifup eth0 

检查一下,看看你的全新openDNS是否安装正确

 cat /etc/resolv.conf