接上一章http://laoguang.blog.51cto.com/6013350/1035223

五:BIND主从协同作业

域:laoguang.me

ns:172.16.1.1        ##主DNS服务器

ns2:172.16.1.2      ##从DNS服务器

由于我们主DNS没有设置全局allow-transfer所以是允许所有请求同步的,这是既不安全的,我们以任何linux测试dig –t AXFR laoguang.me @127.0.0.1 如图:

 

我们所有的网络结构都暴露出来,所以我们得对其限制,将来我们只允许从服务器获得这些数据用来同步,我们在named.conf的options下加入allow-transfer { 172.16.1.2/16; };

options {
directory "/var/named";
allow-transfer { 172.16.1.2/16; };
};

再重测试dig –t AXFR laoguang.me @127.0.0.1

1,下面我们基于这个也就是IP来配置主从同步服务器。

1)主服务器配置如上面那样,即可。

2)从服务器上编译安装bind(详见第一章)

3) 建立 /etc/named/named.conf如下 :

options {
directory "/var/named"; ##同样还是数据目录

allow-transfer { none; };    ##从服务器禁止区域传出
};

acl "intranet" {
172.16.0.0/16;
127.0.0.1;
};
view "lan" {
match-clients { intranet; };
zone "." IN {
type hint;
file "named.ca";
};
zone "localhost" IN {                ##localhost的解析就不用同步了吧
type master;
file "localhost.zone";
};
zone "0.0.127.in-addr.arpa" IN {
type master;
file "0.0.127.zone";
};
zone "laoguang.me" IN {         ##主要的是同步我们的解析区域
type slave;                     ##DNS服务器的类型
file "slaves/laoguang.me.lan";       ##同步的文件存放到哪
masters { 172.16.1.1; };            ##同步谁的数据
};
zone "1.16.172.in-addr.arpa" {   ##同上

        type slave;
file "slaves/1.16.172.zone";
masters { 172.16.1.1; };
};

};

view "wan" {
match-clients { any; };
zone "laoguang.me" IN {
type slave;
file "slaves/laoguang.me.wan";
masters { 172.16.1.1; };
};
};

需要新建的 named.ca localhost.zone 0.0.127.zone 从主DNS上复制即可,我们在/var/named/下建立slaves目录,用来存放同步的数据,权限属主属组得改。

scp –p 172.16.1.1:/var/named/{named.ca,localhost.zone,0.0.127.zone} /var/named
mkdir /var/named/slaves;
chmod 770 /var/named/slaves;
chown root:named /var/named/slaves;

一切就绪后启动named; named –u named;查看日志是否同步成功,或者查看slaves下有没有同步!

2,基于IP来传送是存在风险的,因为有人会知道从服务器的IP,然后以这个IP去获得网络结构,所以我们要基于一种更安全的机制去传输,这就是下面要说的TSIG(Transaction Signature)。

1)主DNS生成密钥;

cd /etc/named
dnssec-keygen -a hmac-md5 -b 256 -n HOST ns-ns2.key
##说明:-a 加密算法
-b 密钥长度
-n 加密类型
生成的文件一般开头会加上K最后会加上一个随机数
查看对密钥的私钥:cat Kns-ns2.key.+157+34624.private

 

2)把这部分整理到named.conf中,如下:


更改options中的allow-transfer:{ key “ns-ns2.key”; };
主DNS,named.conf内容:

acl "intranet" {
172.16.1.0/24;
127/8;
};
options {
directory "/var/named";
allow-transfer { key "ns-ns2.key"; }; ##基于key传送
};
key "rndc-key" {
algorithm hmac-md5;
secret "cLUy7wY3Al05PhSxZfRnWg==";
};
key "rndc-key2" {
algorithm hmac-md5;
secret "0WjLJgZhFlYeltjdrai9gQ==";
};
key "ns-ns2.key" {
algorithm hmac-md5;
secret "IhHNoWiGUX5bVw3n3tlilLV6iRcO0dup/1bM3Ld9gIA=";
};

controls {
inet 0.0.0.0 port 953
allow { 172.16.1.2; 127.0.0.1; } keys { "rndc-key"; "rndc-key2"; };
};
server 172.16.1.2 {                  ##server的用的key
keys { ns-ns2.key; };
};

view "lan" {
match-clients { intranet; };
zone "." IN     {
type hint;
file "named.ca";
};
zone "localhost" IN     {
type master;
file "localhost.zone";
};
zone "0.0.127.in-addr.arpa" IN  {
type master;
file "0.0.127.zone";
};

zone "laoguang.me" IN   {
type master;
file "laoguang.me.lan";
};
zone "1.16.172.in-addr.arpa" IN {
type master;
file "1.16.172.zone";
};
};
view "wan" {
match-clients { any; };
zone "laoguang.me" IN {
type master;
file "laoguang.me.wan";
};
};

3)由于从服务器的解析结构跟主服务器差别不大,为了方便把named.conf拷贝到从服务器上,并对其修改如下:

options {
directory "/var/named";
allow-transfer { none; }; ##从服务器禁止区域传送
};
key "ns-ns2.key" {                              ##传输用到的Key,其它key已删除
algorithm hmac-md5;
secret "IhHNoWiGUX5bVw3n3tlilLV6iRcO0dup/1bM3Ld9gIA=";
};
server 172.16.1.1 {                            ##主服务器的IP
keys { ns-ns2.key; };
};
acl "intranet" {
172.16.0.0/16;
127.0.0.1;
};
view "lan" {
match-clients { intranet; };
zone "." IN {
type hint;
file "named.ca";
};
zone "localhost" IN {
type master;
file "localhost.zone";
};
zone "0.0.127.in-addr.arpa" IN {

type master;
file "0.0.127.zone";
};
zone "laoguang.me" IN {
type slave;
file "slaves/laoguang.me.lan";
masters { 172.16.1.1; };
};
zone "1.16.172.in-addr.arpa" IN {
type slave;
file "slaves/1.16.172.zone";
masters { 172.16.1.1; };
};
};
view "wan" {
match-clients { any; };
zone "laoguang.me" IN {
type slave;
file "slaves/laoguang.me.wan";
masters { 172.16.1.1; };
};
};

删除从DNS /var/named/slaves下的原来同步的数据,重启主DNS与从DNS,查看是否能进行同步,即查看slaves下能否生成新文件,并测试解析:以从服务器为DNS测试解析,关闭主DNS服务器重启从DNS继续测试解析!如果如下1图为172.16段解析,图2为192.168.0段申请解析地址:

这充分证明主从同步是完好的。

六:BIND子域授权

目标:建立laougang.me的子域linux.laoguang.me,交由ns.linux.laoguang.me管理解析,bbs.linux.laoguang.me是域下一个主机。

1,父域:在/var/laoguang.me.lan中加入linux.laoguang.me的NS记录与此NS的A记录即可;


/etc/named/named.conf  :
options {
directory "/var/named/";
};
zone "linux.laoguang.me" IN {
type master;
file "linux.laoguang.me";
};
/var/named/linux.laoguang.me :
$TTL 86400
@               IN      SOA     ns      admin   (
2012102301
2H
5M
7D
2D )
IN      NS      ns
ns             IN      A       172.16.100.1
bbs           IN      A       172.16.100.2
2,子域:在子域服务器也就是172.16.100.1上配置安装bind,配置一个全新的dns跟第二章的无异,所以我简单的给出需要的文档了 :

3,就这么简单子域也设置好了,我省略了 根域,localhost的正解与反解,因为这个对子域来说不一定需要,所以说他们是可以省略的。下面我们来测试子域运行吧,图一为在子域上测试,图二为测试父域看是否能解析子域:

好的子域授权我们说完了。。。

七:BIND实现域名的动态解析

目标:我们有一个www服务器,但是它的IP是不固定的,我们总不能因为它修改一个ip就改一次服务器中它的A记录吧,这样我们的压力会很大的,所以我们可以通过DDNS,让www的管理员自己更新它的IP。

1,生成一对密钥,我们的动态解析基于密钥来实现;

dnssec –keygen –a hmac –b 256 –n HOST dynamic

2,把生成的密钥写到DNS服务器named.conf中,并允许laoguang.me更新www.laoguang.me的A记录,为了操作简便,我们把视图去掉,如图:

 

3,修改/var/named权限为660,属组named,因为更新记录会在里面建立文件作为,对原来资源记录的补充的,重启named,把这对密钥拷贝到www的主机上,用它们来更新记录。

chmod 660 /var/named;
chown :named /var/named;
killall named ;
named –u named;

4,我把那对密钥放到了/etc/named下,我们用它来更新www的A记录



5,测试dig –t A www.laoguang.me @172.16.1.1

修改成功了吧,你可以看看DNS的/var/named下会生成一个jnl的文件作为原来资源记录文件的补充。

补充:我们可以写一个脚本,让www根据自己的IP自动更新,这个大家自己写写吧。

八,BIND日志

对于任何服务来说,日志都是必要的且都是很重要的,所以我们bind也不例外,我们记录bind的错误日志,谁查询了我的记录(当然如果一个实际的dns记录这个话会很悲催的,因为你的日志文件马上就会爆掉你硬盘),以及别的应用。下面我们简单来说一下日志吧,就那记录谁查询我们的记录为例吧:

1,在DNS主配置文件/etc/named/named.conf中加入logging区块,如下

options {
directory "/var/named";
allow-transfer { key "ns-ns2.key"; };
};
logging {
channel "query" {      ##定义一个channel
file "query.log" versions 3 size 3; ##以文件形式存放
severity dynamic;     ##动态的存储严重等级
print-time yes;         ##打印时间
print-severity yes;     ##打印严重等级
print-category yes;    ##打印存储的种类
};

channel "secure" {
syslog daemon;          ##把日志传送给syslogd,以daemon方式记录
severity error;            ##记录error级别的
print-severity yes;
print-category yes;
};
category "queries" { query; };    ##指定记录种类用的channel
category "security" { secure; }; 

};

severity等级有:critical error warning notice info debug [level] dynamic
category种类有:

2,重启named,测试查询,看看有没有记录


到此,bind我们就介绍完了,谢谢收看。。。。。