DNS 開源DNS之dnspod-sr介紹
阿新 • • 發佈:2019-01-24
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,在檔案末尾新增
3.啟動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
./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等等要簡單很多,但是功能也簡單。