利用 BIND 9的新增功能View实现策略DNS bind9 智能DNS
kevin.Zhu 发布于:2013-1-16 0:17 分类:Bind 有 12 人浏览,获得评论 0 条
最 初的bind是不支持通过来源选择不同的ip的,因此只能通过iptables的辅助来实现智能DNS,方法也很简单,在DNS服务器上面启动两份 bind,都不要用默认的端口,两份分别解析不同的线路,然后再用iptables将默认端口的DNS请求根据来源IP发送到不同的bind实例
这种方法缺点很明显,需要多个bind实例,如果需要更多的线路解释那就还要再开bind实例,另外iptables对来源的解释也会导致iptables太多规则
现在的bind支持了根据来源选择的功能,我不确定是不是bind9的新特性,不过bind9是重写过的,相比漏洞百出的bind8来说,稳定和安全很多,以下的配置以bind9为基础
我使用的是CentOS,由于bind服务没有其他服务(比如apache,squid)要求那么高,所以也没有必要自己编译一份,我是用过yum安装的,版本不是最新的稳定版
装好之后,可以用过/etc/init.d/named start成功启动服务
有一个文件named.conf出现在/etc下,就是bind的主config文件,我们只要改动他
(我只说明智能DNS实现部分,其他的bind设置自行修改,呵呵)
另外一个小技巧,可以通过/usr/sbin/named -g -u named来启动bind,可以立刻看到输出信息,方便调试
我们是通过bind9的view功能来分离判断的
首先,我们需要一份网通的IP列表
acl “CNC” {
58.16.0.0/16;
58.17.0.0/17;
58.17.128.0/17;
58.18.0.0/16;
58.19.0.0/16;
58.20.0.0/16;
58.21.0.0/16;
}
如果觉得有哪些部分不是很准确的话,可以自行修改
由于这个部分太长了,所以写在一个专门的文件然后include进named.conf比较容易维护
例如,我们把上面这段配置保存为cnc_acl.conf
然后在named.conf写入
include “/data/named/cnc_acl.conf”;
即可
接下来就是view的配置,假设域名是xyz.com,呵呵
view “view_cnc” {
match-clients { "CNC"; };
recursion yes; //表示查询方式允许递归查询Zone
zone “xyz.com” {
type master;
file “/data/named/cnc_xyz”;
};
};
view “view_any” {
match-clients { any; };
recursion no;
zone “xyz.com” {
type master;
file “/data/named/any_xyz”;
};
};
所有的zone都要包含在view内
就这样就足够了
然后我们需要cnc\_xyz和any_xyz两个具体的zone file
两个文件基本是一模一样的,就是指向不同的ip
$TTL 2h
xyz.com. IN SOA ns.xyz.com. root.xyz.com. (
20071022
2h
40m
1w
2h
)
this6.com. IN NS ns.xyz.com.
this6.com. IN MX 1 mail.xyz.com.
ns IN A 1.1.1.1
mail IN A 1.1.1.1
www IN A 1.1.1.1
根据不同的线路把www指向不同的IP即可
这样,我们就实现了自己的智能DNS