在使用浏览器进行网上冲浪的时候,我们只需要输入网址即可访问,但是在网络中,网址并不是一个有效的东西,真正起作用的是网址所对应的IP地址,但是IP地址是一堆没有规律的数字,难以记忆、使用,所以就有了DNS服务器。DNS服务器的功能就是将网址转换成IP地址,这样在我们想要访问一个主机的时候就不需要记住它的IP地址,而是只需要记住它的网址即可,剩下的工作有DNS服务器去替我们完成,由它来将一个网址转换成IP地址,来供给我们访问。下面就来介绍如何在CentOS6中搭建一个DNS服务器。
一、DNS服务器的搭建
搭建一个DNS服务器需要一台主机来当作这个服务器,然后为了测试,还需要另外一台主机,所以在这里我使用虚拟机创建了两个主机,并使用XShell进行远程连接(连接的方法查看原先的博客),一台的IP地址为172.16.6.11,另外一台主机IP地址为172.16.128.0。
在进行配置之前,首先要安装相应的软件,使用以下命令(记得配置yum源):
1
|
yum install bind
|
配置一个DNS服务器需要四步:
1.配置/etc/named.rfc1912.zones文件,在其中添加区域文件
2.在/var/named/中添加区域数据文件
3.修改/etc/named.conf配置
4.加载配置
下面详细的介绍这四步:
首先打开/etc/named.rfc1912.zones文件
1
|
~] # vim /etc/named.rfc1912.zones
|
然后在最后面添加以下内容,之后保存退出:
1
2
3
4
|
zone "test.com" IN {
type master;
file "/etc/named/test.com.zone" ;
}; |
在这个文件中可以有以下几种选择,视情况而定。(因为我只需要别的主机能查询即可,所以在这个例子中我只写了这两句话)
allow-query { acl|IP|Network; };
允许向本服务器发起查询请求的主机,即:白名单;
allow-transfer { acl|IP|Network; };
允许哪些从服务器可以从本机进行区域传送;默认是所有主机都可以;建议应该只允许从服务器完成此项工作,即:白名单;
allow-recursion { acl|IP|Network; };
允许哪些主机向当前DNS服务器发起递归查询请求
allow-update { acl|IP|Network; };
(因为谁都可以更新区域数据库不安全,所以需要这个来限制谁可以)DDNS(动态DNS,使用DHCP服务器), Dynamic DNS(因为不安全,所以一般禁用这个功能:allow-update { none; };)
第二步:在/var/named/中添加区域数据文件
1
|
~] # vim /etc/named/test.com.zone
|
在其中写上以下内容:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
$ORIGIN test .com.
$TTL 86400 @ IN SOA ns1. test .com. admin. test .com. (
2017082301;serial
1H;refresh
15M;retry
1W;expire
1D);TTL
IN NS ns1. test .com.
ns1. test .com. IN A 172.16.128.0
www IN A 172.16.100.1 www IN A 172.16.100.2 www IN A 172.16.100.3 www IN A 172.16.100.4 web IN CNAME www |
在这里每个字符串的含义如下:
SOA:Start of Authority,起始授权记录
在任何一个数据库中有且只能有一条SOA记录,而且必须是数据库的第一条
在这个文件中SOA用来记录这个域名的一些时间上的配置,上面的例子中“2017082301”代表的是版本,每一次修改这个数据文件都要同时修改这个版本号;“1H”代表的是刷新时间,即每个多久到主服务器检查数据是否更新,用于主从服务器,暂时可以不管,单位可以是——“什么都不写—秒”,“M—分钟”,“H—小时”,“D—天”,“W—周”等等;15M代表的是重试时间;1W代表过期时间;1D代表当主服务器停止工作之后从服务器最多工作时间。
A:Address,主机记录
记录了网址即FQDN(完全合格域名)到IP地址的映射关系。
AAAA:Address,FQDN --> IPv6
记录FQDN到IPv6的映射关系(暂时用不到)
PTR:PoinTeR,指针记录
标识从IP地址到完全合格域名的映射关系,IP --> FQDN(用于反解析,即根据IP地址解析出网址是什么)
NS:Name Server,名称服务器记录
用户标明当前域中所有的DNS服务器
CNAME:Conanical Name,别名记录
host1 CNAME host2:host1的真名是host2——host1是host2的别名
标识从完全合格域名到完全合格域名的映射关系
FQDN --> FQDN
例如:www.testA.com和www.testB.com是同一个IP地址则可以使用这个来进行标识
MX:Mail eXchanger,邮件交换器记录
标识域中邮件服务器的主机名,从域名映射到完全合格域名,Domain name --> FQDN
user@qq.com --> mail.qq.com
优先级: 0-65536,数字越小优先级越高
在了解了每个字符串的含义之后就可以自己来进行编写合适的解析内容。接下来保存退出。
注意:此时创建出来的这个文件的属主和属组都是root,这样的文件named命令无法读取,所以需要使用chgrp或chown命令更改数组为“named”
1
|
~] # chown :named /etc/named/test.com.zone
|
第三步:修改/etc/named.conf配置
在这一步中修改/etc/named.conf配置文件的原因是这个文件是为了安全着想,屏蔽了未知主机的查询请求,所以我们只需要按照下图所示修改相应的选项然后保存即可
1
|
~] # vim /etc/named.conf
|
第四步:重新加载配置文件
在上面的操作都完成之后,直接使用以下两条命令来重新加载配置文件即可
1
2
|
~] # rndc reload
~] # service named reload
|
加载成功的界面如下:
如果加载失败,则使用“~]# named-checkconf”或者“named-checkzone”命令检查是否有拼写错误。如果没有则重启named服务(~]# service named restart)再试一试。
经过以上四步之后,一个DNS服务器就已经配置好了,我们可以使用“dig”、“host”、“lookup”这三个命令来进行查看,但是在CentOS中“dig”命令是使用最多的命令,所以在这里只进行dig命令的演示。
比如:查看www.test.com的IP地址:
1
|
~] # dig -t A www.test.com @172.16.128.0
|
在使用了这个命令之后,dig将“www.test.com”对应的所有的IP地址全都列了出来
或者在上面定义的时候我们对“www.test.com”网址起了个别名,叫做“web.test.com”,此时,使用以下命令得到的结果,和使用“www.test.com”得到的结果是一样的:
1
|
~] # dig -t A web.test.com @172.16.128.0
|
或者我们还可以使用ping命令来进行验证,不过在使用“ping”命令之前要先修改“/etc/resolv.conf”文件,在这个文件的最后加上一句话:“nameserver 172.16.128.0”来指定DNS服务器。保存退出之后就可以使用ping命令来ping“www.test.com”网址了:
~]# ping www.test.com
在这个例子中我们可以发现,虽然没能ping通,但是IP地址已经解析成功了,ping不通的原因是因为“172.16.100.4”这个IP地址不存在。
二、主从服务器的搭建
在日常的使用当中,无法避免的会有服务器因为突然出现故障从而无法提供服务,但是在互联网中,这样的事情是会致命的,所以我们要极力的去避免这种事情的发生。为此就出现了主从服务器的概念,通过一台另外的从服务器来进行备份,当主服务器出现意外之后,从服务器就及时的站出来应急,当主服务器恢复之后,从服务器再退回去。这样就实现了应急时的无缝处理。配置主从DNS服务器是在DNS服务器的基础上进行配置,所以比较简单,仅仅需要有限的几步即可配置完成,下面来进行详细的介绍。
第一步:打开从服务器的/etc/named.rfc1912.zones文件,在其中添加几句话
1
|
~] # vim /etc/named.rfc1912.zones
|
1
2
3
4
5
|
zone "test.com" IN {
type slave;
masters { 172.16.128.0; };
file "slaves/test.com.zone" ;
}; |
这样从服务器上就配置完成了
第二步:配置主服务器上zone文件
下面回到主服务器上,打开要备份到从服务器上的zone文件
1
|
~] # vim /etc/named/test.com.zone
|
将已经存在的文件修改为下面的样子:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
$ORIGIN test .com.
$TTL 86400 @ IN SOA ns1. test .com. admin. test .com. (
2017082301;serial
1M;refresh
15M;retry
1W;expire
1D);TTL
IN NS ns1. test .com.
IN NS ns2. test .com.
MX 10 mx1. test .com.
ns1. test .com. IN A 172.16.128.0
ns2. test .com. IN A 172.16.6.11
www IN A 172.16.100.1 www IN A 172.16.100.2 www IN A 172.16.100.3 www IN A 172.16.100.4 web IN CNAME www mx1 IN A 172.16.100.4 |
其实仅仅是添加了两句话,分别是:
1
|
IN NS ns2. test .com.
|
1
|
ns2. test .com. IN A 172.16.6.11
|
这两句话是告诉主服务器从服务器存在并且在哪里,添加完成之后保存退出即可
第三步:重新加载配置文件
在主服务器上使用命令“rndc”和“service named reload”
然后回到从服务器上即可在/var/named/slaves/目录中查看到备份的zone文件
1
|
~] # head -4 /var/named/slaves/test.com.zone
|
这样在从服务器上使用dig命令,并且把自己当作DNS服务器也可以进行网址的解析了
而且当我们在主服务器上修改zone文件的版本号,保存退出并使用“rndc reload”命令之后,从服务器会再次的从主服务器上备份一个新的zone文件,这样就实现了及时的数据备份
注意:如果当在主服务器上修改了版本号之后,发现从服务器没有及时的更换新的数据文件,可能有以下几种原因:
1.主服务器中的/etc/named.conf配置不对——请参考上面的例子重新配置(重点查看端口监听那)
2.主服务器zone文件修改之后,版本号没有修改或者修改为了一个小于从服务器上的版本号,从服务器在查看时发现版本号没有修改或者小于自身则不进行备份
3.防火墙或者selinux没有关闭
使用“setenforce 0”命令避免selinux的影响
使用“iptables -F”命令避免防火墙的影响
本文转自正经的青年51CTO博客,原文链接: http://blog.51cto.com/11142243/1958634,如需转载请自行联系原作者