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

实验所需清单:

CentOS 6.4 64位系统

bind-9.10.2.tar.gz

mysql-5.6.23.tar.gz


1.安装mysql

    安装依赖包:

    #yum -y install make cmake ncurses-devel bison-devel libaio-devel gcc-c++

    创建mysql用户及组

    #groupadd mysql

    #useradd mysql -g mysql -M -s /sbin/nologin

    安装mysql

    #tar xf mysql-5.6.23.tar.gz

    #cd mysql-5.6.23

    #cmake .

    #make && make install

    #cd /usr/local/mysql/

    #scripts/mysql_install_db --user=mysql

    #chown -R :mysql .

    #chown -R mysql data

    #bin/mysqld_safe --user=mysql

    #cp support-files/mysql.server /etc/init.d/mysql

    #chkconfig --add mysql

    #ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock

    #service mysql start

    #bin/mysqladmin -u root password 'bmw12345'

    #echo "/usr/local/mysql/lib" >> /etc/ld.so.conf

    #ldconfig


2.配置bind

    #yum -y install openssl-devel

    #tar xf bind-9.10.2.tar.gz

    #cd bind-9.10.2

    #./configure --with-dlz-mysql --enable-largefile --enable-threads=no --prefix=/home/bind --disable-openssl-version-check

    #make && make install

    #useradd bind -M -s /sbin/nologin

    #vim /home/bind/etc/named.conf

dlz "My zone" {

   database "mysql

   {host=127.0.0.1 dbname=dns ssl=false port=3306 user=root pass=bmw12345}

   {select zone from dns_records where zone = '$zone$'}

   {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 from dns_records where zone = '$zone$' and host = '$record$'}";

};

    配置不再详说,网上一大把

    #/home/bind/sbin/named -u bind -c /home/bind/etc/named.conf


3.数据库添加

    #mysql -uroot -pbmw12345

    进入数据库操作

    #create database dns;

    #use dns

    #CREATE TABLE dns_records(id int(11) unsigned NOT NULL auto_increment,zone varchar(255) NOT NULL,host varchar(255) NOT NULL default '@',type varchar(255) NOT NULL,data text,ttl int(11) default 600,mx_priority int(11) default NULL,refresh int(11) default NULL,retry int(11) default NULL,expire int(11) default NULL,minimum int(11) default NULL,serial bigint(20) default NULL,resp_person varchar(255) default NULL,primary_ns varchar(255),PRIMARY KEY(id));

    #CREATE INDEX host_index ON dns_records(host);

    #CREATE INDEX type_index ON dns_records(type);

    #CREATE INDEX zone_index ON dns_records(zone);

    #insert into dns_records (zone,host,type,data,refresh,retry,expire,minimum,serial,resp_person,primary_ns) values('test.com','@','SOA','ns.test.com',7200,3600,86400,3600,1000,'root.test.com.','ns.test.com.');

    #insert into dns_records (zone,host,type,data) values('test.com','@','NS','ns.test.com.');

    #insert into dns_records (zone,host,type,data) values('test.com','ns','A','1.1.1.1');

    #insert into dns_records (zone,host,type,data) values('test.com','www','A','127.0.0.1');

4.验证

    dig安装:yum -y install bind-utils

    #dig @127.0.0.1 www.test.com