bind默认都是用文件来管理zone的信息,通过mysql与bind的结合,可以使用mysql来进行管理,这样变更,添加将更加方便。
http://mysql-bind.sourceforge.net/docs.php
一、 安装Mysql
因为后面需要使用mysql的头文件和库文件,所以我这边使用源码安装,当然,如果单独安装Headers and libraries应该也是可以的。
1、下载mysql
2、安装mysql,这个直接看INSTALL-SOURCE安装知道就可以了
shell> groupadd mysql shell> useradd -g mysql mysql shell> gunzip < mysql-VERSION.tar.gz | tar -xvf - shell> cd mysql-VERSION shell> ./configure --prefix=/usr/local/mysql shell> make shell> make install shell> cp support-files/my-medium.cnf /etc/my.cnf shell> cd /usr/local/mysql shell> bin/mysql_install_db --user=mysql shell> chown -R root . shell> chown -R mysql var shell> chgrp -R mysql . shell> bin/mysqld_safe --user=mysql & |
3、注意,这样安装好以后,我们的头文件和库文件分别在:
/usr/local/mysql/include/mysql/ 和 /usr/local/mysql/lib/mysql
二、安装bind和mysql-bind
1、分别下载bind 和mysql-bind ,并解压
2、mysql-bind里面主要有mysqldb.c和mysqldb.h两个文件,分别拷贝到bind源文件的bin/named和bin/named/include/named/目录
3、编辑bind源文件目录的bin/named/Makefile.in文件,修改如下几个字段:
DBDRIVER_OBJS = mysqldb.@O @ DBDRIVER_SRCS = mysqldb.c DBDRIVER_INCLUDES = -I'/usr/local/mysql/include/mysql/' DBDRIVER_LIBS = -L'/usr/local/mysql/lib/mysql' -lmysqlclient -lz -lcrypt -lnsl -lm -lc -lnss_files -lnss_dns -lresolv -lc -lnss_files -lnss_dns -lresolv |
4、编辑bind源文件bin/named/main.c
4.1、包含mysqldb.h,#include <named/mysqldb.h>
4.2、在函数setup(void)里面ns_server_create()的前面添加mysqldb_init(),如
/* * Add calls to register sdb drivers here. */ /* xxdb_init(); */ mysqldb_init(); ns_server_create(ns_g_mctx, &ns_g_server); |
4.3、在函数cleanup(void)里面ns_server_destroy()的后面添加mysqldb_clear(),如
ns_server_destroy(&ns_g_server); mysqldb_clear(); /* * Add calls to unregister sdb drivers here. */ /* xxdb_clear(); */ |
5、编译安装bind
./configure make make install |
三、配置
1、启动named,第一次运行它提示找不到libmysqlclient.so.15,但是在mysql编译安装的时候已经生成了这个文件,于是手动拷贝他到/usr/lib/libmysqlclient.so.15,启动正常,可以解析所有域名。
2、配置数据库
2.1、创建数据库:create database test1;
2.2、创建表:
CREATE TABLE mydomain ( name varchar(255) default NULL, ttl int(11) default NULL, rdtype varchar(255) default NULL, rdata varchar(255) default NULL ) TYPE=MyISAM; |
2.3、添加测试数据
INSERT INTO mydomain VALUES ('mydomain.com', 259200, 'SOA', 'mydomain.com. www.mydomain.com . 200309181 28800 7200 86400 28800'); INSERT INTO mydomain VALUES ('mydomain.com', 259200, 'NS', 'ns0.mydomain.com.'); INSERT INTO mydomain VALUES ('mydomain.com', 259200, 'NS', 'ns1.mydomain.com.'); INSERT INTO mydomain VALUES ('mydomain.com', 259200, 'MX', '10 mail.mydomain.com.'); INSERT INTO mydomain VALUES ('w0.mydomain.com', 259200, 'A', '192.168.1.1'); INSERT INTO mydomain VALUES ('w1.mydomain.com', 259200, 'A', '192.168.1.2'); INSERT INTO mydomain VALUES ('mydomain.com', 259200, 'Cname', 'w0.mydomain.com.'); INSERT INTO mydomain VALUES ('mail.mydomain.com', 259200, 'Cname', 'w0.mydomain.com.'); INSERT INTO mydomain VALUES ('ns0.mydomain.com', 259200, 'Cname', 'w0.mydomain.com.'); INSERT INTO mydomain VALUES ('ns1.mydomain.com', 259200, 'Cname', 'w1.mydomain.com.'); INSERT INTO mydomain VALUES ('www.mydomain.com', 259200, 'Cname', 'w0.mydomain.com.'); INSERT INTO mydomain VALUES ('ftp.mydomain.com', 259200, 'Cname', 'w0.mydomain.com.'); |
3、配置bind,其中dbname是数据库名,tablename是表名,hostname是mysql主机,然后就是用户名和密码
zone "mydomain.com" { type master; notify no; database "mysqldb dbname tablename hostname user password"; }; |
4、重新启动bind,运行正常
四、用数据库管理bind,有一个很大的优点就是主域名CNAME功能,也就是空主机头别名问题。数据库的管理提供了一个松散的语法检查格式,我们配置了什么,就能解析出什么,一方面容易出错,另外一方面也带来了灵活性