通过VIEW实现智能DNS服务

发布时间:2024年01月04日

一、前言? ??

? ?BIND的view是基于人的脑裂(brain split)原理,灵活控制哪些客户机能看到哪个view视图的访问控制列表,view功能可以实现不同网段发出同样的请求却得到不同的DNS解析结果,可以有效的分流网络流量,提高访问控制能力。

二、VIEW语句的介绍

? 通过view语句可以完成DNS的智能解析功能,其语法如下:

????view view_name[class]{

???????[match-clients {address_match_list};]

???????[match-destinations {address_match_list};]

???????[view_options;...]

???????[zone_statement;...]

};

Class:

?????指定视图的类,默认为IN,所有非-IN视图必须包含一个hint域,因为只有IN类具有compiled-in默认暗示域。

match-clients

?????指定允许解析的客户源地址,默认为any。

match-destinations

?????指定用于客户目的地址的匹配,默认为any。

view_options

?????对应全局选项options里的选项,此处设置的优先级将高于options。

??????recursion定义同options.

????zone_statement

??????域文件声明,此处以include语句引入。

#其实说白了,view视图是根据match_clients提供的查询报文的IP地址进行过滤,一般用于让一个站点的DNS数据分为内外不同的结果。

? ? 每个view语句定义了一个被一些客户子集所看到的DNS 名字空间的视图。一个客户匹配一个视图 是指它的源地址与视图的match-clients子句中的address match list匹配并且它的目的地址与视 图的match-destinations子句中的address match list匹配。如果未指定,match-clients和match- destinations缺省都是匹配所有地址。除了检查IP地址,match-clients和match-destinations也可以使 用keys,它给客户端提供了一个选择视图的机制。一个视图也可以指定成为match-recursive-only, 它表示仅仅来自匹配客户的递归请求才匹配此视图。

Tips 1:view语句的顺序非常重要,一个客户端请求将在它所匹配的第一个view的上下文中被解析。在一个view语句中定义的区只能被与这个view相匹配的客户端访问。通过在多个视图中定义同样名字的区,可以为不同的客户端提供不同的区数据,例如,在一个分割的DNS 上建立“internal”和 “external”客户端。

Tips 2:许多在options语句中给出的选项也可以用在view语句中,并且仅仅在解析这个视图之内的请求时生效。当没有给出按视图指定的值时,缺省试验options 语句中的值。同样,区选项也使用在view语句 中指定的值做缺省值;这些按视图指定的缺省值优先于其在options语句中的值。

Tips 3:视图是按类划分的。如果没有给出类,假设为IN类。注意所有的非IN视图必须包含一个暗示区,因为只有IN类有一个预编译的缺省暗示区。

Tips 4:如果配置文件中没有view语句,就自动在IN类中建立一个匹配所有客户端的缺省视图(View: default)。然后在配置文件的顶层所指定的zone语句都是这个缺省视图的一部份,options语句将会应用到这个缺省视图。 如果提供任何显式的view语句,所有zone语句都必须出现在view语句之内。

三、配置VIEW实现智能DNS解析


options {
directory "/var/named";
};

acl internal { //定义acl列表,来自192.168.80.0/24网段的客户端均为内网用户
192.168.80.0/24;
};

acl external { //定义acl列表,来自192.168.1.0/24网段的客户端均为外网用户
192.168.1.0/24;
};

view "internal" { //内网视图,定义了内网主机查询所使用的区域解析库文件
match-clients { internal; };
recursion yes;
zone "test.com" IN {
type master;
file "internal.test.com.zone";
};
};

view "external" { //外网视图,定义了外网主机查询所使用的区域解析库文件
match-clients { external; };
recursion yes;
zone "test.com" IN {
type master;
file "external.test.com.zone";
};
};

? 各个View指令的应用是按先后顺序执行的,即是按首先符合的条件返回结果,例如本地请求首先符合第一View指令,则返回结果,不再检查其他的View;来自192.168.0.7的请求符合第二个View指令,则返回结果,不再检查后面的View;所以,如果要在该View的match-clients中设置任何条件(即any)的话,就必须将这个View摆在最后面,而绝不能放在其他View的前面。

文章来源:https://blog.csdn.net/vincent0920/article/details/135377775
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。