我刚刚更新了我托管的站点的 DNS 记录 ( ns1
, ns2
, ns3.myhostingcompany.com
),但我仍然得到域注册商停放页面。
我想看看问题是否出在 Ubuntu 的缓存 DNS 记录上。有没有办法清除 Ubuntu 的 DNS 缓存?(如果存在这样的事情?)
我刚刚更新了我托管的站点的 DNS 记录 ( ns1
, ns2
, ns3.myhostingcompany.com
),但我仍然得到域注册商停放页面。
我想看看问题是否出在 Ubuntu 的缓存 DNS 记录上。有没有办法清除 Ubuntu 的 DNS 缓存?(如果存在这样的事情?)
Ubuntu 17.04 及更高版本 (18.04)
从 Ubuntu 17.04 起,systemd-resolve 用于 DNS。您可以像这样刷新 systemd 的缓存:
对于 18.04 及更高版本
看看迈克舒尔茨的回答。
对于 11.10 及以下版本
Ubuntu 默认情况下不缓存 dns 记录,因此除非您安装了 dns 缓存,否则无需清除任何内容。
DNS 记录可能由您的提供商的 DNS 服务器缓存,因此如果您想检查您所做的 DNS 更改是否成功,您可以使用 dig 从您的域托管服务询问 DNS 服务器:
dig -t a ns1.myhostingcompany.com @domain_registrar_dns_server
如果您希望 Ubuntu 开始缓存 dns,我建议
pdnsd
与resolvconf
.nscd
是越野车,不可取。12.04
Ubuntu 12.04 使用
dnsmasq
内置的network-manager
,但它不缓存 dns,因此无需刷新它。这是我的示例行syslog
来证明这一点:也不需要任何配置
dnsmasq
。如果您使用股票设置运行,它不会缓存 dns,至于这样做,您必须按照Ubuntu 文章所述明确设置它。如果您想刷新您的设置,您可以禁用然后启用网络或运行
这会重新启动
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
并查看正在运行的命令。这是我的默认 13.10 机器的细分:/etc/NetworkManager/dnsmasq.d
默认为空。所以那里没有任何覆盖,只是检查--cache-size=0
意味着我们认为它意味着什么(而不是无限缓存),man dnsmasq
显示:因此,虽然
dnsmasq
可以缓存 DNS,但它并不是开箱即用的缓存。您可以检查您的机器和各种配置目录以检查您是否在同一页面上。如果您看到缓存问题,这可能发生在以下几个地方之一:
我在这里刮了桶,但也许你已经在 Ubuntu 中安装了一个非标准的 DNS 服务器,而不是在
dnsmasq
. 有很多:nscd
, DJBDNSdnscache
(aka TinyDNS),pdns
,pdnsd
, Bind9 (和它的变种),还有更多我什至不记得了。这些可能会在/etc/resolv.conf
(使用 /etc/resolvconf/` 中的配置自动生成该文件)得到证明。下面显示了一个本地截获的 DNS 查询:如果您没有访问 8.8.8.8(或任何您期望的 DNS 服务器),请检查您正在访问的内容。在我的情况下,我可以看到这只是为了
dnsmasq
将 DNS 查询镜像回 LXC,但在你的情况下,它可能会做坏缓存的事情。如果您已完成列出的缓存,则清除每个缓存的过程会有所不同:
在一个稍微相关的注释上,请参阅this 以启用缓存
dnsmasq
。对于 12.04:
Ubuntu 12.04 使用 dnsmasq 缓存 DNS(请参阅 参考资料
man dnsmasq
)。使用以下命令清除缓存:sudo /etc/init.d/nscd restart
http://www.ubuntugeek.com/howto-clearflush-dns-cache-in-ubuntu.html
另请注意,您可以使用 dig 检查并查看您的 DNS 更改是否已传播并查找默认 DNS 服务器以外的其他人。在这种情况下,谷歌 DNS。
dig @8.8.8.8 example.com
就个人而言,我会使用 OpenDNS并使用他们的缓存检查功能来强制刷新,以确保更改有效,但您不能保证它们会在 48 小时内为您的用户刷新。
DNS是一个缓慢的野兽。耐心会让你保持清醒。
如果您使用的是 nscd:
值得一提的是,缓存它的可能不是操作系统。每个人都喜欢缓存 DNS... 一些测试:
检查它是新IP还是旧IP。大多数浏览器也会缓存 DNS,因此如果您没有重新启动 Chromium 或其他任何您可能看不到最新版本的浏览器。
将 /etc/resolv.conf 中的本地名称服务器切换到另一个提供商 google 或 level ,例如:
然后再次ping。
检查以确保您的路由器没有以任何形式缓存 DNS。(因路由器/固件/等而异)
最后,耐心。DNS 可能需要一些时间才能在整个 Internet 中传播。
上面的所有答案都忘记了名称解析中的一件重要事情:通常,您请求名称解析的 DNS 服务器不是自己保存记录的服务器(权威服务器)。由于每个 DNS 记录都带有一个生存时间值,这将迫使解析链中的每个 DNS 服务器在该值提到的秒数内进行缓存。因此,您不仅可以缓存在您的机器中,而且名称查找的结果肯定会缓存在您无法控制的服务器上的某个位置。
立即通知名称记录更改的唯一解决方案是在权威名称服务器中创建/更新条目时使用 TTL 值 0。但这意味着对于每个名称解析,服务器都会受到攻击,这通常是注册商不允许的。例如,他们可以提供您可以选择的预定义 TTL 值列表。
我管理不同的域名,并确保更改在权威名称服务器中得到很好的应用,我使用了一个名为的工具,该工具
dnstracer
可以从 DNS 根目录显示每个服务器上的查找结果。总之,即使没有任何 DNS 缓存解决方案,在您更改 DNS 记录和在 PC 上看到更改之间仍然会有延迟。这种延迟很大程度上取决于记录的 TTL 以及您的 PC 和权威名称服务器之间的 DNS 服务器数量。
我使用以下命令刷新 12.10 ubuntu 机器上的 dns 缓存,效果非常好。
另一个有用的信号是 SIGUSR1,它将一些统计信息转储到 syslog 或来自以下内容的注释
man dnsmasq
: