歡迎您光臨本站 註冊首頁

izidns = bind + PowerAdmin (Redhat linux及FreeBSD)

←手機掃碼閱讀     火星人 @ 2014-03-04 , reply:0

izidns = bind + PowerAdmin (Redhat linux及FreeBSD)

  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 內容為:
 
 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"; };
 };
 
 
 ## 增加 localhost.rev 文件,如果有 make-locahost 腳本,可以直接使用生成標準文件
 ## 否則直接編輯也可,內容如下(注意將urhost/urdomain替換為實際名稱):
 ## 它實際上是本地反向解析文件,內容如下(注意將urhost/urdomain替換為實際名稱):
 
 $TTL    3600
 
 @       IN      SOA     urhost.urdomain.com. root.urhost.urdomain.com.  (
                                 20060425        ; Serial
                                 3600    ; Refresh
                                 900     ; Retry
                                 3600000 ; Expire
                                 3600 )  ; Minimum
         IN      NS      urhost.urdomain.com.
 1       IN      PTR     localhost.urdomain.com.
 
 ## 這樣才能把 127.0.0.1 反向解析為 localhost.urdomain.com
 
 
 ## 現增加一個反向解析文件192.168.0.rev,內容如下(注意將urhost/urdomain替換為實際名稱):
 
 $TTL    3600
 
 @       IN      SOA     urhost.urdomain.com. root.urhost.urdomain.com.  (
                                 20060425        ; Serial
                                 3600    ; Refresh
                                 900     ; Retry
                                 3600000 ; Expire
                                 3600 )  ; Minimum
         IN      NS      urhost.urdomain.com.
 247       IN      PTR     urhost.urdomain.com.
 
 ## 上面 247 是我試驗機的 IP 192.168.0.247
 ## 這樣才能把 192.168.0.247 反解析為 urhost.urdomain.com
 
 ## 在先前說的 named.conf 中增加如下內容
 
 zone "." IN {
     type hint;
     file "/home/named/etc/named.root";
 };
 zone "0.0.127.in-addr.arpa" IN {
      type master;
      file "/home/named/etc/localhost.rev";
      allow-update { none; };
 };
 zone "0.168.192.in-addr.arpa" IN {
      type master;
      file "/home/named/etc/192.168.0.rev";
      allow-update { none; };
 };
 
 ## 重啟 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 來建庫初始化表,以下給出所有腳本
 
 /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/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
 #### 文件內容顯示如下:
 # 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 中可以看到,有時間再說。
 
 [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 編輯 ]

《解決方案》

 

——沒人頂,自己頂!

  ——如果是新人新裝DNS建議用此文,管理真的簡單方便。
 ——中小企業或單個企業自已使用十分合適。
 ——歡迎批評指正補充交流。tom.dane#gmail.com -- bigmoyo

《解決方案》

    謝謝共享,新網/萬網的dns管理類似於這個東東...

《解決方案》

 

——哦,原來如此。

  ——如果新網萬網用的類似於這個東東。
 ——會不會他們解決了實時查詢這個問題,不用再reload了。比如用 LDAP,還可以搞成分散式或級聯的。
 
 ——我看德國人的這個方案總是要定時導出數據成zone文件,然後由 bind reload。量大恐怕是不行。應該說他們不會採用這種定時導出的方案。
 
 ——如果 powerdns 足夠強大的話,也沒必要再用 bind;不過俺還是挺喜歡 bind。
 
 ——感覺上來說,萬網新網他們應當是有LDAP的數據介面,對於頂級域名,比如新建一個***.com的域,數據就通過介面直接寫到美國某伺服器上了(不知是不是這樣)。對於cn域名則是寫到中國的伺服器上去了。還有種可能是分散式(同級並聯)或級聯LDAP資料庫,即本地伺服器數據成為所有.com數據的一部分。
 ——只是猜測,不知對不對,還請版主們賜教。

[ 本帖最後由 bigmoyo 於 2006-4-28 17:08 編輯 ]

《解決方案》

    bind 可以直接用資料庫做數據後台。還支持ldap。
 有一個統一得介面。就是不知道這樣做效率如何。我覺得大量得數據放在資料庫心裡踏實點。因為資料庫做集群和備份都很方便。
 優勢在於管理很方便。而且更新方便。

《解決方案》

 

——為何這個方案沒用bind的mysql介面?

  ——是的,bind有直接的數據介面
 ——izidns的主要著眼點在於看重 poweradmin 的前台管理界面,因此將這些管理界面相關的庫表都整過來了。但這些庫表中zone數據表實際上是對於 powerdns 及其資料庫後端適用。而bind的mysql介面程序就不適用了。
 ——所以,這個方案用了定時導出zone文件的辦法。
 
 ——所以文末我說能不能以在mysql中建視圖的辦法,再用bind的mysql介面象訪問表一樣訪問視圖。於是就不用cron在那裡老是導出然後reload。
 
 ——如果用bind的mysql介面,如果新建域,應該還是要reload,因為要改 named.conf。不過也好多了。

《解決方案》

   
 ——所以文末我說能不能以在mysql中建視圖的辦法,再用bind的mysql介面象訪問表一樣訪問視圖。於是就不用cron在那裡老是導出然後reload。
 
 ——如果用bind的mysql介面,如果新建域,應該還是要reload,因為要改 named.conf。不過也好多了。
 
 這個我也想過。如果bind能從 資料庫讀named.conf的內容就好了。不知道為什麼不這麼做,有什麼缺點嗎?
 有關注bind的郵件列表的人,問問看。

《解決方案》

    原帖由 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.


  在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
 
 << back

 在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



[火星人 ] izidns = bind + PowerAdmin (Redhat linux及FreeBSD)已經有448次圍觀

http://coctec.com/docs/service/show-post-21625.html