BIND+MySQL


使用bind-mysql模块增加对mysql数据库的支持
 
简介:对于bind,如果想修改或增加dns记录,是直接修改文本的,这样的话一方面不方便管理,另一方面容易出错,如果我们增加对mysql数据库的支持,再配合php、perl、python等程序直接操作mysql,这对于dns的管理将会非常地方便和不易出错。现在介绍使用mysql bind驱动模块实现这一功能。
 
一、安装mysql
 
安装mysql服务器可以使用yum或源码编译安装,我们这里使用yum安装。
 
yum -y install mysql mysql-server mysql-devel
 
二、安装bind和mysql-bind
 
1、分别下载bind和mysql-bind
 
cd /tmp
wget http://nchc.dl.sourceforge.net/project/mysql-bind/mysql-bind/mysql-bind-0.2%20src/mysql-bind.tar.gz
wget http://ftp.isc.org/isc/bind9/cur/9.9/bind-9.9.1-P2.tar.gz
tar xzf bind-9.9.1-P2.tar.gz
tar xzf mysql-bind.tar.gz
 
2、分别复制mysql-bind的mysqldb.c和mysqldb.h到bind-9.9.1-P2/bin/named和bind-9.9.1-P2/bin/named/include
 
cd /tmp/mysql-bind
cp mysqldb.c mysqldb.h /tmp/bind-9.9.1-P2/bin/named
cp mysqldb.c mysqldb.h /tmp/bind-9.9.1-P2/bin/named/include
 
3、修改bind源码中的bin/named/Makefile.in文件:
 
DBDRIVER_OBJS = mysqldb.@O@ #注意两个@中间那个是大写O
DBDRIVER_SRCS = mysqldb.c
DBDRIVER_INCLUDES = -I/usr/include/mysql  -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m32 -fasynchronous-unwind-tables -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -fno-strict-aliasing -fwrapv
DBDRIVER_LIBS = -rdynamic -L/usr/lib/mysql -lmysqlclient -lz -lcrypt -lnsl -lm -L/usr/lib -lssl -lcrypto
 
注:
 
DBDRIVER_INCLUDES的值由命令/usr/bin/mysql_config --cflags获得。
 
DBDRIVER_LIBS的值由命令/usr/bin/mysql_config --libs获得。
 
4、编辑bind源文件bin/named/main.c
 
4.1、在函数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.2、在函数cleanup(void)里面ns_server_destroy()的后面添加mysqldb_clear(),如
 
ns_server_destroy(&ns_g_server);
        mysqldb_clear();
        /*
         * Add calls to unregister sdb drivers here.
         */
        /* xxdb_clear(); */
 
4.3、编辑bind源文件中的bin/named/mysqldb.c文件:
 
更改#include <named/mysqldb.h>为#include "include/mysqldb.h"
 
4.4 安装bind
 
yum -y install gcc openssl-devel
cd /tmp/bind-9.9.1-P2
./configure --prefix=/usr/local/bind  --disable-openssl-version-check
make && make install
 
三、mysql配置
 
启动:service mysqld start
设置root密码:mysqladmin -uroot password root
创建数据库:mysql> create database dns;
创建表:   mysql> 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;
 
插入数据示例:
 
正向解析所需要的数据:
 
INSERT INTO mydomain    VALUES    ('mydomain.com',259200,'SOA','mydomain.com. mail.mydomain.com. 200309181 28800 7200 86400 28800');
INSERT INTO mydomain VALUES ('mydomain.com', 259200, 'NS', 'dns.mydomain.com.');
INSERT    INTO mydomain VALUES ('mydomain.com', 259200, 'MX', '10 mail.mydomain.com.');
INSERT INTO mydomain VALUES ('dns.mydomain.com', 259200, 'A', '192.168.131.129');
INSERT INTO mydomain VALUES ('mail.mydomain.com', 259200, 'A', '192.168.131.131');
INSERT INTO mydomain VALUES ('www.mydomain.com', 259200, 'A', '192.168.132');
INSERT INTO mydomain VALUES ('ftp.mydomain.com', 259200, 'A', '192.168.131.133');
 
反向解析所需要的数据:
 
INSERT INTO mydomain VALUES ('131.168.192.in-addr.arpa', 17600, 'SOA', 'mydomain.com. mail.mydomain.com. 200309181 28800 7200 86400 28800');
 
INSERT INTO mydomain VALUES ('131.168.192.in-addr.arpa', 17600, 'NS', 'dns.mydomain.com.');
 
INSERT INTO mydomain VALUES ('129.131.168.192.in-addr.arpa', 17600, 'PTR', 'dns.mydomain.com.');
 
INSERT INTO mydomain VALUES ('131.131.168.192.in-addr.arpa', 17600, 'PTR', 'mail.mydomain.com.');
 
INSERT INTO mydomain VALUES ('132.131.168.192.in-addr.arpa', 17600, 'PTR', 'www.mydomain.com.');
 
INSERT INTO mydomain VALUES ('133.131.168.192.in-addr.arpa', 17600, 'PTR', 'ftp.mydomain.com.');
总结:如果正反向解析数据很多,可以分别将正向解析数据放在一个表中,而反向解析数据放另外一个表中
 
四、bind配置
 
vim /usr/local/bind/etc/named.conf
 
zone "mydomain.com" { #正向解析区域
  type master;
  notify no;
  database "mysqldb dbname tablename hostname user password";
};
zone "131.168.192.in-addr.arpa" { #反向解析区域
type master;
notify no;
database "mysqldb dns mydomain localhost root 123456";
};
 
其中dbname是数据库名,tablename是表名,hostname是mysql主机,然后就是用户名和密码
 
启动bind:
 
/usr/local/bind/sbin/named
 
特别注意:图中所示
五、正反向解析测试
 
#nslookup

相关内容

    暂无相关文章