第八、izidns.tar.gz
_______________________________________________________________________
cd /download/dns
tar xvfz izidns-0.68.tar.gz
cd izidns-0.68
ls
## 此时我们可以赫然看到 poweradmin-1.2.7.tar.gz
## 阅读 README 我们可以知道 通过给 poweradmin 打补丁后,令到 poweradmin 可以全面支持 bind
cd /apache2/htdocs
tar xvfz /download/dns/izidns-0.68/poweradmin-1.2.7.tar.gz
cd poweradmin-1.2.7
patch -p1 < /download/dns/izidns-0.68/izidns.patch
cp /download/dns/izidns-0.68/libmysqltcl2.51.so ./inc/
cp /download/dns/izidns-0.68/libmysqltcl2.51.so ./2ndNS/
## 这两个 so 是 debian 下编译出来的,还好,redhat 下还可以使用。如有问题,参照 izidns 的英文文档吧
## 接下来初始化数据表,要不我们给 dns 单独建立一个库 binddb 吧
## 当然我们也可以通过前面装的 phpMyAdmin 来建库初始化表,以下给出所有脚本
/home/mysql/bin/mysql -u root -pyourpassword
create database binddb;
use binddb;
create table domains (
id INT auto_increment,
name VARCHAR(255) NOT NULL,
master VARCHAR(20) DEFAULT NULL,
last_check INT DEFAULT NULL,
type VARCHAR(6) NOT NULL,
notified_serial INT DEFAULT NULL,
account VARCHAR(40) DEFAULT NULL,
primary key (id)
)type=InnoDB;
CREATE UNIQUE INDEX name_index ON domains(name);
CREATE TABLE records (
id INT auto_increment,
domain_id INT DEFAULT NULL,
name VARCHAR(255) DEFAULT NULL,
type VARCHAR(6) DEFAULT NULL,
content VARCHAR(255) DEFAULT NULL,
ttl INT DEFAULT NULL,
prio INT DEFAULT NULL,
change_date INT DEFAULT NULL,
primary key(id)
)type=InnoDB;
CREATE INDEX rec_name_index ON records(name);
CREATE INDEX nametype_index ON records(name,type);
CREATE INDEX domain_id ON records(domain_id);
create table supermasters (
ip VARCHAR(25) NOT NULL,
nameserver VARCHAR(255) NOT NULL,
account VARCHAR(40) DEFAULT NULL
);
--——以下我把 binddb 的所有权限都交给 pdns,当然,安全起见最好还是在 mysql 管理前台详细授权
--——其实它只需要对 binddb 有 create/select/update/delete/insert 的权限
GRANT ALL PRIVILEGES
ON binddb
TO pdns@localhost
IDENTIFIED BY 'yourpassword4pdns'
WITH GRANT OPTION;
## 之后退出这个 mysql 会话
## 然后,咱去配置 poweradmin
cd /apache2/htdocs/poweradmin-1.2.7
cd inc
## 先把 config-block.inc.php 改名
mv config-block.inc.php config.inc.php
## 然后对 config.inc.php 进行加工——
## 第 15 行,添上 dbuser 的实际内容 pdns
## 第 20 行,添上 dbpass 的实际内容 yourpassword4pdns
## 第 24 行,添上 dbdatabase 的实际内容 binddb
## 接下来,修理下 config-bind.tcl 它与 config.inc.php 在一个目录中,执行过前述 patch 命令后就存在了
#### 第 7 行 set bzfd "/etc/bind/" 改为 /home/named/etc 因为我们将 named 的配置文件都放这里了
#### 第 32 行开始,配置连接数据库的参数
set sqlhost "localhost"
set sqluser "pdns"
set sqlpass "yourpassword4pdns"
set sqldb "binddb"
## 修理完毕
## 在 /home/named/etc 中建立目录 izidns
## 将来 config-bind.tcl 将从数据库中获得数据生成 zone 文件(它们就是真正的域数据)放在这个目录下
mkdir /home/named/etc/izidns
## 然后,在浏览器中,
http://your.IP.or.Name/poweradmin-1.2.7/install.php
## 在 Browser 中创建一个 pdns 管理用户并指定其密码
## 此时,install.php 将会创建 poweradmin 所需要的表并且创建管理者
## 完了之后别忘了还要干掉 install.php 才能访问管理页面哦!!!
## 接下来我们 crontab -e 加入以下内容:
*/5 * * * * cd /the/path/to/your/htdocs/padmin/inc/ && tclsh ./gbzf.tcl
*/7 * * * * /home/named/sbin/rdnc reload >/dev/null 2>&1
## 然后我们开始修理 /home/named/etc/named.conf
## 在最后一行加入如下一行:
include "/home/named/etc/named.conf.local"
## 这个文件将由 gbzf.tcl 生成,它的内容将指向 /home/named/etc/izidns 的各个 zone 文件
## 这些 zone 文件才是真正的域数据。
## 现在我们就可以放心大胆地在 pdns 管理页面中增减数据了。
#### 例如——
#### 现在本机主机名为 mail.dengtao75.com
#### 现在我在管理页面中添加了一个 dengtao75.com 的域,又添加了若干记录
#### 几分钟后,在 /home/named/etc/izidns 下面就产生了这个域的数据文件 dengtao75.com.zone
#### 文件内容显示如下:
[root@mail etc]# cat izidns/dengtao75.com.zone
; Zonefile for dengtao75.com
$TTL 3600
@ IN SOA ns.dengtao75.com. postmaster.dengtao75.com. (
2006042502 ; serial number YYYYMMDDnn
28800 ; Refresh
7200 ; Retry
3600 ; Expire
360 ; Min TTL
)
@ IN NS mail.dengtao75.com.
@ IN NS
www.dengtao75.com.
www.dengtao75.com. IN A 192.168.0.247
dengtao75.com. IN A 192.168.0.247
mail.dengtao75.com. IN A 192.168.0.247
localhost.dengtao75.com. IN A 127.0.0.1
@ IN MX 10 mail.dengtao75.com.
#### 与数据库内数据内容是相对一致的。
#### 并且 named.conf 末句所包含的那个文件 named.conf.local 的内容也发生了变化,它将有一段内
#### 容指向域数据文件如下段内容所示:
zone "dengtao75.com" {
type master;
file "/home/named/etc/izidns/dengtao75.com.zone";
};
## 此时,用 nslookup 进行测试,则可以解析出 mail.dengtao75.com,
www.dengtao75.com 为 192.168.0.247
## 好了,不啰嗦了,下一步,随主机启动
_______________________________________________________________________
第九、随主机启动
_______________________________________________________________________
这里简单说:
1> mysql 的启动,
cp /home/mysql/share/mysql/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
ln /etc/init.d/mysqld /etc/rc0.d/K15mysqld
ln /etc/init.d/mysqld /etc/rc1.d/K15mysqld
ln /etc/init.d/mysqld /etc/rc2.d/K15mysqld
ln /etc/init.d/mysqld /etc/rc3.d/S85mysqld
ln /etc/init.d/mysqld /etc/rc4.d/K15mysqld
ln /etc/init.d/mysqld /etc/rc5.d/S85mysqld
ln /etc/init.d/mysqld /etc/rc6.d/K15mysqld
2> named 的启动,书写 named 脚本
vi /etc/init.d/named
#!/bin/bash
##########################################################################################################
[ -r /home/named/etc/named.conf ] || exit 0
start() {
if [ -n "`/sbin/pidof named`" ]; then
echo -n $"$prog: already running"
return 1
fi
echo -n $"Starting $prog: "
/home/named/sbin/named -u named
}
stop() {
echo -n $"Stopping $prog: "
/home/named/sbin/rndc stop
kill -9 `cat /home/named/var/run/named.pid`
}
restart() {
stop
start
}
reload() {
/home/named/sbin/rndc reload >/dev/null 2>&1 || /usr/bin/killall -HUP `/sbin/pidof -o %PPID named`
}
probe() {
/usr/sbin/rndc reload >/dev/null 2>&1 || echo start
}
rhstatus() {
/home/named/sbin/rndc status
}
case "$1" in
start)
start
;;
stop)
stop
;;
status)
rhstatus
;;
restart)
restart
;;
condrestart)
[ -e /home/named/var/run/named.pid ] && restart
;;
reload)
reload
;;
probe)
probe
;;
*)
echo $"Usage: $0 {start|stop|status|restart|condrestart|reload|probe}"
exit 1
esac
exit $?
##########################################################################################################
rm /etc/rc?.d/???named
chmod +x /etc/init.d/named
ln /etc/init.d/named /etc/rc0.d/K15named
ln /etc/init.d/named /etc/rc1.d/K15named
ln /etc/init.d/named /etc/rc2.d/K15named
ln /etc/init.d/named /etc/rc3.d/S85named
ln /etc/init.d/named /etc/rc4.d/K15named
ln /etc/init.d/named /etc/rc5.d/S85named
ln /etc/init.d/named /etc/rc6.d/K15named
3>、apache 的随主机启动
rm /etc/init.d/httpd /etc/rc?.d/???httpd
cp /apache2/bin/apachectl /etc/init.d/httpd
ln /etc/init.d/httpd /etc/rc0.d/K15httpd
ln /etc/init.d/httpd /etc/rc1.d/K15httpd
ln /etc/init.d/httpd /etc/rc2.d/K15httpd
ln /etc/init.d/httpd /etc/rc3.d/S85httpd
ln /etc/init.d/httpd /etc/rc4.d/K15httpd
ln /etc/init.d/httpd /etc/rc5.d/S85httpd
ln /etc/init.d/httpd /etc/rc6.d/K15httpd
另外啰嗦一句, 但凡涉及管理的页面最好用 htaccess 文件令其只对有限的 IP 范围(如公司内某几个IP)开放.
[抛砖引瓦]
——有没有进一步的办法,使得前台不变,bind 直接访问数据库而不是定时 reload 呢?那样就更完美了。
——我突发奇想,是否可以将后台数据表内容做成视图,在 bind 加上 mysql-bind 后,直接访问视图?
——找个时间再研究研究,要是能那样的话,一定非常完美。
——另外:本文没有对反解析以及双主从 DNS 作进一步的探讨,从 izidns 的 README.bind 中可以看到,
有时间再说。 bigmoyo -- tom.dane%gmail.com