我们在网络上为我们的域运行名称服务器。我们使用 bind/named。让我们将域称为示例.com。我最近注意到一件事,当我访问一个网站时http://network-tools.com并对我们的名称服务器上定义的 URL 运行查询,我立即看到变化。
例如,如果我在我们的 DNS 服务器中添加一个 URL 条目funny.example.com然后查找该网址http://network-tools.com,我立即看到了列出的正确的外部静态 IP。
这告诉我任何与示例.com每次都直接进入我们的 DNS 服务器。
本周早些时候,我们的 DNS 服务器短暂停机,证实了我的怀疑。在此期间,如果我使用http://network-tools.com查询示例.com或其任何子域,我都会得到零结果。显然这是因为 DNS 服务器已关闭,无法访问。
所以这让我想到了我的问题。我认为我们 DNS 服务器的更改应该传播到互联网上的其他 DNS 服务器。这样,如果我们的 DNS 暂时瘫痪,互联网上的其他服务器仍然知道 IP 地址示例.com指着。
我误解了 DNS 的内容吗?像我们这样的第三方控制的 DNS 服务器是否不允许将 DNS 信息传播到网络上的其他服务器?
我应该从哪里开始调查为什么更改没有生效?我可以在防火墙上看到端口 53 流量可以正常到达我们的 DNS 服务器。
更新
我知道你们说不可能立即发布 DNS 设置,但我所知道的是:如果我在我们的 DNS 服务器上进行 DNS 更改,然后立即在http://network-tools.com,我立即看到了变化。
如果我关闭 DNS 服务器,然后尝试使用以下方式检查任何 URL:http://network-tools.com,该网站无法找到任何 URL。但如果我重新将 DNS 服务器联机,突然http://network-tools.com可以再次找到 URL...这告诉我服务器没有缓存我们的 DNS 设置。我错了吗?此外,我们的 TTL 设置目前设置为 900(15 分钟),我们的 DNS 服务器已经运行了一年多。因此,互联网上的 DNS 服务器并非还没有机会缓存它。服务器不缓存设置的原因是因为目前的 TTL 太低了吗?如果这是原因,那就说得通了。
答案1
是的,您误解了 DNS 的工作原理。我在这里会强调一下,但请不要生气,因为我没有这个意图。
DNS 记录不会被传播。它们会被缓存。
话虽如此,这里是对所发生情况的简化解释:
您创建新的 DNS 记录(A、CNAME 等)
远程用户(更具体地说是用户启动的进程\应用程序)尝试访问通过该 DNS 记录访问的服务(例如,Web 浏览器尝试访问在 funny.example.com 上运行的网站)
用户 DNS 客户端向其 DNS 服务器发送 DNS 查询,然后 DNS 服务器找到您的名称服务器(通常通过一系列递归 DNS 查询)并向其询问有关 funny.example.com 的信息
您的名称服务器响应答案
然后,用户的 DNS 服务器会将此信息发送给用户(更具体地说是发送给用户的 DNS 客户端解析器),后者又将信息返回给进程\应用程序。此信息带有所谓的 TTL(生存时间),它告诉 DNS 客户端解析器此信息可以在其 DNS 缓存(内存中)中保存多长时间,以及此信息可以被视为最新且准确的时间
然后,用户的 DNS 客户端解析器会在 TTL 到期时刷新此信息。任何针对相关 DNS 记录的新请求都需要进行新的 DNS 查找,并重复上述过程。
简而言之,就是这样的:
您的 DNS 记录不会传播。其他 DNS 服务器都没有您的 DNS 记录或区域的副本。DNS 客户端或服务器可能会将有关您的 DNS 记录或区域的信息(基于对您的 DNS 记录和区域的 DNS 查询)缓存到其 DNS 缓存中。此信息是临时缓存的,当 TTL 到期时,这些信息将从其 DNS 缓存中删除。
如果您的名称服务器瘫痪,则只有缓存中含有您的 DNS 记录的 DNS 客户端才能够解析这些 DNS 记录,并且只能在 TTL 到期之前解析。此外,当 TTL 到期时(需要重新进行 DNS 查找),这些 DNS 客户端将无法再解析您的 DNS 记录。
答案2
如果您告诉我们您的实际域名,这将很有帮助,然后我们可以参考您的实际设置回答您的问题,并指出任何错误。
我倾向于相信http://dns.squish.net/用于快速诊断 DNS 问题。这将告诉您在进行更改后问题出在哪里 - 基本上,如果您从上游委派的权限正确,并且您的 2-3 个名称服务器都给出相同的答案,而某人没有看到新记录,他们只需等待其本地网络即可看到更改。如果该检查器告诉您其中一台服务器没有给出与其他服务器相同的响应,则您需要解决该问题。
您无法立即发布 DNS 更改 - 好吧,您可以立即发布它们,但世界其他地方将根据每个记录的 TTL 设置落后,因此例如如果您设置了 86400 秒(一天)的 TTL 记录并且您进行了更改,其他人将会看到旧记录长达一整天,因为他们的本地缓存在他们的记录副本过期之前不会询问您。
我建议在进行任何重大 DNS 更改之前将 TTL 减少到 600(10 分钟),以鼓励互联网上的缓存不要长时间保留旧记录。但有些缓存会忽略这一点,或假设 1 天,甚至 1 周。
对一个漫无目的的问题做出漫无目的的回答,但愿其中有些有用的东西。
答案3
是的,那句老话“DNS 更改可能需要 24-48 小时才能在互联网上传播”更准确的说法是“DNS 更改可能会缓存在过去 86400 秒内查询过此记录的任何 DNS 服务器上。”
如果您想确保服务器离线时 DNS 的冗余,您应该查看备份 DNS 服务(例如 dyndns.com)或创建自己的辅助 NS。
答案4
可以这么说,当互联网上的某个人(或某台计算机)想要连接到您的某台机器时,他们会向本地名称服务器请求与他们感兴趣的主机名匹配的 IP 地址。
所以如果你告诉别人“嘿,看看我的酷网站http://www.example.com“,另一个人的计算机将询问其本地名称服务器“嘿,www.example.com 的 IP 地址是多少?”
假设本地名称服务器之前从未查询过该问题的答案,它将要求根名称服务器找出哪些服务器负责查找“.com”。当它得到答案时,它将询问这些服务器哪些服务器负责查找“example.com”。当它得到答案时,它将向这些服务器询问“www.example.com”的 IP 地址。
当 example.com 的服务器响应 www.example.com 的 IP 地址时,它们还会向发出请求的名称服务器提示它应该记住这个问题的答案多长时间。这个提示称为“TTL”,即“生存时间”,以秒为单位。不能保证任何服务器都会注意 TTL - 一些名称服务器可能配置为从不记住查询的答案,并且即使每秒被询问几次,也会始终重复该过程。其他名称服务器可能配置为长时间保留答案,即使您建议仅将数据保留很短时间,这可能是因为他们想最大限度地减少网络流量。TTL 只是一种建议,而不是要求或保证。
对你的问题的字面答案是 - 为什么你的 DNS 记录没有传播到互联网上 - 是他们没有这样做,因为他们不应该这样做。
此外,如果您使用专门用于研究或调试 DNS 信息的网站查看自己的 DNS 信息,那么无论您的 TTL 建议是什么,该网站很可能不会长时间缓存数据,或者根本不缓存数据,因为该网站的目标可能是提供有关 DNS 系统当前信息的信息,而不是 5 秒、50 秒或 500 秒前的信息。这就是为什么您的更改会立即反映出来,也是为什么在您断开名称服务器连接后服务会立即停止工作的原因。
我怀疑您潜在的问题可能是“我该如何设置,以便如果我的 DNS 服务器重新启动或其硬盘坏了,互联网上的其他人仍然能够看到我的网页?”
这个问题的答案是为您的域设置多个名称服务器,并让它们在不同的机器上运行 - 理想情况下,不仅仅是不同的物理计算机,而是具有不同的网络连接,甚至可能位于不同的城市、州、国家或大洲。大多数这些名称服务器将设置为“从属”,这意味着它们会向“主”名称服务器寻求信息,然后将该信息重复给任何向它们索要数据的人。
因此,在您与域名注册商的 WHOIS 数据中,您可以为您的域名配置四个名称服务器:
ns1.example.com ns2.example.com ns1.otherguy.com ns2.otherguy.com
其中 ns1.example.com 是您当前的 DNS 服务器。ns2.example.com 可能是您公司/组织中的另一台机器 - 理想情况下不要与 ns1.example.com 位于同一子网或同一服务器机架中(或在同一个人的办公桌下)。
ns1.example.com 将被视为“主”服务器,当您想要更改 DNS 时,您将在该机器上进行更改。
ns2.example.com 将被配置为“从属”服务器,它仅复制您在 ns1.example.com 上设置的任何数据 - 但外界并不关心主/从区别,ns2.example.com 将被视为与 ns1.example.com 一样“官方”。
ns1.otherguy.com 和 ns2.otherguy.com 是安装在其他地方的机器 - 也许您与另一个组织的朋友/同事商量好为彼此运行名称服务器,或者您与 dyndns.com 或 everydns.net 或任何其他免费或商业 DNS 提供商合作。无论您如何解决,您都会将这些机器配置为从属机器,以便它们从 ns1.example.com(您的“主服务器”)提取 example.com 的 DNS 信息,并且它们会将该 DNS 信息提供给互联网上任何请求该信息的机器。
一旦您的域名注册商发布了您域名的新 NS 记录(这应该是即时的),那么当互联网上有人询问哪个域名服务器处理“example.com”时,他们会得到四个答案 -
ns1.example.com, ns2.example.com, ns1.otherguy.com, ns2.otherguy.com
根据对方的名称服务器的设置方式,它可能会将这四个服务器视为一个列表,并一次询问它们如何访问“www.example.com” - 或者它可能同时向所有四个服务器询问相同的问题,然后从最先回答的机器中获取答案。无论哪种方式,如果 ns1.example.com 因硬盘坏了或您决定重新启动等原因而关闭,那么其他 3 台机器将可以代替回答该问题,并且您的网站将继续可见。
解决此问题的最简单方法是与 DNS 服务提供商签约,由他们为您的域名处理 DNS - 价格从免费到每月数千美元(甚至可能是数万或数十万美元)不等,具体取决于您想要的服务级别。您可以每年花费 30 美元左右获得相当可靠的服务。免费服务并不差,因此具有相当好的性价比,但如果您依靠网站赚钱,您应该能够拿出 30 美元来购买一年的 DNS。
然后,按照 DNS 服务提供商的指示在您的域名注册商处更改 NS 记录,一切就绪。