• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    DNS 又一解決方案:izidns = bind + PowerAdmin

    發布: 2007-7-13 21:16 | 作者: jacoo  &nb | 來源: 本站原創     | 查看: 25次 | 進入軟件測試論壇討論

    領測軟件測試網

    [概要]

      曾經使用過 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)
      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 抽象層接口包的安裝也就,O了K了


    _______________________________________________________________________
    第四、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 腳本解釋器算是 O 了 K 了。
    #### 注: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 接口也 O 了 K 了。

    _______________________________________________________________________
    第八、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      [url]www.dengtao75.com.[/url]
    [url]www.dengtao75.com.[/url]              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

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>