服务器维护,服务器代维,安全设置,漏洞扫描,入侵检测服务

dirtysea 发表于 2010-4-8 23:00:27

智能DNS配置

1。介绍
采用双线机房,Bind9作为智能DNS,通过DNS View配置,自动根据客户端IP来判断,网通的用户解析出网通的IP,电信的解析出电信IP,使用户能够访问到临近的同网的服务器,避免跨网访问,从而提高访问速度,解决南北互访问题。


2。安装步骤

软件列表:

BIND9http://www.isc.org
Ripe-dbase-client-v3http://www.apnic.net



3。安装Bind9

# yum install bind*
# yum install caching-nameserver
详细见:http://www.dirtysea.com/viewthread.php?tid=1150&extra=page%3D1

默认安装在:/var/named/chroot



5. 建立相关目录及文件
mkdir -p /var/named/data
mkdir -p /var/named/master/any
mkdir -p /var/named/master/cnc
mkdir -p /var/named/master/telecom
mkdir -p /var/named/slaves
mkdir -p /var/log/named
mkdir -p /var/run/named
touch /var/named/cnc_acl.conf
touch /var/named/telecom_acl.conf
touch /var/log/named/dns_warning
touch /var/log/named/dns_log
touch /var/named/master/any.def
touch /var/named/master/cnc.def
touch /var/named/master/telecom.def
wget ftp://ftp.internic.org/domain/named.root -O /var/named/named.ca
chown -R named.named /var/log/named /var/run/named   (编译安装的还需要设置/var/named)
chmod -R 770 /var/log/named /var/run/named         (编译安装的还需要设置/var/named)


4.安装IP地址段查询工具Ripe-dbase-client-v3:

wget http://ftp.apnic.net/apnic/dbase ... se-client-v3.tar.gz

解压软件包:
#tar zxvf ripe-dbase-client-v3.tar.gz
#cd whois-3.1
#./configure --prefix=/usr
#Make;make install


6.配置ACL文件
设置网通IP列表ACL文件cnc_acl.conf:
/usr/bin/whois3 -h whois.apnic.net -l -i mb MAINT-CNCGROUP | grep "descr" | grep "Reverse" | awk -F "for" '{if ($2!="") print $2}'| sort -n | awk 'BEGIN{print "acl \"CNC\" '{'"}{print $1";"}END{print "'}';"}' > /var/named/cnc_acl.conf
设置电信IP列表ACL文件telecom_acl.conf:
/usr/bin/whois3 -h whois.apnic.net -l -i mb MAINT-CHINANET | grep "descr" | grep "Reverse" | awk -F "for" '{if ($2!="") print $2}'| sort -n | awk 'BEGIN{print "acl \"TELECOM\" '{'"}{print $1";"}END{print "'}';"}' > /var/named/telecom_acl.conf

7.配置rndc和/etc/named.conf(我的是/etc/named.caching-nameserver.conf)

用命令生成rndc.conf文件:
#/usr/sbin/rndc-confgen >/etc/rndc.conf

生成/etc/rndc.key: (yum安装的默认已经有了在 /var/named/chroot/etc/rndc.key)
#/usr/sbin/rndc-confgen -a
wrote key file "/etc/rndc.key"
生成在了/etc/下

设置rndc.conf:
vi /etc/rndc.conf
==========rndc.conf begin==========
options {
       default-key “rndc-key”;
       default-server 127.0.0.1;
       default-port 953;
};
include “include "/var/named/chroot/etc/rndc.key"”;
==========rndc.conf end============


配置/etc/named.conf
==========named.conf begin==========
acl "trusted-lan" {
    127.0.0.1/8;
    192.168.0.0/24;
};
options {
    directory "/var/named";
    dump-file "/var/named/data/cache_dump.db";
    statistics-file "/var/named/data/named_stats.txt";
    version "";
    datasize 40M;
    allow-transfer {
   "trusted-lan";
    };
    recursion yes;
    allow-notify {
      "trusted-lan";
    };
    allow-recursion {
      "trusted-lan";
    };
    auth-nxdomain no;
    forwarders {
      202.96.209.5;
      210.22.70.3;
    };
};
logging {
    channel warning {
   file "/var/log/named/dns_warning" versions 3 size 1240k;
   severity warning;
   print-category yes;
   print-severity yes;
   print-time yes;
    };
    channel general_dns {
      file "/var/log/named/dns_log" versions 3 size 1240k;
      severity info;
      print-category yes;
      print-severity yes;
      print-time yes;
    };
    category default {
      warning;
    };
    category queries {
      general_dns;
    };
};
include "cnc_acl.conf";
include "telecom_acl.conf";
view "view_cnc" {
    match-clients {
          CNC;
    };
    zone "." {
          type hint;
          file "named.ca";
    };
    include "master/cnc.def";
};
view "view_telecom" {
    match-clients {
          TELECOM;
    };
    zone "." {
          type hint;
          file "named.ca";
    };
    include "master/telecom.def";
};
view "view_any" {
    match-clients {
          any;
    };
    zone "." {
          type hint;
          file "named.ca";
    };
    include "master/any.def";
};
include "/var/named/chroot/etc/rndc.key";
==========named.conf end===========

8.增加域名解析配置文件

设置网通解析配置文件:
#vi /var/named/master/cnc.def
==========cnc.def begin==========
zone "entage.net"{
   type master;
   file "master/cnc/entage.net";
};
==========cnc.def end===========


设置电信解析配置文件:
#vi /var/named/master/telecom.def
==========telecom.def begin==========
zone "entage.net"{
   type master;
   file "master/telecom/entage.net";
};
==========telecom.def end===========
设置网通电信以外解析配置文件:
# vi /var/named/master/any.def
==========any.def begin==========
zone "entage.net"{
   type master;
   file "master/any/entage.net";
};
==========any.def end===========
9.增加域名定义文件:
设置网通域名定义文件:
# vi /var/named/master/cnc/entage.net
==========cnc/entage.net begin==========
$TTL 3600
$ORIGIN entage.net.
@ IN SOA ns.entage.net. root.entage.net. (
                     2007011701;Serial
                     3600    ;Refresh ( seconds )
                     900    ;Retry ( seconds )
                     68400       ;Expire ( seconds )
                     15          ;Minimum TTL for Zone ( seconds )
                     )
@       IN      NS   ns.entage.net.
@       IN      A      218.108.238.221
ns      IN      A      218.108.238.221
www   IN      A      218.108.238.221
==========cnc/entage.net end===========
设置电信域名定义文件:
#vi /var/named/master/telecom/entage.net
==========telecom/entage.net begin==========
$TTL 3600
$ORIGIN entage.net.
@ IN SOA ns.entage.net. root.entage.net. (
                        2007011701;Serial
                        3600   ;Refresh ( seconds )
                        900   ;Retry ( seconds )
                        68400   ;Expire ( seconds )
                        15   ;Minimum TTL for Zone ( seconds )
                        )
@      IN       NS      ns.entage.net.
@      IN       A       61.152.241.97
ns   IN       A       61.152.241.97
www    IN       A       61.152.241.97
==========telecom/entage.net end===========
设置其它区域域名定义文件:
vi /var/named/master/any/entage.net
==========any/entage.net begin==========
$TTL 3600
$ORIGIN entage.net.
@ IN SOA ns.entage.net. root.entage.net. (
                        2007011701;Serial
                        3600   ;Refresh ( seconds )
                        900   ;Retry ( seconds )
                        68400   ;Expire ( seconds )
                        15   ;Minimum TTL for Zone ( seconds )
                        )
@      IN       NS      ns.entage.net.
@      IN       A       61.152.241.97
ns   IN       A       61.152.241.97
www    IN       A       61.152.241.97
==========any/entage.net end===========


参考:http://www.linuxnotes.cn/?p=177和http://bbs.linuxsun.cn/thread-348-1-1.html

dirtysea 发表于 2010-4-16 13:11:29

利用Bind DLZ MySQL 构建智能DNS



【题 纲】
一、相关述语简介
二、智能DNS系统服务规划
三、安装配置Bind-DLZ (介绍Bind-dlz具体安装)
四、添加相关记录并进行测试
五、后续话题及相关参考.
一、相关术语简介:
1、智能DNS(Bind-view):
智能DNS的原理很简单:在用户解析一个域名的时候,判断一下用户的IP,然后跟DNS服务器内部的IP表匹配一下,看看用户是电信还是网通用户,然后给用户返回对应的IP地址。目前的域名服务运营商不提供智能DNS服务,所以必须自行架设DNS服务或者使用网上免费的智能DNS服务,如DNSPOD.

2.Bind-DLZ
Bind-DLZ主页:http://bind-dlz.sourceforge.net/
DLZ(Dynamically Loadable Zones)与传统的BIND9不同,BIND的不足之处:
* BIND从文本文件中获取数据,这样容易因为编辑错误出现问题。
* BIND需要将数据加载到内存中,如果域或者记录较多,会消耗大量的内存。
* BIND启动时解析Zone文件,对于一个记录较多的DNS来说,会耽误更多的时间。
* 如果近修改一条记录,那么要重新加载或者重启BIND才能生效,那么需要时间,可能会影响客户端查询。
而Bind-dlz 即将帮你解决这些问题, 对Zone文件操作也更方便了,直接对数据库操作,可以很方
便扩充及开发管理程序。

二、智能DNS系统服务规划:
1、NameServer 服务器注册(到新网或者万网后台添加)
ns1.aim18.com211.100.72.137
ns2.aim18.com219.232.244.11
http://bbs.linuxtone.org/images/default/attachimg.gif http://bbs.linuxtone.org/attachments/day_090308/0903081952dbfd355e46619f54.png
下载 (12.5 KB)
2009-3-8 19:52



2、测试NS记录是否生效.
[*]#dig ns aim18.com[*]#dig aim18.com +trace
复制代码
更多的命令技巧请参考: http://bbs.linuxtone.org/thread-2021-1-1.html

3、Bind-View规划
www.aim18.com 网通 (CNC)210.51.36.116 (NK**)
www.aim18.com 电信(TELECOM) 221.238.249.178 (CU)
www.aim18.com 教育网(EDU) 202.205.109.207 (教育网)
www.aim18.com 电信通(ANY) 211.103.156.230 (51CTO)
【注】:由于资源问题,在此引用国内一些知名站点的IP做实验,请见谅~!
即当您是网通用户的时候,输入www.aim18.com智能DNS服务器将把你分配到210.51.36.116 (NK**) 这台服务器,其它同例。
View{CNC(网通),TELECOM(电信),EDU(教育网),ANY(其它所有)}
[*]include "/usr/local/bind/etc/cnc_acl.conf";[*]include "/usr/local/bind/etc/telecom_acl.conf";[*]include "/usr/local/bind/etc/edu_acl.conf";
复制代码
【注】IP库及ACL,如果你有比较详细的按城市或者地域的IP库,在设计BIND-VIEW这个字段的时候,VIEW就可以以城市或地区来命名和规划.

三、安装配置Bind-DLZ
1、编译安装MySQL
在此不作介绍,具体的请看http://www.linuxtone.org 相关内容。
注意编译MySQL的时候禁掉线程,相关的参数如下:
[*]--without-server --disable-threads --without-pthread
复制代码
2、编译安装Bind
[*]#mkdir /usr/local/src/bind-dlz[*]#cd /usr/local/src/bind-dlz[*]#wget http://ftp.isc.org/isc/bind9/9.6.0-P1/bind-9.6.0-P1.tar.gz[*]#tar zxvf bind-9.6.0-P1.tar.gz
复制代码
[*]#cd bind-9.6.0-P1[*]#./configure --with-dlz-mysql --enable-largefile --enable-threads=no --prefix=/usr/local/bind --with-openssl=/usr/local/openssl/
复制代码
注:禁掉线程;--with-openssl= 你的openssl安装的相关目录有可能是/usr
[*]# make && make install
复制代码
创建相关配置文件
[*]cd /usr/local/bind/etc[*]../sbin/rndc-confgen >rndc.conf[*]tail -n10 rndc.conf | head -n9 | sed -e s/#\//g >named.conf
复制代码
# vi localhost.zone
[*]ttl 86400[*]@ IN SOA localhost. root.localhost. ([*]1997022700 ; Serial[*]28800 ; Refresh[*]14400 ; Retry[*]3600000 ; Expire[*]86400 ) ; Minimum[*]IN NS localhost.[*]1 IN PTR localhost.
复制代码
# dig > named.root
#vi named.conf 在后面加入如下:
[*]include "/usr/local/bind/etc/cnc_acl.conf"; //网通ACL[*]include "/usr/local/bind/etc/telecom_acl.conf"; //电信ACL[*]include "/usr/local/bind/etc/edu_acl.conf"; //教育网ACL[*]include "/usr/local/bind/etc/view.conf"; //DLZ相关的配置
复制代码
#vi /usr/local/bind/etc/view.conf //创建view相关的配置文件
#cnc-view //贴出其中网通部分的范例,更详细的请参照view.conf配置文件.
[*]view "cnc_view" {[*]match-clients { CNC; };[*]allow-query-cache { none; };[*]allow-recursion { none; };[*]allow-transfer { none; };[*]recursion no;[*]dlz "Mysql zone" {[*]database "mysql[*]{host=127.0.0.1 dbname=cdn_view ssl=false port=3306 user=root pass= }[*]{select zone from dns_records where zone = '%zone%' and view='CNC' limit 1}[*]{select ttl, type, mx_priority, case when lower(type)='txt' then concat('\"', data, '\"') when lower(type) = 'soa' then concat_ws(' ', data, resp_person, serial, refresh, retry, expire, minimum) else data end as mydata from dns_records where zone = '%zone%' and host = '%record%' and view='CNC'}[*]{}[*]{select ttl, type, host, mx_priority, case when lower(type)='txt' then concat('\"', data, '\"') else data end as mydata, resp_person, serial, refresh, retry, expire, minimum from dns_records where zone = '%zone%' and view='CNC'}[*]{select zone from xfr_table where zone = '%zone%' and client = '%client%' and view='CNC' limit 1}[*]{update data_count set count = count + 1 where zone ='%zone%' and view='CNC'}";[*]};[*]};
复制代码
官方相关参考请参照: http://bind-dlz.sourceforge.net/mysql_example.html

3、DLZ相关数据库表结构建立 (//详细见提供的cdn_view.sql含测试数据.)
[*]mysql>create database cdn_view; //创建数据库名为cdn_view[*]mysql>use cdn_view;[*]CREATE TABLE `dns_records` ([*]`id` int(10) unsigned NOT NULL auto_increment,[*]`zone` varchar(255) NOT NULL,[*]`host` varchar(255) NOT NULL default '@',[*]`type` enum('MX','CNAME','NS','SOA','A','PTR') NOT NULL,[*]`data` varchar(255) default NULL,[*]`ttl` int(11) NOT NULL default '800',[*]`view` enum('CNC','TELECOM','EDU','ANY') NOT NULL, //智能DNS区域范围[*]`mx_priority` int(11) default NULL,[*]`refresh` int(11) NOT NULL default '3600',[*]`retry` int(11) NOT NULL default '3600',[*]`expire` int(11) NOT NULL default '86400',[*]`minimum` int(11) NOT NULL default '3600',[*]`serial` bigint(20) NOT NULL default '2008082700',[*]`resp_person` varchar(64) NOT NULL default 'root.domain.com.',[*]`primary_ns` varchar(64) NOT NULL default 'ns1.domain.com.',[*]`data_count` int(11) NOT NULL default '0',[*]PRIMARY KEY (`id`),[*]KEY `type` (`type`),[*]KEY `host` (`host`),[*]KEY `zone` (`zone`)[*]) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=gbk;
复制代码
#desc dns_records; 显示表结构.
http://bbs.linuxtone.org/images/default/attachimg.gif http://bbs.linuxtone.org/attachments/day_090308/090308195298d1bfdcc765d95c.png
下载 (11.19 KB)
2009-3-8 19:52



【注】直接将本文提供的cdn_vew.sql导入你的数据库即可,具体操作如下:
[*]Mysql>create database cdn_view; //创建cdn_view数据库[*]#mysql cdn_view –uroot –p < cdn_view.sql 导入数据库
复制代码
4、启动bind服务.
# /usr/local/bind/sbin/named -uroot -g -d 9 //调试状态,如果没有报错说明环境配置正确。
做成启动服务. Debug的时候多用此模式启动bind.
# /usr/local/bind/sbin/rndc reload 重载named.conf相关配置文件.
# /usr/local/bind/sbin/named -uroot -c /usr/local/bind/etc/named.conf 启动bind服务.

四、添加相关记录并进行测试
将相关解析记录添加到数据库内,以下是相关SQL范例供参考:
1、添加SQL创建相关ZONE及记录.(以网通为例,具体建我提供的测试SQL)
[*]- - - - SOA[*]INSERT INTO `dns_records` (`zone`, `host`, `type`, `data`, `ttl`, `view`, `mx_priority`, `refresh`, `retry`, `expire`, `minimum`, `serial`, `resp_person`, `primary_ns`, `data_count`) VALUES[*]('aim18.com', '@', 'SOA', 'ns1.aim18.com.', 10, 'CNC', NULL, 3600, 3600, 86400, 10, 2008082700, 'root.aim18.com.', 'ns1.aim18.com.', 0);[*]- - - - NS--SOA[*]INSERT INTO `dns_records` (`zone`, `host`, `type`, `data`, `ttl`, `view`, `mx_priority`, `refresh`, `retry`, `expire`, `minimum`, `serial`, `resp_person`,[*]`primary_ns`, `data_count`) VALUES[*]('aim18.com', '@', 'SOA', '211.100.72.137', 3600, 'CNC', NULL, 3600, 3600, 86400, 3600, 2008082700, 'root.aim18.com.', 'ns1.aim18.com.', 0);[*]- - - - NS1[*]INSERT INTO `dns_records` (`zone`, `host`, `type`, `data`, `ttl`, `view`, `mx_priority`, `refresh`, `retry`, `expire`, `minimum`, `serial`, `resp_person`, `primary_ns`, `data_count`) VALUES[*]('aim18.com', 'ns1', 'A', '211.100.72.137', 3600, 'CNC', NULL, 3600, 3600, 86400, 3600, 2008082700, 'root.aim18.com.', 'ns1.aim18.com.', 0);[*]- - - - NS2[*]INSERT INTO `dns_records` (`zone`, `host`, `type`, `data`, `ttl`, `view`, `mx_priority`, `refresh`, `retry`, `expire`, `minimum`, `serial`, `resp_person`, `primary_ns`, `data_count`) VALUES[*]('aim18.com', 'ns2', 'A', '219.232.244.11', 3600, 'CNC', NULL, 3600, 3600, 86400, 3600, 2008082700, 'root.aim18.com.', 'ns1.aim18.com.', 0);[*]- - - - A[*]INSERT INTO `dns_records` (`zone`, `host`, `type`, `data`, `ttl`, `view`, `mx_priority`, `refresh`, `retry`, `expire`, `minimum`, `serial`, `resp_person`, `primary_ns`, `data_count`) VALUES[*]('aim18.com', 'www', 'A', '210.51.36.116', 3600, 'CNC', NULL, 3600, 3600, 86400, 3600, 2008082700, 'root.aim18.com.', 'ns1.aim18.com.', 0);[*]- - - -CNAME[*]INSERT INTO dns_records (zone,host,type,DATA,view)[*]VALUES ('aim18.com', 'man', 'CNAME', 'www','CNC');
复制代码
2. 基本查询测试:
通过网通的机器查询,解析后得到提网通的服务器,说明智能解析是正确的。
http://bbs.linuxtone.org/images/default/attachimg.gif http://bbs.linuxtone.org/attachments/day_090308/090308195281f548dcd397558d.png
下载 (5.46 KB)
2009-3-8 19:52


http://bbs.linuxtone.org/images/default/attachimg.gif http://bbs.linuxtone.org/attachments/day_090308/0903081952fdc8a1aaf8a9e202.png
下载 (*** KB)
2009-3-8 19:52


http://bbs.linuxtone.org/images/default/attachimg.gif http://bbs.linuxtone.org/attachments/day_090308/0903081952a390b4d9bb08274b.png
下载 (6.03 KB)
2009-3-8 19:52


经测试解析都比较正确,能将电信用户解析到电信服务器,网通用户解析到网通服务器,教育网用户
解析到教育网网服务器,电信通用户解析到电信通服务器.
【注】本方案中的IP库抓取由(edison7500) 欣哥热情帮助分析抓取IP库,在此表示感谢!目前从测试来看IP库比较精准,能够真正做到智能DNS的智能解析

3、性能测试工具
[*]# cd /usr/local/src/bind-dlz[*]# cd bind-9.6.0-P1/contrib/queryperf[*]# ./configure && make
复制代码
# vi rslist //解析记录列表写入此文件
[*]www.aim18.com A[*]bbs.aim18.com A[*]man.aim18.com CNAME
复制代码
…..
#vi do.sh //建立一个循环程序对了bind服务器查询进行压力测试,同时多关注数据库状态.
[*]#!/bin/bash[*]while true[*]do[*]./queryperf –d rslist -s 211.100.72.137 -v[*]done
复制代码
/usr/local/bind/sbin/named -uroot -g -d 9 bind启为调试模式,在bind排错的时候请多用此模式来debug.
这里可以观察到查询过程中执行的SQL。
【注】在此不做深入详细的性能和压力测试报告,用户可以自己通过以上范例编写压力测试方案。

五、后续话题及相关参考
1、利用PHP程序开发一套Bind-DLZ 管理程序。
目前正在编写PHP管理页面,Falcon.C版主正在帮我做这方面的工作。主要在于数据设计和优化还需要花一些时间。大家可以考虑进一步优化数据库结构,同时也希望能与我分享你的心得。
PHP页面管理参考网站:
1)、https://svn.lokkju.com/svn/dnsEditor/trunk/ 国外开源程序
2)、http://www.dnswood.com/ dnswood的管理界面
3)、http://www.dnspod.com dnspod老牌智能DNS站的管理界面,用户体验做的一流!
2、智能DNS集群构建
Bind本身也很容易构建集群,由于Zone文件是存在数据库里面,利用mysql服务
器也很容易构建多个集群,很方便扩充,在些就不做详细介绍。
相关技术点: 负载均衡:LVS, 数据库集群:MySQL Replication.
3、结合SQUID服务器,可以很轻松实现CDN.
目前国内CDN技术比较热,国内各大门户都在考虑自建CDN,利用本文提供的智能DNS构建文档可以很方便的实现智能DNS解析系统,再与SQUID集群结合,可以很轻松实现CDN。下次我将给大家介绍SQUID构建和优化的经验,同时推荐出整
套的CDN集群解决方案,请实时关注linuxtone: http://www.linuxtone.org 相关信息。
4、相关参考网址.
1)、DNS相关工具(解析排错):http://bbs.linuxtone.org/thread-2021-1-1.html
2)、Bind-DLZ国外相关资料参考:
http://projects.navynet.it/DLZ/dlz-addons/
http://svn.the-mesh.org/trac.cgi/wiki/HardyBindDlzHowto
http://svn.the-mesh.org/trac.cgi/attachment/ticket/40/bind9-dlz.sql
http://projects.navynet.it/DLZ/dlz-addons/
5、附件相关的文件说明:
bind_dlz/etc.tar.gz 为/usr/local/bind/etc配置文件含IP库,编译后直接替换此文件.
bind_dlz/cdn_view.sql 为bind-dlz数据库表结构及数据, 直接用mysql 命令导入数据库.
下载地址:http://www.linuxtone.org/project/cdn/bind-dlz.tar.gz
测试数据:http://www.linuxtone.org/project/cdn/test.txt
页: [1]
查看完整版本: 智能DNS配置