1. 程式人生 > >DNS 開源DNS之dnspod-sr介紹

DNS 開源DNS之dnspod-sr介紹

dnspod-sr 是一個執行在 Linux 平臺上的高效能的遞迴 DNS 伺服器軟體,強烈公司內網或者伺服器內網使用dnspod-sr,具備高效能、高負載、易擴充套件的優勢,非BIND、powerdns 等軟體可以比擬。

特性
1.高效能,比所有流行的開源 DNS 軟體效能高出2倍以上
2.安全,能抵禦一般攻擊
3.穩定,有效降低解析失敗率
4.主動重新整理快取,響應速度更快
5.易於擴充套件,非常容易部署
6.防汙染,能夠正確解析被汙染域名
效能
dnspod-sr依託於DNSPod多年運營和優化DNS服務的經驗,針對國內複雜的網路情況,對遞迴DNS進行了一系列的優化,比較其他開源軟體,效能得到大幅提升。
測試環境

千兆網絡卡,4核 CPU,4G 記憶體,Linux 64位系統。
效能測試
dnspod-sr: 15萬 qps
BIND 9.9: 7萬 qps
unbound 4.7: 8萬 qps


解決方案
1.架設dnspod-sr 叢集,替換各大運營商目前基於 BIND 的陳舊方案,減少運營成本

2.公司、學校、政府等組織內部 DNS,解析外部不可見的私有域名,提高上網速度

叢集式部署:

DNSPOD-SR說明文件裡面提到支援叢集,也沒看出怎麼支援叢集,如果你想實現叢集,同步root.z檔案,前端可以用lvs、haproxy、keepalived等等來實現叢集,方法很多.

dnspod-sr安裝使用


1.安裝
wget https://github.com/DNSPod/dnspod-sr/zipball/master
unzip master 
cd DNSPod-dnspod-sr-c464043/
cd src/
make

2.配置 
如果你僅僅需要一個dns轉發器,那麼什麼都不需要配置,直接可以使用。但是如果你想解析自己的域名。修改dnspod-sr上層目錄的root.z,在檔案末尾新增

test.com.       3600    IN      NS      ns1.test.com.
test.com.       3600    IN      NS      ns2.test.com.
ns1.test.com.   3600    IN      A      192.168.110.71
ns2.test.com.   3600    IN      A      192.168.110.71
3.啟動
./dnspod-sr  # 由於用到53埠,需要root啟動
後臺啟動執行 nohup ./dnspod-sr  >/dev/null 2>&1 & 

啟動報如下錯誤:

# ./dnspod-sr 
set affinity fetcher failed,  may be the cpu cores num less than (FETCHER_NUM + QUIZZER_NUM + 1)
set affinity quizzer failed, may be the cpu cores num less than (FETCHER_NUM + QUIZZER_NUM + 1)
set affinity quizzer failed, may be the cpu cores num less than (FETCHER_NUM + QUIZZER_NUM + 1)
[DBG:] dnspod-sr is successful running now!!
[DBG:] max_ele_size is 1000000 - 1808
[DBG:] server may contain 332730 useful records
[DBG:] hash_table_size is 65536
[DBG:] we have 10 hash tables
[DBG:] we have 2 fetchers,2 quizzers
dnspod-sr: author.c:438: release_qoutinfo: Assertion `val == (void *)mbuf' failed.
CPU配置太低,換一臺機器就可以了。
4.測試
# dig @192.168.110.71 test.com NS

; <<>> DiG 9.3.6-P1-RedHat-9.3.6-20.P1.el5 <<>> @192.168.110.71 test.com NS
; (1 server found)
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 50261
;; flags: qr ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;test.com.                      IN      NS

;; ANSWER SECTION:
test.com.               3577    IN      NS      ns1.test.com.
test.com.               3577    IN      NS      ns2.test.com.

;; Query time: 3 msec
;; SERVER: 192.168.110.71#53(192.168.110.71)
;; WHEN: Thu Apr 23 18:38:34 2015
;; MSG SIZE  rcvd: 62

# dig @192.168.110.71 ns1.test.com A

; <<>> DiG 9.3.6-P1-RedHat-9.3.6-20.P1.el5 <<>> @192.168.110.71 ns1.test.com A
; (1 server found)
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 38915
;; flags: qr ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;ns1.test.com.                  IN      A

;; ANSWER SECTION:
ns1.test.com.           3565    IN      A       192.168.110.71

;; Query time: 2 msec
;; SERVER: 192.168.110.71#53(192.168.110.71)
;; WHEN: Thu Apr 23 18:38:46 2015
;; MSG SIZE  rcvd: 46
注:root.z的最後一行一定要一個空行,否則最後一條記錄解析不到。
若指定NS伺服器,需要修改配置檔案:sr.conf預設配置檔案為當前目錄下的 sr.conf,也可以在命令列引數中指定
./dnspod-sr /path/of/sr.conf
如果需要為特定域名指定DNS伺服器,以 xfer 開頭:
xfer:
googleusercontent.com.:8.8.8.8
google.com.:8.8.8.8
itil.com.:10.6.18.41
facebook.com.:8.8.8.8
twitter.com.:8.8.8.8
flickr.com.:8.8.8.8
akamaiedge.net.:202.106.0.20
edgekey.net.:202.106.0.20
youtube.com.:8.8.8.8
s-static.ak.facebook.com.edgekey.net.:8.8.8.8
:
最後一行以`:`結束。以上的幾個域名解析請求都會中轉到8.8.8.8上。
配置日誌檔案目錄(可選)
log_path:
../log/
注:如果只是在內網做轉發服務,dnspod-sr值得推薦,配置簡單,叢集搭建也簡單。相比bind等等要簡單很多,但是功能也簡單。