DNS和CDN及其相关原理
DNS
1. 什么是DNS
DNS (Domain Name System 的缩写)是一个分布式数据库,它将域名映射到与之关联的IP地址。DNS使得人们可以使用易于记忆的域名访问网站或其他网络服务,而不是使用长长的IP地址。例如,通过DNS,您可以使用”cyberzone.cloud“而不是“185.199.111.153”来访问本博客。
DNS通常由域名注册商或Internet服务提供商提供。
2. DNS查询过程
使用 dig 显示整个域名的查询过程
1 |
|
其中:
查询参数和统计
1
2
3
4
5; <<>> DiG 9.10.6 <<>> mochazz.cloud
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 7631
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 16查询内容
查询域名 **mochazz.cloud **的A记录,即address的记录
1
2;; QUESTION SECTION:
;mochazz.cloud. IN ADNS服务器的回答
询问DNS服务器后,会告诉你 mochazz.cloud 有哪些 A 记录,即哪些地址, 其中返回的600室TTL值(Time to live 的缩写),表示缓存时间,即600秒之内不用重新查询。
1
2;; ANSWER SECTION:
mochazz.cloud. 600 IN A 76.76.21.21NS记录(Name Server的缩写)
即返回哪些服务器负责管理 mochazz.cloud的DNS记录,显示结果有2条,向其中任一台查询就知道域名的地址了
1
2
3;; AUTHORITY SECTION:
mochazz.cloud. 3600 IN NS ns4.dnsv2.com.
mochazz.cloud. 3600 IN NS ns3.dnsv2.com.域名服务器地址
回复了两个域名服务器的地址
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16;; ADDITIONAL SECTION:
ns3.dnsv2.com. 169800 IN A 129.211.176.248
ns3.dnsv2.com. 169800 IN A 183.47.126.189
ns3.dnsv2.com. 169800 IN A 183.192.164.118
ns3.dnsv2.com. 169800 IN A 223.166.151.17
ns3.dnsv2.com. 169800 IN A 1.12.0.29
ns3.dnsv2.com. 169800 IN A 117.89.178.226
ns4.dnsv2.com. 169658 IN A 36.155.149.242
ns4.dnsv2.com. 169658 IN A 61.151.180.45
ns4.dnsv2.com. 169658 IN A 112.80.181.103
ns4.dnsv2.com. 169658 IN A 117.89.178.204
ns4.dnsv2.com. 169658 IN A 120.241.130.40
ns4.dnsv2.com. 169658 IN A 223.166.151.18
ns4.dnsv2.com. 169658 IN A 1.12.0.30
ns3.dnsv2.com. 158515 IN AAAA 2402:4e00:1430:1102:0:9136:2b2f:bf6b
ns4.dnsv2.com. 151805 IN AAAA 2402:4e00:1020:1264:0:9136:29bb:2f5eDNS服务器传输的信息
本机的DNS服务器是192.168.1.1,查询端口是53(DNS服务器的默认端口),以及回应长度是367字节。
1
2
3
4;; Query time: 63 msec
;; SERVER: 192.168.1.1#53(192.168.1.1)
;; WHEN: Thu Apr 27 20:51:49 CST 2023
;; MSG SIZE rcvd: 367
3. 域名的层级
通过查询内容可以知道
1 |
|
查询的是 mochazz.cloud. 而不是 mochazz.cloud
根本原因是所有域名的尾部,实际上都有一个根域名,对于所有域名都是一样的,所以平时是省略的。
带上根域名就是 mochazz.cloud.root 和 cyberzone.cloud.root
然后根域名的下一级为顶级域名(top-level domain,TLD)这里顶级域名为.cloud。 .com .cn都是顶级域名。
顶级域名的下一级就是次域名(second-level domain,缩写为SLD),这里的次域名为 .mochazz 和 .cyberzone。平时注册域名就是S LD
次域名的下一级就是主机名(host),比如www.mochazz.cloud 中主机名就是www。是用户在自己的域里面为服务器分配的名称,是用户可以任意分配的。
域名的层级结构为
1 |
|
4. 根域名服务器
DNS服务器根据域名的层级,进行分级查询。
需要明确的是,每一级域名都有自己的NS记录,NS记录指向该级域名的域名服务器。这些服务器知道下一级域名的各种记录。
所谓”分级查询”,就是从根域名开始,依次查询每一级域名的NS记录,直到查到最终的IP地址,过程大致如下
1 |
|
dig
命令的+trace
参数可以显示DNS的整个分级查询过程。
1 |
|
列出根域名
.
的所有NS记录,即所有根域名服务器根据内置的根域名服务器IP地址,DNS服务器向所有这些IP地址发出查询请求,询问
mochazz.cloud
的顶级域名服务器cloud.
的NS记录。最先回复的根域名服务器将被缓存,以后只向这台服务器发请求。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16; <<>> DiG 9.10.6 <<>> +trace www.mochazz.cloud
;; global options: +cmd
. 21219 IN NS i.root-servers.net.
. 21219 IN NS h.root-servers.net.
. 21219 IN NS d.root-servers.net.
. 21219 IN NS g.root-servers.net.
. 21219 IN NS e.root-servers.net.
. 21219 IN NS f.root-servers.net.
. 21219 IN NS l.root-servers.net.
. 21219 IN NS a.root-servers.net.
. 21219 IN NS b.root-servers.net.
. 21219 IN NS c.root-servers.net.
. 21219 IN NS k.root-servers.net.
. 21219 IN NS m.root-servers.net.
. 21219 IN NS j.root-servers.net.
;; Received 512 bytes from 192.168.1.1#53(192.168.1.1) in 58 ms显示
.cloud
域名的13条NS记录,同时返回的还有每一条记录对应的IP地址。1
2
3
4
5
6cloud. 172800 IN NS a.nic.cloud.
cloud. 172800 IN NS b.nic.cloud.
cloud. 172800 IN NS c.nic.cloud.
cloud. 172800 IN NS x.nic.cloud.
cloud. 172800 IN NS y.nic.cloud.
cloud. 172800 IN NS z.nic.cloud.DNS服务器向这些顶级域名服务器发出查询请求,询问
www.mochazz.cloud
的次级域名mochazz.cloud.
的NS记录1
2mochazz.cloud. 3600 IN NS ns3.dnsv2.com.
mochazz.cloud. 3600 IN NS ns4.dnsv2.com.上面结果显示
mochazz.cloud.
有2条NS记录,同时返回的还有每一条NS记录对应的IP地址。DNS服务器向上面这4台NS服务器查询
mochazz.cloud.
的主机名。1
2
3
4www.mochazz.cloud. 600 IN CNAME cname.vercel-dns.com.
mochazz.cloud. 86400 IN NS ns3.dnsv2.com.
mochazz.cloud. 86400 IN NS ns4.dnsv2.com.
;; Received 134 bytes from 223.166.151.18#53(ns4.dnsv2.com) in 12 ms结果显示,
www.mochazz.cloud
有1条CNAME
记录,即这CNAME 都可以访问到网站。最先返回结果的NS服务器是ns4.dnsv2.com
,IP地址为223.166.151.18
。
5. NS 记录的查询
dig
命令可以单独查看每一级域名的NS记录。
1 |
|
+short
参数可以显示简化的结果。
1 |
|
6. DNS的记录类型
域名与IP之间的对应关系,称为”记录”(record)。根据使用场景,”记录”可以分成不同的类型(type)。
常见的DNS记录类型如下:
A
:地址记录(Address),返回域名指向的IP地址。CNAME
:规范名称记录(Canonical Name),返回另一个域名,即当前查询的域名是另一个域名的跳转。NS
:域名服务器记录(Name Server),返回保存下一级域名信息的服务器地址。该记录只能设置为域名,不能设置为IP地址。MX
:邮件记录(Mail eXchange),返回接收电子邮件的服务器地址。PTR
:逆向查询记录(Pointer Record),只用于从IP地址查询域名
CNAME
记录主要用于域名的内部跳转,为服务器配置提供灵活性,用户感知不到。
比如:
1 |
|
结果显示,www.mochazz.cloud
的CNAME记录指向cname.vercel-dns.com
。也就是说,用户查询www.mochazz.cloud
的时候,实际上返回的是cname.vercel-dns.com
的IP地址。这样的好处是,变更服务器IP地址的时候,只要修改cname.vercel-dns.com
这个域名就可以了,用户的www.mochazz.cloud
域名不用修改。
由于CNAME
记录就是一个替换,所以域名一旦设置CNAME
记录以后,就不能再设置其他记录了(比如A
记录和MX
记录),这是为了防止产生冲突。举例来说,foo.com
指向bar.com
,而两个域名各有自己的MX
记录,如果两者不一致,就会产生问题。由于顶级域名通常要设置MX
记录,所以一般不允许用户对顶级域名设置CNAME
记录。
PTR
记录用于从IP地址反查域名。dig
命令的-x
参数用于查询PTR
记录。
1 |
|
上面结果显示,153.111.199.185
这台服务器的域名是cdn-185-199-111-153.github.com
。
7. 其他DNS工具
host 命令
1
2
3
4
5
6
7
8
9╰─$ host baidu.com
baidu.com has address 110.242.68.66
baidu.com has address 39.156.66.10
baidu.com mail is handled by 20 usmx01.baidu.com.
baidu.com mail is handled by 20 mx1.baidu.com.
baidu.com mail is handled by 15 mx.n.shifen.com.
baidu.com mail is handled by 20 jpmx.baidu.com.
baidu.com mail is handled by 10 mx.maillb.baidu.com.
baidu.com mail is handled by 20 mx50.baidu.com.host
命令也可以用于逆向查询,即从IP地址查询域名,等同于dig -x <ip>
。nslookup
用于互动式地查询域名记录
1
2
3
4
5
6
7
8
9╰─$ nslookup cyberzone.cloud 1 ↵
Server: 192.168.1.1
Address: 192.168.1.1#53
Non-authoritative answer:
Name: cyberzone.cloud
Address: 185.199.110.153
Name: cyberzone.cloud
Address: 185.199.111.153whois
用来查看域名的注册情况
1
whois cyberzone.cloud
CND
1. 什么是CND
CDN全称叫做“Content Delivery Network”,中文叫内容分发网络。
将源站内容分发至最接近用户的节点,使用户可就近取得所需内容,提高用户访问的响应速度和成功率。解决因分布、带宽、服务器性能带来的访问延迟问题,适用于站点加速、点播、直播等场景。
2. 原理分析
如图
通过域名解析IP分析
- 当用户点击网站页面上的内容URL,经过本地DNS系统解析,DNS 系统会最终将域名的解析权交给 CNAME 指向的 CDN 专用 DNS 服务器。
- CDN 的 DNS 服务器将 CDN 的全局负载均衡设备 IP 地址返回用户。
- 用户向 CDN 的全局负载均衡设备发起内容 URL 访问请求。
- CDN 全局负载均衡设备根据用户 IP 地址,以及用户请求的内容URL,选择一台用户所属区域的区域负载均衡设备,告诉用户向这台设备发起请求。
- 基于以下这些条件的综合分析之后,区域负载均衡设备会向全局负载均衡设备返回一台缓存服务器的IP地址:
- 根据用户 IP 地址,判断哪一台服务器距用户最近;
- 根据用户所请求的 URL 中携带的内容名称,判断哪一台服务器上有用户所需内容;
- 查询各个服务器当前的负载情况,判断哪一台服务器尚有服务能力。
- 全局负载均衡设备把服务器的 IP 地址返回给用户。
- 用户向缓存服务器发起请求,缓存服务器响应用户请求,将用户所需内容传送到用户终端。如果这台缓存服务器上并没有用户想要的内容,而区域均衡设备依然将它分配给了用户,那么这台服务器就要向它的上一级缓存服务器请求内容,直至追溯到网站的源服务器将内容拉到本地。
DNS 服务器根据用户 IP 地址,将域名解析成相应节点的缓存服务器IP地址,实现用户就近访问。使用 CDN 服务的网站,只需将其域名解析权交给 CDN 的全局负载均衡(GSLB)设备,将需要分发的内容注入 CDN,就可以实现内容加速了。
rDNS
1. 反向DNS
在计算机网络中,反向DNS查找或反向DNS解析(rDNS)是查询域名系统(DNS)来确定IP地址关联的域名的技术——通常的“转发”的反向DNS查找域名的IP地址。反向DNS查询的过程使用PTR记录。互联网的反向DNS数据库植根于 .arpa 顶级域名。
反向DNS(rDNS或RDNS)是从IP地址查找域名的域名服务(DNS)。 常规的DNS请求将解析给定域名的IP地址; 因此名称为“reverse”。
2. rDNS的作用
rDNS主要用于确保邮件交换记录的有效性,用于拦截邮件服务系统中的垃圾邮件。
一般情况下,垃圾邮件发送者使用动态分配的 IP 地址或者没有注册域名的 IP 地址来发送垃圾邮件,通过反向解析可以判断邮件的合法性。当邮件服务器收到邮件时,邮件服务器会查看邮件由哪个 IP 地址发出,然后根据这个 IP 地址进行反向解析,如果反向解析得到的域名与发送方邮件的域名不一致则认为邮件发送者不是从真正的邮件服务器发出,则可以拒绝接收此邮件。
比如当 [email protected]
收到一份来自 [email protected]
的邮件时,qq邮件服务器会查看邮件来源的 IP,根据 IP 进行反向解析,如果解析到的域名和 163.com
一致,则接收邮件,否则认为邮件来源 IP 伪造成了163服务器 IP ,则拒绝这封邮件。
3. rDNS过程
由于正向 DNS 将主机名映射到 IP 地址,因此 rDNS 将服务器 IP 地址映射回主机名。使用 rDNS,可以将 IP 地址反转,然后将in-addr.arpa
添加到末尾。这种 IP 地址进行反向 DNS 解析的方法用到的是 PTR 记录。
使用dig 执行rDNS
查找
1 |
|
1 |
|
可以在ANSWER SECTION看到完整的rDNS PTR记录的IP,返回子域名cdn-185-199-110-153.github.com.
:
1 |
|
相关的安全攻击
1. 域前置(Domain Fronting)
1.1 什么是域前置
Domain Fronting,中文译名 “域前置” 或 “域名前置”,是一种用于隐藏真实C2服务器IP且同时能伪装为与高信誉域名通信的技术,多用于木马受控端和控制端之间的隐蔽通信。
这种举动在被封锁的站点与无害站点为同一个大型服务提供商时较为可行,例如由内容分发网络提供的服务。此时审查者通常很难区分被伪装流量与合法流量的特点,迫使审查者选择放行所有看似无害的流量,或者选择彻底封锁此域的流量。而彻底封锁可能带来显著的附加损害。
简言之,利用该技术,可以让受控端以为程序是在和一个高信誉域名通信,但实际上却是在和C2服务器进行通信。
1.2 技术原理
Domain Fronting 的技术原理图如下
Domain Fronting 的核心技术是 CDN
。
一般情况下,1台 CDN 会同时负责多个网站的加速服务。
如果访问的两个网站(a.com 和 b.com)都是由同1台 CDN 服务器(1.1.1.1)进行加速服务,那么当使用浏览器访问这两个域名时,浏览器实际上访问的都是 1.1.1.1 这台 CDN 服务器,但是在浏览器访问的域名有可能是 a.com 也可能是 b.com,所以必须要在和 1.1.1.1 这台 CDN 服务器通信时,在 HTTP 请求包的 Host 头中填入需要访问的域名,CDN 才会知道访问的是哪一个域名后才能返回对应域名的内容。
参考链接
https://zhuanlan.zhihu.com/p/113037678
https://www.anquanke.com/post/id/195011
https://zh.wikipedia.org/zh-sg/域前置
https://www.cnblogs.com/ConfusedChenSir/articles/16201785.html