虽然不是干运维的,但在IT江湖打酱油也难免受到高人的影响,所以在很早就听说bind可以和数据结合使用,一直都没有时间去研究;今天恰好一个同事问到bind安装的问题,就顺便研究了一下;下面将我的操作过程共享个各位,期间查找了不少网络上的资料,在这里感谢他们。好了,下面开始我们正题,欢迎各位轻轻的拍砖,哈哈哈……。
软件准备:(本人环境)
Centos6.2
Mysql、bind-9.3.2.tar.gz、mysql-bind.tar.gz
备注:9.4.2以上版本都已经包含了DLZ补丁,本人认为就不需要mysql_bind这个驱动了,有关操作请查阅相关参考资料,这里不讨论。
安装篇
一、安装Mysql
因为后面需要使用mysql的头文件和库文件,所以我这边使用源码安装,当然,如果单独安装Headers and libraries应该也是可以的。
1、解压mysql;
2、安装mysql,这个直接看INSTALL-SOURCE安装知道就可以了,这里简单过一下。
~]#groupadd mysql
~]#useradd -g mysql mysql
~]#gunzip < mysql-VERSION.tar.gz | tar -xvf -
~]#cd mysql-VERSION
~]#./configure --prefix=/usr/local/mysql
~]#make
~]#make install
~]#cp support-files/my-medium.cnf /etc/my.cnf
~]#cd /usr/local/mysql
~]#bin/mysql_install_db --user=mysql
~]#chown -R root
~]#chown -R mysql var
~]#chgrp -R mysql
~]#bin/mysqld_safe --user=mysql &
具体查看Mysql的想安装过程。
3、注意,这样安装好以后,我们的头文件和库文件分别在:
/usr/local/mysql/include/mysql/和/usr/local/mysql/lib/mysql
其实使用rpm安装也是可以的,安装成是使用相关命令查找到需要的这两个文件目录即可
二、分别解压mysql-bind.tar.gz和bind-9.3.2.tar.gz
1、将mysql-bind.tar.gz解压,生成文件夹mysql-bind;
2、将bind-9.3.2.tar.gz 解压,生成文件夹bind-9.3.2;
3、将mysql-bind里面主要有mysqldb.c和mysqldb.h两个文件,分别拷贝到bind源文件的bin/named和bin/named/include/named/目录下
4、编辑bind源文件目录的bin/named/Makefile.in文件,修改如下几个字段:
DBDRIVER_OBJS = mysqldb.@O@
DBDRIVER_SRCS = mysqldb.c
DBDRIVER_INCLUDES = -I'/usr/local/mysql/include/mysql/' #mysql安装3的内容
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
5、编辑bind源文件bin/named/main.c
5.1、在main.c开头包含mysqldb.h,#include <named/mysqldb.h>
5.2、在main.c文件中的函数setup(void)里面ns_server_create()的前面添加mysqldb_init();
5.3、在函数cleanup(void)里面ns_server_destroy()的后面添加mysqldb_clear();
备注:相关区域会有提示信息
6、编译安装bind
~]#./configure --prefix=/usr/local/named
程序将安装到/usr/local/named/下
还有其他选项可以选择使用:
--enable-threads:开启多线程处理能力
--disable-openssl-version-check:禁止openssl版本的检查
--enable-largefile:启用大文件支持
--disable-ipv6:关闭ipv6支持
~]#make
~]#make install
配置篇
7、生成etc中相关配置文件;
通过上面完成编译安装后,在程序的安装目录/usr/local/named中发现没有etc文件夹,更没有本应该放在其下的rndc.conf和named.conf配置文件,我们通过一些方法生成这两个重要的文件。
7.1、在named目录下建立etc文件夹;
~]#mkdir etc
7.2、生成rndc.conf文件
~]#sbin/rndc-confgen -r /dev/urandom > rndc.conf
7.3、生成name.conf文件
将rndc.conf文件拷贝一份,命名为name.conf;
使用vim编辑name.conf;
文件中有提示语:
# Use with the following in named.conf, adjusting the allow list as needed:
按照提示,将该提示以上的(没有被注释的部分)全部删除或注释掉,将其下的被注释信息全部取消注释;
7.4、生成rndc.key文件(该文件貌似没用,可以在启动时提示需要改文件是建立)
~]#rndc-confgen -r /dev/urandom -a
(自动生成到named的etc目录下)
更权限:
~]#chomd 644 rndc.key
备注:在RHEL6上没有caching-named这个包,所以在上面命令中用/dev/urandom构建了一个虚拟的随机数生成器。
8、配置数据信息:
8.1、创建数据库:create database mydomain ;
8.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;
8.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.');
9、配置bind连接数据
使用vim编辑name.conf文件,在底端追加写入数据信息:
zone "mydomain.com" {
type master;
notify no;
database "mysqldb dbname tablename hostname user password";
};
mydomain.com为要解析的域名,本例为插入数据库的mydomain.comt域名
dbname 为数据库名本例为mydomain,
tablename为数据表名,本例为mydomain
hostname为数据库服务器地址,本例为本机127.0.0.1
user 为可操作前面数据库表的数据库用户名,本例为root
password 为对应数据库用户名的密码,本例为 123456
10、测试服务程序
打开named测试/usr/local/named/sbin/named -g -d 1 -c /usr/local/named/etc/named.conf
或者直接 ./named -g
如果没有出现错误信息说明安装基本正常,这是可以真正启动bind服务,用一台pc将DNS指向该服务器ping数据库中一个域名验证一下。
11、正常启动服务
/usr/local/named/sbin/named
备注:
1、启动named,第一次运行它如果提示找不到libmysqlclient.so.15,这个文件是在mysql编译安装的时候已经生成了这个文件,可以手动拷贝他到/usr/lib/libmysqlclient.so.15,启动正常,可以解析所有域名。
2、如果启动时提示/usr/local/named/var/run/named.pid有问题,那么就手动在named下建立一个var/run/路径;
3、如果是服务器自身使用ping命令来验证,那么必须把服务器的DNS指向本机;即,编辑文件/etc/resolve..conf为
search localdomain
nameserver 127.0.0.1
4、网上有关文章有建立mysql和bind系统专用用户的操作,本文没有涉及相关内容,如需要建立请移步相关网站查询。
用数据库管理bind,有一个很大的优点就是主域名CNAME功能,也就是空主机头别名问题。数据库的管理提供了一个松散的语法检查格式,我们配置了什么,就能解析出什么,一方面容易出错,另外一方面也带来了灵活性。
主要参考资料:
1.http://www.xiaobo.li/article/81.html
2.http://blog.csdn.net/edmond999/article/details/4301585
3.http://wenku.baidu.com/link?url=jdSvvXyvLRtRyGMAkl5qwcQUQSh4WXQaoMR3XljmbLV_AK1O6jmC_xWoiGbcuKJjDVuuQ6HG52JNacQE8Gd2wJ-A5NZV1gZkmJDna7bT-Va
4.http://www.2cto.com/os/201304/199503.html