这仅用于教育目的。我目前正在学习 DNS,我读过的所有资料都大致如此:
假设根本没有缓存命中,当被要求解析域名时,DNS 解析器将首先联系根名称服务器,根名称服务器将指向 TLD 名称服务器,该服务器将指向对其正在寻找的域名具有权威性的名称服务器。
现在,在我家里的笔记本电脑中,我的操作系统已预先配置为使用某些 DNS 服务器,我猜该服务器属于我的 ISP,当我使用 nslookup 查询某些内容时,我会立即得到响应。
我正在尝试使用 nslookup 模仿 DNS 解析器的行为。我该怎么做?
好的,我知道根名称服务器的域名(以及 IP 地址)。我该如何继续?
我的猜测是,DNS 解析器在联系根服务器时会要求提供记录A
,但是当我尝试执行相同的查询时,我得到:
> www.google.com e.root-servers.net
Server: e.root-servers.net
Addresses: 2001:500:a8::e
192.203.230.10
*** e.root-servers.net can't find www.google.com: No response from server
答案1
我不确定 nslookup 是否适合这个工作。“dig”可能更好。事实上,你可以用一个简单的命令来查看权威查找的整个工作过程以及 dig 的所有步骤 -
dig +trace www.google.com
如果你必须使用 nslookup,我们可以这样做 -
dig
返回 TLD 服务器的名称,即 [am].root-servers.net。(如果您不想使用 dig 或不知道这些而需要从第一原理进行操作,则这些会被硬编码到递归 DNS 服务器中,因此您需要查看它们的配置或找到可信赖的来源)
然后我们可以查询该服务器并请求 .com ns 记录,如下所示 -
nslookup -type=ns com. a.root-servers.net
(我认为你可以省略 com. 后面的 . - 结尾部分表示这是一个绝对查询,而不是相对查询)。这将返回 .com 名称服务器的列表 -
;; Truncated, retrying in TCP mode.
Server: a.root-servers.net
Address: 198.41.0.4#53
Non-authoritative answer:
*** Can't find com: No answer
Authoritative answers can be found from:
com nameserver = e.gtld-servers.net.
com nameserver = b.gtld-servers.net.
com nameserver = j.gtld-servers.net.
com nameserver = m.gtld-servers.net.
com nameserver = i.gtld-servers.net.
com nameserver = f.gtld-servers.net.
com nameserver = a.gtld-servers.net.
com nameserver = g.gtld-servers.net.
com nameserver = h.gtld-servers.net.
com nameserver = l.gtld-servers.net.
com nameserver = k.gtld-servers.net.
com nameserver = c.gtld-servers.net.
com nameserver = d.gtld-servers.net.
e.gtld-servers.net internet address = 192.12.94.30
e.gtld-servers.net has AAAA address 2001:502:1ca1::30
b.gtld-servers.net internet address = 192.33.14.30
b.gtld-servers.net has AAAA address 2001:503:231d::2:30
j.gtld-servers.net internet address = 192.48.79.30
j.gtld-servers.net has AAAA address 2001:502:7094::30
m.gtld-servers.net internet address = 192.55.83.30
m.gtld-servers.net has AAAA address 2001:501:b1f9::30
i.gtld-servers.net internet address = 192.43.172.30
i.gtld-servers.net has AAAA address 2001:503:39c1::30
f.gtld-servers.net internet address = 192.35.51.30
f.gtld-servers.net has AAAA address 2001:503:d414::30
a.gtld-servers.net internet address = 192.5.6.30
a.gtld-servers.net has AAAA address 2001:503:a83e::2:30
g.gtld-servers.net internet address = 192.42.93.30
g.gtld-servers.net has AAAA address 2001:503:eea3::30
h.gtld-servers.net internet address = 192.54.112.30
h.gtld-servers.net has AAAA address 2001:502:8cc::30
l.gtld-servers.net internet address = 192.41.162.30
l.gtld-servers.net has AAAA address 2001:500:d937::30
k.gtld-servers.net internet address = 192.52.178.30
k.gtld-servers.net has AAAA address 2001:503:d2d::30
c.gtld-servers.net internet address = 192.26.92.30
c.gtld-servers.net has AAAA address 2001:503:83eb::30
d.gtld-servers.net internet address = 192.31.80.30
d.gtld-servers.net has AAAA address 2001:500:856e::30
我们现在可以从其中一个“com”顶级域名服务器重复相同的请求来获取 googls 服务器 -
nslookup -type=ns google.com. a.gtld-servers.net
返回
Server: a.gtld-servers.net
Address: 192.5.6.30#53
Non-authoritative answer:
*** Can't find google.com.: No answer
Authoritative answers can be found from:
google.com nameserver = ns2.google.com.
google.com nameserver = ns1.google.com.
google.com nameserver = ns3.google.com.
google.com nameserver = ns4.google.com.
ns2.google.com has AAAA address 2001:4860:4802:34::a
ns2.google.com internet address = 216.239.34.10
ns1.google.com has AAAA address 2001:4860:4802:32::a
ns1.google.com internet address = 216.239.32.10
ns3.google.com has AAAA address 2001:4860:4802:36::a
ns3.google.com internet address = 216.239.36.10
ns4.google.com has AAAA address 2001:4860:4802:38::a
ns4.google.com internet address = 216.239.38.10
该记录很有趣,因为它指定了 nsX.google.com 的 IP 地址(这称为粘合记录,在这种情况下被编码到 .com 名称服务器中,因为否则会出现一个问题,即您需要 nsX.google.com 才能找到 google.com,但首先您需要找到 google.com 才能到达 nsX.google.com...)
最后,我们可以查询 Google 的一个名称服务器并获取其地址:
nslookup www.google.com. 216.239.32.10
我们的答案:
Server: 216.239.32.10
Address: 216.239.32.10#53
Name: www.google.com
Address: 142.250.66.228
Name: www.google.com
Address: 2404:6800:4006:810::2004
答案2
如果您要查询根服务器,则应查找。然后,您针对返回的 IP 地址之一com
发出另一个查找。然后,您最终可以从最终列表中查找服务器。google.com
www.google.com
您正在做的是要求根服务器递归搜索www.google.com
,这是他们没有设置的,他们只会返回顶级域名。