FreeBSD 4.10 下 bind-9.3.2 + mysql-4.1.9 配置详解。
很久的一篇文章了,不过对于正在研究freebsd下bind9与mysql结合的朋友,还是很有帮助的。
用到的软件包:
mysql-4.1.9.tar.gz
httpd-2.0.54.tar.gz
php-4.3.11.tar.gz
bind-9.3.2.tar.gz http://www.isc.org/products/BIND/
mysql-bind-0-1.tgz http://sourceforge.net/projects/mysql-bind/
软件包均放在 /root/software 下
1. 安装mysql-4.1.9.tar.gz
——我总是习惯把它安装在 /home/soft/mysql4 下面
#### 解压解包
cd /root/software
tar xvfz mysql-4.1.9.tar.gz
#### 配置安装到 /home/soft/mysql,支持中文gbk
cd mysql-4.1.9
./configure --prefix=/home/soft/mysql4 --with-charset=gbk
#### 编译时间主要看机器配置,一般机子会超过 10 分钟。
make
make install
#### 建立mysql组
groupadd mysql
#### 建立mysql用户并且加入到mysql组中
useradd mysql -g mysql
#### 初始化表并且规定用mysql用户来访问初始化表以后就开始给mysql和root用户设定访问权
./scripts/mysql_install_db --user=mysql
cd /home/soft/mysql4
#### 设定root能访问/home/soft/mysql4
chown -R root .
#### 设定mysql用户能访问/home/soft/mysql4/var ,里面存的是mysql的数据库文件
chown -R mysql var
#### 设定mysql用户能访问/home/soft/mysql4/var下的所有文件
chown -R mysql var/.
#### 设定mysql用户能访问/home/soft/mysql4/var/mysql下的所有文件
chown -R mysql var/mysql/.
#### 设定mysql组能够访问/home/soft/mysql4
chgrp -R mysql .
#### 运行 mysql, 正常运行将显示进程号
/home/soft/mysql4/bin/mysqld_safe --user=mysql &
#### 修改mysql密码,因为默认为空密码(***** 自行设定)
/home/soft/mysql4/bin/mysqladmin -uroot password *****
---------mysql安装全部完成
2.安装apache
——我总是习惯把它安装在 /home/soft/apache 下面
cd /root/software
#### 解压解包
tar xvfz httpd-2.0.54.tar.gz
cd httpd-2.0.54
#### 编译配置 apache , 一般说来这样就够用了, 也可以精细调整 --enable-module 和 --enable-shared
#### 详细参照 则用 ./configure --help
./configure --prefix=/home/soft/apache --enable-module=most --enable-shared=max
make
make install
#### 如下命令可以察看编译进apache的模块
/home/soft/apache/bin/httpd -l
#### 如下命令启动或停止或重启 apache server:
/home/soft/apache/bin/apachectl start
/home/soft/apache/bin/apachectl stop
/home/soft/apache/bin/apachectl restart
#### apache 功能强大,配置文件是 /home/soft/apache/conf/httpd.conf
----apache安装全部完成
3. 安装php
#### 注意配置指定安装的 apache 和 mysql 的路径即可
./configure --with-mysql=/home/soft/mysql4 --with-apxs2=/usr/local/httpd/bin/apxs
make
make install
#### 将php.ini-dist复制到/usr/local/lib/,并重命名为php.ini
cp php.ini-dist /usr/local/lib/php.ini
#### 让 Apache 能够直接解析 php, 我们还要进行一些配置 httpd.conf
#### 编辑 /home/soft/apache/conf/httpd.conf
#### 添加如下两行
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
#### 应该将以上两句添加在其他AddType之后。
#### 查看确认文件中有以下一句话,没有就自己添加在所有 LoadModule 之后(一般说来会有,否则php安装不算成功)。
LoadModule php4_module modules/libphp4.so
#### 保存 httpd.conf 文件。
启动apache server:
/usr/local/httpd/bin/apachectl start
---php安装配置完成
4.安装bind
tar xfzv bind-9.3.2.tar.gz
tar xfzv mysql-bind-0-1.tgz
cp mysql-bind-0.1/MySQLdb.c bind-9.3.2/bin/named
cp mysql-bind-0.1/mysqldb.h bind-9.3.2/bin/named/include
cd bind-9.3.2
#### 编辑 bin/named/Makefile.in 将
DBDRIVER_OBJS =
DBDRIVER_SRCS =
DBDRIVER_INCLUDES =
DBDRIVER_LIBS =
#### 作如下配置
DBDRIVER_OBJS = mysqldb.@O@
DBDRIVER_SRCS = mysqldb.c
DBDRIVER_INCLUDES = -I'/home/soft/mysql4/include/mysql'
DBDRIVER_LIBS = -L'/home/soft/mysql4/lib/mysql' -lmysqlclient
#### 修改 bin/named/main.c 文件
#### 在 bin/named/main.c 中找到如下内容
/*
* Add calls to register sdb drivers here.
*/
/* xxdb_init(); */
#### 在此后添加如下内容
mysqldb_init();
#### 再找如下内容
/*
* Add calls to unregister sdb drivers here.
*/
/* xxdb_clear(); */
#### 在此后添加如下内容
mysqldb_clear();
#### 安装三部曲:
#### --enable-threads 开启多线程处理能力
./configure --prefix=/home/soft/named --enable-threads
make
make install
#### 手工建立目录 etc
mkdir /home/soft/named/etc
#### 生成 rndc 控制命令的 key 文件
#### 需注意,这一步要求操作系统配有随机数发生器 /dev/random
#### 因此需要启动文件 /etc/rc.conf 中配上 rand_irqs="3 14 15" 并重启使之起作用(不知有没有不重启的方案)
#### 否则这一步,将会卡住,象没了反应一样
cd /home/soft/named
sbin/rndc-confgen > etc/rndc.conf
#### 从 rndc.conf 文件中提取 named.conf 用的 key 生成 named.conf 文件
cd /home/soft/named/etc
tail -10 rndc.conf | head -9 | sed 's/# //g' > named.conf
#### 此时,named.conf 内容为:
key "rndc-key" {
algorithm hmac-md5;
secret "O0SuB34RK+E3r+m5Fbh2eA==";
};
controls {
inet 127.0.0.1 port 953
allow { 127.0.0.1; } keys { "rndc-key"; };
};
#### dig 命令直接生成 named.root 文件,这个文件是很标准的东东,
#### 有了它,本地 dns 不能解的就上总部去问
cd /home/soft/named/etc
dig > named.root
#### 建立 localhost.rev 文件
#### 用操作系统自带的 /etc/namedb/make-localhost 生成
cd /home/soft/named/etc
sh /etc/namedb/make-localhost
#### 将会生成 localhost-v6.rev 与 localhost.rev 两个文件
#### 使用它应当先配置好主机名等内容如 rc.conf 中的主机名
#### 建立named.local文件
#### 配置 named.conf
#### 增加如下内容:
//
// a caching only nameserver config
//
zone "." IN {
type hint;
file "named.root";
};
zone "localhost" IN {
type master;
file "localhost.rev";
allow-update { none; };
};
zone "0.0.127.in-addr.arpa" IN {
type master;
file "named.local";
allow-update { none; };
};
zone "mydomain.com" {
type master;
database "mysqldb bind9 mydomain localhost bind passwd";
};
zone "19.202.220.in-addr.arpa" {
type master;
database "mysqldb bind9 ptr localhost bind passwd";
};
#### 上述内容中配置自己的
#### 数据库名(bind9),表名(mydomain),MYSQL主机(localhost),
#### MYSQL用户(bind),MYSQL密码(passwd需自行更改)
#### 当然,前提条件是在 mysql 建库,建用户 bind 改密码并授权。
----BIND安装完成
5. 建立数据
####用 MYSQLADMIN 来建立数据库的和倒数据,确实会非常方便,当然你需要先安装它。
####手工建数据也可以,如下连库后
/home/soft/mysql4/bin/mysql -uroot -ppassword
#### 连上数据库后,建库 binddb,如果搞得复杂点,专为 bind 建库用户也行呀,这样
#### 配置 bind 的配置文件时就用咱新建的用户
create database binddb;
use binddb;
####参照 mysql-bind-0-1 目录下的 README 建立数据库 dnsdb
####正向解析数据库 mydomain 表结构
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. www.mydomain.com. 200505101 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.');
#### 反向解析数据库ptr表结构
CREATE TABLE ptr (
name varchar(255) default NULL,
ttl int(11) default NULL,
rdtype varchar(255) default NULL,
rdata varchar(255) default NULL
) TYPE=MyISAM;
#### 以下是反向解析示范可以直接倒入
INSERT INTO `ptr` VALUES ('45.202.220.in-addr.arpa', 17600, 'SOA', 'mydomain.com. www.mydomain.com. 200505101 28800 7200
86400 28800');
INSERT INTO `ptr` VALUES ('45.202.220.in-addr.arpa', 17600, 'NS', 'ns0.mydomain.com.');
INSERT INTO `ptr` VALUES ('45.202.220.in-addr.arpa', 17600, 'NS', 'ns1.mydomain.com.');
INSERT INTO `ptr` VALUES ('188.19.202.220.in-addr.arpa', 17600, 'PTR', 'mail.mydomain.');
------数据库创建完成
6. 启动 BIND 测试其是否正常工作
/usr/local/named/sbin/named -c /usr/local/named/etc/named.conf &
#### 然后在你WINDOWS机器上将这个配置了 BIND 的 IP 设置为 DNS 然后运行 nslookup 测试
#### 如果出现证明反向解析正常
nslookup
server ....( 运行bind机器的IP )
w0.mydomain.com
... (此时应当返回域名记录)
...
#### 如果 w0.mydomain.com
#### 解析地址为所输入的,则证明正向工作正常
注:反向解析未做测试
7. 结语
#### 在增加 A 记录 MX 记录 PTR 记录都不需要重新启动 BIND,
#### 但每增加一个正向的解析域,都必须在 named.conf 正增加如下内容
zone "youname.com" {
type master;
database "mysqldb dnsdb mydomain localhost root passwd"
};