DNS軟件bind
我們說(shuō)DNS是一種協(xié)議,而對(duì)于每一種協(xié)議的實(shí)現(xiàn)都需要程序員開(kāi)發(fā)出遵循這種協(xié)議規(guī)范的軟件程序來(lái)實(shí)現(xiàn),這里要介紹的BIND就是DNS協(xié)議的一種開(kāi)源實(shí)現(xiàn)。據(jù)統(tǒng)計(jì),使用bind作為DNS服務(wù)器軟件的DNS服務(wù)器大約占所有DNS服務(wù)器的九成。BIND全稱(chēng)為Berkeley Internet Name Domain,因?yàn)楫?dāng)今互聯(lián)網(wǎng)上的通信幾乎都必須借助于DNS服務(wù)器來(lái)解析主機(jī)名,得到通信對(duì)方的IP地址,而在DNS服務(wù)器上最常用的軟件就是bind,所以,bind這款軟件幾乎可以說(shuō)是當(dāng)今互聯(lián)網(wǎng)上常用的軟件了。
目前bind由ISC.org(Internet Systems Consortium,互聯(lián)網(wǎng)系統(tǒng)協(xié)會(huì))負(fù)責(zé)開(kāi)發(fā)與維護(hù)。
bind包相關(guān)工具
dns服務(wù), 程序包名:bind, 程序名:named
bind #提供dns server程序,以及幾個(gè)常用的測(cè)試工具。
bind-libs #提供bind和bind-utils包中的程序共同用到的庫(kù)文件。
bind-utils #bind客戶(hù)端程序集,例如提供host, nslookup, dig等工具。
bind-chroot #類(lèi)似chroot,把dns服務(wù)限制在某個(gè)范圍之類(lèi). 安全包
bind相關(guān)文件
服務(wù)腳本:/etc/rc.d/init.d/named
主配置文件:/etc/named.conf,/etc/rfc1912.zones,/etc/rndc.key
解析文件:
/var/named/ZONE_NAME.ZONE
根區(qū)域解析庫(kù)文件:named.ca.
注意:
一臺(tái)物理服務(wù)器可同時(shí)為多個(gè)區(qū)域提供解析;
必須要有根區(qū)域文件;named.ca
應(yīng)該有兩個(gè)(如果包括ipv6的,應(yīng)該更多)實(shí)現(xiàn)localhost和本地回環(huán)地址的解析庫(kù);
rndc: remote name domain controller,默認(rèn)與bind安裝在同一主機(jī),且只能通過(guò)127.0.0.1來(lái)連接named進(jìn)程;提供輔助性的管理功能;監(jiān)聽(tīng)端口:953/tcp
bind配置文件說(shuō)明
/etc/named.conf
全局配置:option {}
日志配置:logging{}
區(qū)域配置配置文件:
/etc/rfc1912.zones
默認(rèn)CentOS會(huì)默認(rèn)配置回環(huán)地址
listen-on port 53 { any; };
監(jiān)聽(tīng)在當(dāng)前主機(jī)上的哪個(gè)網(wǎng)絡(luò)接口。默認(rèn)是監(jiān)聽(tīng)在localhost,也就是只有本機(jī)才能夠查詢(xún),這顯然是不符合現(xiàn)實(shí)需要的,因此可以改為any,表示可以監(jiān)聽(tīng)多個(gè)網(wǎng)絡(luò)接口,any之后要加上分號(hào)才算結(jié)束。只要監(jiān)聽(tīng)在能夠與外網(wǎng)主機(jī)進(jìn)行通信的網(wǎng)絡(luò)接口上,就可以為外網(wǎng)主機(jī)提供解析服務(wù),當(dāng)前前提是別人知道自己主機(jī)的IP地址。這里也可以監(jiān)聽(tīng)在指定的網(wǎng)絡(luò)接口上,可以監(jiān)聽(tīng)多個(gè)接口,每個(gè)地址后面都需要加上分號(hào)。
directory "/var/named";
這里的意思是如果在/etc/named.conf(包括被包含進(jìn)來(lái)的配置文件)中定義了正反解區(qū)域解析庫(kù)文件的文件名時(shí),該文件名默認(rèn)應(yīng)該存放于哪個(gè)目錄下,默認(rèn)是存放在/var/named/目錄下。需要注意的是,如果安裝了bind-chroot程序包,則這些區(qū)域解析庫(kù)文件最終會(huì)被主動(dòng)鏈接到/var/named/chroot/var/named/這個(gè)目錄。
*dump-file、statistics-file、memstatistics-file
與named這個(gè)服務(wù)有關(guān)的許多統(tǒng)計(jì)信息,如果想要輸出為文件的話(huà),默認(rèn)的文件名就由這三項(xiàng)指定。
allow-query { any; };
這是針對(duì)DNS客戶(hù)端的設(shè)置,表示誰(shuí)可以向我的DNS服務(wù)提出查詢(xún)請(qǐng)求的意思。默認(rèn)設(shè)置為localhost,表示僅允許本地查詢(xún),這里修改為any,表示對(duì)所有的用戶(hù)開(kāi)放(當(dāng)然,防火墻必須放行才行)。
allow-transfer { none; };
當(dāng)架設(shè)主-從DNS服務(wù)器時(shí),允許哪臺(tái)從DNS服務(wù)器向我的這臺(tái)DNS服務(wù)器轉(zhuǎn)發(fā)區(qū)域解析庫(kù)文件的數(shù)據(jù)。
recursion yes;
是否允許為DNS客戶(hù)端做遞歸查詢(xún)。默認(rèn)為yes.

rndc命令管理dns服務(wù)器
我們知道,DNS服務(wù)默認(rèn)的監(jiān)聽(tīng)端口是53,當(dāng)我們?cè)谥鳈C(jī)上啟動(dòng)DNS服務(wù)之后,用netstat查看監(jiān)聽(tīng)端口,顯示如下:
[root@localhost ~]# netstat -tunlp | grep named
tcp 0 0 127.0.0.1:953 0.0.0.0:* LISTEN 1387/named
tcp 0 0 192.168.1.120:53 0.0.0.0:* LISTEN 1387/named
tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 1387/named
tcp6 0 0 ::1:953 :::* LISTEN 1387/named
tcp6 0 0 ::1:53 :::* LISTEN 1387/named
udp 0 0 192.168.1.120:53 0.0.0.0:* 1387/named
udp 0 0 127.0.0.1:53 0.0.0.0:* 1387/named
udp6 0 0 ::1:53 :::* 1387/named
復(fù)制
上面結(jié)果顯示,除了能夠看到53號(hào)端口之外,還能看到953端口,那是namd在953端口多啟動(dòng)了一個(gè)服務(wù),這就是rndc了。 這個(gè)rndc的全稱(chēng)是Remote Name Domain Controller,它可以幫助用戶(hù)更方便地管理DNS服務(wù)器,包括可以檢查DNS服務(wù)器的狀態(tài)與統(tǒng)計(jì)信息、重載配置文件及zone或單獨(dú)重載某個(gè)區(qū)域而不需要重新啟動(dòng)整個(gè)DNS服務(wù),還有查看已存在DNS緩存當(dāng)中的資料等。 rndc服務(wù)默認(rèn)監(jiān)聽(tīng)在tcp的953端口,且默認(rèn)監(jiān)聽(tīng)于127.0.0.1地址,因此默認(rèn)僅允許本地使用。
rndc的常見(jiàn)用法:
rndc reload:在不重新啟動(dòng)DNS服務(wù)的情況下,重新加載配置文件及zone.
rndc reload zone:重新加載指定的zone.
rndc status:查看當(dāng)前DNS服務(wù)器的狀態(tài)。
rndc stats:將當(dāng)前系統(tǒng)的DNS統(tǒng)計(jì)數(shù)據(jù)記錄下來(lái),默認(rèn)會(huì)將數(shù)據(jù)存儲(chǔ)為一個(gè)文件:/var/named/data/named_stats.txt.
rndc dumpdb:將當(dāng)前DNS高速緩存中的數(shù)據(jù)記錄下來(lái),與stats類(lèi)似,默認(rèn)會(huì)將數(shù)據(jù)存儲(chǔ)為一個(gè)文件:/var/named/data/cache_dump.db.、
rndc flush:清空當(dāng)前DNS服務(wù)器上的所有緩存。