名字服务器如何处理未知的子域名?

我拥有一个域econemon.com 。 以下是DNS条目的摘录(为简洁起见,省略了一些logging):

 econemon.com. 1800 IN NS ns.stratoserver.net. econemon.com. 1800 IN NS ns2.stratoserver.net. econemon.com. 1800 IN A 85.214.92.48 

这些名称服务器是我的提供商提供的,据我所知,它们是我的域名的授权服务器。

现在,当我去问一个不存在的子域的地址logging时,它会回应我的服务器的地址,如下所示:

 $ host -t A nosuchdomain.econemon.com ns.stratoserver.net Using domain server: Name: ns.stratoserver.net Address: 81.169.163.40#53 Aliases: nosuchdomain.econemon.com has address 85.214.92.48 

当然,这正是我想要的虚拟主机等。现在,说我添加了一个条目

 econemon.com. IN NS ns.econemon.com 

并将ns.econemon.com的正确Aloggingns.econemon.com到列表中,并且该名称服务器对于某些子域实际上具有不同的Alogging,会发生什么情况?

  • 请求subdomain.econemon.com产生一个不同的地址,取决于你问哪个名称服务器? (我想会的。)
  • 如果是这样的话,如果我的DNS被closures了,这可能会回到“主服务器”,但是如何让客户端在我的名字服务器上运行?
  • 这会搞砸在客户端上吗? (大概。)

(注意:这与我的其他两个 问题有关 )

DNS查询是顺序的,从最后开始。 假设空的caching,查找MISSING.DOMAIN.COM将会像这样

  • DNS客户端将从DNS服务器请求MISSING.DOMAIN.COM。
  • DNS服务器询问MISSING.DOMAIN.COM域的“根”DNS,并获取COM域的名称服务器。
  • DNS服务器询问COM名称服务器MISSING.DOMAIN.COM,并取回DOMAIN.COM域的名称服务器。
  • DNS服务器询问MISSING.DOMAIN.COM的DOMAIN.COM名称服务器。 DOMAIN.COM名称服务器没有答案,所以它根据它的configuration报告DOMAIN.COM的地址。
  • 如果有一个NSloggingMISSING.DOMAIN.COM,它将被返回,并且原始的DNS服务器将查询下一步。 如果有“失踪”的Alogging,则会将其上的IP报告回来。

这是它的要点。 实际上,由于caching,负载平衡以及名称服务器可以通过名称来指定这一事实,因此也必须查找。

总结一下你的问题..你可以为一个域指定几个域名服务器,并用不同的信息设置它们。 答案是肯定的 ,但是你一定要小心,知道你在做什么。 您可以使用DNS来支持负载平衡,并可以使用它来支持故障切换lite 。 但是你需要小心!

编辑:在一个评论中,bortzmeyer指出了一些简单化,在他看来越界错误。 我做了调整,希望能解决这个问题。

这是其中一个“我不认为这个词意味着你认为它的意思”的情况。 您正在调用给定域“子域”内的主机logging。 他们不是。

一起回答你的问题点:

给定的名字服务器的请求将返回它认为合适的答案。 这听起来像是你build议你可以添加另一个DNS服务器作为你的“econemon.com”域名的权威,这个域名会有一些“A”logging,其他的不会。 这不是DNS的常用或推荐configuration。 您通常希望给定域名的所有DNS服务器都拥有相同的logging(除非您知道为什么要这么做,也就是说,“水平分割”DNS)。

做你所描述的事情没有一个有用的理由。 您不能影响客户端计算机parsing程序select的DNS服务器。 它不会“搞砸”caching – caching将像它应该的那样工作。 这将导致不一致的结果,这取决于客户与哪个DNS服务器通话,这通常是不好的。

一个子域名就像是一个包含“www.subdomain.example.com”之类的主机logging的“subdomain.example.com”域名。 你所说的只是域中的主机。

它看起来像你的域有一个DNS通配符logging。

 *.econemon.com. IN A 81.169.163.40 

这意味着如果一个查询没有logging,你会得到一个81.169.163.40的Alogging。 其实它比这更复杂。 如果“标签”(完全限定的域名或FQDN)有任何logging,则会禁用该标签的通配符logging。 所以,如果你有一个foo.econemon.com的MXlogging,那么查询foo.econemon.com的Alogging就什么都不会了。

通配符logging比较less见,可能会混淆某些软件系统。 我不build议使用它们。 但是,您的ISP正在使用它们,这样您就不必在每次添加子域时都打扰他们更新DNSlogging。 这就说得通了。

现在你的问题…

看起来你所问的是:“如果我有一个名称服务器与其他数据不同,会发生什么事情?

那么,如果你有2个你的ISP运行某些数据,而1个你运行不同的数据,那么有2:1的机会从你的ISP服务器获取数据。 如果DNS系统没有find第一个需要的数据,DNS系统就不会继续寻找其他域名服务器。 换句话说,如果妈妈说“不”,你不能问爸爸。

这是DNS中的一个重要概念。 DNS需要快速。 因此,从不做2个查询。

这就是为什么您应该在每个域名服务器中具有相同的确切区域数据。 (除非你有一些有趣的负载平衡scheme。)

  • 请求subdomain.econemon.com产生一个不同的地址,取决于你问哪个名称服务器? (我想会的。)

  • 如果是这样的话,如果我的DNS被closures了,这可能会回到“主服务器”,但是如何让客户端在我的名字服务器上运行?

名称服务器按随机顺序尝试。 如果第一个没有响应,DNS客户端将尝试下一个。 当所有的都被尝试客户端得到一个DNS错误。 由于每个DNS服务器发送了1个查询,但是通常我们会等待30秒(我认为)进行回复,如果有100个名称服务器,则会在客户端出错前等待50分钟。 这就是为什么我通常没有超过3个域名服务器的原因。 更多不是更好。

  • 这会搞砸在客户端上吗? (大概。)

不是真的。 该软件非常强大。 Postel的稳健性原则(“保守你所发送的,自由的接受你”)在这里发挥作用。 它有好处。 查询www.yahoo.com,www.microsoft.com和www.google.com。 你会看到,每个域名服务器根据你在世界上的位置(和其他因素)给出不同的IP地址。 如果这是混淆客户,这些网站将无法生存!