it-swarm.cn

如何清除DNS缓存?

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

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

189
Jono

18.04及以上

看看 Mike Shultz的回答

对于11.10及以下

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

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

Dig -t a ns1.myhostingcompany.com @domain_registrar_dns_server

你希望Ubuntu开始缓存dns我建议将pdnsdresolvconf一起安装。 nscd是错误的,不可取。

63
Li Lo

12.04

Ubuntu 12.04使用 dnsmasq 内置于network-manager,但它没有缓存dns所以不需要刷新它。以下是我的syslog中的一个示例行来证明这一点:

dnsmasq[2980]: started, version 2.59 cache disabled

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

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

Sudo service network-manager restart

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

如果您使用dhcp network manager的有线连接,将直接从您的路由器获取设置,并在您登录Ubuntu时自动建立连接。如果您可以通过Web界面访问路由器,则可以检查路由器中的设置是否正确,如果需要,可以重新启动它。如果这是dns的一般问题,你可以尝试使用谷歌dns而不是你的isp dns,更多信息是 详见这里

70
user76204

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

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

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

/ usr/sbin/dnsmasq\
  -  no-resolv\
  -  keke-in-foreground\
  -  no-hosts\
  - 绑定-interfaces\
  -  pid-file =/var/run/NetworkManager/dnsmasq.pid\
  -  liste-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运行的DNS服务器将使用自己的缓存。保证网络缓存的唯一方法是使用可以手动刷新的缓存。这就是我喜欢OpenDNS的原因。
  • 在客户端应用程序(特别是浏览器)中。应用程序可以执行各种自己的缓存,Ubuntu对它们没有影响。 Firefox如何缓存DNS如何清除Chrome的DNS缓存 。其他浏览器(和应用程序)可能有自己的机制。
  • 我在这里刮桶但是你可能在Ubuntu中安装了一个非标准的DNS服务器,而不是在dnsmasq中打开缓存。有很多:nscd,DJBDNS dnscache(又名TinyDNS),pdnspdnsd,Bind9(和它的变种),还有更多我甚至不记得了。这些将可能/etc/resolv.conf中得到证明(在/ 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设置为镜像DNS查询回LXC,但在你的情况下,它可能做不好的缓存事情。

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

    Sudo /etc/init.d/nscd reload    # nscd
    Sudo /etc/init.d/named restart  # bind9
    

在一个稍微相关的说明中, 请参阅此命令以启用dnsmasq中的缓存

63
Oli

Ubuntu 17.04及更高版本(18.04)

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

Sudo systemd-resolve --flush-caches
57
Mike Shultz

对于12.04:

Ubuntu 12.04使用dnsmasq缓存DNS(请参阅man dnsmasq)。使用以下命令清除缓存:

Sudo kill -HUP $(pgrep dnsmasq)
40
zechariah

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

16
Mark Davidson

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

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

11
Oli

如果您使用的是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。

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

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

7
bikesandcode

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

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

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

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

5
Benoit

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

Sudo kill -HUP $(pgrep dnsmasq)

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

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

1
j0inty

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

0
Nitz

在Ubuntu 16.04上,除非我这样做,否则我无法清除缓存:

Sudo service dnsmasq restart
0
Volomike

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

怎么做?好...

cd /etc/dhcp
Sudo nano dhclient.conf

插入这个BEFORE“request subnet-mask ...”行

supersede domain-name-servers 208.67.222.222,208.67.220.220;

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

Sudo ifdown eth0 && Sudo ifup eth0

选中此项以查看您的全新openDNS是否已正确安装

cat /etc/resolv.conf
0
D.Snap