- 论坛徽章:
- 0
|
实验环境:VMware Workstation下的centos5.5
系统环境:Eth0:10.82.103.100
hostname:centos.linux.org
selinux 防火墙全关
要求实现www.linux.org到192.168.0.80
ftp.linux.org 到 192.168.0.21的正向解析。
一、 Mysql的配置
要让bind在mysql查询信息,需要dlz的支持,这个在centos默认安装的bind里面是没有的,可以在/etc/named.conf里面添加dlz参数,启动bind会报错无效参数dlz,所有这里需要重新安装配置bind。这里需要下载bind的源码包安装配置加入dlz的支持,由于dlz的支持需要用到mysql的头文件和库文件(详细说明见:http://bind-dlz.sourceforge.net/mysql_driver.html),而系统默认安装的mysql是没有这些文件的,所以这里要重新源码安装mysql,以下是下载的最新的bind和最新的mysql。
bind-9.8.0.tar.gz mysql-5.5.11.tar.gz
在安装这两个软件前,先卸载掉系统自带安装的,
#yum remove bind
#yum remove mysql
即可全部卸载掉主程序和相关依赖包。
下面开始源码安装mysql,最新版本mysql配置需要用到cmake,这个centos是不带有的,因此需要下载安装cmake,软件如下:
cmake-2.8.4.tar.gz 这个安装不需要特别配置,常规的默认安装即可。
完成后,就可以用cmake 命令来安装mysql了。详细安装可以查看mysql解压缩后目录下的README。
安装步骤为:
#cmake .
#make
#make install
安装后的目录/usr/local/mysql/
建立mysql用户和组
#useradd mysql
这里要给mysql安装目录以mysql用户和组权限:
#cd /usr/local/mysql/
#chown -R mysql:mysql .
#/usr/local/mysql/bin/mysql_install_db
启动mysql:
#cd /usr/local/mysql/bin
#./mysqld_safe &
设置root密码:
#./mysqladmin -u root password “mysql”(这里是我的mysql密码)
登陆mysql:
#./mysql –u root -p
建立dns数据库:
CREATE DATABASE dns;
GRANT ALL ON dns.* TO ‘dns’@’localhost’ IDENTIFIED BY ‘mysql’(这里是密码)
这时的dns数据库是空的,需要填入表。由于表数据比较多,用mysql命令行不方便,这里把数据库语句存入文本文件,再导入即可如下是创建records表的sql语句:
create table `records`(
`id` int(10) unsigned NOT NULL auto_increment,
`zone` varchar(255) NOT NULL,
`ttl` int(11) NOT NULL default '86400',
`type` varchar(255) NOT NULL,
`host` varchar(255) NOT NULL default '@',
`mx_priority` int(11) default null,
`data` text,
`primary_ns` varchar(255) default null,
`resp_contact` varchar(255) default null,
`serial` bigint(20) default null,
`refresh` int(11) default null,
`retry` int(11) default null,
`expire` int(11) default null,
`minimum` int(11) default null,
primary key (`id`),
key `type` (`type`),
key `host` (`host`),
key `zone` (`zone`));
保存为records.sql文件,以后使用,然后是往records表插入记录的sql语句:
insert into `records` (`id`, `zone`, `ttl`, `type`, `host`, `mx_priority`, `data`, `primary_ns`, `resp_contact`, `serial`, `refresh`, `retry`, `expire`, `minimum`)
value (100, 'linux.org', 86400, 'SOA', '@', NULL, NULL, 'centos.linux.org.', 'root', 2011040322, 10800, 7200, 604800, 86400);
insert into `records` (`id`, `zone`, `ttl`, `type`, `host`, `mx_priority`, `data`, `primary_ns`, `resp_contact`, `serial`, `refresh`, `retry`, `expire`, `minimum`)
value (101, 'linux.org', 86400, 'NS', '@', NULL, 'centos', NULL, NULL, NULL, NULL, NULL, NULL, NULL);
insert into `records` (`id`, `zone`, `ttl`, `type`, `host`, `mx_priority`, `data`, `primary_ns`, `resp_contact`, `serial`, `refresh`, `retry`, `expire`, `minimum`)
value (104, 'linux.org', 86400, 'A', 'ftp', NULL, '192.168.0.21', NULL, NULL, NULL, NULL, NULL, NULL, NULL);
insert into `records` (`id`, `zone`, `ttl`, `type`, `host`, `mx_priority`, `data`, `primary_ns`, `resp_contact`, `serial`, `refresh`, `retry`, `expire`, `minimum`)
value (105, 'linux.org', 86400, 'A', 'www', NULL, '192.168.0.80', NULL, NULL, NULL, NULL, NULL, NULL, NULL);
这个就是zone文件的记录,保存为zone.sql
上面两个文件均在/root目录下。
登陆到mysql
>use dns;
>source /root/records.sql 执行records.sql里面的语句建立records表
>source /root/zone.sql 执行zone.sql里面的语句插入记录
到此,mysql的配置完成。下面开始bind的配置。
二、Bind的配置
解压缩bind后,开始安装,不存在的目录已经建立好,步骤如下:
#./configure --prefix=/usr/local/bind --enable-largefile --enable-threads=no --with-dlz-mysql
这里的配置参数在http://bind-dlz.sourceforge.net/mysql_driver.html
#make
#make install
#cd /usr/local/bind/sbin
#./rndc-confgen >../etc/rndc.conf
#cd ../etc
#tail -10 rndc.conf | head -9 | sed s/#\ //g > named.conf
然后在named.conf中加入:
dlz "Mysql zone" {
database "mysql
{host=localhost dbname=dns user=root pass=mysql}
{SELECT zone FROM records WHERE zone = '$zone$'}
{SELECT ttl, type, mx_priority, IF(type = 'TXT', CONCAT('\"',data,'\"'), data) AS data
FROM records
WHERE zone = '$zone$' AND host = '$record$' AND type <> 'SOA' AND type <> 'NS'}
{SELECT ttl, type, data, primary_ns, resp_contact, serial, refresh, retry, expire, minimum
FROM records
WHERE zone = '$zone$' AND (type = 'SOA' OR type='NS')}
{SELECT ttl, type, host, mx_priority, IF(type = 'TXT', CONCAT('\"',data,'\"'), data) AS data, resp_contact, serial, refresh, retry, expire, minimum
FROM records
WHERE zone = '$zone$' AND type <> 'SOA' AND type <> 'NS'}
{SELECT zone FROM xfr where zone='$zone$' AND client = '$client$'}";
};
注意里面的$zone$,如果出现缺少%zone%这样的报错,那么把$替换成%即可,这里一般是正确的。
修改/etc/resolv.conf文件,dns指向自己,即10.82.203.100
执行如下命令开启开启bind
#/usr/local/bind/sbin/named -uroot -d1 -g &
这里一般会报错,说找不到一个共享库文件,详细报错会给出缺少库文件的文件名,我报错的是缺少libmysqlclient.so.18这个在mysql的库文件里面会找的,这里只有做个软连接即可:
#ln -s /usr/local/mysql/lib/mysql/libmysqlclient.so.18 /usr/lib/
再来启动bind启动成功。
三、测试
下面来做测试:
#/usr/local/bind/bin/nslookup
> www.linux.org
14-Apr-2011 20:32:27.024
Query String: SELECT zone FROM records WHERE zone = 'www.linux.org'
14-Apr-2011 20:32:27.025
Query String: SELECT zone FROM records WHERE zone = 'linux.org'
14-Apr-2011 20:32:27.025
Query String: SELECT ttl, type, mx_priority, IF(type = 'TXT', CONCAT('"',data,'"'), data) AS data
FROM records
WHERE zone = 'linux.org' AND host = '@' AND type <> 'SOA' AND type <> 'NS'
14-Apr-2011 20:32:27.026
Query String: SELECT ttl, type, mx_priority, IF(type = 'TXT', CONCAT('"',data,'"'), data) AS data
FROM records
WHERE zone = 'linux.org' AND host = '*' AND type <> 'SOA' AND type <> 'NS'
14-Apr-2011 20:32:27.026
Query String: SELECT ttl, type, data, primary_ns, resp_contact, serial, refresh, retry, expire, minimum
FROM records
WHERE zone = 'linux.org' AND (type = 'SOA' OR type='NS')
14-Apr-2011 20:32:27.027
Query String: SELECT ttl, type, mx_priority, IF(type = 'TXT', CONCAT('"',data,'"'), data) AS data
FROM records
WHERE zone = 'linux.org' AND host = 'www' AND type <> 'SOA' AND type <> 'NS'
14-Apr-2011 20:32:27.028
Query String: SELECT ttl, type, mx_priority, IF(type = 'TXT', CONCAT('"',data,'"'), data) AS data
FROM records
WHERE zone = 'linux.org' AND host = '@' AND type <> 'SOA' AND type <> 'NS'
14-Apr-2011 20:32:27.028
Query String: SELECT ttl, type, mx_priority, IF(type = 'TXT', CONCAT('"',data,'"'), data) AS data
FROM records
WHERE zone = 'linux.org' AND host = '*' AND type <> 'SOA' AND type <> 'NS'
14-Apr-2011 20:32:27.029
Query String: SELECT ttl, type, data, primary_ns, resp_contact, serial, refresh, retry, expire, minimum
FROM records
WHERE zone = 'linux.org' AND (type = 'SOA' OR type='NS')
Server: 10.82.203.100
Address: 10.82.203.100#53
Non-authoritative answer:
Name: www.linux.org
Address: 192.168.0.80
>
解析成功,测试ftp.linux.org一样。
主要参考文章:http://blogold.chinaunix.net/u1/55815/showart_654545.html
以上文档是实验过后回忆出来的,可能有些地方有错误,比如mysql那部分我就记得不是很清楚了(数据库小白),还请大家指明改正。
欢迎热爱技术的朋友加入QQ群:139570407 共同交流,共同进步。 |
|