烹茶细论

Bind9+Mysql+mysql-bind搭建DNS服务器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#简介
DNS(Domain Name System,域名系统),是域名和IP地址互相映射的系统,通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析。
#背景
测试环境wifi由于测试需要经常需要更改的DNS解析,之前的DNS服务器是windows服务器,每次修改都需要远程进DNS服务器,打开DNS管理,添加主机.不能批量操作,不能批量导入.一次增加好多域名的话实在是很烦人的事情.所以,问题来了.
刚开始想到的是改成linux服务器,使用bind9.搭建好之后发现它的数据是以文本存储的,也就是添加修改域名我都要去修改一个文本文件.这样的操作跟windows的操作其实差不多.不是很方便也容易出错。所以抛弃这个方案.
后来发现了bind-mysql,这是一个bind连接读取mysql数据的一个底层驱动,这样就可以将数据存储到mysql数据库中,添加或者域名就修改数据库即可.然后写一个web界面管理。
<!-- more -->
##1、安装mysql数据库,yum源安装
```bash
yum install -y mysql-server mysql mysql-devel

##2、bind9编译
下载源码包之后,解压、然后需要修改源码包的代码

1
2
3
4
5
wget ftp://ftp.isc.org/isc/bind9/cur/9.9/bind-9.9.6.tar.gz
wget http://nchc.dl.sourceforge.net/project/mysql-bind/mysql-bind/mysql-bind-0.2%20src/mysql-bind.tar.gz
tar -zxvf bind-9.9.6.tar.gz
tar -zxvf mysql-bind.tar.gz
cd mysql-bind 查看READEME吧

然后开始编译前的修改工作

###(1)、拷贝mysqldb.c mysqldb.h 两个文件到bind解压的两个目录

1
2
3
cd mysql-bind
cp mysqldb.c mysqldb.h ../bind-9.9.6/bin/named/
cp mysqldb.c mysqldb.h ../bind-9.9.6/bin/named/include

###(2)、修改bind9解压目录下面的bin/named/Makefile.in文件

1
2
cd ../bind-9.9.6
vim bin/named/Makefile.in

Makefile
DBDRIVER_INCLUDES 的值是运行命令/usr/bin/mysql_config –cflags后的结果
DBDRIVER_LIBS 的值是运行命令/usr/bin/mysql_config –libs后的结果
mysql_config

(3)、修改bin/named/main.c文件
main

(4)、修改bin/named/mysql.c文件
把named改成include

1
2
#include named/mysqldb.h变成
#include include/mysqldb.h

然后开始编译

1
2
3
4
5
6
7
./configure --prefix=/usr/local/bind9/ -disable-openssl-version-check
make
make install
#初始化文件,生成named.root的根文件
echo 'asldjfkasjasdgfasdgsgsgsdfg' random /sbin/rndc-confgen -r random rndc.conf
rm -rf random
tail -n10 rndc.conf | head -n9 | sed -e s/#\//gnamed.conf ../bin/dig named.root

3、开始创建数据库,创建一个dns的数据库,在这个库里面创建一张test的表

1
2
3
4
5
6
7
mysql&gt; create database dns
mysql&gt; CREATE TABLE test (name varchar(255) default NULL, ttl int(20) default NULL, rdtype varchar(255) default NULL, rdata varchar(255) default NULL)
mysql&gt; INSERT INTO test values ('test.com',259200,'SOA','test.com. ns1.test.com. 200505101 28800 7200 86400 28800')
mysql&gt; INSERT INTO test values ('test.com',259200,'NS','ns1.test.com.');
mysql&gt; INSERT INTO test.com values ('ns1.test.com',259200,'A','2.2.2.2');
mysql&gt; INSERT INTO test values ('ns1.test.com',259200,'A','2.2.2.2');
mysql&gt; INSERT INTO test values ('aa.test.com',259200,'A','1.2.3.4');

看看mysql数据库的内容
mysql

4、配置named.conf
添加下面内容到named.conf文件

options {
allow-query { any; };
};
zone “.” { type hint; file “/usr/local/bind9/etc/named.root”; };
zone “test.com” { type master; database “mysqldb dns test 127.0.0.1 dnsuser dnsuserpasswd”; };

options 添加了让所有域名都能够查询,这样没有添加在区域里的可以到根去找
zone . 这个是添加根区域
最后一行是添加区域test.com 还有数据库的连接
dns 是数据库的库名
test 是表名
127.0.0.1 只本机,远程机器则填写远程机器ip
dnsuser 数据库用户
dnsuserpasswd 数据库用户的密码
以上内容要根据自身环境填写

5、启动bind9
debug模式启动
/usr/local/bind9/sbin/named -c /usr/local/bind9/etc/named.conf -g
没有错误的话,正常启动
/usr/local/bind9/sbin/named -c /usr/local/bind9/etc/named.conf -g
检查是否正常工作
dig
OK,没有错误,完成。

6、web界面
web1
新增和修改放一起,有数据修改,没数据新增,新增域名,没有区域则后台先创建区域。所以前台操作会简单易用

web2