作者 主題: [分享] PowerDNS (連接mysql,realtime update) 的介紹  (閱讀 2809 次)

0 會員 與 1 訪客 正在閱讀本文。

abelyang

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 1097
    • 檢視個人資料
[分享] PowerDNS (連接mysql,realtime update) 的介紹

說明
若您使用過一般的 DNS 軟體,想必您一定知道,當您在 DNS 中添加一筆 FQDN 資料時
,通常都得要重新執行 DNS 服務的功能,若您尚有其他主機,通常會設為 master/slave
之狀況,而這種狀況更有資料同步的設定問題.但相信很多人都會有一個疑問,就是難到
不能 DNS 在接到查詢請求時,才到資料庫中去查,然再回應給使用者,如此即可以做到即
時的更新,且以資料庫型式來處理網域名稱相關係料,可以有更多的加值空間.


  其實答案是可以的,且方法完全不難,並支援多數的 OS 平台(Windows,Linux,Unix,
BSD, Mac OS 等) ,網路上,最有名即 PowerDNS,可從 www.powerdns.com 處下載到,以
下就簡單的介紹這套軟體的安裝及設定步驟

代碼: [選擇]

$>wget http://downloads.powerdns.com/releases/pdns-2.9.13.tar.gz
$>tar -zxvf pdns-2.9.13.tar.gz
$>cd pdns-2.9.13
$>ls -la
$>./configure --help | more
$>which mysql
$>./configure --prefix=/usr --with-mysql=/usr
$>make
$>make install  


除了支援 mysql 外,也支援 pgsql ( 詳細的編譯條件您可使用 –help 取得 ),
裝好後設定檔在 /usr/local/etc/pdns.conf 中,詳細的設定檔內容您可以在
http://downloads.powerdns.com/documentation/html/ 取得,以上僅例一個
最簡單的例子供參考:

代碼: [選擇]

  launch=gmysql #使用 mysql 資料庫  
  gmysql-host=localhost # 主機位址或 hostname  
  gmysql-user=username # mysql 的使用者名稱
  gmysql-password=passwd # 該使用者之密碼
  gmysql-dbname=DNS # 資料庫名稱
  logfile=/var/log/pdns.log # 系統記錄檔
  query-logging=yes # DNS查詢的資料是否記錄
  webserver=yes # 使用 Web 功能監測系統
  webserver-address=211.76.247.2 # IP 位址
  webserver-password=http_passwd # Web 監測系統登入密碼
  webserver-port=8081 # Web Server 的port  
  recursor=168.95.1.1 # 轉送查詢之主機  


而其中的資料庫名為 DNS , 其表格如下
代碼: [選擇]

  CREATE TABLE domains (
id int(11) NOT NULL auto_increment,
name varchar(255) NOT NULL default '',
master varchar(20) default NULL,
last_check int(11) default NULL,
type varchar(6) NOT NULL default '',
notified_serial int(11) default NULL,
account varchar(40) default NULL,
PRIMARY KEY (id),
UNIQUE KEY name_index (name)
) TYPE=MyISAM;
CREATE TABLE records (
id int(11) NOT NULL auto_increment,
domain_id int(11) default NULL,
name varchar(255) default NULL,
type varchar(6) default NULL,
content varchar(255) default NULL,
ttl int(11) default NULL,
prio int(11) default NULL,
change_date int(11) default NULL,
PRIMARY KEY (id),
KEY rec_name_index (name),
KEY nametype_index (name,type),
KEY domain_id (domain_id),
FULLTEXT KEY content (content),
FULLTEXT KEY content_2 (content)
) TYPE=MyISAM;

 上面所指的資料庫名稱(DNS) 之表格共兩個,其內容如下:




以下為範資料及查詢例子,依上面表格及表格之內容(請記得填寫 SOA 及
NS 內容,prio 欄位為 MX 之優先權欄位),我們查詢 xxx.com.tw 之 NS
記錄,可以正確顯示出來
代碼: [選擇]

[root@CISCO_SIP admin]# dig @localhost xxx.com.tw. ns
;; QUESTION SECTION:
;xxx.com.tw. IN NS
;; ANSWER SECTION:
xxx.com.tw. 15 IN NS ns1.xxx.com.tw.

;; ADDITIONAL SECTION:
ns1.xxx.com.tw. 86400 IN A 1.2.3.4

;; Query time: 3 msec
;; SERVER: 127.0.0.1#53(localhost)
;; WHEN: Sat Jan 17 02:52:06 2004
;; MSG SIZE rcvd: 62

 
上述之內容若您對一般的 DNS 設定夠了解,相信表格中的欄位意義您亦可以
了解,但以一般的 DNS 而言,TWNIC DNS指定最少兩部的要求,若您架了兩部的
PDNS,要如何做 master 與 slave 的區別呢? PDNS 沒有轄區傳送之問題,而
是您需要從資料庫層層著手,使兩個資料庫可以同步,以 mysql 而言,可參考
http://www.mysql.com/doc/en/Replication.html 中詳細的說明.
pdns.conf 中的 Web 該段,您可設定好啟動後,以
http://webserver-address:webserver-port
連線即可看到 PDNS 運作狀況:


 上面的之畫面尚不到監測項目的五分之一,基本上 PDNS server 的狀況都
可以從這個畫面了解.Pdns.conf 中的最後一個部份
recursor=168.95.1.1
,類似一般 DNS 設定中之 forward 功能,若您沒有此行設定,您的 PDNS 屬於
非遞迴主機(non-recursion).因為大多數以資料庫為主的 DNS (如 mydns,twnic dyndns)
在實作,考慮速度及安全的因素下,皆會為非遞迴主機,若您一定要 PDNS 幫您
查出來它所沒有的資料的答案,就需要指定此一參數,方能如同一般的 DNS 功能.

 資料庫型式故有其優點,但相對的其查詢速度就比非資料庫的來得慢,以我測
試的狀況 PDNS 的查詢每秒最多僅能查詢近千次,而 ISC BIND(named) 則可
上萬次,然每秒千次之查詢對 99% 的公司而言亦巳相當足夠.至於您若要讓您
的使用者或客戶使用 PDNS 的資料庫功能,基本上您可能需開發適檔的網頁功
能,不過網路上亦有人針對 PDNS 做了一套網頁.有興趣您可到 www.sf.net
找 PowerAdmin 的網頁介面