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 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)