Linux运维最佳实践
上QQ阅读APP看书,第一时间看更新

最佳实践5:详解BIND视图技术及优化

上一个实践使用多个A记录的方式,实现了最基本的负载均衡设置。在中国目前的网络环境下,多个运营商并存,运营商之间存在一定的互联互通问题。如果把来自不同运营商或者地域的所有用户通过简单的A记录分配到同一个机房,那么就存在部分用户访问延时大或者丢包的问题。

BIND视图工作原理

那么这个问题怎么解决呢?在BIND里面提供了视图(DNS View)技术来解决这个问题。DNS视图技术,就是对同一个资源记录根据DNS的请求来源IP地址不同分配给解析器不同的解析结果。也就是说,可以使用BIND视图技术实现以下功能。

·对于来自山东省的中国电信的DNS请求,可以把用户引导到部署在山东省中国电信机房的服务器上。

·对于无法匹配到某个具体运营商或者国外的用户,可以把用户引导到指定的一组默认服务器上。

所有以上的功能,都是为了实现用户的就近访问,也就是让用户访问到对他来说网络质量最好的服务器上。

下面来看一个具体的配置。

首先用acl/SD_CTC来列举需要匹配的来源IP:

acl "SD_CTC" {
58.56.0.0/15;
58.58.0.0/16;
58.59.0.0/17;
60.235.0.0/16;
122.4.0.0/14;
123.168.0.0/14;
222.173.0.0/16;
222.174.0.0/15;
};

然后再用view/SD_CTC来调用acl/SD_CTC的内容:

view "view_SD_CTC" {
match-clients { #使用match-clients指令,指定匹配来自这些IP的用户
SD_CTC; #引用acl/SD_CTC的内容
};
include "public.def";
#指定这些IP来源的用户,使用如下的zone文件提供服务
zone "via.woyodns.com" {
type master;
file "zone/via.any.zone";
};

zone "web.woyodns.com" {
type master;
file "zone/web.any.zone";
};

zone "cdn.woyodns.com" {
type master;
file "zone/cdn.hbjmCTC.zone";
};

};

最后再用named.conf来使其关联起来生效:

include "acl/SD_CTC";
include "acl/SD_CNC";
include "acl/SD_OTHER";
include "view/SD_CTC";
include "view/SD_CNC";
include "view/SD_OTHER ";

总结起来就是使用acl指令圈定一批来源IP地址,使用view的match-clients匹配该acl,为其分配zone文件用于解析,使用named.conf加载acl和view使其生效。

BIND视图优化技巧

读者可以看到,这里面核心的内容是acl/SD_CTC里面的IP地址,也就是IP库。这些数据哪来的呢?

可以使用如下方法:

·使用纯真IP数据库进行分析。

·使用BIND自带的log进行分析。分析日志的可行性主要是基于目前国内的开放DNS服务器,数量不多,通过对log的多次分析即可逐步精确地匹配。

使用如下指令配置后,BIND的请求数据会记录在/var/query.log:

     channel query_log {
          file "/var/query.log" versions 5 size 20m;
          severity info;
          print-time yes;
          print-category yes;
     };
     category queries{
          query_log;
     };

其中一条日志如下:

04-Jan-2016 11:35:29.478 queries: client 210.51.28.230#52147 (www99.xufeng.info): query: www99.xufeng.info IN A +E (192.243.119.145)

其中210.51.28.230是某台开放域名服务器的地址,通过使用http://www.cnnic.cn/即可查询出该IP地址的运营商和地区等情况,然后将相关信息添加到对应的acl中。

注意

BIND视图技术所依据的来源IP地址,并不是访问网站等的终端用户的来源地址,而是这些终端用户配置的本地DNS服务器。如果山东省联通用户配置了上海市电信提供的DNS服务器,则可能会被调度到电信站点,出现偏差。