免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12345下一页
最近访问板块 发新帖
查看: 20814 | 回复: 41
打印 上一主题 下一主题

[DNS] [原创]DNS 又一解决方案:izidns = bind + PowerAdmin (Redhat linux及FreeBSD) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-04-27 16:15 |只看该作者 |倒序浏览
DNS 又一解决方案:izidns = bind + PowerAdmin

——渴望加精

[关键词]
  isidns  bind  PowerAdmin  pdns(powerdns)  easydns

[概要]
  曾经使用过 pdns(powerdns) ,它的前台界面 PowerAdmin 管理界面非常好用,美观大方整洁明晰,一经使用就不再想用别的管理界面。
  但如果说使用 DNS,绝大多数人还是更喜欢使用 bind 而不是别的。
  于是有人就想(比如我),PowerAdmin 管理界面要是能支持 bind 该多好呀!!!
  本想自己摸索摸索,但在 sourceforge 一找,不必了,因为有德国朋友早已经为我们做了一个 PowerAdmin 到 bind 9 的一个嫁接,令 bind9 + PowerAdmin 管理环境的搭建变得非常容易。它名字也很直观,叫作 izidns,估计读音类似于英语中的 easydns 吧。


[原理简述]

  通过对 izidns 的研究,发现它的想法非常朴实,思路直接而有效。

  简单说,它就是通过前台管理界面向数据库写数据,一个 tcl 脚本程序定时读取数据并倒成 dns 域文件,之后 reload dns 数据文件。
  也就是说 bind 并不是直接访问数据库得到数据,而是由 crontab 定时启动一个脚本生成 zone 数据并且启动 reload,reload 后也就更新了 bind 数据。

[适用情况分析]

  DNS 在关于 zone 数据的获取方式上一般有几种情况:
  1、通过数据库(dbms)获取
  2、通过 LDAP 库(对其陌生者,可简单将它看作一种特殊数据库)获取
  3、通过文件载入内存

  显然 1、2 两种情况都是实时添加实时生效,因为 DNS 将直接通过数据库接口获取数据。而情况 3 则有所不同,更新了zone 数据文件后需要 reload。

  在本方案中因为 zone 数据是定时生成的文件,如果数据量很大的情况,比如对于专门提供 DNS 服务的提供商则不适用,因为不断地定时 reload 对主机是负担,同时也一定程度上影响服务质量。但是如果是某个公司自用的 DNS,采用这种方案是完全可行的。
 

[软件准备]
  0、apache2
  1、mysql4.1.6
  2、php + DB-1.7.6 (pear 数据库通用接口, poweradmin 需要)
  3、phpMyAdmin.2.5.6.tar.gz
  4、tcl 8.3/8.4
  5、mysqltcl
  ——下载地址为  http://www.xdobry.de/mysqltcl  从网址看是德国造。
  6、izidns.tar.gz (已经包含poweradmin1.2.7.tar.gz) ,在sf.net上搜寻即可
  7、bind9.3.2

——0/1/2/7 均是大路货,比较好找
——3/4/6 均可到 sourceforge 上找到。
——所有软件包下载下来置于 /downloads/dns 下

[安装环境]

vmware 虚拟机 + redhat 9


[安装过程]
_____________________________
第一、apache2 安装
_____________________________

cd /download/dns
tar xvfz httpd...tar.gz
cd httpd...
./configure --prefix=/apache2 --enable-so
make
make install

## 此时,apache2 已经安装在 /apache2 目录下

__________________
第二、mysql4.1.6
__________________
## 看下有没有缺省的安装
rpm -qa | grep mysql
## 如有干掉它,先
rpm -r ......

useradd -d /home/mysql -s /sbin/nologin mysql

./configure --prefix=/home/mysql
make
make install

chown -R mysql /home/mysql
chgrp -R mysql /home/mysql/var

......设定管理用户与密码等...

______________________________
第三、php + DB-1.7.6
______________________________

## ——php 解释器将会作为 apache 的模块使用
./configure --with-apxs2=/apache2/bin/apxs \
            --with-mysql=/home/mysql \
            --with-pear \
            --with-gettext \
            --with-zlib \
            --enable-session \
            --enable-track-vars
make
make install

## 之后,
cp php.ini-dist /usr/local/lib/php.ini

## 然后修理 /apache2/conf 下 httpd.conf
#### 找 AddType
#### 增加
AddType application/x-httpd-php .php .php3 .phtml

#### 找 DirectoryIndex 行,改为
DirectoryIndex index.php index.html index.html.var

#### 找如下这句话
LoadModule php4_module modules/libphp4.so
#### 找到说明 php 作为 apache 的一个模块安装成功


## ——DB 是 php 与各类数据库之间的接口程序,后面 PowerAdmin 在安装配置时需要用到
pear install DB
## 将直接到 php 网站取 package 来安装

## 如果事先下载 DB-1.7.6.tgz
pear install DB-1.7.6.tgz
## 将显示
install ok: DB 1.7.6

## 有一点要注意,如果安装 php 时不加 --with-pear 与 --with-zlib 则 pear 不能用

## 这样 php 与 DB 抽象层接口包的安装也就OK了


_________________
第四、phpMyAdmin
_________________

cd /apache2/htdocs
tar xvfz /downloads/dns/phpMyAdmin2.5.6.tar.gz
cd phpMyAdmin2.5.6

## 加工 config.inc.php——
#### ——设置访问地址
#### 第39行改为:$cfg['PmaAbsoluteUri'] = 'http://your.IP.or.Name/phpMyAdmin2.5.6';
#### ——设定 mysql 管理者密码
#### 第85行改为:$cfg['Servers'][$i]['password']      = 'your_password';
#### ——更改缺省使用语言及强制使用语言
#### 第374行改为:$cfg['DefaultLang'] = 'zh';
#### 第378行改为:$cfg['Lang'] = 'zh';
#### ——更改字符集
#### 第384行改为:$cfg['DefaultCharset'] = 'gb2312';
#### 存盘退出

## 此时如果 apache 启动了,通过 http://your.IP.or.Name/phpMyAdmin2.5.6 则可透过 Browser 来管理 mysql 数据库
## 但要注意,由于打开这个页面就可进行数据库管理,十分不安全,因此还必须增加 htaccess 以加强安全......

## 当然,还有个办法就把脚本中的默认认证方式 config 改为 http,这样,在显示页面时 Browser 会弹出一框问数据库
## 管理者的数据库密码。这里我就不啰嗦了。这要是不设防,出了安全问题可别怪我没说哦。


_________________
第五、bind9.3.2
_________________

rpm -qa | grep bind
## 如有干掉它,例如显示如下:
bind-9.2.1-16

rpm -e bind-9.2.1-16
## 如有依赖则一一解决掉,先

cd /download/dns
tar xvfz bind-9.3.2.tar.gz
cd bind-9.3.2

## 如果之前干掉了 bind, 则用户 named 也会被干掉,所以现在添加用户 named
useradd -d /home/named -s /sbin/nologin named

## 为方便管理,计划将它装在 /home/named 下
./configure --prefix=/home/named
make && make install

## 建立配置文件存放目录 etc 及用于记录进程信息的目录 var
mkdir /home/named/etc /home/named/var
## 让 var 对于 named 可写
chown named var

cd /home/named/etc

## 先下载顶级 dns 的域文件 named.root (当然首先假定你的机子能上网哈)
../bin/dig > named.root

## 然后生成 named.conf
#### 生成 rndc 控制命令的 key 文件
#### 需注意,这一步要求操作系统配有随机数发生器,所以系统的 random 服务不能停
#### 否则这一步,将会卡住,象没了反应一样
../sbin/rndc-confgen > rndc.conf
#### 从 rndc.conf 文件中提取 named.conf 用的 key 生成 named.conf 文件
tail -10 rndc.conf | head -9 | sed 's/# //g' > named.conf
#### 此时,named.conf 内容为:

  1. key "rndc-key" {
  2.         algorithm hmac-md5;
  3.         secret "O0SuB34RK+E3r+m5Fbh2eA==";
  4. };
  5. controls {
  6.         inet 127.0.0.1 port 953
  7.                 allow { 127.0.0.1; } keys { "rndc-key"; };
  8. };
复制代码


## 增加 localhost.rev 文件,如果有 make-locahost 脚本,可以直接使用生成标准文件
## 否则直接编辑也可,内容如下(注意将urhost/urdomain替换为实际名称):
## 它实际上是本地反向解析文件,内容如下(注意将urhost/urdomain替换为实际名称):

  1. $TTL    3600

  2. @       IN      SOA     urhost.urdomain.com. root.urhost.urdomain.com.  (
  3.                                 20060425        ; Serial
  4.                                 3600    ; Refresh
  5.                                 900     ; Retry
  6.                                 3600000 ; Expire
  7.                                 3600 )  ; Minimum
  8.         IN      NS      urhost.urdomain.com.
  9. 1       IN      PTR     localhost.urdomain.com.
复制代码

## 这样才能把 127.0.0.1 反向解析为 localhost.urdomain.com


## 现增加一个反向解析文件192.168.0.rev,内容如下(注意将urhost/urdomain替换为实际名称):

  1. $TTL    3600

  2. @       IN      SOA     urhost.urdomain.com. root.urhost.urdomain.com.  (
  3.                                 20060425        ; Serial
  4.                                 3600    ; Refresh
  5.                                 900     ; Retry
  6.                                 3600000 ; Expire
  7.                                 3600 )  ; Minimum
  8.         IN      NS      urhost.urdomain.com.
  9. 247       IN      PTR     urhost.urdomain.com.
复制代码

## 上面 247 是我试验机的 IP 192.168.0.247
## 这样才能把 192.168.0.247 反解析为 urhost.urdomain.com

## 在先前说的 named.conf 中增加如下内容

  1. zone "." IN {
  2.     type hint;
  3.     file "/home/named/etc/named.root";
  4. };
  5. zone "0.0.127.in-addr.arpa" IN {
  6.      type master;
  7.      file "/home/named/etc/localhost.rev";
  8.      allow-update { none; };
  9. };
  10. zone "0.168.192.in-addr.arpa" IN {
  11.      type master;
  12.      file "/home/named/etc/192.168.0.rev";
  13.      allow-update { none; };
  14. };
复制代码

## 重启 named
#### 用 nslookup 进行测试
nslookup
> server 127.0.0.1
#### 你会发现
#### 127.0.0.1 会反解出 localhost.urdomain.com
#### 192.168.0.247 会反解出 urhost.urdomain.com

## 或许现在会有疑问,为什么没有真正的域数据呀。
## 是的,真正的域数据将由 tcl 脚本产生,别急,往下看。

________________
第六、tcl 8.3/8.4
________________

cd /download/dns
tar xvfz tcl8.4.13.src.gz
cd tcl8.4.13
cd unix
./configure --disable-threads 或者直接 ./configure
make && make test && make install

## 其实 make test 时可能会有些错,但可忽略不计

## 此时,运行 which tclsh8.4 可以看到
/usr/local/bin/tclsh8.4

## 可以整一个软连接:
ln -s /usr/local/bin/tclsh8.4 /usr/local/bin/tclsh


## 至此,tcl 脚本解释器算是 OK 了。
#### 注:tcl/tk 曾经大量用于 Web 前台应用程序的开发,但现在好象有些末落了,国内亚信公司曾长期使用它

____________________________
第七、mysqltcl
____________________________

cd /download/dns
tar xvfz mysqltcl-3.02.tar.gz
cd mysqltcl-3.02
./configure --with-tcl=/usr/local/lib \
            --with-tclinclude=/usr/local/include \
            --with-mysql-include=/home/mysql/include/mysql \
            --with-mysql-lib=/home/mysql/lib/mysql
make
make install

## 这样, tcl 的 mysql 接口也 OK 了。

__________________________
第八、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 来建库初始化表,以下给出所有脚本

  1. /home/mysql/bin/mysql -u root -pyourpassword
  2. create database binddb;

  3. use binddb;

  4. create table domains (
  5. id              INT auto_increment,
  6. name            VARCHAR(255) NOT NULL,
  7. master          VARCHAR(20) DEFAULT NULL,
  8. last_check      INT DEFAULT NULL,
  9. type            VARCHAR(6) NOT NULL,
  10. notified_serial INT DEFAULT NULL,
  11. account         VARCHAR(40) DEFAULT NULL,
  12. primary key (id)
  13. )type=InnoDB;

  14. CREATE UNIQUE INDEX name_index ON domains(name);

  15. CREATE TABLE records (
  16.   id              INT auto_increment,
  17.   domain_id       INT DEFAULT NULL,
  18.   name            VARCHAR(255) DEFAULT NULL,
  19.   type            VARCHAR(6) DEFAULT NULL,
  20.   content         VARCHAR(255) DEFAULT NULL,
  21.   ttl             INT DEFAULT NULL,
  22.   prio            INT DEFAULT NULL,
  23.   change_date     INT DEFAULT NULL,
  24.   primary key(id)
  25. )type=InnoDB;

  26. CREATE INDEX rec_name_index ON records(name);
  27. CREATE INDEX nametype_index ON records(name,type);
  28. CREATE INDEX domain_id ON records(domain_id);

  29. create table supermasters (
  30.   ip VARCHAR(25) NOT NULL,
  31.   nameserver VARCHAR(255) NOT NULL,
  32.   account VARCHAR(40) DEFAULT NULL
  33. );
复制代码

--——以下我把 binddb 的所有权限都交给 pdns,当然,安全起见最好还是在 mysql 管理前台详细授权
--——其实它只需要对 binddb 有 create/select/update/delete/insert 的权限

  1. GRANT ALL PRIVILEGES
  2.       ON binddb
  3.       TO pdns@localhost
  4.       IDENTIFIED BY 'yourpassword4pdns'
  5.       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/poweradmin-1.2.7/inc/ && tclsh ./gbzf.tcl
*/7 * * * * /home/named/sbin/rdnc reload >/dev/null 2>&1

## ———这就是说每5分钟从数据库中导出一次zone文件,每7分钟 reload 一次
## ———这是原文中的做法,在这里其实有改进余地
## ———比如,我们增加一个判断,判断SOA中的时间序列值是否改变,因为每次在前台添加纪录后,SOA纪录中的时间序列值会变(这是poweradmin干的事),改变了再导出文件并进行一次reload岂不更好!(不过值得一提的是bind也很聪明,reload时,如果导出来的数据SOA中时间序列值没变,它也不会真正地load)
## ———那么我们可以把那两句话整合成一个脚本放在cron中执行,定时判断适时导出数据来重载,具体作法读者可自行改进!


## 然后我们开始修理 /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

  1. ; Zonefile for dengtao75.com
  2. $TTL 3600
  3. @               IN      SOA     ns.dengtao75.com.       postmaster.dengtao75.com. (
  4.                         2006042502      ; serial number YYYYMMDDnn
  5.                         28800   ; Refresh
  6.                         7200    ; Retry
  7.                         3600    ; Expire
  8.                         360     ; Min TTL
  9.                         )

  10. @                               IN              NS      mail.dengtao75.com.
  11. @                               IN              NS      [url]www.dengtao75.com.[/url]
  12. [url]www.dengtao75.com.[/url]              IN              A       192.168.0.247
  13. dengtao75.com.                  IN              A       192.168.0.247
  14. mail.dengtao75.com.             IN              A       192.168.0.247
  15. localhost.dengtao75.com.        IN              A       127.0.0.1
  16. @                               IN              MX      10 mail.dengtao75.com.
复制代码

#### 与数据库内数据内容是相对一致的。

#### 并且 named.conf 末句所包含的那个文件 named.conf.local 的内容也发生了变化,它将有一段内
#### 容指向域数据文件如下段内容所示:

  1. zone "dengtao75.com" {
  2. type master;
  3. file "/home/named/etc/izidns/dengtao75.com.zone";
  4. };
复制代码

## 此时,用 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

  1. #!/bin/bash
  2. ##############################################
  3. [ -r /home/named/etc/named.conf ] || exit 0

  4. start() {
  5.         if [ -n "`/sbin/pidof named`" ]; then
  6.                 echo -n $"$prog: already running"
  7.                 return 1
  8.         fi
  9.         echo -n $"Starting $prog: "
  10.         /home/named/sbin/named -u named
  11. }
  12. stop() {
  13.         echo -n $"Stopping $prog: "
  14.         /home/named/sbin/rndc stop
  15.         kill -9 `cat /home/named/var/run/named.pid`
  16. }
  17. restart() {
  18.         stop
  19.         start
  20. }
  21. reload() {
  22.         /home/named/sbin/rndc reload >/dev/null 2>&1 || /usr/bin/killall -HUP `/sbin/pidof -o %PPID named`
  23. }
  24. probe() {
  25.         /usr/sbin/rndc reload >/dev/null 2>&1 || echo start
  26. }
  27. rhstatus() {
  28.         /home/named/sbin/rndc status
  29. }

  30. case "$1" in
  31.         start)
  32.                 start
  33.                 ;;
  34.         stop)
  35.                 stop
  36.                 ;;
  37.         status)
  38.                 rhstatus
  39.                 ;;
  40.         restart)
  41.                 restart
  42.                 ;;
  43.         condrestart)
  44.                 [ -e /home/named/var/run/named.pid ] && restart
  45.                 ;;
  46.         reload)
  47.                 reload
  48.                 ;;
  49.         probe)
  50.                 probe
  51.                 ;;
  52.         *)
  53.                 echo $"Usage: $0 {start|stop|status|restart|condrestart|reload|probe}"
  54.                 exit 1
  55. esac

  56. 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 中可以看到,有时间再说。

[FreeBSD下的使用]
——2006年5月18日成功地在FreeBSD上应用此方案。
——关键区别在于第八步中的两个so,由于这个so我们在安装mysqltcl-3.02时,也能生成,只是版本为3.02,即libmysqltcl3.02.so。笔者将其拷到那两个目录下,且在该目录下链接成为libmysqltcl2.51.so,于是导出数据是正常工作的。因而也OK了。
——另外就是随机启动,不必那么复杂,我简单地在/etc/rc.local中添加了
/home/mysql/share/mysql/mysql.server start
/apache2/bin/apachectl start
/home/named/sbin/named --user=named
就搞掂了,非常简单。

[ 本帖最后由 bigmoyo 于 2006-5-23 10:34 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2006-04-28 00:21 |只看该作者

——没人顶,自己顶!

——如果是新人新装DNS建议用此文,管理真的简单方便。
——中小企业或单个企业自已使用十分合适。
——欢迎批评指正补充交流。tom.dane#gmail.com -- bigmoyo

论坛徽章:
5
巳蛇
日期:2013-08-28 09:26:15CU十二周年纪念徽章
日期:2013-10-24 15:41:34射手座
日期:2013-10-31 09:13:04射手座
日期:2014-02-11 13:18:34天秤座
日期:2014-03-25 09:22:28
3 [报告]
发表于 2006-04-28 10:15 |只看该作者
谢谢共享,新网/万网的dns管理类似于这个东东...

论坛徽章:
0
4 [报告]
发表于 2006-04-28 11:10 |只看该作者

——哦,原来如此。

——如果新网万网用的类似于这个东东。
——会不会他们解决了实时查询这个问题,不用再reload了。比如用 LDAP,还可以搞成分布式或级联的。

——我看德国人的这个方案总是要定时导出数据成zone文件,然后由 bind reload。量大恐怕是不行。应该说他们不会采用这种定时导出的方案。

——如果 powerdns 足够强大的话,也没必要再用 bind;不过俺还是挺喜欢 bind。

——感觉上来说,万网新网他们应当是有LDAP的数据接口,对于顶级域名,比如新建一个***.com的域,数据就通过接口直接写到美国某服务器上了(不知是不是这样)。对于cn域名则是写到中国的服务器上去了。还有种可能是分布式(同级并联)或级联LDAP数据库,即本地服务器数据成为所有.com数据的一部分。
——只是猜测,不知对不对,还请版主们赐教。

[ 本帖最后由 bigmoyo 于 2006-4-28 17:08 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2006-04-28 15:50 |只看该作者
bind 可以直接用数据库做数据后台。还支持ldap。
有一个统一得接口。就是不知道这样做效率如何。我觉得大量得数据放在数据库心里踏实点。因为数据库做集群和备份都很方便。
优势在于管理很方便。而且更新方便。

论坛徽章:
0
6 [报告]
发表于 2006-04-28 17:19 |只看该作者

——为何这个方案没用bind的mysql接口?

——是的,bind有直接的数据接口
——izidns的主要着眼点在于看重 poweradmin 的前台管理界面,因此将这些管理界面相关的库表都整过来了。但这些库表中zone数据表实际上是对于 powerdns 及其数据库后端适用。而bind的mysql接口程序就不适用了。
——所以,这个方案用了定时导出zone文件的办法。

——所以文末我说能不能以在mysql中建视图的办法,再用bind的mysql接口象访问表一样访问视图。于是就不用cron在那里老是导出然后reload。

——如果用bind的mysql接口,如果新建域,应该还是要reload,因为要改 named.conf。不过也好多了。

论坛徽章:
0
7 [报告]
发表于 2006-04-29 11:02 |只看该作者
——所以文末我说能不能以在mysql中建视图的办法,再用bind的mysql接口象访问表一样访问视图。于是就不用cron在那里老是导出然后reload。

——如果用bind的mysql接口,如果新建域,应该还是要reload,因为要改 named.conf。不过也好多了。

这个我也想过。如果bind能从 数据库读named.conf的内容就好了。不知道为什么不这么做,有什么缺点吗?
有关注bind的邮件列表的人,问问看。

论坛徽章:
0
8 [报告]
发表于 2006-04-29 13:02 |只看该作者
原帖由 archangle 于 2006-4-29 11:02 发表

这个我也想过。如果bind能从 数据库读named.conf的内容就好了。不知道为什么不这么做,有什么缺点吗?
有关注bind的邮件列表的人,问问看。


——要能挤出足够时间, 再在 sourceforge 上找找看看
——我想,但凡增加一个域,则从前台 php 脚本中就 reload 一次也可满足。

——象 izidns 方案中 named.conf 末行是个 include 语句,include 了一个文件。这个文件名总是不变,所以 named.conf 也不用变。
——而 include 进来的这个文件是由数据表中的“域表”定时导出的,其中指明了域与数据文件的对应关系,域数据还不在这里,而在本例中 /home/named/etc/izidns目录下若干域数据文件,由 cron 定时导出。

——从 izidns 这里我想到,如果直接从数据库捞数,named.conf 也可以 include 一个文件A的形式不变化。仅当增加一个域时,前台PHP调用某程序模块,改变这个指明“域-所对应-数据表(或视图)”的文件A,且reload一次,也可以免去由 cron 导数据的这种非实时性和没事儿老 reload 的尴尬。当增加单条记录时则完全不需要 reload.

[ 本帖最后由 bigmoyo 于 2006-4-29 13:12 编辑 ]

论坛徽章:
0
9 [报告]
发表于 2006-04-29 14:37 |只看该作者

在http://hostname/poweradmin-1.2.7/install.php出错,求救

http://hostname/poweradmin-1.2.7/install.php出错,求救 ,错误信息如下:

Notice: Use of undefined constant DB_PORTABILITY_DELETE_COUNT - assumed 'DB_PORTABILITY_DELETE_COUNT' in /usr/local/lib/php/DB/mysql.php on line 823

Notice: Use of undefined constant DB_PORTABILITY_ERRORS - assumed 'DB_PORTABILITY_ERRORS' in /usr/local/lib/php/DB/mysql.php on line 880

Notice: Use of undefined constant DB_ERROR_CONSTRAINT_NOT_NULL - assumed 'DB_ERROR_CONSTRAINT_NOT_NULL' in /usr/local/lib/php/DB/mysql.php on line 882

Oops! An error occured!

CREATE TABLE users ( id int(11) NOT NULL auto_increment, username varchar(16) NOT NULL default '', password varchar(34) NOT NULL default '', fullname varchar(255) NOT NULL default '', email varchar(255) NOT NULL default '', description text NOT NULL, level tinyint(3) NOT NULL default '0', active tinyint(1) NOT NULL default '0', PRIMARY KEY (id) ) TYPE=MyISAM [nativecode=1142 ** CREATE command denied to user 'izidns'@'localhost' for table 'users']

<< back

论坛徽章:
0
10 [报告]
发表于 2006-04-29 14:48 |只看该作者
原帖由 wild_li 于 2006-4-29 14:37 发表
http://hostname/poweradmin-1.2.7/install.php出错,求救 ,错误信息如下:

Notice: Use of undefined constant DB_PORTABILITY_DELETE_COUNT - assumed 'DB_PORTABILITY_DELETE_COUNT' in /usr ...



——数据库权限不足!

从出错信息看,你是有个数据库用户叫 'izidns' ?
然后呢你现在根本就连不上库。

参考我文中,我是建了个库binddb, 在binddb 上建了在执行install.php之前的PowAdmin就需要的几个表,之 后又建立了一个用户 pdns 且给它对于binddb 的一切权限(或者只给create/insert/delete/update/select 的权限也可)。然后再改 config.inc.php 中连库所需要的--用户名pdns/密码.../数据库 binddb

[ 本帖最后由 bigmoyo 于 2006-4-29 14:51 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP