DNS
DNS(Domain Name System)是域名解析系统,的作用非常简单,就是根据域名查出对应的 IP地址
你可以把它想象成一本巨大的电话本,比如当你要访问域名www.goole.com
,,首先要通过DNS查出它的IP地址是217.160.0.201
域名
域名的形式
域名可以划分为各个子域,子域还可以继续划分为子域的子域,这样就形成了顶级域、二级域、三级域等
其中顶级域名分为:国家顶级域名、通用顶级域名、反向域名
国家顶级域名 | 中国:cn, 美国:us,英国uk… |
---|---|
通用顶级域名 | com公司企业,edu教育机构,gov政府部门,int国际组织,mil军事部门 ,net网络,org非盈利组织… |
反向域名 | arpa,用于PTR查询(IP地址转换为域名) |
域名的层次
- 根域名 :
.root
或者.
,根域名通常是省略的 - 顶级域名,如
.com
,.cn
等 - 次级域名,如
baidu.com
里的baidu
,这个是用户可以进行注册购买的 - 主机域名,比如
baike.baidu.com
里的baike
,这个是用户可分配的
域名服务器
域名需要由遍及全世界的域名服务器去解析,域名服务器实际上就是装有域名系统的主机
- 根域名服务器(
Root name server
):根域名服务器是最高层次的域名服务器。所有的根域名服务器都知道所有的顶级域名服务器的域名和IP地址。本地域名服务器解析不了的域名就会向其求助 - 顶级域名服务器(
Top Level Domain Server
):这些域名服务器负责管理在该顶级域名服务器注册的所有二级域名。当收到DNS查询请求时,就给出相应的回答(可能是最后的结果,也可能是下一步应当找的域名服务器的IP地址) - 权限域名服务器(
Authoritative name server
):一个服务器所负责管辖的(或有权限的)范围叫做区(zone)。各单位根据具体情况来划分自己管辖范围的区。但在一个区中的所有节点必须是能够连通的。每一个区设置相应的权限域名服务器,用来保存该区中的所有主机的域名到IP地址的映射。当一个权限域名服务器还不能给出最后的査询回答时,就会告诉发出查询请求的DNS客户,下一步应当找哪一个权限域名服务器。总的来说其就是负责一个区的域名解析工作。例如在图6-2(b)中,区abc.com
和区y.abc.com
各设有一个权限域名服务器 - 本地域名服务器(
Local name server
):当一台主机发出DNS查询请求时,这个查询请求报文就发送给本地域名服务器,首先在此服务器中进行ip解析。每一个互联网服务提供者ISP,或一个大学,甚至一个大学里的系,都可以拥有一个本地域名服务器。
DNS资源记录
在 DNS 服务器上,一个域名及其下级域名组成一个区域 (Zone)。一个 Zone的 相关的 DNS 信息构成一个数据库文件
下面是一条A类型的资源记录(简称为A记录):域名 www.zdns.cn
的数据为 202.173.11.10
记录一条域名信息映射关系,称之为资源记录(RR)。当我们查询域名www.zdns.cn
的时候,查询结果得到的资源记录结构体中有如下数据:
-
TTL,就是生存周期,是递归服务器会在缓存中保存该资源记录的时长
-
网络/协议类型,它的代表的标识是IN,IN就是internet,目前DNS系统主要支持的协议是IN
-
type,就是资源记录类型,一般的网站都是都是A记录(IPv4的主机地址)
-
rdata是资源记录数据,就是域名关联的信息数据
常见的资源记录类型
类型 | 编码 | 内容 |
---|---|---|
A | 1 | 将 DNS 域名映射到 IPv4 地址,基本作用是说明一个域名对应了哪些 IPv4 地址 |
NS | 2 | 权威名称服务器记录,用于说明这个区域有哪些 DNS 服务器负责解析 |
CNAME | 5 | 别名记录,主机别名对应的规范名称 |
SOA | 6 | 起始授权机构记录,NS 记录说明了有多台服务器在进行解析,但哪一个才是主服务器,NS 并没有说明,SOA 记录了说明在众多 NS 记录里哪一台才是主要的服务器 |
PTR | 12 | IP 地址反向解析,是 A 记录的逆向记录,作用是把 IP 地址解析为域名 |
MX | 15 | 邮件交换记录,指定负责接收和发送到域中的电子邮件的主机 |
TXT | 16 | 文本资源记录,用来为某个主机名或域名设置的说明 |
AAAA | 28 | 将 DNS 域名映射到 IPv6 地址,基本作用是说明一个域名对应了哪些 IPv6 地址 |
几点注意事项:
- CNAME的目标主机地址只能使用主机名,不能使用IP地址,其主机名前不能有任何其他前缀,如:
http://
等是不被允许的 - A记录优先于CNAME记录。即如果一个主机地址同时存在A记录和CNAME记录,则CNAME记录不生效
- NS记录优先于A记录,NS记录只对子域名生效
nslookup命令查IP
nslookup 域名
查IP
1 | nslookup www.baidu.com |
结果及说明:
1 | Server: 10.255.255.254 --->指定的dns服务器 |
没有指定DNS服务器,使用默认的本地DNS服务器,保存在 /etc/resolv.conf
配置文件中
1 | cat /etc/resolv.conf |
nslookup 域名 dns-server
查IP
如通过电信DNS 114.114.114.114
查询 www.baidu.com
的IP地址
1 | nslookup www.baidu.com 114.114.114.114 |
Non-authoritative answer
表示解析结果来自非权威服务器,也就是说这个结果来自缓存,并没有完全经历全部的解析过程,从某个缓存中读取的结果,这个结果存在一定的隐患,比如域名对应的IP地址已经更变
查询其他记录
直接查询返回的是A记录,我们可以指定参数,查询其他记录,比如AAAA、MX等
1 | nslookup -qt=type domain [dns-server] |
如:
1 | nslookup -qt=mx baidu.com 8.8.8.8 |
DNS解析过程
三大步骤:
高速缓存查找IP,本机的hosts文件查找IP,DNS服务器查找IP
第一步:检查浏览器缓存中是否缓存过该域名对应的IP地址
第二步:如果在浏览器缓存中没有找到IP,那么找本机的hosts文件中是否存在IP配置
- 在
Windows
系统中,hosts
文件位置在C:\Windows\System32\drivers\etc\hosts
。 - 在
Linux
或者Mac
系统中,hosts
文件在/etc/hosts
文件中。
但是这种操作系统级别的域名解析规程也被很多黑客利用,通过修改你的hosts文件里的内容把特定的域名解析到他指定的ip地址上,造成所谓的域名劫持。所以在windows7中将hosts文件设置成了readonly,防止被恶意篡改。
第三步:如果在本地无法完成域名的解析,就向本地域名解析服务系统发起域名解析的请求
本地域名系统LDNS
一般都是本地区的域名服务器,对于本地DNS
服务器地址,Windows
系统使用命令ipconfig
就可以查看,在Linux
和Mac
系统下,直接使用命令cat /etc/resolv.conf
来查看LDNS
服务地址
LDNS
总体过程总结起来就是三句话
- 从"根域名服务器"查到"一级域名服务器"的NS记录和A记录(IP地址)
- 从"一级域名服务器"查到"二级域名服务器"的NS记录和A记录(IP地址)
- 从"二级域名服务器"查出"主机名"的IP地址
DNS查询
递归查询
主机向本地域名服务器的查询一般都是采用递归查询(recursive query)
递归查询:如果主机所询问的本地域名服务器不知道被查询域名的IP地址,那么本地域名服务器就以DNS客户的身份,向其他根域名服务器继续发出查询请求报文(即替该主机继续查询),而不是让该主机自己进行下一步的查询。因此,递归查询返回的查询结果或者是所要查询的IP地址,或者是报错,表示无法查询到所需的IP地址
迭代查询
本地域名服务器向根域名服务器的查询通常是采用迭代查询(Iterative query)
迭代查询:当根域名服务器收到本地域名服务器发出的迭代查询请求报文时要么给出所要查询的IP地址,要么告诉本地域名服务器:“你下一步应当向哪一个域名服务器进行查询”
然后让本地域名服务器进行后续的查询(而不是替本地域名服务器进行后续的查询)。根域名服务器通常是把自己知道的顶级域名服务器的IP地址告诉本地域名服务器,让本地域名服务器再向顶级域名服务器查询。
顶级域名服务器在收到本地域名服务器的查询请求后,要么给出所要查询的IP地址,要么告诉本地域名服务器下一步应当向哪一个权限域名服务器进行查询,本地域名服务器就这样进行迭代查询。
最后,知道了所要解析的域名的IP地址,然后把这个结果返回给发起查询的主机。当然,本地域名服务器也可以采用递归查询,这取决于最初的查询请求报文的设置是要求使用哪一种查询方式。
由于递归查询对于被查询的域名服务器负担太大,通常采用以下模式:从请求主机到本地域名服务器的查询是递归查询,而其余的查询是迭代查询
DNS劫持
原理
本质上是利用了 ARP 欺骗原理。恶意攻击者通过 ARP 欺骗伪装成缓存服务器,将客户端的 DNS 请求返回指定的IP地址。
假设用户想要访问一个名为 www.baidu.com
的网站。当用户在浏览器中输入网址并按下回车时,操作系统会向 DNS 服务器发送一个 DNS 查询请求,以获取该网站的 IP 地址。
正常情况下,DNS服务器会返回与 www.baidu.com
对应的正确 IP 地址,然后用户的浏览器会使用该 IP 地址来建立连接并加载网站内容。
但是,在 DNS 劫持的情况下,恶意攻击者可能会干扰 DNS 查询过程。攻击者可能会修改 DNS 服务器的配置或在网络中插入恶意设备,以便在用户发出 DNS 查询请求时返回错误的 IP 地址。
例如,假设攻击者将 www.baidu.com
的 DNS 记录篡改为指向恶意网站的 IP 地址。当用户尝试访问 www.baidu.com
时,DNS 服务器返回的 IP 地址实际上是恶意网站的 IP 地址,而不是真正的www.example.com
网站的 IP 地址。
因此,用户的浏览器会被重定向到恶意网站,可能会导致用户受到钓鱼攻击或下载恶意软件。
参考: