PowerDNS - Realtime Update 的 DNS 伺服器介紹

来源:互联网 发布:手机变砖刷机软件 编辑:程序博客网 时间:2024/05/18 05:03

转载自:http://tianenwang.blog.163.com/blog/static/490801192008911101937585/
一般来说,最常用的DNS服务器,无非是Windows Server操作系统自带的DNS服务器,和Linux,Unix平台下的Bind组件。

       Windows自带的DNS服务器,存在着备份困难,配置复杂的问题。Linux下的Bind的配置更加的复杂。
       如果网络中同时存在Windows和Linux Bind两种DNS服务器,这个同步的工作,可是会要掉管理人员的 姓名的。
       现在来说说跨平台的开源DNS服务组件-PowerDNS,PowerDNS同时有Win32和Linux/Unix的版本。PowerDNS在Win32下使用Access的mdb文件记录DNS信息,而在Linux/Unix下则使用MySQL来记录DNS信息。无论是mdb亦或MySQL,备份是非常方便的事情。
       PowerDNS的主配置文件是pdns.conf,形如:

# PowerDNS configuration file.

# Use NT logging when running as a service:
use-ntlog=yes

# Backends to launch at startup:
launch=godbc

godbc-datasource=PowerDNS
godbc-username=PowerDNS
godbc-password=PowerDNS

# Point to the recursor:
recursor=202.96.134.133

# Launch a statistical webserver:
webserver=yes
webserver-port=8081

# EOF

只有  recursor=   需要修改一下,改成正确的DNS转发地址就可以了,等同Bind中的forward。

数据库记录的表结构形如:


recordsiddomain_idnametypecontentttlpriochange_date10example.comSOAns1.example.com. ahu.example.com. 2000081501 28800 7200 604800 864001200
20example.comNSns1.example.com1200
30example.comNSns2.example.com1200
40example.comMXsmtp-servers.example.com12010
50example.comMXsmtp-servers.test.com12015
60ns1.example.comA192.168.1.11200
70ns2.example.comA192.168.1.21200
80localhost.example.comA127.0.0.11200
90www.example.comCNAMEoutpost.example.com1200

很简单,添加相应的 A记录 SOA记录 NS记录和CNAME记录就好了。
要实现DNS轮询,只需要将同一个Host Name对应多条A记录,这样就可以了。

Power的缺点,最重要的就是查询的速度。大概只有Bind的25%,极限速度是每秒2K次左右。

        若您使用過一般的 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# 轉送查詢之主機

 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) 之表格共兩個,其內容如下:

以下為範資料及查詢例子:

PowerDNS - Realtime Update 的 DNS 伺服器介紹 - 望天 - wangtian的博客

PowerDNS - Realtime Update 的 DNS 伺服器介紹 - 望天 - wangtian的博客

 依上面表格及表格之內容(請記得填寫 SOA 及 NS 內容,prio 欄位為 MX 之優先權欄位),我們查詢 xxx.com.tw 之 NS 記錄,可以正確顯示出來

 [root@CSPS20 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 不甚了解,建議您可至 http://rs.twnic.net.tw/DNS92/ 下載教學檔案.

  但以一般的 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 運作狀況:

PowerDNS - Realtime Update 的 DNS 伺服器介紹 - 望天 - wangtian的博客

 上面的之畫面尚不到監測項目的五分之一,基本上 PDNS server 的狀況都可以從這個畫面了解.

 Pdns.conf 中的最後一個部份recursor=168.95.1.1 ,類似一般 DNS 設定中之 forward 功能,若您沒有此行設定,您的 PDNS 屬於非遞迴主機(non-recursion).因為大多數以資料庫為主的 DNS (如 mydns,twnic dyndns) 在實作,考慮速度及安全的因素下,皆會為非遞迴主機,若您一定要 PDNS 幫您查出來它所沒有的資料的答案,就需要指定此一參數,方能如同一般的 DNS 功能.

 相信經此一介紹,您可以了解了解更多 DNS 軟體. 資料庫型式故有其優點,但相對的其查詢速度就比非資料庫的來得慢,以我們測試的狀況 PDNS 的查詢每秒最多僅能查詢近千次,而 ISC BIND(named) 則可上萬次,然每秒千次之查詢對 99% 的公司而言亦巳相當足夠.至於您若要讓您的使用者或客戶使用 PDNS 的資料庫功能,基本上您可能需開發適檔的網頁功能,不過網路上亦有人針對 PDNS 做了一套網頁,下一期我們將為大家介紹這套東西,及如何轉案現在 Zone File 的格式到 PDNS

原创粉丝点击