使用bind-mysql模塊增長對mysql數據庫的支持 php
簡介:對於bind,若是想修改或增長dns記錄,是直接修改文本的,這樣的話一方面不方便管理,另外一方面容易出錯,若是咱們增長對mysql數據庫的支持,再配合php、perl、python等程序直接操做mysql,這對於dns的管理將會很是地方便和不易出錯。如今介紹使用mysql bind驅動模塊實現這一功能。 python
1、安裝mysql mysql
安裝mysql服務器可使用yum或源碼編譯安裝,咱們這裏使用yum安裝。 sql
2、安裝bind和mysql-bind 數據庫
一、分別下載bind和mysql-bind vim
-
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
二、分別複製mysql-bind的mysqldb.c和mysqldb.h到bind-9.9.1-P2/bin/named和bind-9.9.1-P2/bin/named/include 服務器
三、修改bind源碼中的bin/named/Makefile.in文件: dom
-
-
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得到。
四、編輯bind源文件bin/named/main.c
4.一、在函數setup(void)裏面ns_server_create()的前面添加mysqldb_init(),如 async
4.二、在函數cleanup(void)裏面ns_server_destroy()的後面添加mysqldb_clear(),如 函數
4.三、編輯bind源文件中的bin/named/mysqldb.c文件:
4.4 安裝bind
3、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.');
總結:若是正反向解析數據不少,能夠分別將正向解析數據放在一個表中,而反向解析數據放另一個表中
4、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:
特別注意:圖中所示
5、正反向解析測試
#nslookup