343

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

4

12 回答 12

443

您需要给定域名的 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.

(或Windows 上的主名称服务器)行告诉您ns51.domaincontrolstackoverflow.com的主名称服务器。

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

于 2008-09-01T15:04:19.757 回答
183

您在问题中使用了单数,但通常有多个权威名称服务器,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

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

于 2008-12-24T07:47:25.057 回答
42

在 *nix 上:

$ dig -t ns <domain name>
于 2008-09-01T15:07:48.440 回答
20

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

[davidp@supernova:~]$ host -t ns stackoverflow.com
stackoverflow.com name server ns51.domaincontrol.com.
stackoverflow.com name server ns52.domaincontrol.com.
于 2008-09-01T15:05:51.313 回答
9

我发现始终添加 +trace 选项的最佳方法是:

dig SOA +trace stackoverflow.com

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

于 2016-10-10T14:30:45.753 回答
7

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

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

一个例子:

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

至于额外的信用:是的,这是可能的。


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

dig ns stackoverflow.com

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

于 2008-09-01T15:10:24.687 回答
5

我们构建了一个dns 查找工具,可以在一个请求中为您提供域的权威名称服务器及其常见的 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

于 2013-12-30T21:21:44.193 回答
2

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

谁是stackoverflow.com

你会得到以下响应。

...此处已删除文字...

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

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

于 2008-09-01T15:06:18.880 回答
2

我发现对于某些域,上述答案不起作用。我发现最快的方法是首先检查 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.

于 2020-04-15T04:05:35.763 回答
1

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

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

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

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

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

这一切在 linux 和 dig 上都比在 nslookup/windows 下工作得更好/可靠。

于 2018-02-20T20:46:44.850 回答
0

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

  NS51.DOMAINCONTROL.COM
  NS52.DOMAINCONTROL.COM
于 2008-09-01T15:01:25.147 回答
0

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

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

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

于 2009-02-11T19:49:44.700 回答