为什么我们的 DNS 记录没有传播到 Internet?

Jak*_*son 26 domain-name-system bind

我们在我们的网络上为我们的域运行名称服务器。我们使用绑定/命名。让我们调用域example.com。我最近注意到的一件事是,当我转到像http://network-tools.com这样的网站并在我们的名称服务器上定义的 URL 上运行查询时,我会立即看到更改。

例如,如果我将一个条目添加到我们的 DNS 服务器的 url滑稽.example.com然后在http://network-tools.com上查找该 url ,我会立即看到为它列出的正确外部静态 IP。

这告诉我,与example.com相关的任何 DNS 请求每次都会直接到达我们的 DNS 服务器。

我的怀疑在本周早些时候得到证实,当时我们的 DNS 服务器宕机了很短的时间。在那段时间里,如果我使用http://network-tools.com查询example.com或其任何子域,我将得到零结果。显然是因为 DNS 服务器已关闭且无法访问。

所以这让我想到了我的问题。我认为对我们的 DNS 服务器的更改应该会传播到 Internet 上的其他 DNS 服务器。这样,如果我们的 DNS 暂时关闭,互联网上的其他服务器仍然知道example.com指向的IP 地址。

我误解了这些 DNS 内容吗?像我们这样的第三方控制的 DNS 服务器是否不允许将 DNS 信息传播到网络上的其他服务器?

我应该从哪里开始调查为什么没有做出改变?我可以在我们的防火墙上看到端口 53 流量正确地进入我们的 DNS 服务器。

更新

  1. 我知道你们说不可能立即发布您的 DNS 设置,但我所知道的是:如果我在我们的 DNS 服务器上进行 DNS 更改,然后立即在http://network-tools上检查它。 com,我立即看到了变化。

  2. 如果我关闭 DNS 服务器,然后尝试使用http://network-tools.com检查任何 URL ,则该站点找不到任何 URL。但是,如果我将 DNS 服务器重新联机,突然间http://network-tools.com可以再次找到 URL...这告诉我服务器没有缓存我们的 DNS 设置。我错了吗?此外,我们的 TTL 设置目前设置为 900(15 分钟),并且我们的 DNS 服务器已经运行了一年多。所以它不像互联网上的 DNS 服务器还没有机会缓存​​它。服务器没有缓存设置的原因是因为目前 TTL 太低了吗?如果这是原因,那有点道理。

joe*_*rty 51

是的,您误解了 DNS 的工作原理。我将在这里使用一些重点,但请不要生气,因为没有任何意图。

DNS 记录不会传播。它们被缓存。

话虽如此,这里是对发生的事情的简化解释:

  1. 您创建一个新的 DNS 记录(A、CNAME 等)

  2. 远程用户(更具体地说是用户启动的进程\应用程序)尝试访问通过该 DNS 记录访问的服务(例如,一个网络浏览器试图访问在 funny.example.com 上运行的网站)

  3. 用户 DNS 客户端向其 DNS 服务器发送 DNS 查询,然后 DNS 服务器找到您的名称服务器(通常通过一系列递归 DNS 查询)并向他们询问有关 fun.example.com 的信息

  4. 您的域名服务器会给出答案

  5. 然后,用户 DNS 服务器将此信息发送给用户(更具体地说,发送给用户 DNS 客户端解析器),后者又将信息返回给进程\应用程序。此信息带有所谓的 TTL(生存时间),它告诉 DNS 客户端解析器此信息可在其 DNS 缓存(内存中)中保留多长时间,以及该信息可被视为最新且准确的时间

  6. 当 TTL 到期时,用户的 DNS 客户端解析器会刷新此信息。对相关 DNS 记录的任何新请求都需要进行新的 DNS 查找,并重复上述过程。

所以它的长短是这样的:

您的 DNS 记录不会传播。没有其他 DNS 服务器拥有您的 DNS 记录或区域的副本。DNS 客户端或服务器可能会将有关您的 DNS 记录或区域的信息(基于对您的 DNS 记录和区域的 DNS 查询)缓存到其 DNS 缓存中。此信息会被临时缓存,并且会在 TTL 到期时从其 DNS 缓存中删除。

如果您的名称服务器已关闭,则只有在其缓存中具有您的任何 DNS 记录的 DNS 客户端才能解析这些 DNS 记录,并且只能在 TTL 到期之前。此外,当 TTL 到期(需要新的 DNS 锁定)时,这些 DNS 客户端将不再能够解析您的 DNS 记录。

  • 然而,“传播”可能是正确的术语,用于将 DNS 记录从您自己的 DNS 主域名服务器推送到其他 DNS 从属域名服务器。 (2认同)

Mat*_*och 11

如果您告诉我们您的实际域名,那将很有帮助,然后我们可以参考您的实际设置来回答您的问题,并指出任何错误。

我倾向于相信http://dns.squish.net/可以快速诊断 DNS 问题。这将确切地告诉您在进行更改后问题出在哪里 - 基本上,如果您来自上游的委托是正确的,并且您的 2-3 个名称服务器都给出相同的答案,并且有人没有看到新记录,他们只需要等待他们的本地网络看到变化。如果该检查器告诉您其中一台服务器的响应与其他服务器不同,则您需要解决该问题。

您无法立即发布 DNS 更改 - 好吧,您可以立即发布它们,但是根据每个记录的 TTL 设置,世界其他地方将落后,例如,如果您设置了 86400 秒的 TTL 记录(一天)并且您进行了更改,其他人最多将看到一整天的旧记录,因为他们的本地缓存在他们的记录副本到期之前不会询问您。

我建议在任何重大 DNS 更改之前,您将 TTL 减少到 600(10 分钟),以鼓励互联网上的缓存不要长时间保留旧记录。但是一些缓存会忽略这一点,或者假设 1 天,甚至 1 周。

一个漫无边际的问题的漫无边际的答案,但希望其中有一些有用的东西。


wil*_*ley 8

是的,古老的格言“DNS 更改可能需要 24-48 小时才能通过 Internet 传播”会更准确,“DNS 更改可能会缓存在过去 86400 秒内查询过此记录的任何 DNS 服务器上。”

如果您想在您的服务器离线时确保 DNS 的冗余,您应该查看备份 DNS 服务(如在 dyndns.com 上)或创建您自己的辅助 NS。


Eva*_*son 5

Internet 上的所有 DNS 服务器都是“第 3 方控制的”(我想您可以认为根 DNS 服务器在某种程度上是 Internet 的“专有”,但也没有技术上的理由为什么可以放置您自己的私有根)。

您的 DNS 服务器在其提供的每个答案中都提供了建议的“生存时间”(TTL)。远程解析器(为客户端、客户端解析器库等执行递归解析的其他 DNS 服务器)应该在将其从缓存中丢弃之前缓存该 TTL 的答案。

如果您没有看到您对现有记录所做的更改反映在现实世界的查询中,这可能意味着您的 TTL 值足够高,以至于您没有等待足够长的时间来查看解析器中现有的答案老化在“网络”周围缓存。

服务器故障的一些背景:为什么将其称为 DNS“传播”?