DNS BIND之ACL、View、ZONE介绍

BIND主配置文件由named进程运行时首先读取,文件名为named.conf,默认在/etc目录下。该文件只包括Bind的基本配置,并不包含任何DNS的区域数据。named.conf配置文件由语句与注释组成,每一条主配置语句均有自己的选项参数。这些选项参数以子语句的形式组成,并包含在花括号内,作为主语句的组成部分。每一条语句,包括主语句和子语句,都必须以分号结尾。注释符号可以使用类似于C语言中的块注释"/*"和"*/"符号对,以及行注释符"//"或"#"。BIND 9支持的主配置语句及功能如下表:

配置名  称 功    能
acl 定义一个访问控制列表,用于以后对列表中的IP进行访问控制
controls 定义有关本地域名服务器操作的控制通道,这些通道被rndc用来发送控制命令
include 把另一个文件中的内容包含进来做为主配置文件的内容
key 定义一个密匙信息,用于通过TSIG进行授权和认证的配置中
logging 设置日志服务器,以及日志信息的发送位置
options 设置DNS服务器的全局配置选项
server 定义了与远程服务器交互的规则
trusted-keys 定义信任的 DNSSED密匙
view 定义一个视图
zone 定义一个区域
其中:logging是有关日志配置的主语句,可以有众多的子语句,指明了日志记录的位置、日志的内容、日志文件的大小和日志的级别等内容, 上一节我们已经讲过。
1.options语句
options语句设定可以被整个BIND使用的全局选项。这个语句在每个配置文件中只有一处,如果出现多个options语句,则第一个options的配置有效,并且会产生一个警告信息。如果没有options语句,每个子语句使用默认值。

2.controls语句

controls主语句定义有关本地域名服务器操作的控制通道,这些通道被rndc用来发送控制命令。在上节的例子named.conf配置文件中有以下语句,现解释如下:

controls {  
     inet 127.0.0.1 port 953    //在127.0.0.1接口的953号端口进行监听  
        allow { 127.0.0.1; }    //只接受127.0.0.1的连接,即只有在本机使用rndc,才能对named进行控制  
       keys { "rndckey"; };     //使用名为rndckey的密钥才能访问  
};
3.include语句
include主语句表示把另一个文件的内容包含进来,作为named.conf文件的配置内容,其效果与把那个文件的内容直接输入named.conf时一样。之所以这样做,一是为了简化一些分布式的named.conf文件的管理,此时,每个管理员只负责自己所管辖的配置内容。二是为了安全,因为可以把一些密钥放在其他文件,不让无关的人查看。

4.key语句
key主语句定义一个密匙,用于TSIG授权和认证。它主要在与其他DNS服务器或rndc工具通信时使用,可以通过运行rndc-confgen命令产生。

key "rndckey" {             //定义一个密钥,名为rndckey  
       algorithm hmac-md5;  //采用hmac-md5算法,这也是目前唯一支持的加密算法  
       secret "TKuaJSEo58zohJBfrdF7dQ==";       //密钥的具体数据  
 }; 
5.server语句
server主语句定义了与远程服务器交互的规则,例如,决定本地DNS服务器是作为主域名服务器还是辅域名服务器,以及与其他DNS服务器通信时采用的密钥等。语句可以出现在配置文件的顶层,也可以出现在视图语句的内部。如果一个视图语句包括了自己的server语句,则只有那些视图语句内的server语句才起作用,顶层的server语句将被忽略。如果一个视图语句内不包括server语句,则顶层server语句将被当做默认值。
6.trusted-keys语句
trusted-keys语句定义DNSSEC安全根的trusted-keys。DNSSEC指由RFC2535定义的DNS sercurity。当一个非授权域的公钥是已知的,但不能安全地从DNS服务器获取时,需要加入一个trusted-keys。这种情况一般出现在singed域是一个非signed域的子域的时候,此时加了trusted key后被认为是安全的。trusted-keys语句能包含多重输入口,由键的域名、标志、协议算法和64位键数据组成。
下面就ACL、VIEW、ZONE做一下介绍:

1.view语句

view语句定义了视图功能。视图是BIND 9提供的强大的新功能,允许DNS服务器根据客户端的不同有区别地回答DNS查询,每个视图定义了一个被特定客户端子集见到的DNS名称空间。这个功能在一台主机上运行多个形式上独立的DNS服务器时特别有用。

视图(view)语句的定义:
view view_name [class] {
match-clients { address_match_list } ;
match-destinations { address_match_list } ;
match-recursive-only { yes_or_no } ;
[ view_option; ...]
zone-statistics yes_or_no ; ]
[ zone_statement; ...]
};

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

配置实例:

view "internal" {
	match-clients { 10.0.0.0/8; };
	// 应该与内部网络匹配.
	// 只对内部用户提供递归服务.
	// 提供example.com zone 的完全视图
	//包括内部主机地址.
	recursion yes;
	zone "example.com" {
		type master;
		file "example-internal.db";
	};
};
view "external" {
	match-clients { any; };
	// 拒绝对外部用户提供递归服务
	// 提供一个example.com zone 的受限视图
	// 只包括公共可接入主机
	recursion no;
	zone "example.com" {
		type master;
		file "example-external.db";
	};
};

2.acl语句
acl主配置语句用于定义一个命名的访问列表,里面包含了一些用IP表示的主机,这个访问列表可以在其他语句使用,表示其所定义的主机。其格式如下:
acl acl-name {   
    address_match_list   
}; 
address_match_list表示IP地址或IP地址集。其中,none、any、localhost和localnets这4个内定的关键字有特别含义,分别表示没有主机、任何主机、本地网络接口IP和本地子网IP。一个具体的例子如下所示。

acl "someips" {             //定义一个名为someips的ACL  
  10.0.0.1; 192.168.23.1; 192.168.23.15;      //包含3个单个IP  
 };  
acl "complex" {             //定义一个名为complex的ACL  
  "someips";                //可以包含其他ACL  
  10.0.15.0/24;                 //包含10.0.15.0子网中的所有IP  
  !10.0.16.1/24;                //非10.0.16.1子网的IP  
  {10.0.17.1;10.0.18.2;};   //包含了一个IP组  
  localhost;                //本地网络接口IP(含实际接口IP和127.0.0.1)  
 };  
zone "example.com" {  
  type slave;  
  file "slave.example.com";  
  allow-notify {"complex";};    //在此处使用了前面定义的complex访问列表  
}; 
3.zone语句

zone语句的定义:
zone zone_name [class] [{
type ( master | slave | hint | stub | forward ) ;
[ allow-notify { address_match_list } ; ]
[ allow-query { address_match_list } ; ]
[ allow-transfer { address_match_list } ; ]
[ allow-update { address_match_list } ; ]
[ update-policy { update_policy_rule [...] } ; ]
[ allow-update-forwarding { address_match_list } ; ]
[ alsonotify
{ ip_addr [port ip_port] ; [ ip_addr [port ip_port] ; ... ] }; ]
[ check-names (warn|fail|ignore) ; ]
[ dialup dialup_option ; ]
[ file string ; ]
[ forward (only|first) ; ]
[ forwarders
{ ip_addr [port ip_port] ; [ ip_addr [port ip_port] ; ... ] }; ]
[ ixfr-base string ; ]
[ ixfr-tmp-file string ; ]
[ maintain-ixfr-base yes_or_no ; ]
[ masters [port ip_port] { ip_addr [port ip_port] [key key]; [...] } ; ]
[ max-ixfr-log-size number ; ]
[ max-transfer-idle-in number ; ]
[ max-transfer-idle-out number ; ]
[ max-transfer-time-in number ; ]
[ max-transfer-time-out number ; ]
[ notify yes_or_no | explicit ; ]
[ pubkey number number number string ; ]
[ transfer-source (ip4_addr | *) [port ip_port] ; ]
[ transfer-source-v6 (ip6_addr | *) [port ip_port] ; ]
[ notify-source (ip4_addr | *) [port ip_port] ; ]
[ notify-source-v6 (ip6_addr | *) [port ip_port] ; ]
[ zone-statistics yes_or_no ; ]
[ sig-validity-interval number ; ]
[ database string ; ]
[ min-refresh-time number ; ]
[ max-refresh-time number ; ]
[ min-retry-time number ; ]
[ max-retry-time number ; ]
}];

zone语句定义了DNS服务器所管理的区,也就是哪一些域的域名是授权给该DNS服务器回答的。一共有5种类型的区,由其type子语句指定,具体名称和功能如下所示。
Master(主域):主域用来保存某个区域(如www.wzvtc.cn)的数据信息。
Slave(辅域):也叫次级域,数据来自主域,起备份作用。
Stub:Stub区与辅域相似,但它只复制主域的NS记录,而不是整个区数据。它不是标准DNS的功能,只是BIND提供的功能。
Forward(转发):转发域中一般配置了 forward和forwarders子句,用于把对该域的查询请求转由其他DNS服务器处理。
Hint:Hint域定义了一套最新的根DNS服务器地址,如果没有定义,DNS服务器会使用内建的根DNS服务器地址。
配置实例:

zone "." IN {           //定义一个名为"."的区,查询类为IN  
	type hint;              //类型为hint  
	file "named.root";      //区文件是named.root  
};  

zone  "1.10.10.in-addr.arpa" IN {     //定义一个名为1.10.10.in-addr.arpa的区,查询类为IN  
        type master;                    //类型为master  
        file "named.1.10.10";       //区文件是named.1.10.10  
        allow-update  { none; };    //不允许任何客户端对数据进行更新  
}; 
说明:在每一个zone语句中,都用file子语句定义一个区文件,这个文件里存放了域名与IP地址的对应关系。

对于ACL、VIEW、ZONE的应用,DNS服务器有一个高级的功能,能够实现不同的用户访问同一个域名,把域名解析成不同的IP地址,使用户能够访问离他最近的服务器上的数据,这就是DNS服务器的视图功能。使用DNS服务器的视图功能可以增加网站的响应速度。例如,当我们网站的数据同步在两台web服务器上时,一台是电信服务器,一台是网通服务器,那么我们肯定希望全国访问我们网站的用户在打开网站的时候,能够自动实现,电信用户访问电信服务器,网通用户访问网通服务器。配置这种情况的前提是,web服务器必须要有一个电信的IP地址和一个网通的IP地址。DNS服务器的这种解析功能通常也被称之为智能解析。

DNS服务器的视图通常在配置文件中是使用view实现的。把要使用某些IP地址作单独访问的zone区域,统一放在一个命名的view段落中,并且在view中定义请求的IP地址或IP地址段,把IP地址写入match-clients选项中。如果像上面说的,区分电信和网通路线的话,那么可以使用两个acl访问控制列表写上电信或网通IP地址,定义电信网通路线,把acl名字写入view段落match-clients选项中。如下所示:

acl telecomip{ tele_IP; ... };
acl netcomip{ net_IP; ... };
view telecom {
    match-clients { telecomip; };
    zone "ZONE_NAME" IN {
        type master;
        file "ZONE_NAME.telecom";
    };
};
view netcom {
    match-clients { netcomip; };
    zone "ZONE_NAME" IN {
        type master;
        file "ZONE_NAME.netcom";
    };
};
view default {
    match-clients { any; };
    zone "ZONE_NAME" IN {
        type master;
        file "ZONE_NAME.netcom";
    };
};
需要注意的是:
(1)、如果使用了视图的功能,那么配置文件中的所有zone区域都要必须写在视图里面,如,配置文件里默认要配置的三个区域,根、127.0.0.1、1.0.0.127.in-addr.arpa都要写入视图。
(2)、在acl中定义IP地址,IP地址的写法可以是单个IP地址也可以是一个IP地址段加掩码,如:192.168.0.0/24。
(3)、视图是根据配置文件从上往下匹配的,所以希望优先访问的资源记录文件,区域应该尽量写前面。
(4)、如果定义的若干个视图的IP地址不全的话,那么可以在最后定义一个默认视图,match-clients选项中的IP地址写上any,代表如果此次访问的IP地址上面没有一个能匹配到,则在此处归类。
参考文章

1.bind配置文件语法

2.BIND配置文件详解

3.DNS视图及bind中rndc的使用

  • 5
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Bind DNS安装可以按照以下步骤进行操作: 1. 安装Bind软件。Bind通常与操作系统一起安装,如果没有安装,则可以使用操作系统提供的包管理工具进行安装。 2. 配置主配置文件/etc/named.conf。可以修改监听地址为本地IP地址或者any,以及修改allow-query为any,允许任何客户机进行查询。确保配置文件格式正确。 3. 启动named服务。使用命令systemctl start named启动服务。 4. 检查端口是否被监听。使用命令netstat -luntp|grep 53,确保监听端口53正常。 5. 使用dig工具验证DNS解析是否正常。例如,使用命令dig -t A example.com @DNS服务器IP地址,查看是否能成功解析域名。 6. 修改本机的DNS配置为自建的DNS服务。编辑/etc/resolv.conf文件,并重启网络服务,使用命令systemctl restart network。 7. 验证DNS解析是否正常。使用ping命令验证域名是否能正常解析。 请注意,具体的操作步骤可能因操作系统版本或网络环境而有所差异,建议参考相关的文档或指南进行具体操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [DNS详解以及Bind使用(二)---Bind安装、配置及使用](https://blog.csdn.net/weixin_40864891/article/details/103636597)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [2021-07-11用bind9安装dns服务](https://blog.csdn.net/weixin_44014460/article/details/118651165)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值