DNS
DNS协议
域名系统(Domain Name System缩写DNS,Domain Name被译为域名)是因特网的一项核心服务,它作为可以将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串
DNS的一个基本特性是使用超高速缓存。即当一个名字服务器收到有关映射的信息(主机名字到IP地址)时,它会将该信息存放在高速缓存中。这样若以后遇到相同的映射请求,就能直接使用缓存中的结果而无需通过其他服务器查询
DNS域名结构
域名系统必须要保持唯一性,为了达到唯一性的目的,因特网在命名的时候采用了层次结构的命名方法:
- 每一个域名(本文只讨论英文域名)都是一个标号序列(labels),用字母(A-Z,a-z,大小写等价)、数字(0-9)和连接符(-)组成
- 标号序列总长度不能超过255个字符,它由点号分割成一个个的标号(label)
- 每个标号应该在63个字符之内,每个标号都可以看成一个层次的域名
- 级别最低的域名写在左边,级别最高的域名写在右边,域名服务主要是基于UDP实现的,服务器的端口号为53
例如:xxx.yyy.zzz.com
从右边的com是顶级域名,到左依次是:二级域名,三级域名,四级域名
域名的分级:域名可以划分为各个子域,子域还可以继续划分为子域的子域,这样就形成了顶级域、二级域、三级域等
其中顶级域名分为:国家顶级域名、通用顶级域名、反向域名
域名服务器
域名是分层结构,域名服务器也是对应的层级结构。
有了域名结构,还需要有一个东西去解析域名,域名需要由遍及全世界的域名服务器去解析,域名服务器实际上就是装有域名系统的主机。
由高向低进行层次划分,可分为以下几大类:
分类 | 作用 |
---|---|
根域名服务器 | 最高层次的域名服务器,本地域名服务器解析不了的域名就会向其求助 |
顶级域名服务器 | 负责管理在该顶级域名服务器下注册的二级域名 |
权限域名服务器 | 负责一个区的域名解析工作 |
本地域名服务器 | 当一个主机发出DNS查询请求时,这个查询请求首先发给本地域名服务器 |
分类 作用
根域名服务器 最高层次的域名服务器,本地域名服务器解析不了的域名就会向其求助
顶级域名服务器 负责管理在该顶级域名服务器下注册的二级域名
权限域名服务器 负责一个区的域名解析工作
本地域名服务器 当一个主机发出DNS查询请求时,这个查询请求首先发给本地域名服务器
注:一个域名服务器所负责的范围,或者说有管理权限的范围,就称为区
需要注意:
- 每个层的域名上都有自己的域名服务器,最顶层的是根域名服务器
- 每一级域名服务器都知道下级域名服务器的IP地址
- 为了容灾, 每一级至少设置两个或以上的域名服务器
DNS查询过程
由于 ICANN 管理着所有的顶级域名,所以它是最高一级的域名节点,被称为根域名(root domain)。在有些场合,www.example.com 被写成www.example.com. ,即最后还会多出一个点。这个点就是根域名。
理论上,所有域名查询都必须先查询根域名,因为只有根域名才能告诉你,某个顶级域名由哪台服务器管理。事实上也确实如此,ICANN 维护着一张列表,里面记载着顶级域名和对应的托管商。
比如,我要访问www.example.com ,就必须先询问 ICANN 的根域名列表,它会告诉我.com域名由 Verisign 托管,我必须去找 Verisign,它会告诉我example.com服务器在哪里。
由于根域名列表很少变化,大多数 DNS 服务商都会提供它的缓存,所以根域名的查询事实上不是那么频繁。
保存 DNS 根区文件的服务器,就叫做 DNS 根域名服务器(root name server)。
递归查询:客户端向本地 DNS 服务器(即首选DNS服务器)发出请求后,一直处于等待状态,直到本地名称服务器返回查询结果。当客户端向本地 DNS 服务器发出请求后,本地 DNS 服务器查询本机缓存,如果有记录,则直接返回;如果没有,则本地 DNS 服务器以客户端的身份将查询请求发给根域名服务器,这个过程是递归查询过程。如果递归查询未查出结果,则开始进行迭代查询。
迭代查询:本地 DNS 服务器以客户端的身份将查询请求发给根域名服务器后,根域名服务器通过查询返回给本地 DNS 服务器 .com 顶级名称服务器的IP地址;本地DNS服务器收到 .com 顶级名称服务器的IP地址后继续向.com顶级名称服务器发出请求,顶级名称服务器收到请求后查询缓存,如果有记录则直接返回本地DNS服务器,如果没有,则返回baidu.com二级名称服务器的IP地址;本地名称服务器继续发出请求,二级名称服务器同样查找缓存返回www.baidu.com的IP地址。(最多127级域)。本地 DNS 服务器向根服务器的查询就是迭代查询。
一次完整的查询请求经过的流程: Client -->hosts文件 -->DNS Service Local Cache --> DNS Server (recursion) --> Server Cache --> iteration(迭代) --> 根–> 顶级域名DNS–>二级域名DNS…
DNS小实验
正向解析
yum -y install bind bind-untils或者yum install bind都可以
vim /etc/named.conf
listen-on port 53 { any; }
allow-query { any; }
vim /etc/named.rfc1912.zones
zone "wpc.com" IN {
type master;
file "wpc.com.zone";
};
cd /var/named
cp -p named.localhost wpc.com.zone
vim wpc.com.zone
$TTL 1D
@ IN SOA master admin.wpc.com. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS master
master A 192.168.78.100
www A 192.168.78.101
* A 192.168.78.101
ftp CNAME www
@ A 3.3.3.3
vi /etc/sysconfig/network-scripts/ifcfg-ens33
DNS1=192.168.78.100
systemctl restart network
systemctl start named
rndc reload
验证:
host wwww.wpc.com
host www.wpc.com
反向解析(用处不多,这里不做实验,有兴趣可以自己了解)
主从同步
######主机192.168.78.100#####
yum -y install bind
vim /etc/named.rfc1912.zones
zone "wpc.com" IN {
type master;
file "wpc.com.zone";
};
cd /var/named/
cp -p named.localhost wpc.com.zone
vim wpc.com.zone
$TTL 1D
@ IN SOA master admin.wpc.com. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS master
master A 192.168.78.100
www A 192.168.78.101
ftp CNAME www
* A 192.168.78.101
vim /etc/sysconfig/network-scripts/ifcfg-ens33
DNS1=192.168.78.100
DNS2=192.168.78.103
systemctl restart network
###虚拟机看一下网络是不是变到了配置1上,重新勾到ens33上###
systemctl start named
rndc reload
host验证一下
###客户机192.168.78.103###
yum -y install bind
vim /etc/named.conf
listen-on port 53 { any; }
allow-query { any; }
vim /etc/named.rfc1912.zones
zone "wpc.com" IN {
type slave;
file "slaves/run.com.zone";
masters { 192.168.78.100; };
};
systemctl start named
ls /var/named/slaves/
###到192.168.78.100这台主机里###
systemctl stop named
##回到192.168.78.103###
dig www.wpc.com