Berkeley Internert Name Domain(BIND)是我們所熟知的域名軟件,它具有廣泛的使用基礎,Internet上的絕大多數
DNS服務器都是基於這個軟件的。BIND目前由ISC(Internet Software Consortium)負責維護,具體的開發由
Nominum(www.nominum.com)公司來完成。下面編譯的這個常見問題集就是由該公司所發布的(同時也見於
http://www.isc.org/bind),可以說,它具有較強的針對性和實用性。
1) 哪裡可以找到BIND?
BIND以源碼的格式發布。當前的版本為BIND 9,不過BIND 8.2.2-P5仍然是廣泛發布的版本。考慮到早期版本的安全問
題,如果您還在運行比8.2.2-P5更早的版本,那麼我們強烈推薦您升級軟件。
以下的URL包括了源碼和其他相關資源的鏈接,你可能會覺得很有用處:
http://www.isc.org/prodUCts/BIND/
源碼也可以使用FTP從ftp://ftp.isc.org/isc/bind/src/8.2.2-P5/bind-src.tar.gz 獲得。
鏡像BIND的ftp服務器列表和其它ISC維護的開發源碼軟件可以在ftp://ftp.isc.org/isc/MIRRORS上找到。
2) 怎樣安裝BIND?
下載源碼到一個空的目錄。如果你需要的話,你也可以下載文檔和捆綁的包。
接下來,你需要解壓(unzip)和解包(untar)發布的包。
gunzip < bind-src.tar.gz tar xf -
然後,你需要編譯和安裝軟件。常見src/INSTALL以獲知指令。在安裝之前請備份系統,因為安裝可能會覆蓋舊的二進制
代碼;這是依賴於系統的。
如果你是從BIND 4轉過來的,那麼你需要將配置文件named.boot轉成新的語法。這裡包含了一個轉換程序。
named-bootconf
< /etc/named.boot
> /etc/named.conf
同時,如果你正從BIND 4轉換而來,那麼系統啟動腳本需要進行修改,以使之查找/etc/named.conf,而不是
/etc/named.boot。
接著,你需要終止老的named並啟動新的。
kill -TERM
ndc start
檢查系統日志(在大多數Unix系統上,錯誤都存放在/var/adm/messages中),因為當前的版本比先前的版本容錯性會差
一些。
3) 哪裡有基於NT的BIND?
最新的基於NT的BIND可以從ftp://ftp.isc.org/isc/bind/src/8.2.2-P5/bind-src.tar.gz上的8.2.2p5源碼中找
到。你應該能夠使用WinZip來解壓/解包8.2.2p5文件。一旦解壓了源碼,你會在src/port/winnt目錄下找到NT的移植程
序。你需要Visual C++ 6.0來編譯它。
4) 哪裡可以找到有關BIND的信息?
先從http://www.isc.org/products/BIND/開始。
對於BIND用戶,有一個可用的郵件列表。使用http://www.isc.org/services/public/lists/bind-lists.Html上的表
單訂閱。在你提交你的問題到郵件列表之前,請檢查郵件列表的檔案以查看是否你的問題已經回答過了。可搜索的
bind-users郵件列表檔案位於http://www.isc.org/ml-archives/bind-users/。
Bind-users郵件列表同時指向了中等的Usenet新聞組comp.protocols.dns.bin.你可以在http://www.deja.com/上搜
索該新聞組。
BIND的"聖經"是DNS and BIND,Third Edition,作者:Paul Albitz和Cricket Liu。
5) 為什麼我應該升級BIND到最新的版本?
最新的BIND版本解決了在以前版本中發現的bug和/或安全漏洞。
6) 我現在使用的是BIND的什麼版本?
有幾種方法可用來確定你正在使用什麼版本的BIND。請注意有一些是針對於特定操作系統的,而其它一些不能在早於
4.9.5的BIND版本上工作。我們會在下面的描述中指明這些限制。
● 最簡單的告知版本號的方法是查找named啟動時寫到系統日志文件中的消息。例如:
Jul 14 12:54:21 ns named[15677]: starting. named 8.2.2-P5
Jul 14 12:54:21
[email protected]:/usr/sbin/named
● named帶"-v"開關會顯示版本:
# named -v
named 8.2.2-P5 Thu Jul 20 17:19:57 PDT 2000
[email protected]:/usr/sbin/named
● 當使用更新版本的BIND時,BIND的name後台守護程序的控制接口程序可以提供版本信息:
ndc status
● 源代碼控制系統(SCss)的"what"命令提供了文件的標示信息。
what /named
以下命令當在運行BIND 4.9.5及以上版本的服務器上檢查時會起作用。這兩個程序都包括在BIND的發布版本中。
●nslookup
# nslookup
Default Server: ns.yourco.bogus
Address: 333.333.333.333
> set class=chaos
> set type=txt
> version.bind
Server: ns.yourco.bogus
Address: 333.333.333.333
VERSION.BIND text = "8.2.2-P5"
〉
●dig
dig version.bind txt chaos @ server name
或者
dig @ server name txt chaos version.bind
7) 我得到一個錯誤提示:No default TTL set using SOA minimum instead.為什麼會這樣?怎麼辦?
從BIND 8.2開始,你需要一條$TTL指示來設置域的默認TTL。可在域的SOA記錄之前添加一條'$TTL XXXXXX'指示。
(XXXXXX表示計算到秒的默認TTL.)
8) 主機名可使用哪些有效字符?
主機名可以包括字母,數字以及連字符,但不能以連字符開頭。下劃線(_)在主機名中不是有效的字符。盡管有一些DNS
服務軟件包可以允許下劃線在主機名中出現,但大多數是不行的。使用一個帶有下劃線的域或者主機名會導致大多數
Internet上的名字服務器不能識別相關的主機/IP地址。
9) 為什麼當我在本域中的一台主機上使用nslookup時會得到non-authoritative的答復?
這通常發生在域(zone)文件中有錯誤出現的時候。檢查系統日志文件'messages'以查證錯誤。
10) 我已經修改了自己的域,但是在Internet上的其它地方看不到這種改變,為什麼?
每當你修改了你的域文件,例如當你添加或者修改了主機記錄的時候,你也必須更新域的SOA記錄的文件版本,或者是
"serial number",因為名字服務器從你的服務器檢索信息時需要知道發生了修改。如果從上次查詢之後版本號沒有修
改,就不會執行更新。舉例如下:
; foo.com.
$TTL 14400
@ IN SOA
someplace.foo.com. admin.foo.com. (
1 ; this file's version -- change
43200 ; refresh twice a day
1800 ; retry refresh every 15 minutes
604800 ; eXPire after 1000 hours (over week)
259200 ) ; minimum TTL of 3 day
顯而易見,帶'file's version'的行是我們想要修改的。版本序號可以為任何數字;1,2,3,4或者2001,2002,
2003,等等。唯一的限制是版本號不能多於10位。在這個示例中,如果你對域文件作了修改,你需要將版本序號改為
'2'。
11) 為什麼沒有IP地址?
在/etc/resolv.conf中沒有名字服務器記錄。
12) 在我的日志文件中出現的"lame server"錯誤是什麼?
"lame server"指的是不能確信其是否具有域的授權的服務器。如果你有lame server,或者是授權給了lame server的
域,那麼"lame server"消息很有用。如果你寧願不看到"lame server"消息,你可以使用logging語句丟棄它們:
logging {
category lame-servers{ null; };
};
13) Microsoft windows 2000和BIND的關系怎樣?
BIND默認會檢查所有記錄以確保只在需要主機名的地方使用了主機名,這能夠防止意外的一致性問題。
Microsoft Windows 2000使用一個稱為"_msdcs"來存放動態目錄數據。盡管這種子域不會與合法的主機名產生不一致,
但是也使得在子域中存放非法的主機名成為可能。這種主機名的使用默認是被BIND拒絕的。
動態目錄希望在_msdcs中有"全局目錄(global catalog)"(例如,gc._msdcs.example.com),這默認是拒絕的。為了解
決此問題,我們推薦動態目錄設為獨立的域(例如,"_msdcs.example.com")並配置成不檢查非法的主機名。這應該是合理
的,因為Window 2000服務器創建這些數據,而且不應該會與其它希望訪問這些數據的Windows 2000機器產生不一致問
題。
例如,
zone "_msdcs.example.com" {
type master;
file "_msdcs.example.db";
check-names ignore;
allow-update { localnets; };
};
14) 什麼是TSIG key?
TSIG key提供了一種鑒別和驗證交換的DNS數據有效性的方法,它在解析器和服務器之間或者兩台服務器之間使用一個密
鑰。
15) 我怎樣使用TSIG key來動態更新我的DNS?
首先你需要使用以下命令生成一個TSIG密鑰(我們將使用tsig-key作為密鑰文件名):
dnskeygen -H 128 -h -n tsig-key。
這會生成一對密鑰文件:
'Ktsig-key.+157+00000.key',這是一個ASCII文件,它包括以下行:
tsig-key. IN KEY 513 3 157
awwLOtRfpGE+rRKF2+DEiw==
和
'Kvip-key.+157+00000.private' ,這包括:
Private-key-format: v1.2 Algorithm: 157 (HMAC)
Key: awwLOtRfpGE+rRKF2+DEiw==
你將需要獲取base64編碼的密鑰awwLOtRfpGE+rRKF2+DEiw== 並在配置你的服務器命名設置中使用它。例如:
key tsig-key. { algorithm hmac-md5; secret "awwLOtRfpGE+rRKF2+DEiw=="; };
zone "ddns.dregis.com" {
...
...
allow-update { key tsig-key. ; };
}
記得在這之後重啟named。
然後,你需要復制這兩個密鑰文件到客戶系統的某個位置(例如使用/var/named/tsig)。最後,你需要運行以下命令:
nsupdate -k /var/named/tsig:tsig-key。
16) 在named.conf中的'forwarder'選項有何作用?
forwarder行告訴服務器轉發所有查詢,因為它對另一個域名服務器沒有授權或緩沖的數據。
zone "ddns.dregis.com" {
...
...
allow-update { key tsig-key. ; };
}
記得在這之後重啟named。
然後,你需要復制這兩個密鑰文件到客戶系統的某個位置(例如使用/var/named/tsig)。最後,你需要運行以下命令:
nsupdate -k /var/named/tsig:tsig-key。
16) 在named.conf中的'forwarder'選項有何作用?
forwarder行告訴服務器轉發所有查詢,因為它對另一個域名服務器沒有授權或緩沖的數據。
forwarder行告訴服務器轉發所有查詢,因為它對另一個域名服務器沒有授權或緩沖的數據。