Linux服务器--DNS服务器的子域授权、转发和视图
一.DNS服务器子域授权:
Linux DNS服务器的子域授权,是在原有的域上再划分小的区域并指定新的DNS服务器,在子区域的DNS服务器中,如果有客户端请求,则只要找到子DNS服务器即可,从而减轻了主DNS服务器的解析压力,也有利于管理。
实验环境:两台Linux主机,IP 分别为172.16.99.1(父域) ,172.16.99.2(子域)。
DNS服务器子域授权的配置:(在原有的DNS服务器上创建)
1.在原有的父域正向区域数据解析文件中添加子域的NS记录和A记录:如
在父域名服务器的配置文件/etc/named.conf 中,把dnssec-validation no;修改为no,应为这些域名都是自己试验随意设置的,都没有授权,不是权威域名,更谈不上在查询过程中是否加密一说和DNS 解析的请求者无法验证它所收到的应答信息的真实性。不修改为no将父域将无法解析子域的查询。
dnssec-enable yes;
dnssec-validation no;
重新启动父域名服务器:# service named restart
2.在172.16.99.3主机上安装bind, bind-utils 软件包,然后进行相关的配置:
a.编写named的主配置文件/etc/named.conf:编写和添加内容如下:
options { listen-on port 53 { 172.16.99.3; }; directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; listen-on port 53 { 172.16.99.3; }; //监听端口和IP allow-query { 172.16.0.0/16; }; //允许此服务解析的网段 recursion yes;允许递归查询 dnssec-enable yes; dnssec-validation no; }; zone "zz.zkchang.com" IN { type master; file "zz.zkchang.com.zone"; }; //子域的区域名定义
b.添加正向解析数据库文件和编写:
$TTL 1D zz.zkchang.com. IN SOA ns1.zz.zkchang.com. admin.zz.zkchang.com. ( 2015091801 1H 5M 2D 1D) IN NS ns1.zz.zkchang.com. ns1 IN A 172.16.99.3 www IN A 172.16.99.101 ftp IN A 172.16.99.102
c.分别检查语法是否有误,无误启动服务。
3.测试:
a.子域测试解析:
b.父域测试解析:
4.总结:
发现测试成功,在子域授权后,子域是无法解析父域内的主机的,因为,当前区域无法解析此记录,会将此记录转发给根,而外网并没有给此区域授权,所以是无法解析的。
二.转发
通过子域授权可知,子域是不知道父域在什么地方的,当然也不能解析父域内的主机。此时用转发机制就可以完成子域转发父域内的主机。
转发机制有两种方式,一种是在NDS配置文件中全局设置,二是在DNS配置文件中的区域设置中设置。如:
1.options { ....... forward first; 设置的转发模式为first,默认为only forwarders { 172.16.99.1; }; };
only为递归请求,只是用forwarders DNS 服务器做域名解析,如果查询不到则返回DNS客户端查询失败
first:设置优先使用forwarders DNS 服务器做域名解析,如果查询不到再使用本地DNS服务器再次去查询。
2.zone “zkchang.com” IN { type forward; forward first; forwarders { 172.16.99.1; }; };
在子域主配置文件内定义一个转发区域,当客户端要解析zkchang.com这个区域里的主机时会转发到172.16.99.1这个IP。
option设置的转发机制是对全局设置的,导致所有通过子域查询其他区域的主机都会经过父域去查找请求,这样会增大父域服务器的负担,因此使用单独制定的转发区域。
实验设置如下:
在子域的主配置文件中添加如下几行并将dnssec-validation no;设置为no:
zone "zkchang.com" { type forward; forward first; forwarders { 172.16.99.1; }; };
检查配置文件是否有误,重新加载服务,进行测试:
测试:
查看子域是否能解析父域内地的主机:
三. View
在Linux 的DNS服务器中实现智能解析的方法为acl + view ,其中acl是访问控制列表,是将就有相同目的的IP写到一起,进行共同管理。例如,在DNS服务器中我们将允许递归查询的一些IP段,写到一个acl定义的列表中,进行统一管理。如:
在Linux 的DNS服务器中实现智能解析的方法为acl + view ,其中acl是访问控制列表,是将就有相同目的的IP写到一起,进行共同管理。例如,在DNS服务器中我们将允许递归查询的一些IP段,写到一个acl定义的列表中,进行统一管理。如:
acl netip {
172.16.0.0/16;
10.0.0.0/8; };
在options中:
options {
.......
allow-recursion { netip; };
};
Linux NDS view就是将不同的IP地址段发来的查询响应到不同的DNS解析。
view 运用的实际场景如:
获取各个运营商的IP列表
为web服务器配置多个网络出口(IP)
配置智能解析DNS
定义view:一旦view,多有域都必须定义在view中。
实例:一台DNS服务器,给不同网段客户端进行解析时,解析出对应的内容。如,网段172.16.0.0上的主机解析www.zkc.com网段时,会对应其网段进行解析。
实验环境,ip eth0:172.16.99.1
acl INNET { 172.16.0.0/16; }; 为了实验方便只是用其中的一个IP:172.16.99.1
acl OUTNET { 192.168,1.0; }; 为了实验方便使用一个IP:172.16.99.3
即当在主机99.3上进行域名解析zkc.com上的主机时,会给出相对应得IP,详细过程在实验中。
a.在主配置文件/etc/named.conf配置如下:(这里只给出了正向解析)
acl neiwang { 172.16.99.1; }; acl waiwang { 172.16.99.3; }; options { listen-on port 53 { 172.16.99.1; }; directory "/var/named"; allow-query { any; }; recursion yes; }; view "INNET" { match-clients { neiwang; }; recursion yes; zone "." IN { type hint; file "named.ca"; }; zone "zkc.com" IN { type master; file "zkc.com.zone1"; }; include "/etc/named.rfc1912.zones"; include "/etc/named.root.key"; }; view "OUTNET" { match-clients { waiwang; }; recursion yes; zone "." IN { type hint; file "named.ca"; }; zone "zkc.com" IN { type master; file "zkc.com.zone2"; }; include "/etc/named.rfc1912.zones"; include "/etc/named.root.key"; };
b.在/var/named/目录下编写两个正向解析数据库文件:zkc.com.zone1 zkc.com.zone2
1.zkc.com.zone1
2.zkc.com.zone2
c.启动DNS服务,进行测试:
# service named restart
测试:
1.在ip 172.16.99.1主机上测试,会对应解析www.zkc.com 的结果为172.16.99.101:
2.在ip 172.16.99.3主机上测试,会对应解析www.zkc.com 的结果为192.168.1.3:
四.总结:
1.子域授权:
每个域的名称服务器,都是通过其上级名称服务器在解析库进行授权。
定义一个子区域:
ops.zkchang.com. IN NS ns1.ops.zkchang.com.
ops.zkchang.com. IN NS ns2.ops.zkchang.com.
ns1.ops.zkchang.com. IN A 1.1.1.1
ns2.ops.zkchang.com. IN A 1.1.1.2
2.转发
注意:被转发的服务器需要能够为请求者做递归,否则,转发请求不予进行;
(1) 全部转发: 凡是对非本机所有负责解析的区域的请求,统统转发给指定的服务器;
Options {
....
forward {first|only}
fowwarders
}
(2) 区域转发:仅转发对特定的区域的请求至某服务器;
zone "ZONE_NAME" IN {
type forward;
forward {first|only}
forwarders
}
注意:关闭dnssec功能:
dnssec-enable no;
dnssec-validation no;
3.view视图;
一个bind服务器可定义多个view,每个view中可定义一个或多个zone;
每个view用一来匹配一组客户端;
多个view内可能需要对同一个区域进行解析,但使用不同的区域解析库文件;
view VIEW_NAME {
match-clients { };
....
zone......
}
注意:
(1) 一旦启用了view,所有的zone都只能定义在view中;
(2) 仅有必要在匹配到允许递归请求的客户所在view中定义根区域;
(3) 客户端请求到达时,是自上而下检查每个view所服务的客户端列表;