CentOS DNS服务详解与基于bind的智能DNS

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

options {
        全局配置
       };

logging {
       日志子系统配置
};

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

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        dig –t 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服务器]

host –t NS hunk.tech 172.16.0.1
host –t soa hunk.tech
host –t mx hunk.tech
host –t 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为父域
sz为hunk.tech的子域,为一级子域
nansan为hunk.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服务器同时添加记录,否则可能会单点故障。

转发(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

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)

找一台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)

在本机使用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)

至此,智能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)

原文地址:http://blog.51cto.com/191226139/2063287

时间: 2024-10-03 22:54:50

CentOS DNS服务详解与基于bind的智能DNS的相关文章

httpd服务详解及基于openssl的使用

httpd常见特性 1.事先创建空闲进程. 2.按需维持适当的进程. 3.使用模块化设计,核心比较小,各种功能都以模块方式添加. 4.支持运行时配置,支持单独编译模块. 5.支持多种方式的虚拟主机配置. 6.支持https协议,通过mod_ssl模块实现. 7.支持用户认证 8.支持基于IP或主机名的ACL 9.支持基于每目录的访问控制. 10.支持URL重写. MPM(Mulit Path Modules)多道处理模块. mpm_winnt windows上专用的线程处理机制. perfork

CentOS 默认基本服务详解

1.使用chkconfig --list来查看安装的服务,比如我这里最小化安装后的一些服务 [[email protected] ~]# chkconfig --list auditd          0:off   1:off  2:on    3:on    4:on   5:on    6:off crond           0:off   1:off  2:on    3:on    4:on   5:on    6:off ip6tables       0:off  1:off

详解Linux 6&7上搭建DNS服务器

整个hteret大家庭中连接了数以亿计的服务器个人主机,其中大部分的网站,部件等服务器都使用了域名形式的地址,如www.google.com.mail 163.com 等.很显然这种地址形式要比使月01231317202103 7A 的户地址形式更加直观而且更容易被用户记住. DNS系统在网络中的 作用处是维护着一个地址数现连,其中记录了各种主机城名与户地址的技关系上内便光安户租序现供正向的地址解析服务正向解析根据域名查IP 地址即将指定的域名解析为相对应的P地址,域名的正向解 析是DNS服务器

HTTPD服务详解

HTTPD服务详解 目录 一.httpd的程序版本 二.httpd的特性 三.httpd的功能特性 四.httpd使用 1.httpd的安装 2.程序环境 Httpd-2.2 (Centos6) http-2.4 (Centos7) 五.http配置相关说明 1.修改监听的ip和port 2.持久连接 3.MPM 4.DSO配置指令模块加载 5.定义Main'server文档页面路径 6.站点访问控制 文件系统路径 URL路径 7.<Directory> 中基于源地址实现访问控制 Option

CentOS5启用Telnet服务详解(转载)

CentOS5启用Telnet服务详解 配置步骤如下: 一.安装telnet软件包(通常需要两个) 1. telnet(或 telnet-client),这个软件包提供telnet 客户端程序: 2. telnet-server,这个软件包提供telnet 服务器端程序: 安装之前先检查系统是否已安装这些软件包,方法如下: [[email protected] /]#rpm –qa |grep telnet 如果没有检测到软件包,则需要进行安装.CentOS5默认已安装了telnet软件包,te

CentOs之yum详解及程序的编译安装

CentOs之yum详解 yum的地位:yum是rpm的前端管理工具,而且依赖于rpm.  yum仓库:yum repository,仓库里存储了众多rpm包,以及包的相关的元数据文件.yum仓库里会有个repodata目录存在. yum支持的文件服务器类型: ftp://  http:// file:///(本地服务器,例光盘)   /nfs:// 查看yum的信息: [[email protected]]# rpm -q yum ------查看yum命令的安装包是哪个 yum-3.4.3-

&nbsp; &nbsp; &nbsp; &nbsp; 基于bind的简单DNS搭建

我们都知道互联网通信是基于IP地址的,然而我们在访问一个网站的时候只需输入主机名(有时也指我们所说的域名)即可实现,那是因为我们在背后用到了将主机名解释为了对应的IP地址的机制--DNS.下面我们来介绍DNS的实现过程. 一:bind的安装配置(正反解析): 1.bind 介绍:bind:bekerleyinternet name domain,我们简单的理解它是用bind 工具实 现DNS服务器的配置. 2.bind 安装:bind 安装比较简单我们可以使用下面命令安装并查看安装bind都生成

CentOS开机流程详解

CentOS开机流程详解 一.linux开机流程: BIOS:(Basic Input Output System)基本输入输出系统,它是一组固化到计算机内主板上一个ROM芯片 上的程序,保存着计算机最重要的基本输入输出的程序.开机后自检程序和系统自启动程序,可从CMOS中读写系统设置的具体信息. MBR:Master Boot Record,主要引导记录区. Boot Loader:启动引导程序. 二.详细流程 第一步:加载BIOS 打开计算机电源,计算机硬件会自动加载BIOS,读取BIOS内

详解js的bind、call、apply

详解js的bind.call.apply 说明 虽然bind.call.apply都是js很基础的一块知识,但是我从未认真总结过这三者的区别. 由于公司后端是用的微服务架构,又没有中间层对接,导致前端这边非常难于处理接口数据. 于是我在项目初期封装了一套薄弱的api方法充当中间层的作用,还有为了让后端接口字段命名统一,也单独封装了一套方法用来统一每个微服务字段返回名. 但是,随着业务的增加,代码出现强耦合现象,到最后薄弱的中间层已经撑不住了,连代码的审视都变得很麻烦. 最后不得以重新设计这套ap