Answers:
Ubuntu默认情况下不缓存dns记录,因此除非您已安装dns缓存,否则没有任何要清除的内容。
DNS记录可能由提供商的DNS服务器缓存,因此,如果您要检查所做的DNS更改是否成功,可以使用dig从域托管服务中查询DNS服务器:
dig -t a ns1.myhostingcompany.com @domain_registrar_dns_server
如果您希望Ubuntu开始缓存dns,建议pdnsd
与一起安装resolvconf
。nscd
是越野车,不建议这样做。
从Ubuntu 17.04起,systemd-resolve用于DNS。您可以像这样刷新systemd的缓存:
sudo systemd-resolve --flush-caches
sudo systemd-resolve --statistics
systemctl restart systemd-resolved.service
在18.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
;中。检查您syslog
的证据。
如果您通过dhcp使用有线连接,network manager
将直接从路由器获取设置,并且在登录Ubuntu时将自动建立连接。如果可以通过Web界面访问路由器,则可以检查路由器中的设置是否正确,并在必要时重新启动。如果dns普遍存在问题,则可以尝试使用Google dns代替isp dns,有关更多信息,请参见此处。
sudo service network-manager restart
与Debian帮了我
请注意,Ubuntu从17.04起使用systemd-resolve,因此该答案不再适用于最新的Ubuntu版本。请参阅“ 在Ubuntu 17.04及更高版本(18.04)中刷新DNS缓存 ”
要确认一种方式或另一种方式是否dnsmasq
缓存,请运行ps ax | grep dnsmasq
并查看running命令。这是我的默认13.10计算机的细分:
/ usr / sbin / dnsmasq \ --no-resolv \ -保持前景\ -无主机\ --bind-interfaces \ --pid-file = / var / run / NetworkManager / dnsmasq.pid \ --listen-address = 127.0.1.1 \ --conf文件= / var / run / NetworkManager / dnsmasq.conf \ --cache大小= 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,但它并没有缓存。您可以检查您的计算机和各种配置目录,以检查您是否在同一页面上。
如果您看到缓存问题,则可能在以下几个地方之一发生:
我在这里忙个不停,但也许您已经在Ubuntu中安装了非标准DNS服务器,而不是在中打开了缓存dnsmasq
。有很多: nscd
,DJBDNS dnscache
(又名代码TinyDNS) pdns
,pdnsd
,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
为了向LXC镜像DNS查询而已,但就您而言,它可能在做不好的高速缓存操作。
如果已完成列出的缓存,则清除每个缓存的过程会有所不同:
sudo /etc/init.d/nscd reload # nscd
sudo /etc/init.d/named restart # bind9
略有相关的注释,请参见此处启用缓存dnsmasq
。
Ubuntu 12.04确实使用dnsmasq缓存DNS(请参阅参考资料man dnsmasq
)。使用以下命令清除缓存:
sudo kill -HUP $(pgrep dnsmasq)
sudo killall -HUP dnsmasq
呢?
pkill
代替kill
和pgrep
sudo /etc/init.d/nscd restart
http://www.ubuntugeek.com/howto-clearflush-dns-cache-in-ubuntu.html
另外,请注意,您可以使用dig并查找默认DNS服务器以外的其他对象来检查DNS更改是否已传播。在这种情况下,google DNS。
dig @8.8.8.8 example.com
如果您使用的是nscd:
sudo /etc/init.d/nscd restart
值得一提的是,可能不是操作系统对其进行缓存。每个人都喜欢缓存DNS ...一些测试:
检查它是新的还是旧的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上传播。
以上所有答案都忘记了名称解析中的一件事:通常,您请求名称解析的DNS服务器不是拥有记录本身的DNS服务器(权威服务器)。由于每个DNS记录都带有一个“生存时间”值,该值将使解析链中的每个DNS服务器必须在此值提及的秒数内进行缓存。因此,不仅您可以缓存在计算机中,而且名称查找的结果肯定会缓存在不受您控制的服务器上的某个位置。
要立即收到名称记录更改通知的唯一解决方案是在权威名称服务器中创建/更新条目时使用TTL值0。但这意味着对于每个名称解析,服务器都会被命中,通常这是注册服务商不允许的。例如,它们可以提供可供选择的预定义TTL值列表。
我管理着不同的域名,并确保所做的更改能在权威名称服务器中得到很好的应用,我正在使用一种名为的工具dnstracer
,该工具可以显示来自DNS根目录的每台服务器上的查找结果。
总之,即使没有适当的DNS缓存解决方案,从更改DNS记录到在PC上看到更改之间仍然会有延迟。该延迟在很大程度上取决于记录的TTL以及PC与权威名称服务器之间的DNS服务器数量。
我也发现矛盾,但这
对我来说是https://superuser.com/a/521562(Ubuntu 13.10具有最新更新,未安装任何特殊的网络软件包)。
简而言之,只需使用此
sudo /etc/init.d/dns-clean
我特别推荐在远程Ubuntu服务器中使用openDNS,它可以减轻很多麻烦。
怎么做?好...
cd /etc/dhcp
sudo nano dhclient.conf
在“ 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
/etc/hosts
。我只是确定我的域的旧IP地址已被缓存,但只是strace ping example.com
透露了我/etc/hosts
由于缺乏对DNS传播的耐心而忘记删除我之前添加的记录。