找出哪个 DNS 服务器回答了您的查询

Sta*_*i42 12 domain-name-system nslookup dnsmasq dns-zone dns-lookup

我有一个看似简单的问题,但经过一番搜索却找不到确切的答案:
我知道,如果我想查找某个域名的 IP 地址,请键入,例如:

nslookup google.de
Run Code Online (Sandbox Code Playgroud)

并得到

Server:     127.0.1.1
Address:    127.0.1.1#53

Non-authoritative answer:
Name:   google.de
Address: 172.217.18.3
Run Code Online (Sandbox Code Playgroud)

但是,我不知道我从哪里得到这个答案。据我所知,一开始我的解析器试图询问我的本地 DNS 服务器(在 Ubuntu dnsmasq 上),如果那个服务器没有答案,它会询问下一个服务器等等。但是我想知道到底是哪个服务器给出了答案。那可能吗?
我也试过

dig +trace www.google.com
Run Code Online (Sandbox Code Playgroud)

它提供有关已发布服务器的所有信息,但执行完全迭代查找。我基本上喜欢这样的答案,但需要正常查找。

Phi*_*ams 8

请参阅此/sf/ask/2661501/

总之,nslookup 将查询类型设置为 SOA

单线:

 nslookup -querytype=soa google.de
 nslookup -d2 -type=ANY google.de
 nslookup -d2 -type=ANY google.de 8.8.8.8
Run Code Online (Sandbox Code Playgroud)

寻找: 主名称服务器

command line> nslookup
> set querytype=soa
> google.de
Server:  google-public-dns-a.google.com
Address:  8.8.8.8

Non-authoritative answer:
google.de
    primary name server = ns2.google.com 
    responsible mail addr = dns-admin.google.com
    serial  = 160093636
    refresh = 900 (15 mins)
    retry   = 900 (15 mins)
    expire  = 1800 (30 mins)
    default TTL = 60 (1 min)
Run Code Online (Sandbox Code Playgroud)

>

编辑:

有人告诉我 SOA 记录可能不是最好的方法。它甚至可能没有正确设置。因此,NS 记录将是更好的选择:

nameserver域的服务器在哪里...

  nslookup  -type=NS google.de
Run Code Online (Sandbox Code Playgroud)

或者用很多调试信息来找到 nameserver

  nslookup -d2 -type=NS google.de
Run Code Online (Sandbox Code Playgroud)


And*_*w B 5

我想知道到底是哪个服务器给出了答案。那可能吗?

这是无法实现的。您不会在 DNS 回复的有效负载中的任何位置找到所咨询的特定权威服务器。存在用于识别回复您的特定递归服务器的CHAOS 查询,但没有这样的等价物来提取递归者从中获取数据的确切权威服务器的名称。

Phillip 链接到的 StackOverflow 问答提供了有关如何识别NS递归 DNS 响应的授权部分中存在的记录列表的说明。这是服务器的完整列表,而不是特定的服务器。即使对于您的使用来说足够了,DNS 标准也认为此信息是可选的,并且越来越少在递归响应中看到它以减少内部来源反射攻击的有效负载大小。

如果您知道区域的名称,则可以NS通过对它们的显式请求来请求完整的记录列表。这需要知道您处于该区域的顶点;对example.comNS 记录的请求将返回所需的响应,但www.example.com不会,除非www被委托给另一组服务器。在这种情况下,您别无选择,只能向后迭代,直到发现区域的顶点。

长话短说,没有可靠的短路径(即单一查询)从递归服务器获取有关所有上游权限的信息,并且无法在不控制权威服务器的情况下了解响应查询的特定权威服务器和在每台服务器上创建唯一的数据。(如果您这样做,请为此目的创建一个独特的区域,以免干扰您更敏感的生产区域转移)