企业级实战DNS服务搭建

1.企业级实战DNS服务器搭建

1.1 理论基础

1、DNS的出现及演化

网络出现的早期是使用IP地址通讯的,那时就几台主机通讯。但是随着接入网络主机的增多,这种数字标识的地址非常不便于记忆,UNIX上就出现了建立一个叫做hosts的文件(Linux和Windows也继承保留了这个文件)。这个文件中记录着主机名称和IP地址的对应表。这样只要输入主机名称,系统就会去加载hosts文件并查找对应关系,找到对应的IP,就可以访问这个IP的主机了。
但是后来主机太多了,无法保证所有人都能拿到统一的最新的hosts文件,就出现了在文件服务器上集中存放hosts文件,以供下载使用。互联网规模进一步扩大,这种方式也不堪重负,而且把所有地址解析记录形成的文件都同步到所有的客户机似乎也不是一个好办法。这时DNS系统出现了,随着解析规模的继续扩大,DNS系统也在不断的演化,直到现今的多层架构体系。

2、DNS概述入门

DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。DNS协议运行在UDP协议之上,使用端口号53。DNS 的分布式数据库是以域名为索引的,每个域名实际上就是一棵很大的逆向树中路径,这棵逆向树称为域名空间(domain name space)。如图所示树的最大深度不得超过127 层,树中每个节点都有一个可以长达63 个字符的文本标号。

 

3、DNS域名解析过程

首先,客户端先在本地缓存查找有没有域名缓存,如果没有,客户端发出DNS请求翻译IP地址或主机名。DNS服务器在收到客户机的请求后:
(1)检查DNS服务器的缓存,若查到请求的地址或名字,即向客户机发出应答信息;
(2)若没有查到,则在数据库中查找,若查到请求的地址或名字,即向客户机发出应答信息;
(3)若没有查到,则将请求发给根域DNS服务器,并依序从根域查找顶级域,由顶级查找二级域,二级域查找三级,直至找到要解析的地址或名字,即向客户机所在网络的DNS服务器发出应答信息,DNS服务器收到应答后现在缓存中存储,然后,将解析结果发给客户机。
(4)若没有找到,则返回错误信息。

4、DNS的分类

主DNS服务器:就是一台存储着原始资料的DNS服务器。

从DNS服务器:使用自动更新方式从主DNS服务器同步数据的DNS服务器。也成辅助DNS服务器。

缓存服务器:不负责本地解析,采用递归方式转发客户机查询请求,并返回结果给客户机的DNS服务器。同时缓存查询回来的结果,也叫递归服务器。

转发器:这台DNS发现非本机负责的查询请求时,不再向根域发起请求,而是直接转发给指定的一台或者多台服务器。自身并不缓存查询结果。

5、DNS中记录类型

NS 域的授权名称服务器      NSDName:DNS的FQDN
                         baidu.com. 64899 IN NS ns2.baidu.com. 
                         baidu.com. 64899 IN NS ns4.baidu.com. 
                         baidu.com. 64899 IN NS dns.baidu.com. 
                         baidu.com. 64899 IN NS ns7.baidu.com. 
                         baidu.com. 64899 IN NS ns3.baidu.com.
MX 域的邮件交换器,要跟着一个优先级值,越小越高
                        baidu.com. 7200 IN MX 20 jpmx.baidu.com. 
                        baidu.com. 7200 IN MX 20 mx50.baidu.com. 
                        baidu.com. 7200 IN MX 10 mx.n.shifen.com. 
                        baidu.com. 7200 IN MX 20 mx1.baidu.com.
                        A IPV4主机地址
                        AAAA IPV6主机地址
                        PTR 解析IP的指针,反向记录
CNAME 权威(正式)名称,定义别名记录
                        www.baidu.com. 1154 IN CNAME www.a.shifen.com.

6、DNS命名规范

1. 26个英文字母
2. “0,1,2,3,4,5,6,7,8,9”十个数字 
3. “-”(英文中的连词号)
4. 最多63字节长度

##注释说明
要不按照这个,bind支不支持,支持,合适么,不合适。
非要不按照这个,怎么办?master-view文件上配置check-names ignore;

7、dig、nslookup、host的介绍

#安装
[root@linux-node1 ~]# yum install bind-utils -y
#host命令
Host命令也是大多数系统、软件库调用的解析命令,比如php中。
[root@linux-node1 ~]# host baidu.com
baidu.com has address 220.181.57.216
baidu.com has address 123.125.115.110
baidu.com mail is handled by 20 mx50.baidu.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 15 mx.n.shifen.com.
baidu.com mail is handled by 20 mx1.baidu.com.
#nslookup命令
Nslookup能够反映出是哪个dnsserver返回的结果
[root@linux-node1 ~]# nslookup baidu.com
Server: 118.190.201.2
Address: 118.190.201.2#53

Non-authoritative answer:
Name: baidu.com
Address: 220.181.57.216
Name: baidu.com
Address: 123.125.115.110

#dig命令
Dig返回整个解析过程的详细路径,类似traceroute
[root@linux-node1 ~]# dig baidu.com

; <<>> DiG 9.9.4-RedHat-9.9.4-61.el7 <<>> baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 28793
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 5, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; MBZ: 0005 , udp: 1280
;; QUESTION SECTION:
;baidu.com. IN A

;; ANSWER SECTION:
baidu.com. 5 IN A 123.125.115.110
baidu.com. 5 IN A 220.181.57.216

;; AUTHORITY SECTION:
baidu.com. 5 IN NS ns3.baidu.com.
baidu.com. 5 IN NS ns2.baidu.com.
baidu.com. 5 IN NS dns.baidu.com.
baidu.com. 5 IN NS ns7.baidu.com.
baidu.com. 5 IN NS ns4.baidu.com.

;; Query time: 17 msec
;; SERVER: 118.190.201.2#53(118.190.201.2)
;; WHEN: Thu Aug 09 06:22:39 CST 2018
;; MSG SIZE rcvd: 160

2.学习部署BIND9

Bind是一款开放源码的DNS服务器软件,Bind由美国加州大学Berkeley分校开发和维护的,全名为Berkeley Internet Name Domain它是
目前世界上使用最为广泛的DNS

配置yum源
使用centos7自带的yum源即可,同时确保机器可以解析外网域名,并能连接公网

2.1部署单台DNS

yum install -y bind-utils bind bind-devel bind-chroot

1.DNS主配置文件

#首先编辑/etc/named.conf文件
[root@linux-node1 ~]# vim /etc/named.conf
listen-on port 53 { any; };
 allow-query { any; };
 dnssec-enable no;
 dnssec-validation no;

编辑区域配置文件/etc/named.rfc1912.zones

zone "linuxidc.com" IN {
 type master;
 file "linuxidc.com.zone";
};
#其中zone的格式为:

 zone “ZONE_NAME IN {
 type master;
 file “ZONE_NAME.zone”
}

新建解析库文件/var/named/linuxidc.com.zone

#使用rndc去连那个server对其做管理
#使用下面命令生成
[root@linux-node1 ~]# rndc-confgen -r /dev/urandom >/etc/rndc.conf
[root@linux-node1 ~]# vim /var/named/linuxidc.com.zone
$TTL 1D
$ORIGIN linuxidc.com.
@ IN SOA linuxidc.com. admin.linuxidc.com. (
 20180812; serial
 1D ; refresh
 1H ; retry
 1W ; expire
 3H ) ; minimum
linuxidc.com. IN NS ns1.linuxidc.com.

ns1 IN A 118.190.201.11
www IN A 172.16.254.13
ftp IN A 1.1.1.1

SOA:查询管理域名的服务器管理信息

如果有多部DNS服务器管理同一个域名时,最好使用master/slave的方式来进行管理。既然要这样管理,要知道被管理的zone file是如何进行传输的,就要用SOA标志了。

SOA后面的7个参数:

Master DNS服务器主机名:这个主要确定哪部DNS作为master的意思。

管理员的email:管理员的邮箱地址,注意@在zone有特别意思,因此,这里将@改成了.

序列号:这个序列号代表的是这个zone文件的版本,序列号越大代表越新。当slave要判断是否主动更新zone文件时,就以序列号来进行比对。当修改了zone文件时,要更新这个值。通常格式用“YYYYMMDDNU”

刷新频率:何时slave会向master要求数据更新呢?就是由这个数值定义的。每次slave去更新时,发现序列号没有大,就不会更新。这里要注意的地方是,在master update data完成到slave来检查时再update可能还有好一段时间,因此这段时间master/slave DNS的zone file可能出现不一致的情况。所有在BIND新版本中加入了notify功能,使用者在nomed.conf设定中在需要的zone中加入notify的设定,master在更新完成某个zone file的数据后会主动发讯息通知其他的slave,因此如果slave也支持“notify”时,接下来slave马上就可以做zone transfer进行数据的更新。

失败重试时间(Retry:因为某些因素,导致slave无法从master更新数据,那么在多久的时间内,slave会重试重新联机到master。

失效时间(Expire:如果尝试时间一直失败,持续联机到达这个设定值时限,那么slave将不再继续尝试联机,并且尝试删除这份下载的zone file信息。

缓存时间(Minumum TTL:如果在这个zone file中,每笔RR记录都没有写TTL缓存时间的话,那么就以这个SOA的设定值为主。

修改解析库文件权限

chgrp named /var/named/linuxidc.com.zone
#注释说明
1 Serial:只是一个序号,但这个序号可被用来作为 slave 与 master 更新的依据。 举例来说, master 序号为 100 但 slave 序号为 90 时,那么这个 zone file 的资料就会被传送到 slave 来更新了。由于这个序号代表新旧资料,通常我们建议你可以利用日期来设定!举例来说,上面的资料是在 2006/10/20 所写的第一次,所以用 2006102001 作为序号代表!(yyyymmddnn,nn代表这一天是第几次修改)
2 Refresh:除了根据 Serial 来判断新旧之外,我们可以利用这个 refresh(更新) 命令 slave 多久进行一次主动更新;
3 Retry:如果到了 Refresh 的时间,但是 slave 却无法连接到 master 时, 那么在多久之后,slave 会再次的主动尝试与主机连线;
4 Expire:如果 slave 一直无法与 master 连接上,那么经过多久的时间之后, 则命令 slave 不要再连接 master 了! 也就是说,此时我们假设 master DNS 可能遇到重大问题而无法上线,则等待系统管理员处理完毕后, 再重新来到 slave DNS 重新启动 bind 吧!
5 Minimun:这个就有点象是 TTL !

检查 配置语法

(1)检查配置文件语法

[root@CentOS7 ~]# named-checkconf

(2)检查域配置文件语法

[root@linux-node1 ~]# named-checkzone linuxidc.com /var/named/linuxidc.com.zone
zone linuxidc.com/IN: loaded serial 20170526
OK

2.启动named服务

[root@linux-node1 ~]# systemctl start named

3.测试

[root@linux-node1 ~]# dig @127.0.0.1 www.linuxidc.com

; <<>> DiG 9.9.4-RedHat-9.9.4-61.el7 <<>> @127.0.0.1 www.linuxidc.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 34217
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.linuxidc.com. IN A

;; ANSWER SECTION:
www.linuxidc.com. 86400 IN A 172.16.254.13

;; AUTHORITY SECTION:
linuxidc.com. 86400 IN NS ns1.linuxidc.com.

;; ADDITIONAL SECTION:
ns1.linuxidc.com. 86400 IN A 118.190.201.12

;; Query time: 1 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sun Aug 12 22:45:09 CST 2018
;; MSG SIZE rcvd: 95

3.部署主从DNS

Yum安装bind

[root@linux-node2 ~]# yum install bind-utils bind bind-devel bind-chroot -y

3.1主服务器配置

1首先编辑主服务器/etc/named.conf文件

 listen-on port 53 { any; };
 allow-query { any; };
 recursion yes;

 dnssec-enable no;
 dnssec-validation no;

2 编辑主服务器的区域配置文件/etc/named.rfc1912.zones

zone "linuxidc.com" IN {
        type master;
        file "linuxidc.com.zone";
        allow-transfer {118.190.201.12; };  ##118.190.201.12从服务器的ip地址。
};

3 新建主服务器解析库文件vim /var/named/linuxidc.com.zone

[root@linux-node2 ~]#vim /var/named/linuxidc.com.zone
$TTL 1D
$ORIGIN linuxidc.com.
@   IN SOA  linuxidc.com. admin.linuxidc.com. (
                    20180812; serial
                    1D  ; refresh
                    1H  ; retry
                    1W  ; expire
                    3H )    ; minimum
linuxidc.com. IN  NS  ns1.linuxidc.com.
mytest.com. IN  NS  slave.linuxidc.com.   ###添加从服务器的NS解析记录。

ns1 IN  A   118.190.201.11
slave   IN  A   118.190.201.12    ###指定从服务器的IP地址。
www IN  A   172.16.254.13
ftp     IN   A  1.1.1.1

3.2从服务器配置

1.编辑从服务器/etc/named.conf文件

listen-on port 53 { any; };
    allow-query     { any; };
    recursion yes;
    dnssec-enable no;
    dnssec-validation no;

2 配置从服务器的区域配置文件/etc/named.rfc1912.zones

zone "linuxidc.com" IN {
    type slave; ##表明本机是从服务器
    file "slaves/linuxidc.com.zone";   ##将同步后的文件放置在哪里,这里是相对路径,实际路径为/var/named/slaves/linuxidc.com
    masters {118.190.201.11; }; ##指定主服务器的ip地址
};

3.语法检查

#在主从两个服务器上都进行语法检查
~]# named-checkconf
#开启服务,主重新启动服务
[root@linux-node1 ~]# systemctl restart named  #主重新启动
[root@linux-node2 ~]# systemctl start named    #从启动服务

4.进行测试

(1)查看从服务器已经取得解析数据库文件

[root@linux-node2 ~]# ll /var/named/slaves/
total 4
-rw-r--r-- 1 named named 346 Aug 12 16:58 linuxidc.com.zone

(2)用从服务器解析www.linuxidc.com

[root@linux-node2 ~]# dig -t A www.linuxidc.com @118.190.201.12

; <<>> DiG 9.9.4-RedHat-9.9.4-61.el7 <<>> -t A www.linuxidc.com @118.190.201.12
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 26480
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.linuxidc.com. IN A

;; ANSWER SECTION:
www.linuxidc.com. 86400 IN A 172.16.254.13

;; AUTHORITY SECTION:
linuxidc.com. 86400 IN NS ns1.linuxidc.com.

;; ADDITIONAL SECTION:
ns1.linuxidc.com. 86400 IN A 118.190.201.11

;; Query time: 1 msec
;; SERVER: 118.190.201.12#53(118.190.201.12)
;; WHEN: Sun Aug 12 17:01:53 CST 2018
;; MSG SIZE rcvd: 95

可以看到解析成功。说明从服务器已生效。

5增加记录进行解析

[root@linux-node1 ~]# vim /var/named/linuxidc.com.zone 
$TTL 1D
$ORIGIN linuxidc.com.
@ IN SOA linuxidc.com. admin.linuxidc.com. (
              20180812; serial
               1D ; refresh
               1H ; retry
               1W ; expire
               3H ) ; minimum
linuxidc.com. IN NS ns1.linuxidc.com.
mytest.com. IN NS slave.linuxidc.com.
 
ns1   IN   A   118.190.201.11
slave IN   A   118.190.201.12
www   IN   A   172.16.254.13
ftp   IN   A    1.1.1.1
opt    A    118.190.201.120

使修改的记录生效

[root@linux-node1 ~]# rndc reload
server reload successful
#测试添加的记录
[root@linux-node1 ~]# dig @118.190.201.11 opt.linuxidc.com

; <<>> DiG 9.9.4-RedHat-9.9.4-61.el7 <<>> @118.190.201.11 opt.linuxidc.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10287
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;opt.linuxidc.com. IN A

;; ANSWER SECTION:
opt.linuxidc.com. 86400 IN A 118.190.201.120

;; AUTHORITY SECTION:
linuxidc.com. 86400 IN NS ns1.linuxidc.com.

;; ADDITIONAL SECTION:
ns1.linuxidc.com. 86400 IN A 118.190.201.11

;; Query time: 2 msec
;; SERVER: 118.190.201.11#53(118.190.201.11)
;; WHEN: Mon Aug 13 06:29:48 CST 2018
;; MSG SIZE rcvd: 95

 

0
如无特殊说明,文章均为本站原创,转载请注明出处

该文章由 发布

这货来去如风,什么鬼都没留下!!!
发表我的评论

Hi,请填写昵称和邮箱!

取消评论
代码 贴图 加粗 链接 删除线 签到