一般情况下,用户从浏览器中输入网站域名并展现出网页内容时,域名解析过程会涉及以下4个DNS服务器:
DNS 服务器名称 | 说明 |
---|---|
本地 DNS 服务器(DNS resolver 或 Local DNS) | 一般由网络运营商提供或由其他解析商提供的公共DNS,如 DNSPod 提供得 公共解析 服务。 |
权威 DNS 服务器(authoritative nameserver) | 权威 DNS 服务器是特定域名(例如“dnspod.cn”)在域名注册商处所设置的 DNS 服务器,用于该域名本身解析记录的管理(增加、删除、修改等)。权威 DNS 服务器只对托管在自己服务下的域名进行域名解析,对于未托管的域名则拒绝访问。 |
顶级 DNS 服务器(Tld nameserver) | 顶级 DNS 服务器维护共享通用域扩展名的所有域名的信息,例如 .com 顶级 DNS 服务器包含以“.com”结尾的每个网站的信息。 |
根 DNS 服务器(Root nameserver) | 本地 DNS 服务器在本地查询不到解析结果时,则第一步会向根 DNS 服务器进行查询,根 DNS 服务器将根据该域的扩展名(.com、.xyz、cn 等),通过将本地 DNS 服务器定向到顶级 DNS 服务器进行响应。 |
若不存在缓存,那么查询路径将会是:
本地 DNS 服务器 -> 根 DNS 服务器 -> 顶级 DNS 服务器 -> 权威 DNS 服务器 -> 本地 DNS 服务器
可以使用dig +trace 来观察这个具体的流程
我们来具体说说dig 的作用,dig 可以通过查询选项来显示我们具体的内容,+noall +answer 可以用来仅显示应答部分
例如我们
dig +nocmd maoyulong.club +noall +answer
我们会得到
maoyulong.club. 30 IN A 124.222.204.174
如下信息,因为默认会做A解析,如果我们需要其他的,例如NS的解析,我们可以
dig +nocmd maoyulong.club NS +noall +answer
这个时候就会显示maoyulong.club. 对应的域名解析服务器的域名
maoyulong.club. 30 IN NS f1g1ns2.dnspod.net.
maoyulong.club. 30 IN NS f1g1ns1.dnspod.net.
如果继续查询f1g1ns2.dnspod.net.会返回SOA记录,SOA叫做起始授权机构记录,NS用于标识多台域名解析服务器,SOA记录用于在众多NS记录中标记哪一台是主服务器
对主服务器的域名进行NS查询会发现它会挂在.net的解析上面
当然这就有些套娃了,但当我们指定对club进行maoyulong.club的NS查询的结果和上述是无误的
dig @ns1.dns.nic.club maoyulong.club NS
这样可以指定域名服务器,只是胶水记录按我们的常理并不是挂在.club上面,而是.net上面
而trace选项,则可以从根服务器完整的追踪这个过程
首先我们可以看到,刚刚的NS解析上面的一些域名后面也跟了一个. 这不是什么句号,而是根域名,我们对这个域名进行查询的话
root@ubuntu-0:/# dig +nocmd . NS +short
g.root-servers.net.
h.root-servers.net.
i.root-servers.net.
j.root-servers.net.
k.root-servers.net.
l.root-servers.net.
m.root-servers.net.
a.root-servers.net.
b.root-servers.net.
c.root-servers.net.
d.root-servers.net.
e.root-servers.net.
f.root-servers.net.
便会得倒这13个根域名服务器,当然这也只是逻辑上的13个
这得益于anycast技术,使得一个ip可以对应多个服务器,通常由地理位置最近的一台提供相应,这样来减少延迟和增加DDoS防护
具体可以看:
什么是 Anycast DNS?| Anycast 如何与 DNS 配合 | Cloudflare
在此就不多赘述了
那么我们输入trace之后
dig +nocmd maoyulong.club +trace
当然这个结果是非常冗长的,如果不加short的话,也非常的符合我们的预期:
他请求了根,请求了club的服务器,请求了maoyulong.club的权威服务器
但是我们也看到了一些不一样的记录,例如DS,RRSIG,NSEC3等记录。这些也让我去尝试了解了一些DNSSEC相关的内容。DNSSEC(DNS Security Extension)—-DNS安全扩展,主要是为了解决DNS欺骗和缓存污染问题而设计的一种安全机制。
在我们上述整个查询过程中,攻击者可以假冒任何一个应答方给请求方发送一个伪造的响应
由于DNS当中存在着缓存,这种错误的记录将随着攻击者设定的TTL进行存活缓存,如果是递归服务器受到DNS欺骗那将会导致自身以及大面积的客户端缓存了错误的解析记录。DNSSEC的整个机制,之后希望有时间能实验一遍。
评论
Let us know in the comments which of their posts has resonated with you the most.