Jon*_*ono 240 networking dns
我刚刚为我托管的站点更新了 DNS 记录 ( ns1, ns2, ns3.myhostingcompany.com),但我仍然看到域注册商停放页面。
我想看看问题是否出在 Ubuntu 的缓存 DNS 记录上。有没有办法清除 Ubuntu 的 DNS 缓存?(如果这样的事情存在?)
Mik*_*ltz 142
从 Ubuntu 17.04 开始,systemd-resolve 用于 DNS。您可以像这样刷新 systemd 的缓存:
sudo systemd-resolve --flush-caches
Run Code Online (Sandbox Code Playgroud)
Li *_* Lo 79
看看迈克舒尔茨的回答。
默认情况下,Ubuntu 不缓存 dns 记录,因此除非您安装了 dns 缓存,否则无需清除任何内容。
DNS 记录可能被您提供商的 DNS 服务器缓存,因此如果您想检查您所做的 DNS 更改是否成功,您可以使用 dig 从您的域托管服务中查询 DNS 服务器:
dig -t a ns1.myhostingcompany.com @domain_registrar_dns_server
如果您希望 Ubuntu 开始缓存 dns,我建议pdnsd与resolvconf. nscd是越野车,不可取。
小智 70
Ubuntu 12.04 使用dnsmasq内置于network-manager,但它不缓存 dns,因此无需刷新它。这是我的一个示例行syslog来证明这一点:
dnsmasq[2980]: started, version 2.59 cache disabled
Run Code Online (Sandbox Code Playgroud)
也不需要任何配置dnsmasq。如果您使用库存设置运行,则不会缓存 dns,至于这样做,您必须按照这篇Ubuntu 文章所述进行显式设置。
如果你想刷新你的设置,你可以禁用然后启用网络或运行
sudo service network-manager restart
Run Code Online (Sandbox Code Playgroud)
这会重新启动,dnsmasq因为它内置于network-manager; 检查你syslog的证据。
如果您使用有线连接 dhcpnetwork manager将直接从您的路由器获取设置,并且您的连接将在您登录 Ubuntu 时自动建立。如果您可以通过 Web 界面访问路由器,则可以检查路由器中的设置是否正确,并在必要时重新启动它。如果这是 dns 的一般问题,您可以尝试使用 Google dns 而不是您的 isp dns,有关详细信息的更多信息请参见此处。
Oli*_*Oli 63
请注意,Ubuntu 从 17.04 开始使用 systemd-resolve,因此此答案不再适用于最近的 Ubuntu 版本。请参阅“在 Ubuntu 17.04 及更高版本 (18.04) 中刷新 DNS 缓存”
要确认一种方式或另一种方式是否dnsmasq正在缓存,请运行ps ax | grep dnsmasq并查看正在运行的命令。这是我的默认 13.10 机器的细分:
/usr/sbin/dnsmasq \ --no-resolve \ --保持在前台\ --no-hosts \ --绑定接口\ --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.
Run Code Online (Sandbox Code Playgroud)
因此,虽然dnsmasq 可以缓存 DNS,但它不会缓存开箱即用。您可以检查您的机器和各种配置目录以检查您是否在同一页面上。
如果您看到缓存问题,这可能发生在以下几个地方之一:
我在这里刮擦桶,但也许你已经在 Ubuntu 中安装了一个非标准的 DNS 服务器,而不是在dnsmasq. 有很多: nscd,DJBDNS dnscache(又名代码TinyDNS) pdns,pdnsd,BIND9(及其变种),多我都记不清。这些可能会被证明/etc/resolv.conf(使用 /etc/resolvconf/` 中的配置来自动生成该文件)。下面显示了一个本地拦截的 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
Run Code Online (Sandbox Code Playgroud)
如果您没有达到 8.8.8.8(或任何您期望的 DNS 服务器),请检查您正在点击的内容。在我的情况下,我可以看到这只是dnsmasq设置为将 DNS 查询镜像回 LXC,但在您的情况下,它可能会做坏事。
如果您已完成列出的缓存,则清除每个缓存的过程会有所不同:
sudo /etc/init.d/nscd reload # nscd
sudo /etc/init.d/named restart # bind9
Run Code Online (Sandbox Code Playgroud)在稍微相关的注释中,请参阅此内容以启用dnsmasq.
小智 40
Ubuntu 12.04 确实使用 dnsmasq 缓存 DNS(请参阅 参考资料man dnsmasq)。使用以下方法清除缓存:
sudo kill -HUP $(pgrep dnsmasq)
Run Code Online (Sandbox Code Playgroud)
Mar*_*son 15
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
Oli*_*Oli 11
就我个人而言,我会使用 OpenDNS并使用他们的缓存检查功能强制刷新以确保更改有效,但您不能保证它们会在 48 小时内为您的用户刷新。
DNS是一个缓慢的野兽。耐心会让你保持清醒。
小智 7
如果您使用的是 nscd:
sudo /etc/init.d/nscd restart
Run Code Online (Sandbox Code Playgroud)
值得一提的是,缓存它的可能不是操作系统。每个人都喜欢缓存DNS...一些测试:
检查是新IP还是旧IP。大多数浏览器也会缓存 DNS,所以如果您没有重新启动 Chromium 或其他任何东西,您可能看不到最新的。
ping yourdomain.com
Run Code Online (Sandbox Code Playgroud)
将 /etc/resolv.conf 中的本地名称服务器切换到另一个提供程序 google 或 level ,示例:
nameserver 8.8.8.8
nameserver 4.2.2.2
Run Code Online (Sandbox Code Playgroud)
然后再次ping。
检查以确保您的路由器没有以任何形式缓存 DNS。(因路由器/固件/等而异)
最后,耐心。DNS 在整个互联网上传播可能需要一些时间。
上面的所有答案都忘记了名称解析中的一件重要事情:通常您请求名称解析的 DNS 服务器不是自己保存记录的服务器(权威服务器)。由于每个 DNS 记录都带有一个生存时间值,这将迫使解析链中的每个 DNS 服务器在该值提到的秒数内进行缓存。因此,您不仅可以在您的机器中缓存,而且名称查找的结果肯定会缓存在您无法控制的服务器上的某个地方。
立即通知名称记录更改的唯一解决方案是在权威名称服务器中创建/更新条目时使用 TTL 值 0。但这意味着每次域名解析都会命中服务器,这通常是注册商所不允许的。例如,他们可以提供您可以选择的预定义 TTL 值列表。
我管理不同的域名并确保更改在权威名称服务器中得到很好的应用,我使用了一个名为的工具dnstracer,该工具可以从 DNS 根显示每个服务器上的查找结果。
总之,即使没有任何 DNS 缓存解决方案,在您更改 DNS 记录和在 PC 上看到更改之间仍然存在延迟。此延迟在很大程度上取决于记录的 TTL 以及您的 PC 和权威名称服务器之间的 DNS 服务器数量。
Ubuntu 20.10似乎有两 (2) 个 DNS 缓存:
systemd-resolvenscd使用以下命令刷新 DNS 缓存对我来说不起作用:
sudo systemd-resolve --flush-caches
Run Code Online (Sandbox Code Playgroud)
禁用/启用网络和 wifi 连接,或重新启动系统后,问题仍然存在:
nslookup,dig和其他命令有效ping不起作用所有系统配置都正常,但有些地址像是固定在某个地方。
在不同的网站上搜索后,我发现了问题:还有另一个 DNS 缓存,并且ping似乎正在使用它。
要清除第二个 DNS 缓存,只需运行:
sudo nscd -i hosts
Run Code Online (Sandbox Code Playgroud)
您可以全部完成,只需复制并粘贴到终端上即可:
sudo systemd-resolve --flush-caches
sudo nscd -i hosts
Run Code Online (Sandbox Code Playgroud)
不确定这是否有效?看看吧:
sudo systemd-resolve --statistics
sudo nscd -g
Run Code Online (Sandbox Code Playgroud)