一.智能DNS简介
智能DNS是域名频道在业界首创的智能解析服务。能自动判断访问者的IP地址并解析出对应的IP地址,使网通用户会访问到网通服务器,电信用户会访问到电信服务器。智能DNS就是根据用户的来路,自动智能化判断来路IP返回给用户,而不需要用户进行选择。解决南北互联问题
二.软件及环境
Red hat 5.4×64 Bin9 主192.168.10.45 辅 192.168.10.44
 
三.安装配置
1.       bind的安装
下载bind
wget  ftp://ftp.isc.org/isc/bind/9.8.0-P4/bind-9.8.0-P4.tar.gz
可直接从官网下载最新bind  http://www.isc.org/software/bind
其中–libdir=/usr/lib64 可以根据自己系统来设定,32位使用–libdir=/usr/lib
 
编译安装(主从相同)
./configure –prefix=/usr –exec-prefix=/usr –bindir=/usr/bin –sbindir=/usr/sbin –sysconfdir=/etc –datadir=/usr/share –includedir=/usr/include –libdir=/usr/lib64 –libexecdir=/usr/libexec –localstatedir=/var –sharedstatedir=/usr/com –mandir=/usr/share/man –infodir=/usr/share/info –with-libtool –localstatedir=/var –enable-threads –with-openssl=no –enable-epoll
 
make –j 24
make install
 
 
2.       基础配置文件生成
生成rndc.conf
rndc-confgen > /etc/rndc.conf
 
生成named.conf
cat /etc/rndc.conf |tail |head -9 |sed “s/^#//g” > /etc/named.conf
 
域名文件目录
mkdir /var/named/chinanet –p
mkdir /var/named/cnc -p
useradd named
 
生成根域文件
dig -t NS . >/var/named/named.root
 
ip库文件
         开始找以前同事要的,后来发现网上可以找到  http://liubaishui.com/ 下载其它的bind view IP库 (netlist.inc)
 
 
主DNS配置及简要说明(建议仔细阅读,配置时如果不需要说明,可以过滤掉以”;”开始的行)
view会根据定义顺序在定义的IP列表查找,将相应结果返回请求者。这次测试分为三部分,网通、电信、其它、如果请求者的IP不能匹配到,那么将会被“其它”匹配。
 
cat /etc/named.conf
options {
directory “/var/named”;
;这里可以添加其它控制参数,比如IP限制,可否递归查询等。请根据自己的生产需要添加
};
 
; rndc-key 用于控制DNS
key “rndc-key” {
         algorithm hmac-md5;
         secret “Mq+WZABoE+a/FFwgFYh3oQ==”;
};
 
;以下这三个key 用于主从同步。如果不设置会出现只会同步一个域。因为view已经可以匹配到结果。而且同步回来的数据可能会是错误的,这取决于从DNS同步时IP。本文中使用内网IP,IP列表中不会有内网IP,所以会同步other域名的数据。
;key的生成方法:使用 rndc-confgen命令。使用下面的命令即可。只输出key部分。将其名称做下修改即可。有多少个view域就生成多少个。主从DNS使用的key必须相同。
; rndc-confgen |grep “# key” -A3|sed “s/^# //g”
key “cnc” {
        algorithm hmac-md5;
        secret “wPaGrqLp0XtAepn8Rc0U3w==”;
};
 
key “chinanet” {
        algorithm hmac-md5;
        secret “i+uKnzR3JfSheMVLNWUH5Q==”;
};
 
 
key “other” {
        algorithm hmac-md5;
        secret “3o9OOMjzusp+M82okFcWyA==”;
};
 
controls {
         inet 127.0.0.1 port 953
                   allow { 127.0.0.1; } keys { “rndc-key”; };
};
;acl.conf即为下载回来的ip库。将其命名为acl.conf。其中cnc和chinanet为大写,我手动修改成了小写。如果写随意,记得其中acl的定义的名称就OK。如果拿不到ip库文件,可以邮件给我 .learywolf@163.com 内容示例如下。(下面的acl定义 在acl.conf中定义,这里只是示意,不要写在named.conf中)
;    acl “cnc” {
;    1.24.0.0/13;
;    1.56.0.0/13;
;    1.188.0.0/14;
;        ……………..
;    14.204.0.0/15;
;    27.8.0.0/13;
;    };
;    acl “chinanet” {
;    1.0.1.0/24;
;        ……….
;    1.0.2.0/23;
;    };
 
include “/etc/acl.conf”;
 
; view 部分 三部分中会顺序匹配,我的配置顺序,电信→网通→其它
 
view “chinanet” {
; match-clients 定义了来源的IP。如果请求IP在chinanet 的acl中,那调用此view配置。其中添加的key为了实现主从同步
 match-clients { key “chinanet” ; chinanet; };
;server指定从dns的IP及所用key 以区分不同 view域。同理从dns指定主。
 server 192.168.10.44 { keys “chinanet”;};
;指定根域文件 .
 zone “.” IN {
         type hint;
         file “named.root”;
         };
;加载chinanet.conf,其内容为常规dns配置。示例如下.注意三个view域要有三个不同的zone文件。如果不需要view 可以直接定义view控制文件中调用相同的zone文件。简单的说就是 cnc.con chinanet.conf other.conf中调用相应zone配置。当然,也可以只在other.conf中定义。这样只能在other.conf中匹配到相应的解析信息。但不推荐这样。其它配置不再赘述。可以查阅官方文档。
;    zone “leary.com” IN {
;            type master;
;            file “chinanet/leary.com.dns”;
;    };
 include “/etc/chinanet.conf”;
 notify yes;
 also-notify { 192.168.10.44; };
 allow-transfer { 192.168.10.44; };
 };
 
view “cnc” {
 match-clients { key “cnc” ;cnc; };
 server 192.168.10.44 { keys “cnc”;};
 zone “.” IN {
         type hint;
         file “named.root”;
         };
 include “/etc/cnc.conf”;
 notify yes;
 also-notify { 192.168.10.44; };
 allow-transfer { 192.168.10.44; };
 };
 
view “other” {
 match-clients { key “other” ; any; };
 server 192.168.10.44 { keys “other”;};
 zone “.” IN {
         type hint;
         file “named.root”;
         };
 include “/etc/other.conf”;
 notify yes;
 also-notify { 192.168.10.44; };
 allow-transfer { 192.168.10.44; };
 };
;end
 
 
3.       view域配置文件
/etc/cnc.conf
/etc/chinanet.conf
/etc/other.conf
分别配置其内容,需要注意:
 
zone “leary.com” IN {
        type master;
        file “cnc/leary.com.dns”;
};
1) type类型,主或者从
2) zone文件位置。基础目录为/var/named. 其中对应域名解析到的IP为别定义在不同的域文件中
3) cnc 的zone放在/var/named/cnc/下,chinanet 放在/var/named/chinanet/下,other放在/var/named/下
 
 
4.       zone 文件
根据需要配置域文件。
cat /var/named/leary.com.dns
 
$TTL    86400
@ IN SOA ns.leary.com.       root.leary.com. (
                                        6             ; serial_num
                                        3H              ; refresh
                                        15M             ; retry
                                        1W              ; expiry
                                        1D )            ; minimum
               IN NS           ns.leary.com.
 
@               IN A            10.1.4.165
ns               IN A            10.1.4.164
www            IN A            10.1.4.164
 
 
cat /var/named/cnc/leary.com.dns
 
$TTL    86400
@ IN SOA ns.leary.com.       root.leary.com. (
                                        6             ; serial_num
                                        3H              ; refresh
                                        15M             ; retry
                                        1W              ; expiry
                                        1D )            ; minimum
               IN NS           ns.leary.com.
 
@               IN A            10.1.2.165
ns             IN A            10.1.2.164
www            IN A            10.1.2.164
 
cat /var/named/chinanet/leary.com.dns
 
$TTL    86400
@ IN SOA ns.leary.com.       root.leary.com. (
                                        6             ; serial_num
                                        3H              ; refresh
                                        15M             ; retry
                                        1W              ; expiry
                                        1D )            ; minimum
               IN NS           ns.leary.com.
 
@               IN A            10.1.3.165
ns             IN A            10.1.3.164
www            IN A            10.1.3.164
 
 
5.       从DNS与主的配置区别
1) named.conf 中server的配置。 server 192.168.10.45 { keys “chinanet”;};
2) view配置文件。以cnc.conf为例
zone “leary.com” IN {
        type slave;
        file “slaves/cnc/leary.com.dns”;
         masters { 192.168.10.45; };
};
type 类似型为 slave
file 指定的文件位置,当然也可以按主DNS那样配置,我这里只是为了区分。
3) key 定义一定要和主一样
4) 从DNS的zone文件不用配置。可以直接从主同步
 
6.       权限修改
chown -R named:named /var/named
chown -R named /var/run/named
 
四.启动脚本及命令
1.       启动脚本。基于rhel 其它系统需要另行修改.放在/etc/init.d/named

      脚本见附件
         chown +x /etc/init.d/named
         chkconfig –add named
         chkconfig named on 
2.       named-checkconf 检查dns配置正确性
3.       rndc reconfig 重加载dns配置
4.       named-checkzone leary.com /var/named/leary.com.dns 重要zone配置文件
5.       rndc reload leary.com in cnc 重加载cnc 对应的zone文件配置
6.       rndc reload leary.com in chinanet 重加载chinanet 对应的zone文件配置
7.       rndc reload leary.com in other 重加载other 对就的zone文件配置
 
 
至此,可以启动dns了。
/etc/init.d/named configtest
/etc/init.d/named start
 
日志在/var/log/message,如遇问题,根据其中报错排查
 
已知问题:
会有报错如下
managed-keys-zone ./IN/chinanet: loading from master file 0eb205490a59454b6f6feb085efc6b0dab64a63f855a77e2d200c59ed055acd0.mkeys failed: file not found
touch /var/named/managed-keys.bind 依旧会报,目前没找到解决办法。但测试不影响使用。
 
测试方法:
         由于基于内网,可以分别修改acl.conf,添加192.168.0.0/16;在对应的acl中,用其它内网机器 dig 结果,正常可以得到不同的解析结果。我这里设置的,cnc为10.1.2 网段,chinanet 10.1.3网段 other 10.1.4网段。有问题可以留言或才邮件给我。learywolf@163.com
 出处:http://blog.chinaunix.net/uid-14880689-id-3201959.html