一、概述
DNS(Domain Name System)域名系统在TCP/IP网络中提供域名与IP地址的解析服务。
1、域和域名
(1)DNS树的每个节点代表一个域,通过这些节点,对整个域名空间进行划分,成为一个层次结构。域名空间的每个域的名字,通过域名进行表示。
(2)域名:通常由一个完全合格域名(FQDN)标识。FQDN能准确表示出其相对于DNS域树根的位置,也就是节点到DNS树根的完全表述方式,从节点到树根采用反向书写,并将每个节点用”.”分隔,对于DNS域google来说,其完全正式域名(FQDN)为google.com
例:geogle为com域的子域,其表示方法为google.com,而www为google域中的子域,可以使用www.google.com表示。
注:通常情况下,FQDN有严格的命名限制,长度不能超过256字节,只允许使用字符a-z,0-9,A-Z和减号(-)。点号(.)只允许在域名标志之间或者FQDN的结尾使用,域名不区分大小。
(3)分类
域由顶层到下层,可以分为:根域、顶级域、二级域、子域。
A、DNS根域下面是顶级域,由internet域名注册授权机构管理,共有以下三种类型的顶级域:
组织域:采用3个字符的代号,表示DNS域中所包含的主要功能或活动。比如,com为商业机构组织,edu为教育机构组织,gov为政府机构组织,mail为军事机构组织,net为网络机构组织,org为非盈利性机构组织,int为国际机构组织;
B、地址域:采用两个字符的国家或地区代号。如cn为中国,kr为韩国,us为美国;
C、反向域:这是个特殊域,名字为in-addr.arpa,用于将IP地址映射到名字(反向查询);
2、区(Zone),资源记录
区是DNS名称空间的一部分,其包含了一组存储在DNS服务器上的资源记录。
使用区的概念,DNS服务器回答关于自己区中主机的查询,每个区都有自己的授权服务器。
3、主域名服务器与辅助域名服务器
当区的辅助服务器启动时,它与该区的主控服务器进行连接并启动一次区传输,区辅助服务器定期与区主控服务器通信,查看区数据是否改变。如果改变了,它就启动一次数据更新传输。
4、辅助服务器的优点:
(1)容错能力
配置辅助服务器后,在该区主服务器崩溃的情况下,客户机仍能解析该区的名称。一般把区的主服务器和区的辅助服务器安装在不同的子网上,这样如果到一个子网的连接中断,DNS客户机还能直接查询另一个子网上的名称服务器。
(2)减少广域链路的通信量
如果某个区在远程有大量的客户机,用户就可以在远程添加该区的辅助服务器,并把远程的客户机配置成先查询这些服务器,这样就能防止客户机通过慢链路通信来进行DNS查询。
(3)减轻主服务器的负载
辅助服务器可以回答该区的查询,从而减少该区主服务器必须回答的查询数。
A、DNS服务器
运行DNS服务器程序的计算机,存储DNS数据库信息。DNS服务器会尝试解析客户机的查询请求。
B、DNS缓存
DNS服务器在解析客户机请求时,如果本地没有DNS信息,则可以会询问DNS服务器,当其他域名服务器返回查询结果时,该DNS服务器将结果记录在本地的缓存中,成为DNS缓存。当下一次客户机提交相同的请求时,DNS服务器能够直接使用缓存中的DNS信息进行解析。
5、DNS查询方式:递归查询和迭代查询
(1)递归查询
递归查询是一种DNS服务器的查询模式,在该模式下DNS服务器接受到客户机请求,必须使用一个准确的查询结果回复给客户机。如果DNS服务器本地没有存储查询DNS信息,那么该服务器会查询其他服务器,并将返回的查询结果提交给客户机。
(2)迭代查询
DNS服务器另外一种查询方式为迭代查询,当客户机发送查询请求时,DNS服务器并不直接回复查询结果,而是告诉客户机另一台DNS服务器地址,客户机再向这台DNS服务器提交请求,依次循环直到返回查询的结果为止。
总结:一般情况下,从PC客户端到本地DNS服务器是属于递归查询,而DNS服务器之间的交互查询就是迭代查询。
6、正向解析与反向解析
(1)正向解析
正向解析是指域名到IP地址的解析过程。
(2)反向解析
反向解析是从地址到域名的解析过程,反向解析的作用为服务器的身份认证。
7、DNS资源记录
(1)SOA资源记录
每个区在区的开始处都包含了一个起始授权记录(startof authority record),简称SOA记录。
SOA定义了域的全局参数,进行整个域的管理设置。一个区域文件只允许存在唯一的SOA记录。
(2)NS资源记录
NS(Name Server)记录是域名服务器记录,用来指定该域名由那个DNS服务器来进行解析,每个区在区根处至少包含一个NS记录。
(3)A资源记录
地址(A)资源记录把FQDN映射到IP地址。因为有此记录,所以DNS服务器能解析FQDN域名对应的IP地址。
(4)PTR资源记录
相对于A资源记录,指针(PTR)记录把IP地址映射到FQDN。用于反向查询,通过IP地址找到域名。
(5)CNAME资源记录
别名记录(CNAME)资源记录创建特定FQDN的别名。用户可以使用CNAME记录来隐藏用户网络的实现细节,使连接的客户机无法知道真正的域名。
例:ping百度时,解析到了百度的别名服务器,百度有个cname=www.a.shifen.com.的别名。
(6)MX资源记录
邮件交换(MX)资源记录,为DNS域名指定的邮件交换服务器。
二、安装DNS
1、BIND简介
BIND全称为Berkeley Internet Name Domain(伯克利因特网名称域系统)。BIND主要有三个版本:BIND4、BIND8、BIND9
BIND8融合了许多提高效率、稳定性和安全性的技术,而BIND9增加了一些超前的理念:IPv6支持、密钥加密、多处理器支持、线程安全操作、增量区传送等等。
2、安装
[[email protected] Desktop]# rpm -ivh/mnt/Packages/ bind-9.8.2-0.17.rc1.el6_4.6.x86_64.rpm
#改包为DNS服务器的主程序包
[[email protected]]# rpm -ivh/mnt/Packages/bind-chroot-9.8.2-0.17.rc1.el6_4.6.x86_64.rpm
#提高安全性
#bind-chroot是bind的一个功能,使bind可以在一个chroot的模式下运行,也就是说,bind运行时的/(根)目录,并不是真正的/(根)目录,只是系统中的一个子目录而已。这样做的目的是为了提高安全性。因为在chroot的模式下,bind可以访问的范围仅限于这个子目录的范围里,无法进一步的提升,进入到系统的其他目录中。
[[email protected] Desktop]# rpm -ivh/mnt/Packages/bind-utils-9.8.2-0.17.rc1.el6_4.6.x86_64.rpm
#该包为客户端工具,默认安装,用于搜索域名指令。
3、DNS服务器相关配置文件
/etc/named.conf是BIND的核心配置文件,它包含了BIND的基本配置,但其并不包括区域数据
4、启动服务
(1)要先启动named服务,否则/var/named/chroot/目录下的文件不会被挂载上
[[email protected] Desktop]# /etc/init.d/namedstart
[[email protected] Desktop]# mount
……
/etc/named on /var/named/chroot/etc/namedtype none (rw,bind)
/var/named on /var/named/chroot/var/namedtype none (rw,bind)
/etc/named.conf on/var/named/chroot/etc/named.conf type none (rw,bind)
/etc/named.rfc1912.zones on/var/named/chroot/etc/named.rfc1912.zones type none (rw,bind)
……..
(2)在客户端配置好DNS服务器地址
方法1:
[[email protected] Desktop]# cat/etc/resolv.conf
# Generated by NetworkManager
domain localdomain
search localdomain example.com
nameserver 192.168.18.129
方法2:
在/etc/sysconfig/network-scripts/ifcfg-eth0文件中添加以下内容:
DNS1=192.168.18.129
三、实战演练
例1:配置DNS服务器解析:zhang.cn
(1)修改配置文件
[[email protected] Desktop]# cd /var/named/chroot/etc
[email protected] etc]# vim named.conf
11 listen-on port 53 { any; };
12 listen-on-v6 port 53 { any; };
17 allow-query { any; };
42 zone "zhang.cn" IN {
43 type master;
44 file "zhang.cn.zone";
45 };
注:也可以修改/etc/named.conf,但是为了安全起见,建议修改上述文件
此文件中整体分为以下三段:
Options:对全局生效
Zone:针对某个区域生效
(2)配置正向解析区域
[[email protected] etc]# cd/var/named/chroot/var/named/
[[email protected] named]# cp -p named.localhostzhang.cn.zone
[[email protected] named]# vim zhang.cn.zone
1$TTL 1D
2zhang.cn. IN SOA dns.zhang.cn. root.zhang.cn. (
3 0 ; serial
4 1D ; refresh
5 1H ; retry
6 1W ; expire
7 3H ) ; minimum
8zhang.cn. NS dns.zhang.cn.
9dns.zhang.cn. A 192.168.18.129
10www.zhang.cn. A 192.168.18.129
11www1.zhang.cn. CNAME www.zhang.cn.
配置文件参数说明:
$TTL 1D 设置有效地址解析记录的默认缓存时间,默认为1天也就是1D;
#原来的@表示当前的域zhang.cn.,为了方便理解此处直接写为zhang.cn.
设置SOA记录为:dns.zhang.cn. #在配置文件写域名时,都把.写上
域管理邮箱root.zhang.cn. #由于@有其他的含义,所以此处用.代替@
- ;更新序列号,用于标识数据库的变换,可以在10位以内,如果存在辅助DNS区域,建议每次更新完数据库,手动加1;
1D ;刷新时间,从域名服务器更新该地址数据库文件的间隔时间,默认为1天;
1H ;重试延时,从域名服务器更新地址数据库失败以后,等待多长时间,默认为1小时;
1W ;到期,失效时间,超过该时间仍无法更新数据库,则不再尝试,默认为一周;
3H ;设置无效地址解析记录(该数据库中不存在的地址)默认缓存时间。设置无效记录,最少缓存时间为3小时;
SOA 区域授权起始记录,区域文件第一条记录,而且区域文件只能有一条;
NS 域的授权名称服务器;
MX 域的邮件交换器,要跟着一个优先级值,越小越高;
A IPV4主机地址;
AAAA IPV6主机地址;
PTR 解析IP的指针;
CNAME 定义别名记录;
[[email protected] named]# ll zhang.cn.zone
-rw-r----- 1 root named 269 Aug 28 20:21zhang.cn.zone
[[email protected] named]# cd
[[email protected] ~]# service named restart
##测试
[[email protected] ~]# vim/etc/sysconfig/network-scripts/ifcfg-eth0
5 DNS1=192.168.18.129
[[email protected] ~]# /etc/init.d/networkrestart
[[email protected] ~]# ping www.zhang.cn
PING www.zhang.cn (192.168.18.129) 56(84)bytes of data.
64 bytes from server1.example.com(192.168.18.129): icmp_seq=1 ttl=64 time=0.026 ms
64 bytes from server1.example.com(192.168.18.129): icmp_seq=2 ttl=64 time=0.033 ms
例2:使DNS支持递归查询
[[email protected] ~]# vim/var/named/chroot/etc/named.conf
18 recursion yes; #默认是支持递归查询的
19
20 # dnssec-enable yes;
21 # dnssec-validation yes;
22 # dnssec-lookaside auto;
使DNS支持递归查询时,需要将以上三条内容注释,这样客户端才能通过这个DNS进行递归查询,把DNS加密通讯功能关闭,才可以和根服务器进行实时的迭代查询。
[[email protected] ~]# /etc/init.d/named restart
##测试
[[email protected] ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
DNS1=192.168.18.129
[[email protected] ~]# /etc/init.d/networkrestart
[[email protected] ~]# ping www.baidu.com
例3:DNS转发服务器
[[email protected] ~]# vim/var/named/chroot/etc/named.conf
20 # dnssec-enable yes;
21# dnssec-validation yes;
22# dnssec-lookaside auto;
23
24 /* Path to ISC DLV key */
25 forward only; #仅执行转发操作;(only,仅转发;first,先查找本地zone,再转发)
26 forwarders {8.8.8.8;}; #指定转发查询请求的DNS服务器列表
27
28 bindkeys-file "/etc/named.iscdlv.key";
29
30 managed-keys-directory "/var/named/dynamic";
31};
#25,26两行应该加到option中
[[email protected] ~]# /etc/init.d/named restart
例4:搭建DNS主从服务器
(1)搭建一个主DNS服务器A,文件配置如下:
[[email protected] ~]# vim/var/named/chroot/etc/named.conf
45 zone "zhang.cn" IN {
46 type master;
47 file "zhang.cn.zone";
48 allow-transfer{192.168.18.0/24;};
49};
(2)从DNS服务器配置如下:
[[email protected] ~]# rpm -ivh/mnt/Packages/bind-9.8.2-0.17.rc1.el6_4.6.x86_64.rpm
[[email protected] ~]# rpm -ivh/mnt/Packages/bind-chroot-9.8.2-0.17.rc1.el6_4.6.x86_64.rpm
[[email protected] ~]# rpm -ivh/mnt/Packages/bind-utils-9.8.2-0.17.rc1.el6_4.6.x86_64.rpm
[[email protected] ~]# service named start
[[email protected] ~]# vim/var/named/chroot/etc/named.conf
10 options {
11 listen-on port 53 { any; };
12 listen-on-v6 port 53 { any; };
17 allow-query { any; };
18 recursion yes;
41 zone "zhang.cn." IN {
42 type slave;
43 file "slaves/zhang.cn.zone.file";
44 masters{ 192.168.18.129; };
45};
注:重启DNS服务器时会在:/var/named/chroot/var/named/slaves文件夹下自动创建一个zhang.com.zone.file这个文件,此文件是从主DNS服务器上获取的数据。
[[email protected] ~]# ls/var/named/chroot/var/named/slaves/
[[email protected] ~]# service named restart
[[email protected] ~]# ls/var/named/chroot/var/named/slaves/
zhang.cn.zone.file
[[email protected] ~]# ll/var/named/chroot/var/named/slaves/zhang.cn.zone.file
-rw-r--r-- 1 named named 341 Aug 29 04:54/var/named/chroot/var/named/slaves/zhang.cn.zone.file
例5:DNS实现负载均衡
在例4的基础上操作
[[email protected] ~]# vim/var/named/chroot/var/named/zhang.cn.zone
[[email protected] ~]# /etc/init.d/named restart
##测试
-
例6:DNS主从密钥认证
(1)保证主从服务器时间同步
[[email protected] ~]# vim /etc/ntp.conf #查看ntp服务器
[[email protected] ~]# ntpdate 0.rhel.pool.ntp.orgiburst #同步时间
(2)在DNS服务器上生成密钥,进行主从认证
[[email protected] named]# cd /var/named/chroot/
[[email protected] chroot]# ls
dev etc usr var
[[email protected] chroot]# dnssec-keygen -ahmac-md5 -b 128 -n HOST zyz
Kzyz.+157+50159
-a hmac-md5 #采用hmac-md5加密算法
-b 128 #生成的密钥长度为128位
-n #密钥类型,我们此处选择主机类型
zyz #密钥名称
[[email protected] chroot]# ls
dev Kzyz.+157+50159.key usr
etc Kzyz.+157+50159.private var
[[email protected] chroot]# catKzyz.+157+50159.key
zyz. IN KEY 512 3 157ZFE59lCbuD08q0hbIylvAg==
[[email protected] chroot]# vim etc/named.conf
45key zyzkey {
46 algorithm hmac-md5;
47 secret "ZFE59lCbuD08q0hbIylvAg==";
48};
49zone "zhang.cn" IN {
50 type master;
51 file "zhang.cn.zone";
52 allow-transfer{key zyzkey;};
53};
[[email protected] named]# /etc/init.d/namedrestart
##检测
[email protected] Desktop]# vim/var/named/chroot/etc/named.conf
42key zyzkey {
43 algorithm hmac-md5;
44 secret "ZFE59lCbuD08q0hbIylvAg==";
45};
46zone "zhang.cn." IN {
47 type slave;
48 file "slaves/zhang.cn.zone.file";
49 masters{ 192.168.18.129 key zyzkey; };
50};
[[email protected] Desktop]# rm -fr/var/named/chroot/var/named/slaves/zhang.cn.zone.file
[[email protected] Desktop]# /etc/init.d/namedrestart
[[email protected] Desktop]# ls/var/named/chroot/var/named/slaves/
zhang.cn.zone.file
附:
dig/nslookup #域名解析测试工具