本文首发于公众号:腐烂的橘子
本文梗概:
DNS(Domain Name System)是一种应用层协议,用于映射域名和 ip 地址。
为什么要做映射呢?就像可以用身份证号来对应一个人,也可以用电话对应一个人,但打招呼时我们不会说:“138xxxxxx,早上好”,而是会用名字来打招呼。同样的道理,人们在访问网站时希望用更容易被记住的域名,比如 www.baidu.com,而不是 213.22.345.33。但是对于网络设备而言,使用 ip 地址却比域名更友好,因为 ip 地址的格式更规范,更容易被机器理解。
DNS 最重要的作用是提供域名解析服务,除此之外,它的作用还有:
与 DNS 记录相关的,最常见到的就是域名解析里的 A 记录和 CNAME 记录了,如下:
DNS 记录就是 DNS 服务器内保存的信息,是一个 4 元祖:
(Name, Value, Type, TTL)
这里比较好理解,Name 是域名,Value 是 ip,Type 是记录的类型,包含上图中的 A 记录和 CNAME 记录,TTL 是过期时间,代表这条记录多久后会失效。
我们可以使用 nslookup -debug www.rottenorange.cn
来查找 www.rottenorange.cn 相关的 DNS 记录:
de@MacBook-Pro ~ % nslookup -debug www.rottenorange.cn
Server: 26.26.26.53
Address: 26.26.26.53#53
------------
QUESTIONS:
www.rottenorange.cn, type = A, class = IN
ANSWERS:
-> www.rottenorange.cn
canonical name = z1ming.github.io.
ttl = 505
-> z1ming.github.io
internet address = 185.199.110.153
ttl = 3320
-> z1ming.github.io
internet address = 185.199.109.153
ttl = 3320
-> z1ming.github.io
internet address = 185.199.108.153
ttl = 3320
-> z1ming.github.io
internet address = 185.199.111.153
ttl = 3320
AUTHORITY RECORDS:
ADDITIONAL RECORDS:
------------
Non-authoritative answer:
www.rottenorange.cn canonical name = z1ming.github.io.
Name: z1ming.github.io
Address: 185.199.110.153
Name: z1ming.github.io
Address: 185.199.109.153
Name: z1ming.github.io
Address: 185.199.108.153
Name: z1ming.github.io
Address: 185.199.111.153
可以看到我们搜到了多条 A 类型的记录,对应多个 ip 地址,以及一个权威 DNS 记录 z1ming.github.io.。
Type 枚举有:
假设你输入 www.baidu.com,如果都不命中缓存,会经历如下 4 类 DNS 服务器:
常见的攻击方式有 DDoS(Distributed Denial-of-Service)泛洪攻击和中间人攻击,不过由于 DNS 服务器都有自己的本地缓存,客户端也有自己的浏览器缓存,所以至今还没有大规模 DNS 服务瘫痪的情况。
分布式拒绝服务 (DDoS) 攻击是拒绝服务 (DoS) 攻击的一个子类。[2]Dos 是使用一个服务器攻击,DDoS 是利用多个服务器组成一个僵尸网络来攻击。它们的特点是发送大量需要密集资源的数据包从而使网络出现大量超时、甚至瘫痪的情况。
所以 DNS 的 DDoS 攻击就是僵尸网络向 DNS 服务器发送大规模分组,使得大部分 DNS 请求得不到回答,比如向根域名服务器、或顶级域名服务器发起攻击。
而中间人攻击就是攻击者截获到 DNS 请求,并返回伪造的回答,这样客户端无感知地访问到了被攻击者重定向的网站。通常这种方式难以实现,因为中间人攻击要求截获分组或控制住服务器。[3]