【问题标题】:How do I find the authoritative name-server for a domain name?如何找到域名的权威名称服务器?
【发布时间】:2010-09-07 11:18:35
【问题描述】:

如何找到冲突 DNS 记录的来源?

【问题讨论】:

    标签: dns


    【解决方案1】:

    一种简单的方法是使用在线域工具。我最喜欢的是Domain Tools(以前的 whois.sc)。我不确定他们是否可以解决冲突的 DNS 记录。例如,stackoverflow.com 的 DNS 服务器是

      NS51.DOMAINCONTROL.COM
      NS52.DOMAINCONTROL.COM
    

    【讨论】:

      【解决方案2】:

      您需要给定域名的 SOA(授权开始)记录,这就是您使用普遍可用的 nslookup 命令行工具完成它的方法:

      command line> nslookup
      > set querytype=soa
      > stackoverflow.com
      Server:         217.30.180.230
      Address:        217.30.180.230#53
      
      Non-authoritative answer:
      stackoverflow.com
              origin = ns51.domaincontrol.com # ("primary name server" on Windows)
              mail addr = dns.jomax.net       # ("responsible mail addr" on Windows)
              serial = 2008041300
              refresh = 28800
              retry = 7200
              expire = 604800
              minimum = 86400
      Authoritative answers can be found from:
      stackoverflow.com       nameserver = ns52.domaincontrol.com.
      stackoverflow.com       nameserver = ns51.domaincontrol.com.
      

      origin(或 Windows 上的 primary name server)行告诉您 ns51.domaincontrol 的主要名称服务器stackoverflow.com

      在输出的末尾列出了所有权威服务器,包括给定域的备份服务器。

      【讨论】:

      • nslookup -type=soa stackoverflow.com
      • 然而,在 windows 下,我无法看到“权威答案”响应。我有 Windows 8 和 Ubuntu 12,然后相同域的相同命令可以在 Ubuntu 上正常工作,但不能在 Windows 上运行。
      • 请注意,此节目不一定显示 DNS 配置的最新更改,但对我来说,使用 dig 似乎是这样(请参阅下面的答案)
      • 没有权威答案但非权威答案就可以了是什么意思?
      • 如果你今天(2019-2月)在linux上运行nslookup -type=soa stackoverflow.com,权威部分是空的。
      【解决方案3】:

      您可以使用“host”命令找出域的名称服务器:

      [davidp@supernova:~]$ host -t ns stackoverflow.com
      stackoverflow.com name server ns51.domaincontrol.com.
      stackoverflow.com name server ns52.domaincontrol.com.
      

      【讨论】:

      • @cacho 确实如此;如果有机会,我可以补充一下。
      • 坏了,显示“502 Bad Gateway nginx/1.14.2”
      • 提供的链接已损坏。
      【解决方案4】:

      您可以使用 whois 服务。在类似 UNIX 的操作系统上,您将执行以下命令。或者,您可以在网络上通过 http://www.internic.net/whois.html 进行操作。

      whois stackoverflow.com

      你会得到以下响应。

      ...此处删除的文字...

      按列出顺序排列的域服务器: NS51.DOMAINCONTROL.COM NS52.DOMAINCONTROL.COM

      您可以使用 nslookup 或 dig 来查找有关给定域的记录的更多信息。这可能会帮助您解决您所描述的冲突。

      【讨论】:

      • 没有任何内容表明 whois 提供的信息是最新的。通常,这并不是因为人们在没有通知注册管理机构或注册服务商的情况下更新了区域文件中的 NS 记录。
      • 虽然不是对这个问题的直接回答,但“whois”很有用,因为它告诉您谁应该是某个地方的名称服务器(即使出于某种原因他们目前不是)。
      【解决方案5】:

      在 *nix 上:

      $ dig -t ns <domain name>
      

      【讨论】:

      • 他要求的是名称服务器,而不是 IPv4 地址。所以类型 (-t) 应该是 NS,而不是 A。
      • 为什么不输入 SOA @bortzmeyer?
      • 呃,因为返回的是 SOA 而不是 NS 结果?
      【解决方案6】:

      您应该在谷歌上搜索的术语是“权威”,而不是“权威”。

      在 Linux 或 Mac 上,您可以使用命令 whoisdighostnslookup 或其他几个命令。 nslookup 也可能适用于 Windows。

      一个例子:

      $ whois stackoverflow.com
      [...]
         Domain servers in listed order:
            NS51.DOMAINCONTROL.COM
            NS52.DOMAINCONTROL.COM
      

      至于额外积分:是的,有可能。


      aryeh 肯定是错误的,因为他的建议通常只会给你主机名的 IP 地址。如果使用dig,则必须查找 NS 记录,如下所示:

      dig ns stackoverflow.com
      

      请记住,这可能会询问您的本地 DNS 服务器,因此可能会给出缓存中的错误或过时的答案。

      【讨论】:

      • 这些命令等效。没有任何内容表明 whois 提供的信息是最新的。通常,这并不是因为人们在没有通知注册管理机构或注册服务商的情况下更新了区域文件中的 NS 记录。
      • 我从来没有说过它们是 ;) 您可以随心所欲地更改您区域中的 NS 记录,只要父区域没有更新,什么都不会改变。父区域的更新通常与 whois 数据的更新同时进行(至少与我的提供者一起)。
      【解决方案7】:

      您在问题中使用了单数,但通常有多个权威名称服务器,RFC 1034 建议至少两个。

      除非您的意思是“主要名称服务器”而不是“权威名称服务器”。二级域名服务器权威的。

      在 Unix 上找出域的名称服务器:

        % dig +short NS stackoverflow.com
       ns52.domaincontrol.com.
       ns51.domaincontrol.com.
      

      要找出列为主要的服务器(“主要”的概念现在非常模糊,通常没有好的答案):

      % dig +short  SOA stackoverflow.com | cut -d' ' -f1
      ns51.domaincontrol.com.
      

      为了检查名称服务器之间的差异,我更喜欢使用旧的 check_soa 工具,该工具在 Liu & Albitz “DNS & BIND”一书(O'Reilly 编辑)中有所描述。源码在http://examples.oreilly.com/dns5/

      % check_soa stackoverflow.com
      ns51.domaincontrol.com has serial number 2008041300
      ns52.domaincontrol.com has serial number 2008041300
      

      在这里,两个权威名称服务器具有相同的序列号。很好。

      【讨论】:

      • dig +short 并不总能给出我期望的答案。例如,一个站点定义为www.pressero.com,它是另一个站点的 CNAME -- dig +short SOA 只返回 CNAME 目标。
      • 如何让 NS 具有权威性?
      • @Overmind 你没有让 NS 成为“权威”。如果名称服务器被配置为对某些域具有权威性,则意味着它具有这些域的本地区域文件(通常是平面文本文件,但也可以采用不同的方式),并且它会响应对它们的查询。为了有用,它们需要在父区域中列为它们具有权威性的每个域的 NS 记录,否则默认情况下没有人会查询它们。
      • @RossPresser 答案是关于 NS/SOA 记录,我怀疑您是否为 www.pressero.com 这样做,您可能正在考虑 A 记录(这是 dig 中的默认记录类型,如果您没有指定它)。但如果需要,只需添加 tail -1 即可检索最终结果。
      • @RossPresser 如果你搜索pressero.comSOA 你会搜索dig SOA pressero.com(有或没有+short,它会给你正确的结果)而不是dig SOA www.pressero.com(有不同的结果因为有一个 CNAME,所以 dig 是一个 DNS 故障排除工具,而不是一个完整的递归域名服务器)
      【解决方案8】:

      不幸的是,这些工具中的大多数只返回实际名称服务器本身提供的 NS 记录。为了更准确地确定哪些名称服务器实际上对域负责,您必须使用“whois”并检查那里列出的域或使用“dig [domain] NS @[root name server]”并运行递归直到您获得名称服务器列表...

      我希望有一个简单的命令行,您可以运行它以可靠且一致的格式获得该结果,而不仅仅是名称服务器本身给出的结果。对我来说,这样做的目的是能够查询我管理的大约 330 个域名,以便我可以准确地确定每个域指向的名称服务器(根据他们的注册商设置)。

      有人知道在 *nix 上使用“dig”或“host”或其他东西的命令吗?

      【讨论】:

      • 简单。假设域是 example.org。首先,您需要使用 'dig +short NS org.' 找到“.org”的名称服务器。然后你查询其中一个(任何人,他们都是权威的)。让我们选择 d0.org.afilias-nst.org。您使用“dig @d0.org.afilias-nst.org NS example.org.”查询。
      • 解析器默认返回域本身列出的名称服务器这一事实是一件好事。这就是权威信息。父区域中的委托不具有权威性。
      • 指向 whois 的指针是一条红鲱鱼。 whois 名称服务器信息通常是陈旧的。权威资源是 DNS。
      • Whois 是完全任意的。您在 whois 列表中看到的值与 DNS 没有技术联系。它经常过时或完全错误。我什至会说 whois 数据几乎不应该被信任。有“薄”和“厚”注册表。两个众所周知的厚注册表是 .com 和 .net 注册表。这些注册表包含所有 DNS 数据,并且提供的 whois 响应可能是可信的。几乎其他其他注册表都是“事物”并运行自己的 whois 注册表。这些数据经常出错。
      【解决方案9】:

      我们已经构建了一个dns lookup tool,它可以在一个请求中为您提供域的权威域名服务器及其常见的 dns 记录。

      示例:https://www.misk.com/tools/#dns/stackoverflow.com

      我们的工具通过在根域名服务器上执行实时(未缓存的)dns 查找来查找权威域名服务器,然后跟踪域名服务器引用,直到我们到达权威域名服务器。这与 dns 解析器用于获取权威答案的逻辑相同。每个查询都会选择(并识别)一个随机的权威域名服务器,让您可以通过执行多个请求来找到冲突的 dns 记录。

      您还可以通过单击上例中 dns 查找结果底部的“Authoritative Nameservers”来查看名称服务器委托路径。

      例如:https://www.misk.com/tools/#dns/stackoverflow.com@f.root-servers.net

      【讨论】:

        【解决方案10】:

        我发现添加 +trace 选项的最佳方式是:

        dig SOA +trace stackoverflow.com
        

        它也适用于托管在不同提供商中的递归 CNAME。 +trace 跟踪暗示 +norecurse 因此结果仅适用于您指定的域。

        【讨论】:

        • 请注意,如果您正在运行像 dnsmasq 这样的本地 NS 服务器 +trace 将不会返回任何内容...
        • 该命令提供 53 行、3652 字节的输出,其中大部分是随机值。应该如何解释输出以确定权威名称服务器是什么?
        • 我从下往上读。 SOA 记录就是您搜索的内容。您可以 grep 让 SOA 拥有更少的数据。
        【解决方案11】:

        SOA 记录存在于层次结构更上层的所有服务器上,域所有者无法控制这些服务器,它们实际上都指向一个受域所有者控制的权威名称服务器。

        另一方面,权威服务器本身上的 SOA 记录并不是解析该域所必需的,并且可能包含虚假信息(或隐藏的主服务器或其他受限制的服务器),不应依赖于确定给定域的权威名称服务器。

        您需要查询对顶级域具有权威性的服务器,以获取给定子域的可靠 SOA 信息。

        (可以从根名称服务器查询哪个服务器对哪个 TLD 具有权威性的信息)。

        当您从 TLD 权威服务器获得有关 SOA 的可靠信息时,您可以查询主名称服务器本身的权威(即 gTLD 名称服务器上 SOA 记录中的那个!)以获取任何其他 NS 记录,然后继续检查您从查询 NS 记录中获得的所有名称服务器,以查看在任何这些服务器上是否存在任何其他特定记录的不一致。

        与 nslookup/windows 相比,这一切在 linux 和 dig 中运行得更好/更可靠。

        【讨论】:

          【解决方案12】:

          我发现对于某些域,上述答案不起作用。我发现最快的方法是首先检查 NS 记录。如果不存在,请检查 SOA 记录。如果不存在,则使用 dig 递归解析名称并获取最后返回的 NS 记录。一个适合这个的例子是analyticsdcs.ccs.mcafee.com.

          1. 检查 NS 记录

          host -t NS analyticsdcs.ccs.mcafee.com.

          1. 如果未找到 NS,请检查 SOA 记录

          host -t SOA analyticsdcs.ccs.mcafee.com.

          1. 如果既不是 NS 也不是 SOA,则执行全递归并取最后一个返回的 NS

          dig +trace analyticsdcs.ccs.mcafee.com. | grep -w 'IN[[:space:]]*NS' | tail -1

          1. 测试返回的名称服务器是否有效

          host analyticsdcs.ccs.mcafee.com. gtm2.mcafee.com.

          【讨论】:

          • 答案或附加部分的最后一个答案?
          猜你喜欢
          • 2012-04-08
          • 2013-01-10
          • 1970-01-01
          • 2012-04-30
          • 2011-05-03
          • 2013-07-12
          • 2021-07-16
          • 2012-10-20
          • 1970-01-01
          相关资源
          最近更新 更多