Linux中通常使用bind来实现DNS服务器的架设

安装bind

安装DNS服务软件Bind和相应工具包

#yum install bind bind-utils -y
#service named start
Generating /etc/rndc.key:                                  [  OK  ]
Starting named:                                            [  OK  ]
资源记录类型

起始授权结构(SOA):指出当前区域内谁是  主DNS服务器
主机(A):          将域名FQND映射到IP  正向解析
别名(CNAME):      将A记录指向的域名 指向 另外一个域名
邮件交换器(MX):   指出当前区域内 SMTP邮件服务器IP
名称服务器(NS):   指出当前区域内有几个DNS服务器在提供服务
反向解析(PRT):      将IP解析为域名FQND

named.ca文件必须存在,否则不能启动服务 。此文件是根服务器资源记录。

bind主配置文件为/etc/named.conf

acl acl名 { 
    192.168.7.0/24; 
    可以包含其他的acl,被包含的必须在前面,程序是由上而下读取,匹配则退出acl规则
    定义一个访问控制列表,用于以后对列表中的IP进行访问控制.放在配置文件的顶部
};

options {
        设置DNS服务器的全局配置选项
       };

logging {
       设置日志服务器,以及日志信息的发送位置
};

server {
       定义了与远程服务器交互的规则.语句可以出现在配置文件的顶层,也可以出现在view语句的内部。
       如果一个view语句包括了自己的server语句,则只有那些view语句内的server语句才起作用,顶层的server语句将被忽略。
       如果一个view语句内不包括server语句,则顶层server语句将被当做默认值
       写法:
        server 192.168.7.254 { keys hunk-tech-key; };
};

zone "." IN {
        区域定义:本机能够为哪些zone进行解析,就要定义哪些zone
};

view 视图名 {
    定义一个视图,一但开启了视图功能,所有的zone区域必须要在view里定义
};

include 把另一个文件中的内容包含进来做为主配置文件的内容
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
listen-on port 53 { 127.0.0.1; };#定义监听IPV4端口及IP地址,如果是本机所有地址,填写localhost
listen-on-v6 port 53 { ::1; };#定义监听IPV6端口及IP地址,如果是本机所有地址,填写localhost
 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     { any; };#允许查询的IP地址,可以填写网段192.168.4.0/24
allow-transfer  { none; };#允许哪些从DNS服务器IP进行复制,"none" 表示禁止区域传输
recursion yes;#是否允许递归查询
dnssec-enable yes;
dnssec-validation yes;
/* Path to ISC DLV key */
 bindkeys-file "/etc/named.iscdlv.key";
managed-keys-directory "/var/named/dynamic";

在named配置文件中,可以使用以下3种风格的注释符号
       C style: /* */
       C++ style: // to end of line
       Unix style: # to end of line

主配置文件语法检查命令

named-checkconf 或 service named configtest测试配置文件语法格式。没有提示表示正确

以域名hunk.tech为例配置一个DNS服务器

正向区域

所谓的正向区域,指的是 FQDN > IP 转换

创建正向区域步骤

1./etc/named.rfc1912.zones文件,添加一个区域

#vim /etc/named.rfc1912.zones
zone "hunk.tech" IN {
        type master;
        file "named.hunk.tech";
        allow-update { none; };
};

配置文件的格式是每行后面都必须加分号结束,并且有花括号的地方,花括号两边必须要有空格

type: 用于定义区域类型,此时只有一个DNS服务器,所以为master,type可选值为:hint(根)|master(主的)|slave(辅助的)|forward(转发)
file:用于定义区域数据文件路径,默认该文件保存在/var/named/目录。

2.在主配置文件中定义的全局中directory设置参数的目录中创建该区域数据库文件

所属组必须为named,且权限为640安全。所以建议复制一个原有的模板进行修改。
#cp -p named.localhost named.hunk.tech必须加-p保留原有权限属性,
-rw-r-----. 1 root  named  152 Jun 21  2007 named.hunk.tech

3.在建该区域数据库文件定义资源记录

资源记录的格式:
name        [ttl]      IN      RRtype      Value
资源记录名  有效时间    IN       类型    资源记录的值

文件内容如下:

$TTL 600
@       IN SOA  6-DNS-1 admin.hunk.tech. (
                    0       ; Serial版本号,RFC1912 2.2建议的格式为YYYYMMDDnn 其中nn为修订号2018011801,不能超过10位。每次更改都要在原来的基础上加上1
                    2H      ; 刷新时间,设置辅助 DNS多长时间与主 DNS进行Serial核对,此处为2小时。只通知给本区域解析库文件中定义NS记录的所有主机
                    10M     ; 重试时间,应该小于刷新时间,当辅助 DNS试图获取主 DNS Serial时,如果主 DNS未响应,多长时间重新进行检查
                    1D      ; 决定辅助 DNS在没有主 DNS的情况下权威地提供域名解析服务的时间长短
                    3H )    ; 在8.2版本之前,由于没有独立的 $TTL 指令,所以通过 SOA 最后一个字段来实现。但由于 BIND 8.2 后出现了 $TTL  指令,
                    该部分功能就不再由 SOA 的最后一个字段来负责,由 $TTL 全权负责,SOA 的最后一个字段专门负责 否定回答 ttl
@       IN      NS      6-DNS-1
@       IN      NS      6-DNS-2
6-DNS-1 IN      A       192.168.4.200
6-DNS-2 IN      A       192.168.4.201
6-WEB-1 IN      A       192.168.4.205
www     IN      CNAME   6-WEB-1
@       IN      MX      10      mail
mail    IN      A       192.168.4.205

解读下:

$TTL 600 表示下面资源记录ttl的值都为600秒。下面的每一条记录都是可以继承这行值的。
        不带单位指的是秒,支持这些时间格式:D 天;H 小时;M 分钟;

@       IN SOA  6-DNS-1 admin.hunk.tech
SOA: 只能有一个,而且必须是第一个资源记录。SOA记录定义了一个域内的主DNS是谁
         @: 通常可以简写为@,代表该区域名称,
         6-DNS-1: 主DNS服务器的FQDN,这里会自动补全此域后缀。第二种写法6-DNS-1.hunk.tech.   注意最后这个点是必须加的。
         admin.hunk.tech:  此域的管理理邮件地址。@有特殊意义,所以用.表示

@
特殊字符“ @ ”,它就是 ORIGIN 的意思, $ORIGIN 后面定义的内容,如:$ORIGIN hunk.tech. 那之后使用 @ 来代替hunk.tech。
假如这个档前面没有定义 $ORIGIN 的话,那这个 @ 的值就以 named.conf 里的 zone 为准。 

@  IN   NS      6-DNS-1
@  IN   NS      6-DNS-2
NS: 可以有多条,定义了这一个区域哪些是DNS服务器
对NS记录而言,任何一个ns记录后面的服务器名字,都应该在后续有一个A记录

6-DNS-1     IN    A       192.168.4.200
6-DNS-2     IN    A       192.168.4.201
6-WEB-1     IN    A       192.168.4.205

A: 只能定义在正向区域文件中
         一行记录定义一台主机对应的IP地址
         $GENERATE 1-9 HOST$ A 1.2.3.$  定义了一组数字范围。$GENERATE 1-9定义了$的值为1-9,
                后面的$引用的就是的列表值,效果如下
                HOST1.hunk.tech.    600 IN  A   1.2.3.1
                HOST2.hunk.tech.    600 IN  A   1.2.3.2
                HOST3.hunk.tech.    600 IN  A   1.2.3.3
                HOST4.hunk.tech.    600 IN  A   1.2.3.4
                HOST5.hunk.tech.    600 IN  A   1.2.3.5
                HOST6.hunk.tech.    600 IN  A   1.2.3.6
                HOST7.hunk.tech.    600 IN  A   1.2.3.7
                HOST8.hunk.tech.    600 IN  A   1.2.3.8
                HOST9.hunk.tech.    600 IN  A   1.2.3.9

            *.hunk.tech. IN A 5.5.5.5  泛域名.可以用来防止用户输入错误的信息而能正确跳转。
            比如说,wwwwwwww.hunk.tech 和www.hunk.tech 同样是指向5.5.5.5

            多条A记录指向不同的IP的话,等同使用DNS做负载均衡
            如:
            WEB     A   1.1.1.1
            WEB     A   2.2.2.2

6-WEB-1     IN    AAAA    1000::A:B:0:0
    AAAA:IPV6的资源记录

@           IN    MX      10      mail
MX: 可以有多个
        用于标识smtp服务器
        包含优先级和FQDN。优先级:0-99,数字越小,级别越高;

www         IN    CNAME   6-WEB-1
CNAME:  可以有多个
        用于指定某台主机的别名

每一台主机都必须要有A记录指向。

4.区域添加好后,使用区域库命令检查:

语法格式
named-checkzone "区域名称" "区域文件"

#named-checkzone hunk.tech /var/named/named.hunk.tech 
zone hunk.tech/IN: loaded serial 0
OK

5.重新加载数据库信息

rndc reload
使用rndc命令。请参考rndc命令。

反向区域

所谓的反向区域,指的是 IP > FQDN 转换

专业名词:PTR

创建反向区域步骤

1./etc/named.rfc1912.zones文件,添加一个PTR区域

区域名称:网络地址反写.in-addr.arpa.
比如:
172.16.100. --> 100.16.172.in-addr.arpa.

zone "4.168.192.in-addr.arpa" IN {
        type master;
        file "named.192.168.4";
        allow-update { none; };
};

2.在主配置文件中定义的全局设置中/var/named的目录中创建该区域数据库文件
所属组必须为named,且权限为640安全。所以建议复制一个原有的模板进行修改。

#cp -p named.loopback named.192.168.4

必须加-p保留原有权限属性,

-rw-r-----. 1 root  named  168 Dec 15  2009 named.192.168.4

3.在建该区域数据库文件定义资源记录

反向解析数据文件里面只能有SOA、NS、PTR资源记录,所有A记录都要改为PTR记录,
名称为IP地址,IP地址可以写全也可以简写,如果写全则是IP地址反写加上.in-addr.arpa.
例如:200.4.168.192.in-addr.arpa. PTR资源记录的值为域名。
$TTL 600
@       IN SOA  6-DNS-1.hunk.tech. admin.hunk.tech. (
                                        0       ; serial   参考正向区域的说明
                                        600     ; refresh
                                        600     ; retry
                                        1D      ; expire
                                        3H )    ; minimum
        NS      6-DNS-1.hunk.tech.
        NS      6-DNS-2.hunk.tech.
200     PTR     6-DNS-1.hunk.tech.
201     PTR     6-DNS-2.hunk.tech.
205     PTR     6-WEB-1.hunk.tech.
206     PTR     7-WEB-2.hunk.tech.

格式上,注意是写全域名哦,记得加上点.

4.区域添加好后,使用区域库命令检查:

语法格式
named-checkzone "区域名称" "区域文件"

#named-checkzone 4.168.192.in-addr.arpa named.192.168.4
zone 4.168.192.in-addr.arpa/IN: loaded serial 0
OK

5.重新加载数据库信息

rndc reload
使用rndc命令。请参考rndc命令。

通常在应用中,DNS的反向解析并不是很重要,可以不配置,当服务器中有域名作为邮件服务器时,此时可以配置反向解析,
因为邮件中过滤垃圾邮件的技术通常是解析邮箱地址,如果IP地址不能反解成一个域名则视为垃圾邮件。

测试工具与命令

rndc

语法格式:
rndc --> rndc (953/tcp)
rndc COMMAND

 COMMAND:
reload:             重载主配置文件和区域解析库文件
reload zonename:    重载区域解析库文件
retransfer zonename: 手动启动区域传送,而不管序列号是否增加
notify zonename:    重新对区域传送发通知
reconfig:           重载主配置文件
querylog:           开启或关闭查询日志文件/var/log/message.可以详细到DNS查询的细节。生产中不建议打开,除非用于排错。
trace:              递增debug一个级别
trace LEVEL:        指定使用的级别
notrace:           将调试级别设置为 0
flush:             清空DNS服务器的所有缓存记录
freeze              关闭动态更新
thaw                启用动态更新

dig

dig只用于测试dns系统,不会查询hosts文件进行解析。
dig命令不会查缓存,而是直接查询服务器
语法格式:

dig [-t type] name [@DNS服务器] [query options]

 查询选项:

+[no]trace:跟踪解析过程 : dig magedu.com +trace

+[no]recurse:进行递归解析

测试反向解析:

dig -x IP        digt ptr reverseip.in-addr.arpa

#dig -x 192.168.4.205

<<>> DiG 9.9.4-RedHat-9.9.4-50.el7 <<>> -x 192.168.4.205
global options: +cmd
Got answer:
 ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 4233
flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3

 OPT PSEUDOSECTION:
 EDNS: version: 0, flags:; udp: 4096
 QUESTION SECTION:
205.4.168.192.in-addr.arpa. IN  PTR

 ANSWER SECTION:
205.4.168.192.in-addr.arpa. 600 IN  PTR 6-WEB-1.hunk.tech.
----------------------------------------------------------------------------

模拟区域传送:
dig -t axfr ZONE_NAME @DNS服务器
dig -t axfr hunk.tech.com @10.10.10.11
dig –t axfr 100.1.10.in-addr.arpa @172.16.1.1

dig -t NS . @114.114.114.114
dig -t NS . @a.root-servers.net

host

语法格式:
host [-t type] name [DNS服务器]

hostt NS hunk.tech 172.16.0.1
hostt soa hunk.tech
hostt mx hunk.tech
hostt axfr hunk.tech
host 1.2.3.4

#host -t A  6-WEB-1.hunk.tech 
6-WEB-1.hunk.tech has address 192.168.4.205

#host www.hunk.tech 192.168.4.200
Using domain server:
Name: 192.168.4.200
Address: 192.168.4.200#53
Aliases: 

www.hunk.tech is an alias for 6-WEB-1.hunk.tech.
6-WEB-1.hunk.tech has address 192.168.4.205

nslookup

语法格式:
nslookup [-option] [name | -] [DNS服务器]

• 交互式模式:
nslookup>
server IP: 指明使用哪个DNS server进行查询
set q=RR_TYPE: 指明查询的资源记录类型
NAME: 要查询的名称
exit: 退出

C:\Users\Hunk>nslookup
默认服务器:  public1.alidns.com
Address:  223.5.5.5

> server 192.168.4.200
默认服务器:  [192.168.4.200]
Address:  192.168.4.200

> set q=a
> www.hunk.tech
服务器:  [192.168.4.200]
Address:  192.168.4.200

名称:    6-WEB-1.hunk.tech
Addresses:  192.168.4.205
          172.18.8.10
Aliases:  www.hunk.tech

DNS查询中出现aa标记的话,就是权威查询,也就是说,查询的资源记录就是在那台DNS服务器直接查出来,而不是通过其他DNS查询。

子域 与 委派

是相对父域来说的,指域名中的每一个段。各子域之间用小数点分隔开。放在域名最后的子域称为最高级子域,或称为一级域,在它前面的子域称为二级域。

比如:
www.nansan.sz.hunk.tech.

hunk.tech为父域
szhunk.tech的子域,为一级子域
nansanhunk.tech的子域,为二级子域
www是主机

实现子域的几个方法:

第一种:
在同一个zone区域中定义
www.nansan.sz   600 IN A 2.2.2.2
------------------------------------------------------------------------------

第二种:
是那种有子公司的公司,使用子域来管理的。
这种情况就是在主DNS服务器/etc/named.rfc1912.zones独立一个zone区域,并生成文件,交由子域管理员管理此文件

zone "sz.hunk.tech" IN {
        type master;
        file "named.sz.hunk.tech";
        allow-update { none; };
};

zone区域文件named.sz.hunk.tech内容如下:
$ORIGIN .
$TTL 600    ; 10 minutes
sz.hunk.tech        IN SOA  6-DNS-1.sz.hunk.tech. admin.sz.hunk.tech. (
                21         ; serial
                7200       ; refresh (2 hours)
                600        ; retry (10 minutes)
                86400      ; expire (1 day)
                10800      ; minimum (3 hours)
                )
            NS  6-DNS-1.sz.hunk.tech.
$ORIGIN sz.hunk.tech.
6-DNS-1         A   192.168.4.200
7-WEB-2         A   7.7.7.7
www         CNAME   7-WEB-2

----------------------------------------------------------------------------------------------------------------------
第三种:委派
是那种有子公司,并且更大规模的公司,委派由子域来管理的。
这种情况就是独立一台DNS服务器专门用来解析该子域服务。/etc/named.rfc1912.zones独立一个zone区域,并生成文件,交由子域管理员管理此文件

需要将此DNS的主配置文件/etc/named.conf中的以下2行设置,必须声明为no,而不可以注释。否则查询失败,返回SERVFAIL
        dnssec-enable no;
        dnssec-validation no;

zone "bj.hunk.tech" IN {
        type master;
        file "named.bj.hunk.tech";
        allow-update { none; };
};

zone区域文件named.bj.hunk.tech内容如下
$ORIGIN .
$TTL 600        ; 10 minutes
bj.hunk.tech            IN SOA  bj-dns.bj.hunk.tech. admin.bj.hunk.tech. (
                                23         ; serial
                                7200       ; refresh (2 hours)
                                600        ; retry (10 minutes)
                                86400      ; expire (1 day)
                                10800      ; minimum (3 hours)
                                )
                        NS      bj-dns.bj.hunk.tech.
$ORIGIN bj.hunk.tech.
bj-dns                  A       192.168.4.204
bj-WEB-2                A       8.8.8.8
www

另外,在父域的DNS服务器上面的zone文件要定义委派的子域DNS的权威DNS服务器
bj                      NS      bj-dns                     #bj子域 的NS 记录为bj.hunk.tech中定义的DNS服务器
bj-dns                  A       192.168.4.204               # 对应子域权威DNS的A记录

注意了,如果设置了主从DNS,那么,在委派的时候,也是需要把委派域中的DNS服务器同时添加记录,否则可能会单点故障。

image

转发(forward)服务器

转发功能可以用来在一些服务器上产生一个大的缓存,从而减少到外部服务器链路上的流量。它可以使用在和internet没有直接连接的内部网络进行域名服务器上,
用来提供对外部域名的查询。只有当服务器是非授权的,并且缓存中没有相关记录时,才会进行转发

 注意:被转发的服务器需要能够为请求者做递归,否则转发请求不予进行。在主配置文件中定义以下:

recursion yes

 注意:关闭dnssec功能:

dnssec-enable no;
dnssec-validation no;

(1) 全局转发: 对非本机所负责解析区域的请求,全转发给指定的服务器

语法格式:

Options { 
forward first 或 only; 
forwarders { ip;可以有多个,用;号隔开};
};

如:
        forward first;
        forwarders { 192.168.4.204; };

(2) 特定区域转发:仅转发对特定的区域的请求,比全局转发优先级高

zone "ZONE_NAME" IN {
type forward;
forward first 或 only;
forwarders { ip;可以有多个,用;号隔开};
};

如:
zone "hunk.com" IN {
        type forward;
        forward only;
        forwarders { 192.168.4.204; };
};

转发选项:

first :默认值。服务器首先请求转发列表中的设定的DNS主机 ,如果转发列表中的DNS主机不应答,该主机将自己从根DNS开始找应答。
only:只会请求转发列表中的设定的DNS主机 ,如果转发列表中的DNS主机不应答。也不会继续找其他应答。

两种查询方法与根提示

从客户端到本地DNS服务器是属于递归查询,而DNS服务器之间就是迭代查询

递归查询:客户端得到结果要么成功,要么失败。(本地客户端和DNS服务直接交互,被请求的DNS服务器必须给出最终答案)

迭代查询:服务器以相关参考性应答返回本地DNS。(DNS服务与DNS服务交互,得到的是参考答案)
 比如说,客户机查询www.hunk.tech的时候,第一次查询根服务器时,根会告诉你去找tech吧,找到tech的时候,他会说你去找hunk吧,
 找到hunk的时候,发现www正好是自己管理的,就返回A记录的IP地址了

根提示:一般情况下,DNS服务器之间的查询方式都是迭代查询。
如果要查询域不是本地DNS负责的区域,那么本地DNS就需要向外迭代查询(迭代查询从根域开始,如此,本地DNS就必须知道根域的IP地址)。根提示的功能可以让本地DNS服务器查询根域DNS服务器。

bind中ACL

这里的ACL可别与之前学习的文件ACL权限混淆哦,当然,这也是bind安全管理的方法.

把一个或多个地址归并为一个集合,并通过一个统一的名称调用

与之前的shell编程中的函数一样,把一条命令或多条命令放在一个函数体内,以后要用的时候,调用名称即可。

语法格式:
acl acl_name {
ip;
net/prelen;
……
};

示例:
acl mynet {
    172.16.0.0/16;
    10.10.10.10;
};

这个ACL相当于mynet中定义了172.16.0.0/16网段所有主机,并且包含了10.10.10.10这一台主机。

bind有四个内置的ACL

none: 没有一个主机
any: 任意主机
localhost: 本机
localnet: 本机的IP同掩码运算后得到的网络地址

 注意:只能先定义,后使用;因此一般定义在配置文件中,处于options的前面

智能DNS

实现的基础就是view视图

view是BIND9强大的新功能,允许名称服务器根据询问者的不同有区别的回答DNS查询。特别是当运行拆分DNS设置而不需要运行多个服务器时特别有用。
每个视图定义了一个将会在用户的子集中见到的DNS名称空间。

 一个bind服务器可定义多个view,每个view中可定义一个或多个zone
 每个view用来匹配一组客户端
 多个view内可能需要对同一个区域进行解析,但使用不同的区域解析库文件

注意:

(1) 一旦启用了view,所有的zone都只能定义在view中
(2) 仅在允许递归请求的客户端所在view中定义根区域
(3) 客户端请求到达时,是自上而下检查每个view所服务的客户端列表
语法格式:

view VIEW_NAME {
    match-clients { ACL名称; };
    zone hunk.tech {
    type master;
    file “named.hunk.tech”; };
    include "/etc/named.rfc1912.zones";
};

以下用一个实例来看ACL与view的搭配使用吧。不同地址解析不同的IP,即智能DNS
image

1.定义好ACL地址范围,DNS读取的时候,是由上往下匹配,所以,any必须放至最后
acl acl_net_192 { 192.168.4.0/24; };
acl acl_net_172 { 172.18.0.0/16; };
acl acl_other { any; };  
2.把公共相关的合并至/etc/named.rfc1912.zones文件
zone "." IN {
        type hint;
        file "named.ca";
};
3.各个zone文件内容如下:注意www对应的IP

#vim named1.hunk.tech 
$TTL 600        ; 10 minutes
@               IN SOA  6-DNS-1 admin (
                                24         ; serial
                                720       ; refresh (2 hours)
                                600        ; retry (10 minutes)
                                86400      ; expire (1 day)
                                10800      ; minimum (3 hours)
                                )
                        NS      6-DNS-1
6-DNS-1                 A       192.168.4.200
6-WEB-1                 A       1.1.1.1                 #主要是观察这里
www                     CNAME   6-WEB-1
---------------------------------------------------------------------------

#vim named2.hunk.tech 
$TTL 600        ; 10 minutes
@               IN SOA  6-DNS-1 admin (
                                24         ; serial
                                720       ; refresh (2 hours)
                                600        ; retry (10 minutes)
                                86400      ; expire (1 day)
                                10800      ; minimum (3 hours)
                                )
                        NS      6-DNS-1
6-DNS-1                 A       192.168.4.200
7-WEB-3                 A       2.2.2.2                 #主要是观察这里
www                     CNAME   7-WEB-3
------------------------------------------------------------------------------------------

#vim named3.hunk.tech 
$TTL 600        ; 10 minutes
@               IN SOA  6-DNS-1 admin (
                                24         ; serial
                                720       ; refresh (2 hours)
                                600        ; retry (10 minutes)
                                86400      ; expire (1 day)
                                10800      ; minimum (3 hours)
                                )
                        NS      6-DNS-1
6-DNS-1                 A       192.168.4.200
6-WEB-1                 A       9.9.9.9                  #主要是观察这里
www 
4.在主配置文件/etc/named.conf定义view

view net_192 {
        match-clients { acl_net_192; };
        zone "hunk.tech" {
                type master;
                file "named1.hunk.tech";
                };
        include "/etc/named.rfc1912.zones";
};

view net_172 {
        match-clients { acl_net_172; };
        zone "hunk.tech" {
                type master;
                file "named2.hunk.tech";
                };
        include "/etc/named.rfc1912.zones";
};
view net_other {
        match-clients { acl_other; };
        zone "hunk.tech" {
                type master;
                file "named3.hunk.tech";
                };
        include "/etc/named.rfc1912.zones";
};

include "/etc/named.root.key";
5.检查语法:
#named-checkconf

#named-checkzone hunk.tech named1.hunk.tech 
zone hunk.tech/IN: loaded serial 24
OK

#named-checkzone hunk.tech named2.hunk.tech 
zone hunk.tech/IN: loaded serial 24
OK

#named-checkzone hunk.tech named3.hunk.tech 
zone hunk.tech/IN: loaded serial 24
OK
6.重载入配置文件
#rndc reload
server reload successful
7.测试
把DNS查询日志打开
#rndc querylog

找一台192网段的主机进行测试

#ip -4 addr
    inet 192.168.4.207/24 brd 192.168.4.255 scope global ens33

从日志可以看出来查询匹配了view规则net_192 
client 192.168.4.207#44511: view net_192: query: www.hunk.tech IN A +E (192.168.4.200)
image

找一台172网段的主机进行测试

#ip -4 addr
    inet 172.18.103.222/16 brd 172.18.255.255 scope global dynamic ens36

从日志可以看出来查询匹配了view规则net_172 
client 172.18.103.222#51655: view net_172: query: www.hunk.tech IN A +E (172.18.103.226)
image

在本机使用127.0.0.1地址进行测试

#dig www.hunk.tech @127.0.0.1

从日志可以看出来查询匹配了view规则net_other
client 127.0.0.1#43506: view net_other: query: www.hunk.tech IN A + (127.0.0.1)
image

至此,智能DNS范例已经完成。如果想获取更新实际中的IP段,可以根据这个脚本实现。
联通电信最新IP网段

安全加固BIND

chroot是Linux系统对应用程序的一种安全约束机制。在应用程序执行了chroot系统调用后,它的执行被限定到chroot后的目录下。这样操作后,在最差的情况下,如果BIND被入侵了,那么黑客所拿到的目录权限会被限制到chroot后的目录,不会对系统的其他文件造成泄露或者被恶意修改。

只需要安装yum install bind-chroot
之后会将原有目录与配置文件使用BIND重新挂载到/var/named/chroot/下面

使用mount可以看出来

/etc/named on /var/named/chroot/etc/named type none (rw,bind)
/var/named on /var/named/chroot/var/named type none (rw,bind)
/etc/named.conf on /var/named/chroot/etc/named.conf type none (rw,bind)
/etc/named.rfc1912.zones on /var/named/chroot/etc/named.rfc1912.zones type none (rw,bind)
/etc/rndc.key on /var/named/chroot/etc/rndc.key type none (rw,bind)
/usr/lib64/bind on /var/named/chroot/usr/lib64/bind type none (rw,bind)
/etc/named.iscdlv.key on /var/named/chroot/etc/named.iscdlv.key type none (rw,bind)
/etc/named.root.key on /var/named/chroot/etc/named.root.key type none (rw,bind)
/etc/services on /var/named/chroot/etc/services type none (rw,bind)
/etc/protocols on /var/named/chroot/etc/protocols type none (rw,bind)
/lib64/libnss_files-2.12.so on /var/named/chroot/lib64/libnss_files.so.2 type none (rw,bind)