如何找到冲突DNS记录的来源?
一个简单的方法是使用在线域名工具。我最喜欢域的工具(以前是whois.sc)。我不确定他们是否可以解决冲突的DNS记录。此处以stackoverflow.com的DNS服务器为例
NS51.DOMAINCONTROL.COM NS52.DOMAINCONTROL.COM
你会想要一个给定域名的SOA(权威开始)记录,这就是你如何使用普遍可用的网路资讯查询命令行工具来完成它:
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.domaincontrol是stackoverflow.com的主名称服务器。
在输出的最后,列出了所有授权服务器,包括给定域的备份服务器。
你可以用“host”找到一个域名的命名服务器。命令:
[davidp@supernova:~]$ host -t ns stackoverflow.com stackoverflow.com name server ns51.domaincontrol.com. stackoverflow.com name server ns52.domaincontrol.com.
您可以使用whois服务。在类似UNIX的操作系统上,您可以执行以下命令。或者你也可以通过http://www.internic.net/whois.html在网上完成。
域名查询服务stackoverflow.com
您将得到以下响应。
...这里删除了文本…
域服务器列表: NS51.DOMAINCONTROL.COM NS52.DOMAINCONTROL.COM < / p >
您可以使用nslookup或dig来查找关于给定域的记录的更多信息。这可能会帮助您解决您所描述的冲突。
在* nix:
$ dig -t ns <domain name>
你应该在谷歌上搜索的词是“权威的”,而不是“权威的”。
在Linux或Mac上,你可以使用命令whois, dig, host, nslookup或其他命令。nslookup也可以在Windows上工作。
whois
dig
host
nslookup
一个例子:
$ whois stackoverflow.com [...] Domain servers in listed order: NS51.DOMAINCONTROL.COM NS52.DOMAINCONTROL.COM
至于额外学分:是的,这是可能的。
aryeh是绝对错误的,因为他的建议通常只会给你IP地址作为主机名。如果你使用dig,你必须查找NS记录,如下所示:
dig ns stackoverflow.com
请记住,这可能会询问您的本地DNS服务器,因此可能会给出错误或过时的答案,它在其缓存中。
你在你的问题中使用了单数,但通常有几个权威的名称服务器,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 &装订书(O'Reilly编辑)。源代码可在http://examples.oreilly.com/dns5/中找到
check_soa
% check_soa stackoverflow.com ns51.domaincontrol.com has serial number 2008041300 ns52.domaincontrol.com has serial number 2008041300
在这里,两个权威名称服务器具有相同的序列号。好。
不幸的是,大多数这些工具只返回实际名称服务器本身提供的NS记录。为了更准确地确定哪个域名服务器实际上负责一个域名,你必须使用“whois”并检查那里列出的域名,或者使用“dig [domain] NS @[根名称服务器]”并递归运行,直到你得到名称服务器列表……
我希望有一个简单的命令行,您可以运行它来可靠地以一致的格式获得那个结果,而不仅仅是名称服务器本身给出的结果。这对我来说的目的是能够查询大约330个域名,我管理,所以我可以确定确切的名称服务器每个域名指向(根据他们的注册商设置)。
有人知道在*nix上使用“dig”或“host”或其他命令吗?
我们已经构建了一个DNS查找工具,它在一个请求中给你域的权威域名服务器和它的通用dns记录。
例如:https://www.misk.com/tools/#dns/stackoverflow.com
我们的工具通过在根名称服务器执行实时(非缓存)dns查找来查找权威名称服务器,然后遵循名称服务器引用,直到到达权威名称服务器。这与dns解析器用于获得权威答案的逻辑相同。在每个查询中选择(并识别)一个随机的权威名称服务器,允许您通过执行多个请求来查找冲突的dns记录。
您还可以通过单击上述示例中dns查找结果底部的“权威名称服务器”来查看名称服务器委托路径。
例如:https://www.misk.com/tools/#dns/stackoverflow.com@f.root-servers.net
我发现最好的方法是总是添加+trace选项:
dig SOA +trace stackoverflow.com
它也适用于托管在不同提供者中的递归CNAME。trace隐含+norecurse,因此结果只针对您指定的域。
SOA记录出现在层次结构更上层的所有服务器上,域所有者对这些服务器没有控制权,它们实际上都指向域所有者控制下的一个权威名称服务器。
另一方面,权威服务器上的SOA记录本身并不是解析该域所严格需要的,它可能包含虚假信息(或隐藏的主服务器,或其他受限制的服务器),不应该依赖它来确定给定域的权威名称服务器。
您需要查询对顶级域具有权威的服务器,以获得给定子域的可靠SOA信息。
(关于哪个服务器是授权的,可以从根名称服务器查询哪个TLD的信息)。
当您从TLD权威服务器获得关于SOA的可靠信息时,您可以查询主名称服务器本身的权威(在gTLD名称服务器上的SOA记录中!),然后继续检查您从查询NS记录中获得的所有名称服务器,以查看在任何这些服务器上的任何其他特定记录是否存在不一致。
这在linux和dig中比在nslookup/windows中工作得更好/可靠得多。
我发现对于一些领域,上面的答案不工作。我发现的最快的方法是首先检查NS记录。如果不存在,请检查SOA记录。如果不存在,则使用dig递归解析名称并获取返回的最后一个NS记录。符合这一点的一个例子是analyticsdcs.ccs.mcafee.com.
analyticsdcs.ccs.mcafee.com.
host -t NS analyticsdcs.ccs.mcafee.com.
host -t SOA analyticsdcs.ccs.mcafee.com.
dig +trace analyticsdcs.ccs.mcafee.com. | grep -w 'IN[[:space:]]*NS' | tail -1
host analyticsdcs.ccs.mcafee.com. gtm2.mcafee.com.