为什么我们的DNS记录不传播到互联网上?


22

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

例如,如果我在DNS服务器中添加了一个URL条目,网址为funny.example.com,然后在http://network-tools.com上查找了该URL ,我会立即看到为其列出的正确的外部静态IP。

就是说,每次与example.com相关的任何DNS请求都直接发送到我们的DNS服务器。

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

因此,这使我想到了问题。我认为对我们的DNS服务器的更改应该在互联网上传播到其他DNS服务器。这样,如果我们的DNS暂时关闭,Internet上的其他服务器仍会知道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服务器已经运行了一年多。因此,它不像Internet上的DNS服务器还没有机会对其进行缓存。是因为目前TTL太低而导致服务器不缓存设置的原因吗?如果那是原因,那有点道理。


7
由于jokerville.com是真实的注册域名,除非实际是您的域名,否则请example.com改用-官方已为此保留了该域名。
mattdm 2010年

9
network-tools.com立即看到更改的原因是它是一个网络工具,并且故意不缓存结果。它是查看您的名称服务器的工具,而不是普通的DNS客户端,因此它遵循不同的规则。
迈克尔·科恩

Answers:


42

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

不传播DNS记录。他们被告知。

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

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

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

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

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

  5. 然后,用户DNS服务器将此信息发送给用户(更具体地说,是用户DNS客户端解析器),后者又将信息返回到process \ application。该信息带有称为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不同):BGP。
bortzmeyer

11

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

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

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

我建议在进行任何主要的DNS更改之前,请将TTL减小到600(10分钟),以鼓励Internet上的缓存不要长时间保留旧记录。但是某些缓存将忽略此设置,或者假设是1天,甚至1周。

对一个漫无边际的问题的漫不经心的回答,希望其中有所帮助。


1
+1。请注意,只有那些缓存中已经具有信息且TTL尚未过期的DNS客户端才会受到更改的影响。缓存中没有数据的任何新请求将立即解决。
joeqwerty 2010年

fyi:无效
亚伦·

8

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

如果要确保服务器脱机时DNS的冗余,则应调查备用DNS服务(例如dyndns.com)或创建自己的辅助NS。


5

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

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

如果您没有看到对现有记录所做的更改反映在真实查询中,则可能意味着您的TTL值足够高,您没有等待足够长的时间就无法看到现有的答案在解析器中过期高速缓存。

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


2

可以说,当Internet上的某人(或某些计算机)想要连接到您的一台计算机时,他们会向其本地名称服务器请求一个与他们感兴趣的主机名匹配的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记录,一切就绪。


0

其他DNS服务器进行的缓存取决于分配给记录的TTL。您的情况可能是TTL太低或太高。您能给我们更多有关您的DNS配置的信息吗?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.