应用服务之DNS与智能DNS,bind-dlz+mysql

应用服务之DNS与智能DNS
2010-3-25 wdlinux.cn制作 QQ:12571192

目录
一 DNS与智能DNS的介绍
二 DNS软件及介绍
三 安装和配置
四 主辅结构及数据同步
五 FAQ

一 DNS与智能DNS的介绍
1 DNS的定义
DNS 是域名系统 (Domain Name System) 的缩写,该系统用于命名组织到域层次结构中的计算机和网络服务。DNS 命名用于 Internet 等 TCP/IP 网络中,通过用户友好的名称查找计算机和服务。当用户在应用程序中输入 DNS 名称时,DNS 服务可以将此名称解析为与之相关的其他信息,如 IP 地址。因为,你在上网时输入的网址,是通过域名解析系解析找到相对应的IP地址,这样才能上网。其实,域名的最终指向是IP。
简单地说,就是通过域名得出IP,或是通过IP得出域名(较少用)。怎样得到域名的IP,可以用ping程序。如在XP系统里,开始》运行 里输入 ping www.wdlinux.cn –t 就会显示出IP。

2 智能DNS的定义
所谓智能,实际上就是根据访问者的IP地址信息,然后指向到离访问者最近或最快的服务器上,从而加快了访问速度或达到定向目的。如电信用户访问电信服务器,网络用户访问网通服务器,教育网等同理。智能DNS的出现以及应用,很大一个原因是国内互联网的结构比较特殊。南北互通是个问题,而解决此问题的一个较好方法,便是架设一个电信网通智能解释的智能DNS。还有一些如教育网,铁通等问题,同样可以架设一个多线路解释更智能的DNS了。还有一个原因,是可以达到分流,如南北分流,地区分流等等。不过这里是对大流量网站来说才需要用到。

二 DNS软件及服务介绍
1 DNS软件有哪些?
最出名或应用得最多的,我想非bind莫属了。Windows里也有自带的DNS软件,lbnamed。我知道的就这几个了
Bind http://www.isc.org/software/bind
Windows 的在安装服务里就有,网上的下载,不太清楚了
Lbnamed http://www.stanford.edu/~riepel/lbnamed/
Bind-dlz http://bind-dlz.sourceforge.net/

2 应用配置
前面已有介绍DNS的功能和应用,但不同的配置,作用或应用也不同。比如智能DNS,用DNS实现的分流或均衡均衡,CDN等等。
从配置来说,对Bind的基本应用,相对来说就简单些。如要配置成智能DNS或多线路的解释,也不复杂,但在主从同步的时候就比较复杂了。而且,在修改DNS记录或管理维护时也不方便,开发应用管理也相对复杂。所以出了个bind-dlz.类似于在bind的基础上加个插件,把bind的配置及记录都放到数据库里,这样就方便多了,也易于开发了些管理程序。但这个性能,不如使用bind的文本方式来得好了,下图是来自bind-dlz官网的测试结果。

Windows的DNS配置,自然会是最简单和方便了。只要知道原理的人,点下鼠标就可完成
Lbnamed的配置,几年前好像有配置过,也不复杂
Bind-dlz 的配置,也相对简单
从应用来说,bind,bind-dlz都可以配置多线路或智能解释的DNS,windows, Lbnamed的不太清楚,没研究过。但 Lbnamed 有个很不错的功能,就是在用DNS做轮询分流时,Lbnamed有一个负载监测功能,可以根据各服务器的负载情况来调整解释IP的权重。这个功能,对想用DNS来做分流的人来说,是个不错的选择。不过现在要实际负载均衡或分流,LVS就是个不错的选择了。

三 安装与配置
本文以bind-dlz搭配mysql,架设一个南北分流的配置及应用为例,也就是电信和网通智能解释的DNS方案为例作说明,
域名 wdlinux.cn
注册为DNS服务器的域名名(本测试均在虚拟机上进行):
ns1.wdlinux.cn 192.168.1.91
ns2.wdlinux.cn 192.168.1.92

软件 bind-dlz+mysql
1 软件的下载
wget ftp://ftp.isc.org/isc/bind9/9.6.1-P2/bind-9.6.1-P2.tar.gz
mysql的相关安装配置略过,本文在mysql配置好的基础上

2 安装配置
tar -zxvf bind-9.6.1-P2.tar.gz
cd bind-9.6.1-P2
./configure --with-dlz-mysql --enable-largefile --enable-threads=no --prefix=/usr/local/bind
make && make install

添加named用户
useradd -d /dev/null -s /sbin/nologin named

设置bind的工作目录
cd /usr/local/bind/etc
echo 'options {
directory "/usr/local/bind"; // Working directory
};' > named.conf

生成相关的key
../sbin/rndc-confgen >rndc.conf
tail -n10 rndc.conf | head -n9 | sed -e s/#\//g >>named.conf

设置IP库及bind的view视图
echo 'include "/usr/local/bind/etc/telecom_acl.conf";
include "/usr/local/bind/etc/view.conf";' >> named.conf

将最新的DNS根域名导入
dig > named.root

wget http://www.wdlinux.cn/conf/bind/bind-dlz.tar.gz
(view.conf,telecom_acl.conf,localhost.zone, dnsdata.sql.txt)
tar zxvf cf.tar.gz

建bind数据库表
/usr/local/mysqlm/bin/mysqladmin -uroot -p create dnsdata
/usr/local/mysqlm/bin/mysql -uroot -p dnsdata < dnsdata.sql.txt
mysql –uroot –p < dnsdata.sql
设置权限
GRANT ALL ON dnsdata.* TO 'dnsuser'@'localhost' IDENTIFIED BY 'dnspass';
Flush privileges;

Iptables增加如下规则
-A RH-Firewall-1-INPUT -p tcp --dport 53 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp --dport 53 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp --sport 53 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp --sport 53 -j ACCEPT

测试启动
/usr/local/bind/sbin/named -unamed -g -d 9
看提示是否有错误,如下提示是正常的
23-Mar-2010 19:06:57.010 zone_timer: zone version.bind/CH: enter
23-Mar-2010 19:06:57.011 zone_maintenance: zone version.bind/CH: enter
23-Mar-2010 19:06:57.011 zone_timer: zone authors.bind/CH: enter
23-Mar-2010 19:06:57.012 zone_maintenance: zone authors.bind/CH: enter
23-Mar-2010 19:06:57.012 zone_timer: zone hostname.bind/CH: enter
23-Mar-2010 19:06:57.013 zone_maintenance: zone hostname.bind/CH: enter
23-Mar-2010 19:06:57.013 zone_timer: zone id.server/CH: enter
23-Mar-2010 19:06:57.014 zone_maintenance: zone id.server/CH: enter
测试结果

因在虚拟机且在内网测试,没有显示出IP等信息的不同,但原理一样
到此测试完成,DNS可正常工作了
把下面这行加下随系统启动
Echo ‘/usr/local/bind/sbin/named -unamed -c /usr/local/bind/etc/named.conf’ >> /etc/rc.d/rc.local

此文的连接:http://www.wdlinux.cn/bind-dlz-view-mysql
[我的Linux,让Linux更易用:http://www.wdlinux.cn:QQ 12571192]
原创内容,转载请保留此信息
本文的pdf下载 http://www.wdlinux.cn/doc/应用服务之DNS与智能DNS.pdf
Word版下载 http://www.wdlinux.cn/doc/应用服务之DNS与智能DNS.doc
同时本人用PHP写的一个管理记录的小程序,可以增加,修改,删除记录
暂不放网上了,有需者可联系

四 主辅结构及数据同步
一般做DNS服务,都有两台机以上,四五台更好。在多台机中,域名的记录信息,或在修改记录时,如何同步和及时更新,是个关键问题。不能手工在每台机上修改,那样很麻烦也容易出错。在用bind且以文本方式做存储时,用到相关的KEY来做同步信号,只要修改主DNS,系统会自动同步所修改过的信息到辅DNS上。在本文的说明中,由于是使用了mysql数据库来做存储,所以觉得直接做一个mysql的主从复制结构来得更简便。还可以将mysql做成互为主从结构,这样在数据安全及维护上更为可靠。具体的操作过程不作详细描述。
1 设置主mysql的ID,日志记录方式等,如
log-bin=mysql-bin
binlog_format=mixed
server-id = 1

GRANT REPLICATION SLAVE ON *.* TO 'dnsslave'@'%' IDENTIFIED BY 'dnswdlinux';

2 拷贝数据库文件至从机上,放到mysql的数据目录
在从机上设置主的相关信息
MASTER_HOST='IP',MASTER_USER='dnsslave',MASTER_PASSWORD='dnswdlinux',MASTER_LOG_FILE='filename',MASTER_LOG_POS=id;
Start slave start;

五 FAQ
23-Mar-2010 19:06:04.854 the working directory is not writable
23-Mar-2010 19:06:04.854 ignoring config file logging statement due to -g option23-Mar-2010 19:06:04.860 couldn't open pid file '/usr/local/bind/var/run/named/n
amed.pid': Permission denied
23-Mar-2010 19:06:04.860 exiting (due to early fatal error)

Cd /usr/local/bind
chown -R named.named var

更多教程敬请关注:http://www.wdlinux.cn

欢迎转载,但请保留此信息
[我的Linux,让Linux更易用] CentOS精简版,集成lamp,lnmp版,wdcp,wdcdn,wddns,一键安装包,集群负载均衡LVS,智能DNS/CDN,性能优化
本文连接:http://www.wdlinux.cn/old/bind-dlz-view-mysql