我刚刚更新了我托管的站点的DNS记录(ns1ns2ns3.myhostingcompany.com),但仍然可以看到域名注册机构的停车页面。

我想看看问题出在哪里Ubuntu的缓存DNS记录。
有办法清除Ubuntu的DNS缓存吗? (如果存在这样的东西?)

评论

另外,检查/ etc / hosts。我只是确定我的域的旧IP地址已被缓存,但是只有strace ping example.com透露我忘记删除我之前添加的/ etc / hosts记录,因为对DNS传播缺乏耐心。

这些答案很多都表明默认情况下禁用了缓存,但是它们也引用了旧版本。当然,它在我的机器(18.04)中似乎默认处于打开状态,下面的各种答案确实向您展示了如何刷新它,只需向下滚动

#1 楼

对于18.04及更高版本

请看Mike Shultz的答案。

对于11.10及更低版本

Ubuntu默认情况下不会缓存dns记录,除非您已经安装了dns缓存,没有任何要清除的内容。

您的提供商的DNS服务器可能会缓存DNS记录,因此,如果您要检查所做的DNS更改是否成功,可以进行询问来自您的域托管服务的DNS服务器,地址为dig:

dig -t a ns1.myhostingcompany.com @domain_registrar_dns_server

它希望Ubuntu开始缓存dns,建议与pdnsd一起安装resolvconfnscd有故障,不建议使用。

评论


关于nscd为何有错误的任何参考?今天(2012-10)还是越野车吗?

– jjmontes
2012年9月26日12:13

您能更新您的答案吗?听起来像Ubuntu 11.10+版确实可以缓存DNS记录。

– Martin Konecny
2015年2月8日在3:08

#2 楼

Ubuntu 17.04及更高版本(18.04)

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

sudo systemd-resolve --flush-caches


评论


天哪,你愿意嫁给我吗?也用18.04解决了我的问题\ o /

– NiKo
18年5月8日在17:37



在16.04 LTS上这对我不起作用-但是查看它可能已经缓存的另一种方法很有用:sudo systemd-resolve --statistics

–菲尔
18年5月10日在8:24

不适用于18.04

– LnxSlck
19年4月24日在9:53

对我来说,systemctl restart systemd-resolved.service也可以在18.04上运行。

–贾斯汀·桑恩(Justin Sane)
19年5月8日在9:04

以我为例,在18.04上,systemd-resolved服务重新启动解决了我的dns缓存问题。感谢@JustinSane的评论!

–Joël Esponde
20-4-7在7:26



#3 楼

12.04
Ubuntu 12.04使用内置在dnsmasq中的network-manager,但是它不缓存dns,因此不需要刷新它。这是我的syslog的示例行,以证明这一点:
dnsmasq[2980]: started, version 2.59 cache disabled

也不需要dnsmasq的任何配置。如果您使用的是库存设置,那么它就不会缓存dns,因此您必须按照Ubuntu这篇文章中的描述进行显式设置。
如果要刷新设置,可以先禁用然后启用联网或运行
sudo service network-manager restart

这将重新启动dnsmasq,因为它内置在network-manager中;如果您使用dhcp进行有线连接,则syslog将直接从路由器获取设置,并且登录到Ubuntu时将自动建立连接。如果可以通过Web界面访问路由器,则可以检查路由器中的设置是否正确;如果需要,可以重启路由器。
如果dns普遍存在问题,则可以尝试使用Google dns代替isp dns,有关详细信息,请参见此处。

评论


sudo service network-manager restart使用Debian为我完成了窍门

– Pierre de LESPINAY
2014年10月28日上午9:01

#4 楼

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

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

要确认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运行的DNS服务器,将使用它们自己的缓存。防止出现网络缓存的唯一方法是使用可以手动刷新的缓存。这就是为什么我喜欢OpenDNS。
在客户端应用程序(尤其是浏览器)中。应用程序可以执行各种Ubuntu不会影响的缓存。 Firefox如何缓存DNS。如何清除Chrome的DNS缓存。其他浏览器(和应用程序)可能有其自身的机制。

我在这里介绍一下问题,但也许您已在Ubuntu中安装了非标准DNS服务器,而不是在dnsmasq中打开了缓存。有很多:nscd,DJBDNS dnscache(aka TinyDNS),pdnspdnsd,Bind9(及其变体),还有更多我什至不记得了。这些可能会在/etc/resolv.conf中得到证明(使用/ etc / resolvconf /中的config自动生成该文件)。下面显示了本地拦截的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中的缓存。

评论


ps aux | grep的输出与您的输出相同,但是肯定是在我的计算机上缓存DNS。如果不是dnsmasq,那就是别的东西。证明:我在服务器上创建了一个子域,但无法ping通,主机无法访问。我在downforeveryoneorjustme.com上进行了检查,它已经启动,因此传播问题被丢弃了。不是我的路由器,也不是我的ISP,因为我使用Google的DNS 8.8.8.8。然后,我重新启动计算机(而不是路由器),然后可以到达域。我已经尝试了十几遍,然后重新启动就没有运气了。重新启动到达主机后,请先尝试。

– Matteo
2014年3月17日18:00

顺便说一句,这不是我第一次经历同样的事情。几个月前,发生了同样的事情,唯一可以到达域的方法是重新启动计算机,但是后来我有了一个较旧的Ubuntu版本。

– Matteo
2014年3月17日在18:01



@matteo浏览器?

–奥利♦
2014年3月17日19:00

不,正如我所说,我是使用ping测试的,不是(仅)浏览器。

– Matteo
2014年3月17日23:17



@matteo我添加了更多内容,但我的想法已用完。只是没有太多人可以缓存DNS了:)

–奥利♦
2014年3月18日在0:18

#5 楼

对于12.04:
Ubuntu 12.04确实使用dnsmasq缓存DNS(请参阅man dnsmasq)。使用以下命令清除缓存:
sudo kill -HUP $(pgrep dnsmasq)


评论


谢谢!您是第一个提到12.04默认缓存的人!

–塔尔卡
2012年9月13日在21:22

默认情况下,12.04不缓存dns-重新启动network-manager后检查系统日志;它会有一个显示dnsmasq从禁用缓存开始的条目。

–user76204
2012年9月14日在21:02

我不知道默认情况下是否启用了缓存,但是这个答案对我有用。

–jeyk
2014年1月7日23:45

为什么不只是sudo killall -HUP dnsmasq?

–詹姆斯·海格(James Haigh)
2014年4月20日在22:13

使用pkill代替kill和pgrep

– Robert Siemer
2014年9月9日20:45在

#6 楼

sudo /etc/init.d/nscd restart

http://www.ubuntugeek.com/howto-clearflush-dns-cache-in-ubuntu.html

此外,您还可以检查并查看是否您的DNS更改已通过挖掘传播,并查找了默认DNS服务器以外的其他人。在这种情况下,是Google DNS。

dig @8.8.8.8 example.com

评论


值得注意的是,默认情况下未安装nscd。

–可卡因
2011年1月18日在20:05

#7 楼

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

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

评论


+1我使用OpenDNS以及清除缓存非常有用。

–马克·戴维森
10年8月13日在21:38

我对OpenDNS表示怀疑。起初我对此很满意,但后来我开始变得可疑了。尽管我猜这是否可以在ISP和OpenDNS之间进行选择,但我最好选择OpenDNS,对吗?

–乔诺
2010年8月15日在20:23

我会说OpenDNS的危害较小。他们想通过您的流量获利,但仅限于域名点击不佳的情况。

–奥利♦
2010年8月15日在22:35

@Oli链接已断开。如果仍然使用它,可以更新链接吗?

–沙燕
19年9月1日在12:46

#8 楼

如果您使用的是nscd:

sudo /etc/init.d/nscd restart


值得一提的是它可能不是正在对其进行缓存的OS。每个人都喜欢缓存DNS ...一些测试:

检查它是否是新IP或旧IP。大多数浏览器也会缓存DNS,因此,如果您尚未重新启动Chromium或可能看不到最新信息的话。

ping yourdomain.com


在/ etc中切换本地名称服务器/resolv.conf到其他提供商,例如google或level,例如:

nameserver 8.8.8.8
nameserver 4.2.2.2


,然后再次ping。

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

最后,耐心等待。 DNS可能需要一些时间才能在整个Internet上传播。

评论


如果使用NetworkManager和DHCP,则DHCP租约到期时/etc/resolve.conf将被刷新,因此您必须在NetworkManager中设置一个静态ip才能使它工作更长的时间。

–拉瑟·波尔森
2010年8月13日在21:53

+1我没有意识到Firefox在缓存DNS,这很有帮助。

–wavemode
2014年12月22日18:57

+1用于将本地名称服务器切换为Google的方法

– Bibek Sharma
17年1月5日在7:37

#9 楼

上面的所有答案都忘记了名称解析中的一件重要事情:通常,您请求名称解析的DNS服务器不是自己保存记录的服务器(权威服务器)。
由于每个DNS记录都附带一个“时间到”实时值,它将迫使解析链中的每个DNS服务器在此值提及的秒数内进行缓存。
因此,不仅您可以缓存在计算机中,而且一定会缓存名称查找的结果

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

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

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

评论


当然,但是如果那是问题所在,则重新启动计算机将无法解决问题。

– Matteo
2014年3月18日14:23在

#10 楼

我使用以下命令刷新了12.10 ubuntu盒上的dns缓存,效果很好。

sudo kill -HUP $(pgrep dnsmasq)


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


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


评论


使用pkill代替kill和pgrep

– Robert Siemer
2014年9月9日20:44

#11 楼

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

sudo service dns-clean


评论


不在默认服务器上安装。仅适用于14.04及以下版本。

– R J
18年8月31日在13:58

#12 楼

在Ubuntu 16.04上,除非执行以下操作,否则无法清除缓存:

sudo service dnsmasq restart


评论


完全破坏了我的DNS,DNS_PROBE_FINISHED_BAD_CONFIG无法访问任何网站。重新启动计算机后,它修复了,并且dns刷新了。

– Philip Rego
20年5月1日在17:03



@PhilipRego一个非秘密的。错误的DNS配置与导致DNS服务重新启动无关。它与错误的DNS配置有关。重新启动计算机可能已解决了该问题-但可能还有其他问题,例如您的DNS可能已经加载一次并被卡住,进程文件上的文件损坏或其他一些因素。

– Volomike
20年5月1日在17:26

#13 楼

我也发现矛盾之处,但这是:
https://superuser.com/a/521562
对我来说很正常(Ubuntu 13.10具有最新更新,未安装任何特殊的网络软件包)。
总之,只需使用此sudo /etc/init.d/dns-clean

#14 楼

甚至
如果使用基于bind9的实用程序:
rndc flush

,或者,取决于您的基础结构
sudo rndc flush

,但是在您的主机和/或本地域名服务器中。 。