Linux学习笔记之   DNS原理介绍、DNS搭建、主从复制、子域授权和视图

相关理论介绍

什么是DNS?

DNS( Domain Name System)是“域名系统”的英文缩写,是因特网的一项服务,它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网。DNS 使用TCP和UDP端口53。当前,对于每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符。


DNS域名空间:

整个DNS架构是一颗倒置的树状层次结构,这个树状结构称为DNS域名空间(DNS domain namespace)。自顶而下依次是根域,顶级域,二级域,其种二级域是供公司和个人申请使用。

FQDN:(Full Qualified Domain Name)完全合格限定域名,是指包含全路径的主机名(列出了所有域),保证可以在DNS空间中准确定位主机,也就是主机名的一种完全表示形式。


DNS软件:实现DNS服务的程序

BIND:Berkely Internet Name Domain ,ISC (www.isc.org) ,使用最广方的DNS软件

DNS服务器:域名服务器是指保存有该网络中所有主机的域名和对应IP地址,并具有将域名转换为IP地址功能的服务器。

解析类型:

Name-->IP 正向解析

IP-->Name 反向解析

注意:正反向解析是完全不同的两颗解析树,不必在同一个服务器上,正反向区域记录也没必要完全对应


DNS查询模式:

递归(Recursion):一次询问就要得到结果的查询方式,客户端本地指向的DNS服务器,多工作在此种模式,它收到客户端请求后,会全权负责代替客户端去做解析,知道得到答案回复给客户端。

迭代(Interactive):每次查询得到的是一个相对答案,需要多次询问,才能得到最终答案,互联网上DNS之间的查询模式多是迭代查询。每个DSN只专门负责自己改解析的区域。


主DNS服务器:维护所负解析的域内解析库服务器;解析库由管理员维护

从 DNS服务器:从主DNS服务器或其它DNS服务器那里"复制"(区域传递)一份解析库

序列号:解析库的版本号,前提,任何时候,主服务器解析库发生变化,其序列递增

刷新时间:从服务器从主服务器请求同步的时间间隔

重试时长:从服务器请求同步失败时,再次尝试的时间间隔(小于刷新间隔)

过期时长:从服务器始终联系不上主服务器时候,多久之后放弃服务器角色,停止提供服务

"通知"机制:即便下次同步时间没到,如果主服务器记录有变更,会主动通知从服务器过来同

步数据区域传送:

全量传送:传递整个解析库

增量传送:传送解析库变化的那部分内容

区域解析库:由众多资源记录组成


资源记录:Resource Record (RR)

记录类型:A, PTR, SOA, NS, CNAME, MX...

SOA: Start Of Authority, 起始授权记录,一个区域解析库有且仅有一个SOA记录,且必须为解析库的第一条记录

A: Internet Address,作用 FQDN-->IP

AAAA: FQDN-->IPV6

PTR: PoinTeR, IP-->FQDN

NS: Name Server, 专用于标明当前区域的DNS服务器

CNAME: Canonical Name,别名记录

MX: Mail Exchanger, 邮件交换器,标明当前域内谁是邮件服务器


资源记录定义的格式:

语法:name    [TTL]    IN    RR_type    value

注意:

1.TTL可以全局集成,TTL是指允许其他服务器将数据在缓存中存放TTL 所指定的时间。如果你的数据不是经常变动或变动不大,可以考虑将TTL默认

值设为几天

2.@可用于引用当前区域的名字

3.同一个名字可以通过多条记录定义多个不同的值;此时DNS服务器会以轮询方式响应

4.同一个值也可能有过个不同的定义名字,通过多个不同的名字指向同一个值定义,仅表示通过多个不同的名字找到同一个主机

注:为了方便描述,下文所用到的 hsp.com. 是一个虚拟的域名


SOA:(Satart Of Authorization 起始授权记录)

name: 当前区域的名字,例如“hsp.com.”

value: 当前区域的主DNS服务器的FQDN,也可以使用当前区域的名字

1.当前区域的主DNS服务器FQDN,也可以使用当前区域的名字

2.当前区域的管理员的邮箱地址,但邮箱地址中不可使用@,一般用.替换,如admin.hsp.com

3.(主从服务协调的属性以及否定的答案的统一的TTL)

如:

hsp.com.86400IN SOA ns.hsp.com. nsadmin.hsp.com. (

201509100;序列号

2H;刷新时间

10M;重试时间

1W    ;过期时间

1D    ;否定答案的TTL值

)


NS:Name Server

name:当前区域的名字

value:当前区域的某DNS服务器的名字,例如:ns.hsp.com.

注意:一个区域可以有多个NS记录

例如:

hsp.com.IN NS ns1.hsp.com.

hsp.com.IN NS  ns2.hsp.com.

注意:

1.相邻的两个资源记录的name相同时,后续的可省略,上述示列中第二行的name hsp.com. 可以省略不写

2.对NS记录而言,任何一个ns记录后面的服务器名字,都应该在后续有一个A记录


MX: Mail Exchanger

name:当前区域的名字

value:当前区域的某邮件服务器(smtp)的主机名

一个区域内,MX记录可以有多个,但是每个记录的value之前应该有一个数字(0-99),表示此服务器的优先级,数字越小,优先级越高

例如:

hsp.com.IN MX   10 mx1.hsp.com.

IN MX 20 mx2.hsp.com.

注意:

1.对于MX记录而言,任何一个MX记录后面的服务器名字,都应在后续有一个A记录 


A:Address

name:某主机的FQDN名,如www.hsp.com.

value:主机名对应的主机的IP地址

例如:

www.hsp.com.IN A 1.1.1.1

www.hsp.com.IN A1.1.1.2

mx1.hsp.com.IN A 1.1.1.3

mx2.hsp.com.IN A 1.1.1.3

        注:一下两种书写代表泛域名解析,避免用户写错名称时给错误答案,可通过泛域名解析至某特定地址

*IN A 1.1.1.4

hsp.com.IN      A    1.1.1.4


AAA: IPv6的A纪录

name:FQDN

value:IPv6,同上,只是IP地址是IPv6格式的地址


PRT:

name:IP地址,遵循固定格式,IP地址需反向书写,1.2.3.4 要写做4.3.2.1,且特定后缀是in-addr.arpa.,完整写法为4.3.2.1-in-addr.arpa.

value:FQDN

例如:

4.3.2.1.in-addr.arpa.IN PRT www.hsp.com.

简写成:4IN PTR www.hsp.com.

注意:网络地址及后缀可以省略,主机地址依然需要反向书写


CNAME:

name:别名的FQDN

value:正式名字的FQDN

如下配置:如果访问www.hsp.co.cn ,则会被引导至www.hsp.com.

www.hsp.com.cn IN CNAME www.hsp.com.


实验目标:搭建DNS服务器,实现正向,反向解析,及DNS服务器主从复制功能 ,子域授权,视图。

实验环境:

1.主机S1 IP地址为:172.17.0.10   

  主机S2 IP地址为:172.17.0.30

  主机S7 IP地址为: 172.17.0.20

wKiom1YLUUahd51hAAFom8QsR2c799.jpg


实验步骤:

首先在S1上实现缓存服务器设置


一:检查bind软件包有无安装如下软件包,如果没有,使用yum install安装

~]$rpm -qa bind*
bind-libs-9.8.2-0.37.rc1.el6.x86_64        #库文件
bind-9.8.2-0.37.rc1.el6.x86_64            #bind 程序
bind-utils-9.8.2-0.37.rc1.el6.x86_64        #工具包
bind的相关文件路径:
/etc/named.conf  #主配置文件
/etc/named.rfc1912.zones  #区域配置文件
/var/named  #保存区解析库文件的目录


二:编辑主机S1的bind的配置文件(etc/named.conf,/etc/named.rfc1912.zones)

       配置文件中可以使用//或/*   */ 来注释
options {                Opions 里定义的全局配置,会对所有区域生效,如监听端口�O等                           
//      listen-on port 53 { 127.0.0.1; };          #监听的网卡,注释掉代表监听主机上所有网卡                                                           
//      listen-on-v6 port 53 { ::1; };
        directory       "/var/named";           
        dump-file       "/var/named/data/cache_dump.db";
//        statistics-file "/var/named/data/named_stats.txt";
//        memstatistics-file "/var/named/data/named_mem_stats.txt";
//        allow-query     { localhost; };          #允许查询的客户端,可以使用any ;none;localhost,IP等来做限制
        recursion yes;      #是否认允许给客户端递归查询,本地DNS这个一定要开启                                
        dnssec-enable no;    #dnssec 安全相关的高级配配置,关闭dnssec功能
        dnssec-validation no;  #dnssec 安全相关的高级配置,关闭dnssec功能
//      dnssec-lookaside auto;
        /* Path to ISC DLV key */
//      bindkeys-file "/etc/named.iscdlv.key";
//      managed-keys-directory "/var/named/dynamic";
};
logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};
zone "." IN {
        type hint;   #hint 是根区域类型, 可选类型有hint|master|slave 分别代表根区域|主区域|从区域
        file "named.ca";   #区域解析库文件
};
include "/etc/named.rfc1912.zones";  #代表会读取/etc/named.rfc1912.zones中定义的区域文件
//include "/etc/named.root.key";
]#named-checkconf   #检查配置文件是否有语法错误,没有任何输出则代表语法正确
[root@S1 ~]# service named start  #尝试启动bind 服务
Generating /etc/rndc.key:                              [  OK  ]
Starting named:                                     [  OK  ]
 
[root@S1 ~]# ss -tuan | grep 53    #检查默认端口53有没有正常监听
udp    UNCONN     0      0            172.17.0.10:53                    *:*  
...省略了其它不相关的N行输出
  注:至此,S1 server 172.17.0.10 已经可以作为一个缓存服务器工作。


三:修改主机S1的区域配置文件 (/etc/named.rfc1912.zones),添加如下zone

zone "hsp.com" IN {
        type master;
        file "hsp.com.zone";
        allow-update { none; };
};
]$named-checkconf  #检查配置文件是否有语法错误
四:创建区正向解析库文件
]$cd /var/named/
[root@S1 named]# vim hsp.com.zone  #创建区域数据文件hsp.com.zone,文件内容如下
[root@S1 named]# chmod 640 hsp.com.zone     #修改权限为640
[root@S1 named]# chown .named hsp.com.zone     #改变属组为named
[root@S1 named]# ll hsp.com.zone    #验证权限和属组
-rw-r----- 1 root named 374 Sep 20 21:57 hsp.com.zone
   
[root@S1 named]# named-checkzone "hsp.com" hsp.com.zone   #检查区域数据文件是否有语法错误
zone hsp.com/IN: loaded serial 3940705495
OK
[[email protected] /var/named]$chown :named hsp.com.zone   #修改hsp.com.zone的属组为named(因named服务会以named用户来运行服务)
[email protected] /var/named]$ll hsp.com.zone   #验证文件权限为640,属组为named
-rw-r----- 1 root named 330 Sep 17 00:02 hsp.com.zone
[[email protected] /var/named]$service named start  #启动named服务
Starting named:             [  OK  ]
[root@S1 named]# host -t A ns1.hsp.com 172.17.0.10    #使用host 命里测试能否成功正向解析ns1.hsp.com,
Using domain server:
Name: 172.17.0.10
Address: 172.17.0.10#53
Aliases: 
ns1.hsp.com has address 172.17.0.10    #对照hsp.com.zone数据文件,可知解析成功
#同理,解析mx1.hsp.com,对照hsp.com.zone文件,可知解析成功
[root@S1 named]# dig -t  A mx1.hsp.com. 172.17.0.10
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6 <<>> -t A mx1.hsp.com. 172.17.0.10
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 14750
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2
;; QUESTION SECTION:
;mx1.hsp.com.INA
;; ANSWER SECTION:
mx1.hsp.com.86400INA172.17.0.40      #此处可见解析成功
;; AUTHORITY SECTION:
hsp.com.86400INNSns1.hsp.com.
hsp.com.86400INNSns2.hsp.com.
;; ADDITIONAL SECTION:
ns1.hsp.com.86400INA172.17.0.10
ns2.hsp.com.86400INA172.17.0.30
;; Query time: 3 msec
;; SERVER: 172.17.0.10#53(172.17.0.10)
;; WHEN: Mon Sep 21 00:15:18 2015
;; MSG SIZE  rcvd: 113
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 45733
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0
;; QUESTION SECTION:
;172.17.0.10.INA
;; AUTHORITY SECTION:
.10783INSOAa.root-servers.net. nstld.verisign-grs.com. 2015092000 1800 900 604800 86400
;; Query time: 3 msec
;; SERVER: 172.17.0.10#53(172.17.0.10)
;; WHEN: Mon Sep 21 00:15:18 2015
;; MSG SIZE  rcvd: 104
测试泛域名解析:
[root@S1 named]# host -t A 88.hsp.com 172.17.0.10    #尝试正向解析不存在的主机88.hsp.com
Using domain server:
Name: 172.17.0.10
Address: 172.17.0.10#53
Aliases: 
88.hsp.com has address 172.17.0.99   #解析到了172.17.0.99 ,正是在区域文件的添加的泛域名解析的IP,所以成功。


注:至此主DNS正向解析成功完成 ;接下来,将在S1上创建反向解析区域和解析库文件。

]$vim /etc/named.rfc1912.zones    #修改区域配置文件,在文件末尾添加如下反向解析区域"0.17.172.in-addr.arpa"
zone "0.17.172.in-addr.arpa" IN {
        type master;
        file "0.17.172.zone";
};    
~]$cd /var/named/
[root@S1 named]# vim 0.17.172.zone    #创建如下反向解析文件

wKiom1YLU_DR41chAAEJpOV_qIQ297.jpg

[root@S1 named]# chmod 640 0.17.172.zone     #修改权限为640
[root@S1 named]# chown .named 0.17.172.zone     #修改其属组为named
[root@S1 named]# ll 0.17.172.zone     #验证权限,属组修改成功
-rw-r----- 1 root named 347 Sep 21 00:31 0.17.172.zone
[root@S1 named]# named-checkzone "0.17.172.in-addr.arpa" 0.17.172.zone     #检查反向解析文件有无语法错误
zone 0.17.172.in-addr.arpa/IN: loaded serial 3940705495
OK
[root@S1 named]# rndc reload        #重新加载配置文件
server reload successful
[root@S1 named]# dig -x 172.17.0.40 @172.17.0.10    #反向解析IP 172.17.0.40
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6 <<>> -x 172.17.0.40 @172.17.0.10
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 3858
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; QUESTION SECTION:
;40.0.17.172.in-addr.arpa.INPTR
;; ANSWER SECTION:
40.0.17.172.in-addr.arpa. 86400INPTRmx1.hsp.com.    #解析正确
;; AUTHORITY SECTION:
0.17.172.in-addr.arpa.86400INNSns1.hsp.com.
;; ADDITIONAL SECTION:
ns1.hsp.com.86400INA172.17.0.10
;; Query time: 1 msec
;; SERVER: 172.17.0.10#53(172.17.0.10)
;; WHEN: Wed Sep 30 02:00:21 2015
;; MSG SIZE  rcvd: 101
也可以使用nslookup 来做测试:
[root@S1 named]# nslookup
> 172.17.0.10    #指定DNS服务器
Server:172.17.0.10
Address:172.17.0.10#53
10.0.17.172.in-addr.arpaname = ns1.hsp.com.
10.0.17.172.in-addr.arpaname = www.hsp.com.0.17.172.in-addr.arpa.
> 172.17.0.40
Server:172.17.0.10
Address:172.17.0.10#53
40.0.17.172.in-addr.arpaname = mx1.hsp.com.         #解析成功

至此,主DNS服务器正反向解析成功


小结一下以上测试用到过的的命令有dig, nslook,host

dig [-t type] name [@SERVER] [query options]

dig用于测试dns系统,因此,不会查询hosts文件进行解析;
   查询选项:
+[no]trace:跟踪解析过程
        +[no]recurse:进行递归解析
测试反向解析:
        dig -x IP @SERVER
模拟区域传送:
        dig -t axfr ZONE_NAME @SERVER
[root@S2 slaves]# dig -t axfr hsp.com @172.17.0.10   #可传送整个解析区域
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6_7.4 <<>> -t axfr hsp.com @172.17.0.10
;; global options: +cmd
hsp.com.86400INSOAns1.hsp.com. admin.hsp.com. 3940705495 7200 600 604800 86400
hsp.com.86400INNSns1.hsp.com.
hsp.com.86400INMX10 mx1.hsp.com.
*.hsp.com.86400INA172.17.0.99
ftp.hsp.com.86400INCNAMEwww.hsp.com.
mx1.hsp.com.86400INA172.17.0.40
ns1.hsp.com.86400INA172.17.0.10
www.hsp.com.86400INA172.17.0.10
hsp.com.86400INSOAns1.hsp.com. admin.hsp.com. 3940705495 7200 600 604800 86400
;; Query time: 2 msec
;; SERVER: 172.17.0.10#53(172.17.0.10)
;; WHEN: Thu Sep 24 22:23:30 2015
;; XFR size: 9 records (messages 1, bytes 229)

host命令:

host [-t type] name [SERVER]

[root@S2 slaves]# host -t A www.hsp.com 172.17.0.10
Using domain server:
Name: 172.17.0.10
Address: 172.17.0.10#53
Aliases: 
www.hsp.com has address 172.17.0.1

nslookup命令:

nslookup [-option] [name | -] [server]
交互式模式:
nslookup>
server IP: 指明使用哪个DNS server进行查询;
set q=RR_TYPE: 指明查询的资源记录类型;
NAME: 要查询的名称;

然后实现从DNS服务器配置

一:如上文创建主DNS服务器时一样,编辑主配置文件/etc/named.conf, 注释掉不需要的配置,关闭dnssec等等。


二:编辑/etc/named/named.rfc ,添加如下两个区域文件:

zone "hsp.com" IN {
        type slave;            #类型为slaves
        masters {172.17.0.10;};    #指定它的主DNS服务器
        file "slaves/hsp.com.zone";    #路径必须在slaves下,区域名和主DNS中的区域名必须对应
};
zone "0.17.172.in-addr.arpa" IN {
        type slave;    #类型为slaves
        masters {172.17.0.10;};    #指定它的主DNS服务器
        file "slaves/0.17.172.zone";    #路径必须在slaves下,区域名和主DNS中的区域名必须对应
};


三:启动named 服务

[root@S2 slaves]# named-checkconf    #检查配置文件有无语法错误,没有任何输出代表语法正确
[root@S2 slaves]# service named restart    #重启named服务
Stopping named:                                         [  OK  ]
Generating /etc/rndc.key:                                  [  OK  ]
Starting named:                                         [  OK  ]
[root@S2 slaves]# ls #可以发现区域文件已经自动传送过来了
0.17.172.zone  hsp.com.zone
[root@S2 slaves]# host -t A www.hsp.com 172.17.0.30    #正解www.hsp.com
Using domain server:
Name: 172.17.0.10
Address: 172.17.0.10#53
Aliases: 
www.hsp.com has address 172.17.0.10    #正解成功
[root@S2 slaves]# host -t PTR ftp.hsp.com 172.17.0.30    #通过从DNS服务器正解ftp.hsp.com
Using domain server:
Name: 172.17.0.30
Address: 172.17.0.30#53
Aliases: 
ftp.hsp.com is an alias for www.hsp.com.


四:验证主从同步功能,主DNS服务器S1的修改,能否自动传送到从DNS服务器S2

修改主DNS服务器,添加一条A记录 172.17.0.66,并将版本号+1

wKioL1YLVprDXSbXAAGGdmnQEvU188.jpg

[root@S1 named]# rndc reload
server reload successful
#tail /var/log/messages    #查看系统日志

wKiom1YLVrbjGucyAAQLBYvQrmA324.jpg


查看DNS服务器区域文件是否有刚刚添加的新记录

wKioL1YLV5DwD5EHAAIS-siR688568.jpg

至此: 主从,同步完成。



创建子域并实现子域授权:

此时将创建子域ops.hsp.com,并将S7作为子域的DNS服务器

S7  172.17.0.20


一:创建子域ops.hsp.com DNS服务器

[root@s7 named]# vim /etc/named.rfc1912.zones   #创建如下区域
zone "ops.hsp.com" IN {
        type master;
        file "ops.hsp.com.zone";
};
[root@s7 named]# named-checkconf #检查配置文件语法
[root@s7 named]# vim /var/named/ops.hsp.com.zone    #区域解析库文件内容如下

wKioL1YLWHzxNF4hAADGd-Qa160052.jpg

[root@s7 named]# named-checkzone "ops.hsp.com" ops.hsp.com.zone #检查解析库文件语法
zone ops.hsp.com/IN: loaded serial 2015092000
OK
[root@s7 named]# systemctl restart named.service    #重启服务
[root@s7 named]# systemctl status named.service     #查看服务状态
named.service - Berkeley Internet Name Domain (DNS)
   Loaded: loaded (/usr/lib/systemd/system/named.service; disabled)
   Active: active (running) since Mon 2015-09-21 18:37:43 CST; 11s ago....
...此处略去N行输出信息...
www.ops.hsp.com has address 172.17.0.23
[root@s7 named]# host -t A ns1.ops.hsp.com 172.17.0.20
Using domain server:
Name: 172.17.0.20
Address: 172.17.0.20#53
Aliases: 
ns1.ops.hsp.com has address 172.17.0.20

二:验证能否解析子域本身

[root@s7 named]# host -t A www.ops.hsp.com 172.17.0.20    #可以解析ops区域
Using domain server:
Name: 172.17.0.20
Address: 172.17.0.20#53
Aliases: 
www.ops.hsp.com has address 172.17.0.23

三:在主DNS服务器S1授权子域ops.hsp.com 

如下图所示,在主DNS服务器上添加

wKiom1YLWkGD1ZhCAAHKs3t6z9Q603.jpg

四:在主DNS服务器测试能否解析子域

[root@S1 named]# dig -t A ns1.ops.hsp.com @172.17.0.10
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6 <<>> -t A ns1.ops.hsp.com @172.17.0.10
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 1483
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0
;; QUESTION SECTION:
;ns1.ops.hsp.com.INA
;; ANSWER SECTION:
ns1.ops.hsp.com.86099INA172.17.0.20     #成功解析
;; AUTHORITY SECTION:
ops.hsp.com.86099INNSns1.ops.hsp.com.
;; Query time: 4 msec
;; SERVER: 172.17.0.10#53(172.17.0.10)
;; WHEN: Wed Sep 30 03:14:38 2015
;; MSG SIZE  rcvd: 63

五:测试在子域能否解析父域

[root@s7 named]# dig -t A ftp.hsp.com @172.17.0.20
; <<>> DiG 9.9.4-RedHat-9.9.4-18.el7 <<>> -t A ftp.hsp.com @172.17.0.20
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 33341
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADDITIONAL: 2
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;ftp.hsp.com.INA
;; ANSWER SECTION:
ftp.hsp.com.86400INCNAMEwww.hsp.com.        #解析成功
www.hsp.com.85911INA172.17.0.10
;; AUTHORITY SECTION:
hsp.com.85911INNSns1.hsp.com.
;; ADDITIONAL SECTION:
ns1.hsp.com.85911INA172.17.0.10
;; Query time: 145 msec
;; SERVER: 172.17.0.20#53(172.17.0.20)
;; WHEN: Wed Sep 30 03:15:41 CST 2015
;; MSG SIZE  rcvd: 108

视图

Bind View:为了实现来自不同区域的客户,解析到不同的之地址,返回到不同的结果

试图:

一个bind服务器可以定义多个view,每个view中可以定义一个或多个zone 每个view用来匹配一组客户端

多个view内可能需要对同一个区域进行解析,但使用不同区域解析库文件

view VIEW_NAME {

match-clients {};

}

注意:

1.一旦启用了view,使用zone都只能定义在view中

2.仅有必要在匹配到允许递归请求的客户所在的view中定义根区域

3.客户端请求到达时,是自上而下


利用视图,实现分离解析:(不同客户端请求解析同一主机,得到不同的解析结果)

重新规划S1,S2的IP地址如下图所示

S1有两张网卡,地址分别为192.168.1.110,172.17.0.10

S2IP地址为192.168.1.111

wKiom1YLXCzjU407AAO5JcuG0ko092.jpg

wKioL1YLXDmhholcAANL9fYZzAs281.jpg


期望172.17网段客户机和其它网段客户机对www.hsp.com解析出不同结果

一:先在主配置文件中定义一个acl方便后续使用

wKiom1YLXOqjdagjAAK0pgcD8rA368.jpg

二:创建视图internal,external

view internal {                #视图internal的起始标记
        match-clients { mynet; };                
        allow-recursion { mynet; };        
zone "." IN {   #所有需要查询的ZONE,都必须放置于视图中,所有,将/etc/named.conf 中的根区域移动至此处
        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 "hsp.com" IN {
        type master;
        file "hsp.com.zone";
zone "0.17.172.in-addr.arpa" IN {
        type master;
        file "0.17.172.zone";
        notify yes;
        also-notify {172.17.0.30;};
};
};        #视图internal的结束标记 
view external {        #视图external,用来为S2 192.168.1.111提供单独解析,因为其IP并不会被上面internal 中的acl匹配到,所以用此视图中的区域解析库文件
        match-clients { any; };
        zone "hsp.com" in {
        type master;
        file "hsp.com.external";    #单独的及解析库文件
        allow-update { none; };
};
};
[
root@S1 named]# named-checkconf     #检查语法


[root@S1 named]# cp -a  hsp.com.zone hsp.com.external   #复制原解析库作为模板
并做如下修改

wKioL1YLXnrgxLf4AAHmXhM6xA8695.jpg

[root@S1 named]# rndc reload    #重载配置文件
server reload successful

三:验证解析结果

[root@S2 ~]# dig -t A music.hsp.com @192.168.1.110
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6_7.4 <<>> -t A music.hsp.com @192.168.1.110
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 18864
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; QUESTION SECTION:
;music.hsp.com.INA
;; ANSWER SECTION:
music.hsp.com.86400INA172.17.0.166  #它用的hsp.com.external库文件解析的,实验成功
;; AUTHORITY SECTION:
hsp.com.86400INNSns1.hsp.com.
;; ADDITIONAL SECTION:
ns1.hsp.com.86400INA172.17.0.10
;; Query time: 5 msec
;; SERVER: 192.168.1.110#53(192.168.1.110)
;; WHEN: Wed Sep 30 04:54:35 2015
;; MSG SIZE  rcvd: 81
[root@s7 ~]# dig -t A music.hsp.com @172.17.0.10
; <<>> DiG 9.9.4-RedHat-9.9.4-18.el7 <<>> -t A music.hsp.com @172.17.0.10
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 4712
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;music.hsp.com.INA
;; ANSWER SECTION:
music.hsp.com.86400INA172.17.0.66 #解析出来的仍旧是172.17.0.66,因为它被Internal view匹配到了
;; AUTHORITY SECTION:
hsp.com.86400INNSns1.hsp.com.
;; ADDITIONAL SECTION:
ns1.hsp.com.86400INA172.17.0.10
;; Query time: 5 msec
;; SERVER: 172.17.0.10#53(172.17.0.10)
;; WHEN: Wed Sep 30 05:00:43 CST 2015
;; MSG SIZE  rcvd: 92


补充:

bind中基础的安全相关的配置:

acl:把一个或多个主机归并为一个集合,并通过一个统一的名称调用:

acl acl_name {

ip;

ip

net/prelen;

};

示列:

acl mynet {

172.17.0.0/16;

};


bind 有四个内置的acl;

none:没有一个主机

any:任意主机

local:本机

localnet:本机的IP同掩码运算后得到的网络地址

注意:acl 只能先定义后使用,因此,其一般定义在配置文件的options前面

访问控制的指令

allow-query {}: 允许查询的主机,白名单,如果不指定主机,所有被拒接

allow-transfer {}: 允许区域传送的主机,白名单,如果不指定主机,所有被拒接

allow-recursion {}:允许递归的主机

allow-update {}: 允许更新的主机,比较危险,一般情况是拒绝所有 allow-update {none}

注:访问控制指令放在zone 中,只对zone生效,如果放在options中,对所有zone生效

你可能感兴趣的:(视图,dns,主从复制,子域授权)