说明:本文并不是一上来就搭建包含view下主从+子域授权+转发域的实验环境,我们按照先易后难的顺序逐渐深入搭建的。特此说明。

===============================实战=======================================

规划:

主DNS:192.168.0.10

从DNS:192.168.0.11 其他地址:192.168.0.13、192.168.0.14

子域DNS:192.168.0.12

注意:所有工作之前,将所有的主机进行如下设置

[root@localhost ~]# setenforce 0 #selinux

[root@localhost ~]# systemctl stop firewalld.service #防火墙

实验一、建立区域和相应的区域数据文件(在主服务器192.168.0.10上实验)

1.修改主配置文件:

[root@localhost ~]# vim /etc/named.conf

修改如下几行内容: 

listen-on port 53 { any; }; #由listen-on port 53 { 127.0.0.1; };修改

allow-query     { any; }; #由allow-query     { localhost; };修改

修改后检查主配置文件是否有语法错误:

[root@localhost ~]# named-checkconf

修改主配置文件:

[root@localhost ~]# vim /etc/named.rfc1912.zones

在最后追加想要添加的区域,本例中创建一个正向区域和一个相对应的反向区域:ljzlinux.com、0.168.192.in-addr.arpa

zone "ljzlinux.com" IN {    type master;    file "ljzlinux.com.zone";    allow-update { none; };};zone "0.168.192.in-addr.arpa" IN {    type master;    file "0.168.192.zone";    allow-update { none; };};

2.创建以上两个区域的区域数据文件:

[root@localhost named]# vim /var/named/ljzlinux.com.zone #创建正向区域数据文件

$TTL 600 @       IN SOA  ns1.ljzlinux.com. admin.ljzlinux.com. (            0       ; serial            1D      ; refresh            1H      ; retry            1W      ; expire            3H )    ; minimum@       IN      NS      ns1.ljzlinux.com.IN      NS      ns2.ljzlinux.com.IN      MX      10 mailns1     IN      A       192.168.0.10ns2     IN      A       192.168.0.11mail    IN      A       192.168.0.101www.ljzlinux.com.       IN      A       192.168.0.102#此处使用全称www     IN      A       192.168.0.103ftp     IN      CNAME   www

                                                       

修改后检查区域数据文件是否有语法错误:

[root@localhost ~]# named-checkzone ljzlinux.com /var/named/ljzlinux.com.zone 

zone ljzlinux.com.zone/IN: loaded serial 0

OK

[root@localhost named]# vim /var/named/0.168.192.zone #创建反向区域数据文件

#反向区域数据文件可以在正向区域数据文件的基础上修改,通过cp -a 命令复制。反向区域数据文件只保留SOA、NS记录,其他的A记录转换为PTR记录,CNAME也要转换为PTR.

$TTL 600         @       IN SOA  ns1.ljzlinux.com. admin.ljzlinux.com. (        0       ; serial        1D      ; refresh        1H      ; retry        1W      ; expire        3H )    ; minimum@       IN      NS      ns1.ljzlinux.com.#注意(易错点):值中的FQDN部分在反向解析库中需要写全称       IN      NS      ns2.ljzlinux.com.10      IN      PTR     ns1.ljzlinux.com.11      IN      PTR     ns2.ljzlinux.com.101      IN      PTR     mail.ljzlinux.com.102     IN      PTR     www.ljzlinux.com.103     IN      PTR     www.ljzlinux.com.102     IN      PTR     ftp.ljzlinux.com.#102.0.168.192.in-addr.arpa.     IN      PTR     ftp.ljzlinux.com.#这是IP全称的写法

修改后检查区域数据文件是否有语法错误:

[root@localhost named]# named-checkzone 0.168.192.zone /var/named/0.168.192.zone

自己建立的区域数据文件一定要修改其属主属主为root:named,权限为640:

[root@localhost named]# chown root:named ljzlinux.com.zone 0.168.192.zone 

[root@localhost named]# chmod 640 ljzlinux.com.zone 0.168.192.zone 

#以上部分完成后就完成了区域和区域数据文件的建立。

实验二:在实验一的基础上,通过view(视图)实现分离解析:

view定义:DNS服务器有一个高级的功能,能够实现不同的用户访问同一个域名,把域名解析成不同的IP地址,使用户能够访问离他最近的服务器上的数据,这就是 DNS服务器的视图功能。使用DNS服务器的视图功能可以增加网站的响应速度。例如,当我们网站的数据同步在两台web服务器上时,一台是电信服务器,一台是网通服务器,那么我们肯定希望全国访问我们网站的用户在打开网站的时候,能够自动实现,电信用户访问电信服务器,网通用户访问网通服务器。配置这种情 况的前提是,web服务器必须要有一个电信的IP地址和一个网通的IP地址。DNS服务器的这种解析功能通常也被称之为智能解析。

view视图的实现:通过view下的match-clients语句控制此view的访问客户端来源,以实现分离解析。view视图主要格式为:

view “VIEW_NAME” {    match-clients { IP;ACL; };#此语句是view中最关键的一个语句,使用访问IP的控制,可以使用预先定义的ACL(访问控制列表)    zone ....};

view视图特点:要求所有的zone都要包含在view视图中。view视图是根据配置文件从上往下匹配的,所以希望优先访问的资源记录文件、区域应该尽量写前面。

1.修改主配置文件:

将/etc/named.conf中的根区域复制到/etc/named.rfc1912.zones文件中,以便让view视图能够覆盖所有的zone:

zone "." IN {        type hint;        file "named.ca";};

将所有的zone进行view划分:划分为unicom、telecom、default。每个view都包括所有的zone。

[root@localhost named]# vim /etc/named.rfc1912.zones

// named.rfc1912.zones://// Provided by Red Hat caching-nameserver package //// ISC BIND named zone configuration for zones recommended by// RFC 1912 section 4.1 : localhost TLDs and address zones// and http://www.ietf.org/internet-drafts/draft-ietf-dnsop-default-local-zones-02.txt// (c)2007 R W Franks// // See /usr/share/doc/bind*/sample/ for example named configuration files.//#以下自定义ACLacl "unicom" {    192.168.0.0/24;};acl "telecom" {    1.1.1.0/24;};

#以下定义的是视图unicom,注意:同一个zone在不同视图下要用file指定不同的区域数据文件,通过此法实现解析分离(例如ljzlinux.com的区域数据文件在unicom视图下为ljzlinux.com.zone.unicom,在teltcom视图下为ljzlinux.com.zone.telecom。分别在这两个区域数据文件中定义同一个服务器的不同的网址。)

view "unicom" {    match-clients { unicom; };    zone "." IN {    type hint;    file "named.ca";};zone "localhost.localdomain" IN {    type master;    file "named.localhost";    allow-update { none; };};zone "localhost" IN {    type master;    file "named.localhost";    allow-update { none; };};zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {    type master;    file "named.loopback";    allow-update { none; };};zone "1.0.0.127.in-addr.arpa" IN {    type master;    file "named.loopback";    allow-update { none; };};zone "0.in-addr.arpa" IN {    type master;    file "named.empty";    allow-update { none; };};zone "ljzlinux.com" IN {    type master;    file "ljzlinux.com.zone.unicom";    allow-update { none; };};zone "0.168.192.in-addr.arpa" IN {    type master;    file "0.168.192.zone.unicom";    allow-update { none; };};};#以下定义的是视图telecomview "telecom" {    match-clients { telecom; };    zone "." IN {    type hint;    file "named.ca";};zone "localhost.localdomain" IN {    type master;    file "named.localhost";    allow-update { none; };};zone "localhost" IN {    type master;    file "named.localhost";    allow-update { none; };};zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {    type master;    file "named.loopback";    allow-update { none; };};zone "1.0.0.127.in-addr.arpa" IN {    type master;    file "named.loopback";    allow-update { none; };};zone "0.in-addr.arpa" IN {    type master;    file "named.empty";    allow-update { none; };};zone "ljzlinux.com" IN {    type master;    file "ljzlinux.com.zone.telecom";    allow-update { none; };};zone "1.1.1.in-addr.arpa" IN {#将0.168.192.in-addr.arpa修改为1.1.1.in-addr.arpa    type master;    file "1.1.1.zone.telecom";#注意此处的文件名的修改    allow-update { none; };};};#以下部分定义的default视图,如果unicom和telecom视图都没有匹配到的ip会访问此视图。view "default" {    match-clients { any; };zone "." IN {    type hint;    file "named.ca";};zone "localhost.localdomain" IN {    type master;    file "named.localhost";    allow-update { none; };};zone "localhost" IN {    type master;    file "named.localhost";    allow-update { none; };};zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {    type master;    file "named.loopback";    allow-update { none; };};zone "1.0.0.127.in-addr.arpa" IN {    type master;    file "named.loopback";    allow-update { none; };};zone "0.in-addr.arpa" IN {    type master;    file "named.empty";    allow-update { none; };};zone "ljzlinux.com" IN {    type master;    file "ljzlinux.com.zone.unicom";    allow-update { none; };};zone "0.168.192.in-addr.arpa" IN {    type master;    file "0.168.192.zone.unicom";    allow-update { none; };};};

2.修改区域数据文件:

创建正向区域数据文件ljzlinux.com.zone.unicom: #此文件使用原来的内容,所以无需改动,只需要修改一下解析库(区域数据文件)文件名即可

[root@localhost named]# cp -a ljzlinux.com.zone ljzlinux.com.zone.unicom

创建正向区域数据文件ljzlinux.com.zone.telecom:

[root@localhost named]# cp -a ljzlinux.com.zone ljzlinux.com.zone.telecom

[root@localhost named]# vim ljzlinux.com.zone.telecom 

$TTL 600             @       IN SOA  ns1.ljzlinux.com. admin.ljzlinux.com. (            0       ; serial            1D      ; refresh            1H      ; retry            1W      ; expire            3H )    ; minimum@       IN      NS      ns1.ljzlinux.com.            IN      NS      ns2.ljzlinux.com.            IN      MX      10 mailns1      IN      A       1.1.1.10ns2     IN      A       1.1.1.11mail    IN      A       1.1.1.101www.ljzlinux.com.       IN      A       1.1.1.102www     IN      A       1.1.1.103ftp     IN      CNAME   www

创建反向区域数据文件0.168.192.zone.unicom:

[root@localhost named]# cp -a 0.168.192.zone 0.168.192.zone.unicom

创建反向区域数据文件1.1.1.zone.telecom:

[root@localhost named]# cp -a 0.168.192.zone 1.1.1.zone.telecom

[root@localhost named]# vim 1.1.1.zone.telecom

#因为此处我的反向区域数据文件使用的是简写IP,而我修改了主配置文件中区域的名称为1.1.1.in-addr.arpa,IP自动补全后正是我们需要的IP,所以无需修改。

#如果你的IP不是简写的,需要将你ip修改为其正向区域对应的IP。

至此,view视图配置完毕。

进行如下测试:

[root@localhost named]# ifconfig eno16777736:0 1.1.1.10/24
#配置一个1.1.1.0/24网段的地址,将此服务器配置成IP为1.1.1.10的DNS服务器[root@localhost named]# ifconfig eno16777736:1 11.11.11.10/24#配置一个11.11.11.0/24网段的地址。
[root@localhost named]# dig -t A www.ljzlinux.com @192.168.0.10
# ; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7_2.4 <<>> -t A www.ljzlinux.com @192.168.0.10# ;; global options: +cmd# ;; Got answer:# ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 15217# ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 3# ;; OPT PSEUDOSECTION:# ; EDNS: version: 0, flags:; udp: 4096# ;; QUESTION SECTION:# ;www.ljzlinux.com.              IN      A# ;; ANSWER SECTION:# www.ljzlinux.com.       600     IN      A       192.168.0.103# www.ljzlinux.com.       600     IN      A       192.168.0.102# ;; AUTHORITY SECTION:# ljzlinux.com.           600     IN      NS      ns1.ljzlinux.com.# ljzlinux.com.           600     IN      NS      ns2.ljzlinux.com.# ;; ADDITIONAL SECTION:# ns1.ljzlinux.com.       600     IN      A       192.168.0.10# ns2.ljzlinux.com.       600     IN      A       192.168.0.11# ;; Query time: 8 msec# ;; SERVER: 192.168.0.10#53(192.168.0.10)# ;; WHEN: Wed Jan 18 08:44:17 EST 2017# ;; MSG SIZE  rcvd: 145

反向解析:

[root@localhost ~]# dig -x 192.168.0.103 @192.168.0.10     # ; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7_2.4 <<>> -x 192.168.0.103 @192.168.0.10# ;; global options: +cmd# ;; Got answer:# ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 9916# ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3# ;; OPT PSEUDOSECTION:# ; EDNS: version: 0, flags:; udp: 4096# ;; QUESTION SECTION:# ;103.0.168.192.in-addr.arpa.    IN      PTR# ;; ANSWER SECTION:# 103.0.168.192.in-addr.arpa. 600 IN      PTR     www.ljzlinux.com.# ;; AUTHORITY SECTION:# 0.168.192.in-addr.arpa. 600     IN      NS      ns2.ljzlinux.com.# 0.168.192.in-addr.arpa. 600     IN      NS      ns1.ljzlinux.com.# ;; ADDITIONAL SECTION:# ns1.ljzlinux.com.       600     IN      A       192.168.0.10# ns2.ljzlinux.com.       600     IN      A       192.168.0.11# ;; Query time: 0 msec# ;; SERVER: 192.168.0.10#53(192.168.0.10)# ;; WHEN: Thu Jan 19 07:17:54 EST 2017# ;; MSG SIZE  rcvd: 153[root@localhost named]# dig -t A www.ljzlinux.com @1.1.1.10# ; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7_2.4 <<>> -t A www.ljzlinux.com @1.1.1.10# ;; global options: +cmd# ;; Got answer:# ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 57698# ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 3# ;; OPT PSEUDOSECTION:# ; EDNS: version: 0, flags:; udp: 4096# ;; QUESTION SECTION:# ;www.ljzlinux.com.              IN      A# ;; ANSWER SECTION:# www.ljzlinux.com.       600     IN      A       1.1.1.102# www.ljzlinux.com.       600     IN      A       1.1.1.103# ;; AUTHORITY SECTION:# ljzlinux.com.           600     IN      NS      ns1.ljzlinux.com.# ljzlinux.com.           600     IN      NS      ns2.ljzlinux.com.# ;; ADDITIONAL SECTION:# ns1.ljzlinux.com.       600     IN      A       1.1.1.10# ns2.ljzlinux.com.       600     IN      A       1.1.1.11# ;; Query time: 0 msec# ;; SERVER: 1.1.1.10#53(1.1.1.10)# ;; WHEN: Wed Jan 18 08:40:33 EST 2017# ;; MSG SIZE  rcvd: 145

反向解析测试

[root@localhost ~]# dig -x 1.1.1.103 @1.1.1.10             # ; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7_2.4 <<>> -x 1.1.1.103 @1.1.1.10# ;; global options: +cmd# ;; Got answer:# ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 56412# ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3# ;; OPT PSEUDOSECTION:# ; EDNS: version: 0, flags:; udp: 4096# ;; QUESTION SECTION:# ;103.1.1.1.in-addr.arpa.                IN      PTR# ;; ANSWER SECTION:# 103.1.1.1.in-addr.arpa. 600     IN      PTR     www.ljzlinux.com.# ;; AUTHORITY SECTION:# 1.1.1.in-addr.arpa.     600     IN      NS      ns1.ljzlinux.com.# 1.1.1.in-addr.arpa.     600     IN      NS      ns2.ljzlinux.com.# ;; ADDITIONAL SECTION:# ns1.ljzlinux.com.       600     IN      A       1.1.1.10# ns2.ljzlinux.com.       600     IN      A       1.1.1.11# ;; Query time: 0 msec# ;; SERVER: 1.1.1.10#53(1.1.1.10)# ;; WHEN: Thu Jan 19 07:16:07 EST 2017# ;; MSG SIZE  rcvd: 149[root@localhost named]# dig -t A www.ljzlinux.com @11.11.11.10 # ; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7_2.4 <<>> -t A www.ljzlinux.com @11.11.11.10# ;; global options: +cmd# ;; Got answer:# ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 49483# ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 3# ;; OPT PSEUDOSECTION:# ; EDNS: version: 0, flags:; udp: 4096# ;; QUESTION SECTION:# ;www.ljzlinux.com.              IN      A# ;; ANSWER SECTION:# www.ljzlinux.com.       600     IN      A       192.168.0.102# www.ljzlinux.com.       600     IN      A       192.168.0.103# ;; AUTHORITY SECTION:# ljzlinux.com.           600     IN      NS      ns2.ljzlinux.com.# ljzlinux.com.           600     IN      NS      ns1.ljzlinux.com.# ;; ADDITIONAL SECTION:# ns1.ljzlinux.com.       600     IN      A       192.168.0.10# ns2.ljzlinux.com.       600     IN      A       192.168.0.11# ;; Query time: 0 msec# ;; SERVER: 11.11.11.10#53(11.11.11.10)# ;; WHEN: Wed Jan 18 08:45:36 EST 2017# ;; MSG SIZE  rcvd: 145[root@localhost ~]# dig -x 192.168.0.103 @11.11.11.10  # ; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7_2.4 <<>> -x 192.168.0.103 @11.11.11.10# ;; global options: +cmd# ;; Got answer:# ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10269# ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3# ;; OPT PSEUDOSECTION:# ; EDNS: version: 0, flags:; udp: 4096# ;; QUESTION SECTION:# ;103.0.168.192.in-addr.arpa.    IN      PTR# ;; ANSWER SECTION:# 103.0.168.192.in-addr.arpa. 600 IN      PTR     www.ljzlinux.com.# ;; AUTHORITY SECTION:# 0.168.192.in-addr.arpa. 600     IN      NS      ns2.ljzlinux.com.# 0.168.192.in-addr.arpa. 600     IN      NS      ns1.ljzlinux.com.# ;; ADDITIONAL SECTION:# ns1.ljzlinux.com.       600     IN      A       192.168.0.10# ns2.ljzlinux.com.       600     IN      A       192.168.0.11# ;; Query time: 0 msec# ;; SERVER: 11.11.11.10#53(11.11.11.10)# ;; WHEN: Thu Jan 19 07:19:41 EST 2017# ;; MSG SIZE  rcvd: 153

可以看到使用同IP的NS服务器访问,会得到不同的解析结果。

实验三、主从DNS服务器配置(在以上基础上实现):

配置目的:如果只有一个DNS服务器工作,出现宕机,造成损失。为了实现当有一台服务器出现宕机情况时,仍能够提供正常的服务,就出现了主从DNS服务器的搭建。主和从的解析库(区域数据文件)内容是完全一样的,从的解析库是从主上面完全copy来的,所以要让两台服务器都能够提供解析功能,这两台NS服务器都必须在主的区域配置文件中定义。(例如实验一中的ns1和ns2。)

如何实现:只需在主的zone中用allow-transfer { IP; };指定要进行数据传输的从IP,然后在从的同一zone中用masters { IP; };指定要从哪台主服务器进行数据传输。所以对于主从复制,每个zone都需要allow-transfer、transfer-source两个参数同时指定,二者缺一不可。

1.修改主的配置文件中要进行传输zone:(本例配置ljzlinux.com.和其反向区域0.168.192.in-addr.arpa)

[root@localhost named]# vim /etc/named.rfc1912.zones

#在需要的zone中加入allow-transfer { 192.168.0.11; };语句

。。。。。之前部分省略。。。。。

zone "ljzlinux.com" IN {

type master;

file "ljzlinux.com.zone";

allow-update { none; };

allow-transfer { 192.168.0.11; } #此语句为新增

};

zone "0.168.192.in-addr.arpa" IN {

type master;

file "0.168.192.zone";

allow-update { none; };

allow-transfer { 192.168.0.11; } #此语句为新增

};

2.修改从的配置文件中相应的zone:

从的配置可以将主的配置文件复制过来进行修改:

[root@localhost named]#scp -a 192.168.0.10:/etc/named.rfc1912.zones  /etc/named.rfc1912.zones [root@localhost named]# vim /etc/named.rfc1912.zones 。。。。。之前部分省略。。。。。zone "ljzlinux.com" IN {    type slave;#由原来的type master;修改    file "slaves/ljzlinux.com.zone";#由原来的file "ljzlinux.com.zone";修改    allow-update { none; };    masters { 192.168.0.10; }#此语句为新增    masterfile-format text;#如果复制到slaves目录下的文件是乱码,使用此语句。};zone "0.168.192.in-addr.arpa" IN {    type slave;    file "slaves/0.168.192.zone";    allow-update { none; };    masters { 192.168.0.10; }#此语句为新增    masterfile-format text;};

至此,简单的主从DNS服务器搭建完毕。

实验四:搭建view下的主从DNS服务器:

与简单主从的区别:view视图下主从DNS服务器要求:主服务器下的每个view都需要从服务器的一个IP来传输,不能用同一个IP来传输多个view,所以主有几个view,从就需要几个IP。

如何实现:主设置与简单主从一样,只需在主的view(或zone)中用allow-transfer { IP; };指定要进行数据传输的从IP,但需要注意的是每个view使用不同的从IP,不能重复。其次,从的设置是在简单主从的基础上,增加transfer-source IP;来指定此view用从的哪个IP去传输数据,注意此语句的IP不能用花括号扩起来。还要注意的一点就是:在主、从相应的同一个view中,主allow-transfer { IP; }与从transfer-source IP;要一致。这样才能建立传输连接进行传输。所以对于view视图下的主从复制,每个zone都需要allow-transfer、transfer-source、masters三个参数同时指定,缺一不可。

说明:此试验在view建立之下实验:

1.修改主DNS服务器的主配置文件:

[root@localhost named]# vim /etc/named.rfc1912.zones // named.rfc1912.zones://// Provided by Red Hat caching-nameserver package //// ISC BIND named zone configuration for zones recommended by// RFC 1912 section 4.1 : localhost TLDs and address zones// and http://www.ietf.org/internet-drafts/draft-ietf-dnsop-default-local-zones-02.txt// (c)2007 R W Franks// // See /usr/share/doc/bind*/sample/ for example named configuration files.//acl "unicom" {192.168.0.0/24;};acl "telecom" {1.1.1.0/24;};view "unicom" {match-clients { 192.168.0.11;!192.168.0.13;!192.168.0.14;unicom; };#需要在match-clients中添加从服务器同步view的IP地址。其中!192.168.0.13意思是排除此IP.allow-transfer { 192.168.0.11; };#添加此行,allow-transfer允许同步该view的从服务器的IP地址(注意allow-transfer位置不同,作用域不同)zone "." IN {type hint;file "named.ca";};zone "localhost.localdomain" IN {type master;file "named.localhost";allow-update { none; };};zone "localhost" IN {type master;file "named.localhost";allow-update { none; };};zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {type master;file "named.loopback";allow-update { none; };};zone "1.0.0.127.in-addr.arpa" IN {type master;file "named.loopback";allow-update { none; };};zone "0.in-addr.arpa" IN {type master;file "named.empty";allow-update { none; };};zone "ljzlinux.com" IN {type master;file "ljzlinux.com.zone.unicom";allow-update { none; };};zone "0.168.192.in-addr.arpa" IN {type master;file "0.168.192.zone.unicom";allow-update { none; };};};view "telecom" {match-clients { !192.168.0.11;192.168.0.13;!192.168.0.14;telecom; };#修改此行allow-transfer { 192.168.0.13; };#此行为新增zone "." IN {type hint;file "named.ca";};zone "localhost.localdomain" IN {type master;file "named.localhost";allow-update { none; };};zone "localhost" IN {type master;file "named.localhost";allow-update { none; };};zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {type master;file "named.loopback";allow-update { none; };};zone "1.0.0.127.in-addr.arpa" IN {type master;file "named.loopback";allow-update { none; };};zone "0.in-addr.arpa" IN {type master;file "named.empty";allow-update { none; };};zone "ljzlinux.com" IN {type master;file "ljzlinux.com.zone.telecom";allow-update { none; };};zone "1.1.1.in-addr.arpa" IN {type master;file "1.1.1.zone.telecom";allow-update { none; };};};view "default" {match-clients { !192.168.0.11;!192.168.0.13;192.168.0.14;any; };#修改此行allow-transfer { 192.168.0.14; };#此行为新增zone "." IN {type hint;file "named.ca";};zone "localhost.localdomain" IN {type master;file "named.localhost";allow-update { none; };};zone "localhost" IN {type master;file "named.localhost";allow-update { none; };};zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {type master;file "named.loopback";allow-update { none; };};zone "1.0.0.127.in-addr.arpa" IN {type master;file "named.loopback";allow-update { none; };};zone "0.in-addr.arpa" IN {type master;file "named.empty";allow-update { none; };};zone "ljzlinux.com" IN {type master;file "ljzlinux.com.zone.unicom";allow-update { none; };};zone "0.168.192.in-addr.arpa" IN {type master;file "0.168.192.zone.unicom";allow-update { none; };};};

2.修改从服务器的主配置文件;

我们将主的配置文件复制过来,在其基础上进行修改:

[root@localhost ~]# scp -p 192.168.0.10:/etc/named.conf /etc/named.conf[root@localhost ~]# scp -p 192.168.0.10:/etc/named.rfc1912.zones /etc/named.rfc1912.zones[root@localhost ~]# vim /etc/named.rfc1912.zones[root@localhost slaves]# cat /etc/named.rfc1912.zones// named.rfc1912.zones://// Provided by Red Hat caching-nameserver package //// ISC BIND named zone configuration for zones recommended by// RFC 1912 section 4.1 : localhost TLDs and address zones// and http://www.ietf.org/internet-drafts/draft-ietf-dnsop-default-local-zones-02.txt// (c)2007 R W Franks// // See /usr/share/doc/bind*/sample/ for example named configuration files.//acl "unicom" {192.168.0.0/24;};acl "telecom" {1.1.1.0/24;};view "unicom" {match-clients { 192.168.0.11;!192.168.0.13;!192.168.0.14;unicom; }; transfer-source 192.168.0.11; #将此行由原来的allow-transfer 修改为transfer-source,注意IP地址要一样,且去掉花括号。(其他view修改雷同)zone "." IN {type hint;file "named.ca";};zone "localhost.localdomain" IN {type master;file "named.localhost";allow-update { none; };};zone "localhost" IN {type master;file "named.localhost";allow-update { none; };};zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {type master;file "named.loopback";allow-update { none; };};zone "1.0.0.127.in-addr.arpa" IN {type master;file "named.loopback";allow-update { none; };};zone "0.in-addr.arpa" IN {type master;file "named.empty";allow-update { none; };};zone "ljzlinux.com" IN {type slave;file "slaves/ljzlinux.com.zone.unicom";masterfile-format text;masters { 192.168.0.10; };masterfile-format text;#从主服务器复制来的文件是乱码时,采用此选项};zone "0.168.192.in-addr.arpa" IN {type slave;file "slaves/0.168.192.zone.unicom";masterfile-format text;masters { 192.168.0.10; };masterfile-format text;};};view "telecom" {match-clients { !192.168.0.11;192.168.0.13;!192.168.0.14;telecom; }; transfer-source 192.168.0.13; zone "." IN {type hint;file "named.ca";};zone "localhost.localdomain" IN {type master;file "named.localhost";allow-update { none; };};zone "localhost" IN {type master;file "named.localhost";allow-update { none; };};zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {type master;file "named.loopback";allow-update { none; };};zone "1.0.0.127.in-addr.arpa" IN {type master;file "named.loopback";allow-update { none; };};zone "0.in-addr.arpa" IN {type master;file "named.empty";allow-update { none; };};zone "ljzlinux.com" IN {type slave;file "slaves/ljzlinux.com.zone.telecom";masterfile-format text;masters { 192.168.0.10; };masterfile-format text;};zone "1.1.1.in-addr.arpa" IN {type slave;file "slaves/1.1.1.zone.telecom";masterfile-format text;masters { 192.168.0.10; };masterfile-format text;};};view "default" {match-clients{ !192.168.0.11;!192.168.0.13;192.168.0.14;any; }; transfer-source 192.168.0.14; zone "." IN {type hint;file "named.ca";};zone "localhost.localdomain" IN {type master;file "named.localhost";allow-update { none; };};zone "localhost" IN {type master;file "named.localhost";allow-update { none; };};zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {type master;file "named.loopback";allow-update { none; };};zone "1.0.0.127.in-addr.arpa" IN {type master;file "named.loopback";allow-update { none; };};zone "0.in-addr.arpa" IN {type master;file "named.empty";allow-update { none; };};zone "ljzlinux.com" IN {type slave;file "slaves/ljzlinux.com.zone.unicom";masterfile-format text;masters { 192.168.0.10; };masterfile-format text;};zone "0.168.192.in-addr.arpa" IN {type slave;file "slaves/0.168.192.zone.unicom";masterfile-format text;masters { 192.168.0.10; };masterfile-format text;};};

由于文件是从主服务器上复制过来的,需要修改其属主和数组:

[root@localhost ~]# chown root:named /etc/named.rfc1912.zones

3.为从服务器增加两个ip地址:

[root@localhost slaves]# cd /etc/sysconfig/network-scripts/[root@localhost network-scripts]# cp ifcfg-eno16777736 ifcfg-eno16777736:0[root@localhost network-scripts]# vim ifcfg-eno16777736:0

修改如下几行:

NAME=eno16777736:0

DEVICE=eno16777736:0

IPADDR=192.168.0.13

[root@localhost network-scripts]# cp ifcfg-eno16777736 ifcfg-eno16777736:1[root@localhost network-scripts]# vim ifcfg-eno16777736:1

修改如下几行:

NAME=eno16777736:1

DEVICE=eno16777736:1

IPADDR=192.168.0.14

重启network服务:

[root@localhost network-scripts]# systemctl restart network.service

重启naned服务:

[root@localhost slaves]# systemctl restart named.service

4.从DNS解析测试:

首先将主DNS服务器关机:

然后为从DNS服务器再增加两个不同网段的IP,用于测试不同网段的请求:

[root@localhost slaves]# ifconfig eno16777736:2 1.1.1.11/24[root@localhost slaves]# ifconfig eno16777736:3 11.11.11.11/24

重启named服务:

[root@localhost slaves]# systemctl restart named

正式测试:

[root@localhost slaves]# dig -t A www.ljzlinux.com @192.168.0.11
# ; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7_2.4 <<>> -t A www.ljzlinux.com @192.168.0.11# ;; global options: +cmd# ;; Got answer:# ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 55341# ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 3# ;; OPT PSEUDOSECTION:# ; EDNS: version: 0, flags:; udp: 4096# ;; QUESTION SECTION:# ;www.ljzlinux.com.              IN      A# ;; ANSWER SECTION:# www.ljzlinux.com.       600     IN      A       192.168.0.102# www.ljzlinux.com.       600     IN      A       192.168.0.103# ;; AUTHORITY SECTION:# ljzlinux.com.           600     IN      NS      ns2.ljzlinux.com.# ljzlinux.com.           600     IN      NS      ns1.ljzlinux.com.# ;; ADDITIONAL SECTION:# ns1.ljzlinux.com.       600     IN      A       192.168.0.10# ns2.ljzlinux.com.       600     IN      A       192.168.0.11# ;; Query time: 0 msec# ;; SERVER: 192.168.0.11#53(192.168.0.11)# ;; WHEN: Thu Jan 19 09:56:02 EST 2017# ;; MSG SIZE  rcvd: 145

解析成功!

[root@localhost slaves]# dig -x 192.168.0.103 @192.168.0.11      # ; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7_2.4 <<>> -x192.168.0.103 @192.168.0.11# ;; global options: +cmd# ;; Got answer:# ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 62294# ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3# ;; OPT PSEUDOSECTION:# ; EDNS: version: 0, flags:; udp: 4096# ;; QUESTION SECTION:# ;103.0.168.192.in-addr.arpa.    IN      PTR# ;; ANSWER SECTION:# 103.0.168.192.in-addr.arpa. 600 IN      PTR     www.ljzlinux.com.# ;; AUTHORITY SECTION:# 0.168.192.in-addr.arpa. 600     IN      NS      ns2.ljzlinux.com.# 0.168.192.in-addr.arpa. 600     IN      NS      ns1.ljzlinux.com.# ;; ADDITIONAL SECTION:# ns1.ljzlinux.com.       600     IN      A       192.168.0.10# ns2.ljzlinux.com.       600     IN      A       192.168.0.11# ;; Query time: 0 msec# ;; SERVER: 192.168.0.11#53(192.168.0.11)# ;; WHEN: Thu Jan 19 09:56:31 EST 2017# ;; MSG SIZE  rcvd: 153

解析成功!

[root@localhost named]# dig -x 1.1.1.102 @192.168.0.10    # ; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7_2.4 <<>> -x 1.1.1.102 @192.168.0.10# ;; global options: +cmd# ;; Got answer:# ;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 1686# ;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1# ;; OPT PSEUDOSECTION:# ; EDNS: version: 0, flags:; udp: 4096# ;; QUESTION SECTION:# ;102.1.1.1.in-addr.arpa.                IN      PTR# ;; Query time: 1060 msec# ;; SERVER: 192.168.0.10#53(192.168.0.10)# ;; WHEN: Fri Jan 20 08:58:56 EST 2017# ;; MSG SIZE  rcvd: 51

解析失败!  这是为什么呢?我们知道,在view作用下为了实现分离解析提高网站的相应速度,我们让1台主机拥有两个不同网段的IP,例如www.ljzlinux.com主机的ip分别为192.168.0.103(我们假设为网通unicom内的IP)和1.1.1.103(假设为telecom内IP),从而实现来自网通用户通过网通IP访问,来自电信用户通过电信IP访问。而来自192.168.0.10 这台NS服务器的请求在view作用下,按照上面的配置文件,反向解析只能解析192.168.0.0/24网段内主机,而不能解析1.1.1.0/24这个网段内的主机,因为我们在view "teltcom"下我们只配置了zone "0.168.192.in-addr.arpa"而没有配置zone "1.1.1.in-addr.arpa"。

综上总结:如上面的例子,为了让网通用户(192.168.0.10)不仅能够反向解析网通IP(192.168.0.103),又能反向解析电信IP(1.1.1.103)。网通view视图下的反向解析应同时包含所有网段的反向解析库。

[root@localhost slaves]# dig -t A www.ljzlinux.com @1.1.1.11    # ; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7_2.4 <<>> -t A www.ljzlinux.com @1.1.1.11# ;; global options: +cmd# ;; Got answer:# ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 9442# ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 3# ;; OPT PSEUDOSECTION:# ; EDNS: version: 0, flags:; udp: 4096# ;; QUESTION SECTION:# ;www.ljzlinux.com.              IN      A# ;; ANSWER SECTION:# www.ljzlinux.com.       600     IN      A       1.1.1.102# www.ljzlinux.com.       600     IN      A       1.1.1.103# ;; AUTHORITY SECTION:# ljzlinux.com.           600     IN      NS      ns2.ljzlinux.com.# ljzlinux.com.           600     IN      NS      ns1.ljzlinux.com.# ;; ADDITIONAL SECTION:# ns1.ljzlinux.com.       600     IN      A       1.1.1.10# ns2.ljzlinux.com.       600     IN      A       1.1.1.11# ;; Query time: 0 msec# ;; SERVER: 1.1.1.11#53(1.1.1.11)# ;; WHEN: Thu Jan 19 09:56:59 EST 2017# ;; MSG SIZE  rcvd: 145[root@localhost slaves]# dig -x 1.1.1.101 @1.1.1.11               # ; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7_2.4 <<>> -x 1.1.1.101 @1.1.1.11# ;; global options: +cmd# ;; Got answer:# ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12199# ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3# ;; OPT PSEUDOSECTION:# ; EDNS: version: 0, flags:; udp: 4096# ;; QUESTION SECTION:# ;101.1.1.1.in-addr.arpa.                IN      PTR# ;; ANSWER SECTION:# 101.1.1.1.in-addr.arpa. 600     IN      PTR     mail.ljzlinux.com.# ;; AUTHORITY SECTION:# 1.1.1.in-addr.arpa.     600     IN      NS      ns2.ljzlinux.com.# 1.1.1.in-addr.arpa.     600     IN      NS      ns1.ljzlinux.com.# ;; ADDITIONAL SECTION:# ns1.ljzlinux.com.       600     IN      A       1.1.1.10# ns2.ljzlinux.com.       600     IN      A       1.1.1.11# ;; Query time: 0 msec# ;; SERVER: 1.1.1.11#53(1.1.1.11)# ;; WHEN: Thu Jan 19 09:57:37 EST 2017# ;; MSG SIZE  rcvd: 150[root@localhost slaves]# dig -t A www.ljzlinux.com @11.11.11.11# ; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7_2.4 <<>> -t A www.ljzlinux.com @11.11.11.11# ;; global options: +cmd# ;; Got answer:# ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 7303# ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 3# ;; OPT PSEUDOSECTION:# ; EDNS: version: 0, flags:; udp: 4096# ;; QUESTION SECTION:# ;www.ljzlinux.com.              IN      A# ;; ANSWER SECTION:# www.ljzlinux.com.       600     IN      A       192.168.0.103# www.ljzlinux.com.       600     IN      A       192.168.0.102# ;; AUTHORITY SECTION:# ljzlinux.com.           600     IN      NS      ns2.ljzlinux.com.# ljzlinux.com.           600     IN      NS      ns1.ljzlinux.com.# ;; ADDITIONAL SECTION:# ns1.ljzlinux.com.       600     IN      A       192.168.0.10# ns2.ljzlinux.com.       600     IN      A       192.168.0.11# ;; Query time: 0 msec# ;; SERVER: 11.11.11.11#53(11.11.11.11)# ;; WHEN: Thu Jan 19 09:57:50 EST 2017# ;; MSG SIZE  rcvd: 145[root@localhost slaves]# dig -x 192.168.0.101 @11.11.11.11     # ; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7_2.4 <<>> -x 192.168.0.101 @11.11.11.11# ;; global options: +cmd# ;; Got answer:# ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 58867# ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3# ;; OPT PSEUDOSECTION:# ; EDNS: version: 0, flags:; udp: 4096# ;; QUESTION SECTION:# ;101.0.168.192.in-addr.arpa.    IN      PTR# ;; ANSWER SECTION:# 101.0.168.192.in-addr.arpa. 600 IN      PTR     mail.ljzlinux.com.# ;; AUTHORITY SECTION:# 0.168.192.in-addr.arpa. 600     IN      NS      ns2.ljzlinux.com.# 0.168.192.in-addr.arpa. 600     IN      NS      ns1.ljzlinux.com.# ;; ADDITIONAL SECTION:# ns1.ljzlinux.com.       600     IN      A       192.168.0.10# ns2.ljzlinux.com.       600     IN      A       192.168.0.11# ;; Query time: 0 msec# ;; SERVER: 11.11.11.11#53(11.11.11.11)# ;; WHEN: Thu Jan 19 09:58:09 EST 2017# ;; MSG SIZE  rcvd: 154

扩展:为了让来自每个view的客户端能够请求每个view内的IP,需要在每个view内放置所有的反向解析库,上例中需要放置zone "1.1.1.in-addr.arpa" 和zone "0.168.192.in-addr.arpa"这两个解析库,所以配置文件变为如下:

主服务器的主配置文件:

[root@localhost slaves]# vim /etc/named.rfc1912.zones // named.rfc1912.zones://// Provided by Red Hat caching-nameserver package //// ISC BIND named zone configuration for zones recommended by// RFC 1912 section 4.1 : localhost TLDs and address zones// and http://www.ietf.org/internet-drafts/draft-ietf-dnsop-default-local-zones-02.txt// (c)2007 R W Franks// // See /usr/share/doc/bind*/sample/ for example named configuration files.//acl "unicom" {192.168.0.0/24;};acl "telecom" {1.1.1.0/24;};view "unicom" {match-clients { 192.168.0.11;!192.168.0.13;!192.168.0.14;unicom; };allow-transfer { 192.168.0.11; };zone "." IN {type hint;file "named.ca";};zone "localhost.localdomain" IN {type master;file "named.localhost";allow-update { none; };};zone "localhost" IN {type master;file "named.localhost";allow-update { none; };};zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {type master;file "named.loopback";allow-update { none; };};zone "1.0.0.127.in-addr.arpa" IN {type master;file "named.loopback";allow-update { none; };};zone "0.in-addr.arpa" IN {type master;file "named.empty";allow-update { none; };};zone "ljzlinux.com" IN {type master;file "ljzlinux.com.zone.unicom";allow-update { none; };};#zone "ljzlinux.com"让网通用户只能解析到网通网段的IPzone "0.168.192.in-addr.arpa" IN {type master;file "0.168.192.zone.unicom";allow-update { none; };};zone "1.1.1.in-addr.arpa" IN {type master;file "1.1.1.zone.telecom";allow-update { none; };};#以上两个反向区域能够让网通用户既能反向解析网通网段IP,又能反向解析电信网段IP。如果只有zone "0.168.192.in-addr.arpa" ,那么1.1.1.x请求解析IP 192.168.0.x是不能完成的。};view "telecom" {match-clients { !192.168.0.11;192.168.0.13;!192.168.0.14;telecom; };allow-transfer { 192.168.0.13; };zone "." IN {type hint;file "named.ca";};zone "localhost.localdomain" IN {type master;file "named.localhost";allow-update { none; };};zone "localhost" IN {type master;file "named.localhost";allow-update { none; };};zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {type master;file "named.loopback";allow-update { none; };};zone "1.0.0.127.in-addr.arpa" IN {type master;file "named.loopback";allow-update { none; };};zone "0.in-addr.arpa" IN {type master;file "named.empty";allow-update { none; };};zone "ljzlinux.com" IN {type master;file "ljzlinux.com.zone.telecom";allow-update { none; };};zone "0.168.192.in-addr.arpa" IN {type master;file "0.168.192.zone.unicom";allow-update { none; };};zone "1.1.1.in-addr.arpa" IN {type master;file "1.1.1.zone.telecom";allow-update { none; };};};view "default" {match-clients { !192.168.0.11;!192.168.0.13;192.168.0.14;any; };allow-transfer { 192.168.0.14; };zone "." IN {type hint;file "named.ca";};zone "localhost.localdomain" IN {type master;file "named.localhost";allow-update { none; };};zone "localhost" IN {type master;file "named.localhost";allow-update { none; };};zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {type master;file "named.loopback";allow-update { none; };};zone "1.0.0.127.in-addr.arpa" IN {type master;file "named.loopback";allow-update { none; };};zone "0.in-addr.arpa" IN {type master;file "named.empty";allow-update { none; };};zone "ljzlinux.com" IN {type master;file "ljzlinux.com.zone.unicom";allow-update { none; };};zone "0.168.192.in-addr.arpa" IN {type master;file "0.168.192.zone.unicom";allow-update { none; };};zone "1.1.1.in-addr.arpa" IN {type master;file "1.1.1.zone.telecom";allow-update { none; };};};

从服务器的主配置文件:

[root@localhost slaves]# scp 192.168.0.10:/etc/named.rfc1912.zones /etc/named.rfc1912.zones[root@localhost slaves]# vim /etc/named.rfc1912.zones  #主要修改内容:transfer-source 、type slave;、file "slaves/ljzlinux.com.zone.unicom";、masters { 192.168.0.10; };// named.rfc1912.zones://// Provided by Red Hat caching-nameserver package //// ISC BIND named zone configuration for zones recommended by// RFC 1912 section 4.1 : localhost TLDs and address zones// and http://www.ietf.org/internet-drafts/draft-ietf-dnsop-default-local-zones-02.txt// (c)2007 R W Franks// // See /usr/share/doc/bind*/sample/ for example named configuration files.//acl "unicom" {192.168.0.0/24;};acl "telecom" {1.1.1.0/24;};view "unicom" {match-clients { 192.168.0.11;!192.168.0.13;!192.168.0.14;unicom; };#需要在match-clients中添加从服务器view同步的IP地址。其中!192.168.0.13意思是排斥此IP.(其他view修改雷同)transfer-source  192.168.0.11;#添加allow-transfer允许同步的IP地址。(其他view修改雷同)zone "." IN {type hint;file "named.ca";};zone "localhost.localdomain" IN {type master;file "named.localhost";allow-update { none; };};zone "localhost" IN {type master;file "named.localhost";allow-update { none; };};zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {type master;file "named.loopback";allow-update { none; };};zone "1.0.0.127.in-addr.arpa" IN {type master;file "named.loopback";allow-update { none; };};zone "0.in-addr.arpa" IN {type master;file "named.empty";allow-update { none; };};zone "ljzlinux.com" IN {#其他所有的zone按照以下模板进行修改type slave;#类型修改为slavefile "slaves/ljzlinux.com.zone.unicom";#注意从服务器的解析文件存放位置的修改masters { 192.168.0.10; };#添加此行,删除 allow-update。masterfile-format text;};zone "0.168.192.in-addr.arpa" IN {type slave;file "slaves/0.168.192.zone.unicom";masters { 192.168.0.10; };masterfile-format text;};zone "1.1.1.in-addr.arpa" IN {type slave;file "slaves/1.1.1.zone.telecom";masters { 192.168.0.10; };masterfile-format text;};};view "telecom" {match-clients { !192.168.0.11;192.168.0.13;!192.168.0.14;telecom; };transfer-source  192.168.0.13;zone "." IN {type hint;file "named.ca";};zone "localhost.localdomain" IN {type master;file "named.localhost";allow-update { none; };};zone "localhost" IN {type master;file "named.localhost";allow-update { none; };};zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {type master;file "named.loopback";allow-update { none; };};zone "1.0.0.127.in-addr.arpa" IN {type master;file "named.loopback";allow-update { none; };};zone "0.in-addr.arpa" IN {type master;file "named.empty";allow-update { none; };};zone "ljzlinux.com" IN {type slave;file "slaves/ljzlinux.com.zone.telecom";masters { 192.168.0.10; };masterfile-format text;};zone "0.168.192.in-addr.arpa" IN {type slave;file "slaves/0.168.192.zone.unicom";masters { 192.168.0.10; };masterfile-format text;};zone "1.1.1.in-addr.arpa" IN {type slave;file "slaves/1.1.1.zone.telecom";masters { 192.168.0.10; };masterfile-format text;};};view "default" {match-clients { !192.168.0.11;!192.168.0.13;192.168.0.14;any; };transfer-source 192.168.0.14;zone "." IN {type hint;file "named.ca";};zone "localhost.localdomain" IN {type master;file "named.localhost";allow-update { none; };};zone "localhost" IN {type master;file "named.localhost";allow-update { none; };};zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {type master;file "named.loopback";allow-update { none; };};zone "1.0.0.127.in-addr.arpa" IN {type master;file "named.loopback";allow-update { none; };};zone "0.in-addr.arpa" IN {type master;file "named.empty";allow-update { none; };};zone "ljzlinux.com" IN {type slave;file "slaves/ljzlinux.com.zone.unicom";masters { 192.168.0.10; };masterfile-format text;};zone "0.168.192.in-addr.arpa" IN {type slave;file "slaves/0.168.192.zone.unicom";masters { 192.168.0.10; };masterfile-format text;};zone "1.1.1.in-addr.arpa" IN {type slave;file "slaves/1.1.1.zone.telecom";masters { 192.168.0.10; };masterfile-format text;};};

实验五:子域授权,转发域:(192.168.0.13)

子域授权:通俗讲,就是将某个创建好的域的NS、A记录写入到父域的区域数据文件中,这样服务就知道子域的存在了。如果有客户端向父域请求解析这个小的区域(子域),父域只要找到子域的DNS服务器,然后将请求转交给子域DNS服务器即可。这样的做的好处可以减轻父DNS的压力,也有利于管理。

1.创建子域tech.ljzlinux.com·

[root@localhost named]# vim /etc/named.rfc1912.zones#在配置文件中追加tech.ljzlinux.com区域// named.rfc1912.zones://// Provided by Red Hat caching-nameserver package //// ISC BIND named zone configuration for zones recommended by// RFC 1912 section 4.1 : localhost TLDs and address zones// and http://www.ietf.org/internet-drafts/draft-ietf-dnsop-default-local-zones-02.txt// (c)2007 R W Franks// // See /usr/share/doc/bind*/sample/ for example named configuration files.//zone "localhost.localdomain" IN {type master;file "named.localhost";allow-update { none; };};zone "localhost" IN {type master;file "named.localhost";allow-update { none; };};zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {type master;file "named.loopback";allow-update { none; };};zone "1.0.0.127.in-addr.arpa" IN {type master;file "named.loopback";allow-update { none; };};zone "0.in-addr.arpa" IN {type master;file "named.empty";allow-update { none; };};#增加子域zone "tech.ljzlinux.com." IN {type master;file "tech.ljzlinux.com.zone";allow-update { none; };};

2.创建tech.ljzlinux.com的区域数据文件

[root@localhost named]# vim tech.ljzlinux.com.zone $TTL 600            @       IN      SOA ns1.tech.ljzlinux.com.   dnsadmin.tech.ljzlinux.com. (            20170115            2H            10M            3D            12H)@       IN      NS      ns1IN      MX 10   mailns1     IN      A       192.168.0.12mail    IN      A       192.168.0.121www     IN      A       192.168.0.122

至此,服务器192.168.0.12上的子域构建完成。

3.子域授权实现:在父域区域数据文件中加入子域NS和A记录即可完成(反向解析的子域授权比较麻烦,不在此实验范围)

主机:192.168.0.10

[root@localhost named]# vim ljzlinux.com.zone.unicom $TTL 600            @       IN SOA  ns1.ljzlinux.com. admin.ljzlinux.com. (            0       ; serial            1D      ; refresh            1H      ; retry            1W      ; expire            3H )    ; minimum@       IN      NS      ns1.ljzlinux.com.IN      NS      ns2.ljzlinux.com.IN      MX      10 mailns1     IN      A       192.168.0.10ns2     IN      A       192.168.0.11mail    IN      A       192.168.0.101www.ljzlinux.com.       IN      A       192.168.0.102www     IN      A       192.168.0.103ftp     IN      CNAME   wwwtech    IN      NS      ns1ns1     IN      A       192.168.0.12

4.进行子域授权测试:

[root@localhost named]# dig -t A www.tech.ljzlinux.com @192.168.0.10# ; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7_2.4 <<>> -t A www.tech.ljzlinux.com @192.168.0.10# ;; global options: +cmd# ;; Got answer:# ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 51406# ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2# ;; OPT PSEUDOSECTION:# ; EDNS: version: 0, flags:; udp: 4096# ;; QUESTION SECTION:# ;www.tech.ljzlinux.com.         IN      A# ;; ANSWER SECTION:# www.tech.ljzlinux.com.  600     IN      A       192.168.0.122# ;; AUTHORITY SECTION:# tech.ljzlinux.com.      600     IN      NS      ns1.tech.ljzlinux.com.# ;; ADDITIONAL SECTION:# ns1.tech.ljzlinux.com.  600     IN      A       192.168.0.12# ;; Query time: 6 msec# ;; SERVER: 192.168.0.10#53(192.168.0.10)# ;; WHEN: Sat Jan 21 08:01:14 EST 2017# ;; MSG SIZE  rcvd: 100

解析成功!

5.创建转发域:实现解析父域的请求转发给父域的DNS服务器 (如果转发域无法解析,注释掉主配置文件中的include "/etc/named.root.key";)

在子域服务器主配置文件上追加创建子域转发域ljzlinux.com

#创建父域(ljzlinux.com)的转发域,所有解析父域的请求转发到父域DNS服务器

zone "ljzlinux.com" IN {type forward;forward first;#区域转发类型为first:先转发,不能解析再找根解析;only:只转发,不能解析也不会找根来解析forwarders { 192.168.0.10;192.168.0.11; };#区域类型为forward时,只将请求解析父域ljzlinux.com的解析请求转发给192.168.0.10;若定义在options项下,则为全局转发,转发非本机负责解析的所有区域给192.168.0.10};

测试:

[root@localhost named]# dig -t A www.ljzlinux.com @192.168.0.12# ; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7_2.4 <<>> -t A www.ljzlinux.com @192.168.0.12# ;; global options: +cmd# ;; Got answer:# ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 11232# ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 4# ;; OPT PSEUDOSECTION:# ; EDNS: version: 0, flags:; udp: 4096# ;; QUESTION SECTION:# ;www.ljzlinux.com.              IN      A# ;; ANSWER SECTION:# www.ljzlinux.com.       443     IN      A       192.168.0.103# www.ljzlinux.com.       443     IN      A       192.168.0.102# ;; AUTHORITY SECTION:# ljzlinux.com.           443     IN      NS      ns1.ljzlinux.com.# ljzlinux.com.           443     IN      NS      ns2.ljzlinux.com.# ;; ADDITIONAL SECTION:# ns2.ljzlinux.com.       443     IN      A       192.168.0.11# ns1.ljzlinux.com.       443     IN      A       192.168.0.10# ns1.ljzlinux.com.       443     IN      A       192.168.0.12# ;; Query time: 0 msec# ;; SERVER: 192.168.0.12#53(192.168.0.12)# ;; WHEN: Sat Jan 21 09:41:49 EST 2017# ;; MSG SIZE  rcvd: 161

解析成功!

本文中所有的配置文件都会以附件的形式共享。