从DNS服务器的架设
之前文章有说“主DNS服务器”的架构过程,现在来说从服务器的架构步骤,主从DNS服务器的IP地址和服务器名称跟之前的计划一样均不变。主服务器的IP:172.16.100.1,名称叫dns;从服务器的IP:172.16.100.2,名称叫ns2。
基本上来说从DNS服务器的设置比较简单,因为主服务器的数据都已经做完了,从服务器只需要做好链接,然后验证是否能从主服务器上读取到数据即可。
登陆从DNS服务器,#yum install bind -y,获取并且安装bind,然后vim /etc/named.conf,这个conf也是要具备“链接全球13个根节点+本地正向解析+本地反向解析”的功能。
然后#scp 172.16.100.1:/var/named/{name.ca,localhost.zone,named.local},从主DNS服务器上复制到这三个基本的dns解析文件,同样把这三个文件放入/car/named这个文件夹内。
然后弄远程控制软件rndc,#rndc-confgen > /var/rndc.conf。将rndc.conf里后几行的内容复制粘贴到named.conf里,同时#chmod :named /var/named/和#chmod :named /etc/named.conf。
现在这个时候可以在从服务器上检查一下语法,并且尝试#dig -t A localhost看一下输出的结果是不是127.0.0.1。如果成功的话,那么说明整个named.conf这个文件是OK的。
既然named.conf这个文件OK,但是里面还没有具体的slave设定,所以目前这台DNS服务器仅仅是一个缓存服务器而已,还算不上是DNS从服务器,于是要往里面添加具体的内容,在named.conf里添加:
1
2
3
4
5
|
zone
"lnsjb.com"
IN {
type
slave;
#指定本服务器的性质是 从服务器;
masters { 172.16.100.1; };
#他的主子是172.16.100.1
file
"/var/named/slave/lnsjb.com.zone"
;
#从主子那里获取的相关文件保存在这个路径里
};
|
如果要添加一个反向的解析,比如172.16网段的方向解析:
1
2
3
4
5
|
zone
"16.172.in-addr.arpa"
IN {
type
slave;
masters { 172.16.100.1; };
file
"/var/named/slave/172.16.zone"
;
};
|
先加入这两段一正一反的信息,保存退出之后,#setforce 0,#rndc reconfig,看一下lnsjb.com.zone和172.16.zone 是否被同步了过来。
架设之后
现在主从DNS服务器已经建立了关系,这时候手动在主DNS上的lnsjb.com.zone里添加一条新的记录,比如:games.lnsjb.com 对应的ip是 172.16.100.9。添加完毕之后,要切记把编号+1,然后:wq保存退出。
在主dns服务器上#rndc reload,然后到从服务器上#dig -t A games.lnsjb.com,会看到这条信息已经可以被解析了。可见编号发生了的改变,主DNS服务器就会自动通知从服务器来获得最新的数据。
但是这样的设定会带来巨大的隐患,其他人随便做一个dns服务器,写上我们的IP地址,就可以#dig -t axfr 域名 的方式获得我们服务器里目标域所有的IP信息,这肯定是不安全的。所以要在主服务器上做一个设定:仅仅准许从dns服务器的ip可以申请一次性获取大量数据,其余的ip地址一律屏蔽掉。
这个时候就要在主DNS服务器的named.conf里使用allow-transfer,在开头的options里加入allow-transfer的话,是全部域都可以传送到目标ip上,如果是在某个域内单独加上allow-transfer的话,是特意指明这个域的信息可以被传送到目标ip上,如:
1
2
3
4
|
options {
directory
"named文件夹的路径"
;
allow-transfer { 203.56.100.4;176.24.99.6; };
#这样就指定下面所有的域信息可以被这两个IP获取,其余IP都不行
};
|
还有一个方法,比较一劳永逸,就是在主dns服务器上设定ACL(访问控制列表)。这个acl要在named.conf文件里的最上方进行设定,把具体的ip或者某个网络端添加到acl里,比如:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
acl MYSLAVES {
127.0.0,1;
203.56.100.1;
176.24.99.1;
#将上面三个ip地址,归属于MYSLAVES这个acl里
};
acl MYCLIENTS {
192.168.0.0
/24
;
#将整个192.168.0.1~192.168.0.254都加入到MYCLIENTS这个acl里
127.0.0.1;
#别忘了本机也要递归的
};
options {
directory
"/var/named/"
;
allow-transfer { MYSLAVES; };
#只有MYSLAVES组里的成员可以访问
allow-recursion { MYCLIENTS; };
#只有MYCLIENTS组里的成员可以递归查询
};
|
acl有几个默认的名称,常用的有:none(一个都没有)、any(所有)、localnet(本地机处在的网络)
如果要检查是否可以递归的方式进行查询,那就#dig +recuse -t 目标网址 @指定的dns服务器(这个服务器要能上互联网)。
本文转自 苏幕遮618 51CTO博客,原文链接:http://blog.51cto.com/chenx1242/1752963