本文轉(zhuǎn)自:http://hi.baidu.com/ubuntu2me/blog/item/235b94c9f84ea3107e3e6f06.html http://blog.csdn.net/bird_wang/archive/2009/05/29/4224104.aspx 3. BIND9 的安裝與配置
3.1 bind簡介 BIND (Berkeley Internet Name Domain)是Domain Name System (DNS) 協(xié)議的一個實現(xiàn),,提供了DNS主要功能的開放實現(xiàn),,包括 * 域名服務器 (named) * DNS解析庫函數(shù) * DNS服務器運行調(diào)試所用的工具 是一款開放源碼的DNS服務器軟件,由美國加州大學Berkeley分校開發(fā)和維護的,, 按照ISC的調(diào)查報告,BIND是世界上使用最多最廣泛的域名服務系統(tǒng),。不論你的郵件服務器,,WEB服務器或者其他的services如何的安全可靠,DNS的故障會給你帶來用戶根本無法訪問這些服務,。 BIND,,也是我們常說的named,由于多數(shù)網(wǎng)絡應用程序使用其功能,,所以在很多BIND的弱點及時被發(fā)現(xiàn),。主要分為三個版本: v4 1998年多數(shù)UNIX捆綁的是BIND4,已經(jīng)被多數(shù)廠商拋棄了,,除了OpenBSD還在使用,。OpenBSD核心人為BIND8過于復雜和不安全,所以繼續(xù)使用BIND4,。這樣一來BIND8/9的很多優(yōu)點都不包括在v4中,。 v8 就是如今使用最多最廣的版本,其詳細內(nèi)容可以參閱 BIND 8+ 域名服務器安全增強 v9 最新版本的BIND,,全部重新寫過,,免費(但是由商業(yè)公司資助),也添加了許多新的功能(但是安全上也可能有更多的問題),。BIND9在2000年十月份推出,,現(xiàn)在穩(wěn)定版本是9.3.2。 3.2 軟件的相關資源 官方網(wǎng)站: http://www./ 最新版本: 9.3.2 http://www./sw/bind/bind9.3.php#download 幫助文檔: http://www./sw/bind/ 配置文件樣例: http://www./bind.html FAQ: http://www./getOpenSourceResource.php?id=6 3.3 配置環(huán)境 環(huán)境:GNU/Linux Debian/testing Linux 2.6.8-2-386 版本:bind9 9.3.2-2 測試域名: 測試ip: 192.168.102.47 主域名服務器 192.168.102.48 純緩存域名服務器 192.168.102.49 輔助域名服務器 192.168.102.49 測試客戶機 3.4 配置文件說明 安裝bind9的命令: ~# aptitude update ~# aptitude install bind9 bind9-host dnsutils 配置文件族: # ls /etc/bind/ -l total 44 -rw-r--r-- 1 root root 237 Jan 16 2006 db.0 -rw-r--r-- 1 root root 271 Jan 16 2006 db.127 -rw-r--r-- 1 root root 237 Jan 16 2006 db.255 -rw-r--r-- 1 root root 353 Jan 16 2006 db.empty -rw-r--r-- 1 root root 256 Jan 16 2006 db.local -rw-r--r-- 1 root root 1507 Jan 16 2006 db.root -rw-r--r-- 1 root bind 1611 Jan 16 2006 named.conf -rw-r--r-- 1 root bind 165 Jan 16 2006 named.conf.local -rw-r--r-- 1 root bind 672 Jan 16 2006 named.conf.options -rw-r----- 1 bind bind 77 Aug 4 08:41 rndc.key -rw-r--r-- 1 root root 1317 Jan 16 2006 zones.rfc1918 配置文件說明: named.conf 設置一般的named參數(shù),,指向該服務器使用的域數(shù)據(jù)庫的信息源 named.conf.options 全局選項 db.root 根服務器指向文件,, 由Internet NIC創(chuàng)建和維護, 無需修改,, 但是需要定期更新 db.local localhost正向區(qū)文件,,用于將名字localhost轉(zhuǎn)換為本地回送IP地址 (127.0.0.1) db.127 localhost反向區(qū)文件,用于將本地回送IP地址(127.0.0.1)轉(zhuǎn)換為名字localhost 其中,,主配置文件/etc/named.conf的配置語句 命令 用法 acl 定義IP地址的訪問控制清單 control 定義ndc使用的控制通道 include 把其他文件包含到配置文件中 key 定義授權的安全密鑰 logging 定義日志寫什么,,寫到哪 opitons 定義全局配置選項和缺省值 server 定義遠程服務器的特征 trunsted-keys 為服務器定義DNSSEC加密密鑰 zone 定義一個區(qū) 默認情況下, 內(nèi)容如下: include "/etc/bind/named.conf.options"; zone "." { type hint; file "/etc/bind/db.root"; }; zone "localhost" { type master; file "/etc/bind/db.local"; }; zone "127.in-addr.arpa" { type master; file "/etc/bind/db.127"; }; zone "0.in-addr.arpa" { type master; file "/etc/bind/db.0"; }; zone "255.in-addr.arpa" { type master; file "/etc/bind/db.255"; }; include "/etc/bind/named.conf.local"; 其中type項的值: master:表示定義的是主域名服務器 slave :表示定義的是輔助域名服務器 hint:表示是互聯(lián)網(wǎng)中根域名服務器 在Debian環(huán)境中,,options語句的配置內(nèi)容,, 被移至named.conf.options文件中: options { directory "/var/cache/bind"; // If there is a firewall between you and nameservers you want // to talk to, you might need to uncomment the query-source // directive below. Previous versions of BIND always asked // questions using port 53, but BIND 8.1 and later use an unprivileged // port by default. // query-source address * port 53; // If your ISP provided one or more IP addresses for stable // nameservers, you probably want to use them as forwarders. // Uncomment the following block, and insert the addresses replacing // the all-0's placeholder. //可以將下面的注釋去掉添加原來的dns (可加多個) // forwarders { // 0.0.0.0; // }; auth-nxdomain no; # conform to RFC1035 }; 3.5 創(chuàng)建主域名服務器 a. 首先, 在在192.168.102.47機器上安全bind9 b. 使用編輯器,,比如vi, 編輯配置文件/etc/bind/named.conf 注:在ubuntu中還有一個 /etc/bind/named.conf.local (效果相同) 加入如下內(nèi)容 zone "" { type master; //定義此區(qū)為主服務器 file "/etc/bind/db.mydebian"; //指定區(qū)資源文件的位置 }; zone "102.168.192.in-addr.arpa" { type master; //定義此區(qū)為主服務器 file "/etc/bind/db.192"; //指定區(qū)資源文件的位置 }; c. 創(chuàng)建區(qū)資源文件: 創(chuàng)建區(qū)資源文件/etc/bind/db.mydebian內(nèi)容如下 ; ; BIND data file for local loopback interface ; $TTL 604800 $ORIGIN . @ IN SOA . root.. ( 2006080401 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; @ IN NS ns @ IN MX 0 mail.. @ IN A 192.168.102.47 ns IN A 192.168.102.47 www IN A 192.168.102.47 webserver IN CNAME www mail IN A 192.168.102.47 ftp IN A 192.168.102.48 ns2 IN A 192.168.102.48 ns3 IN A 192.168.102.49 第一行是TTL設定,,生存時間記錄字段,。它以秒為單位定義該資源記錄中的信息存放在高速緩存中的時間長度。這里定義為604800秒,,也就是1周. 第二行是$ORIGIN設定,說明下面的記錄出自何處.請您加倍留意最后的一個小小數(shù)點"." 然后,第三行,是一個 SOA 記錄的設定,在這里我們看到一個特殊字符 @ ,它就是 ORIGIN 的意思,也就是剛剛所定義的$ ORIGIN . 的內(nèi)容,,您可以寫成 . 也可以用 @ 來代替。 假如這個文件前面沒有定義 $ ORIGIN 的話, 那這個 @ 的值就以 named.conf 里的 zone . 接 著 SOA 后面,,指定了這個區(qū)域的授權主機和管理者的信箱,,這里分別是"." 和"root.."。我們平時使用的信箱通常是“user@host”這樣的格式,,但因為@在 DNS 記錄中是個保留字符,,所以在 SOA 中就用“.”來代替了@。目前這個信箱是 "root@.",。 接下來的 SOA 設置,,是被括在“( )”之間的 5 組數(shù)字,主要作為和 slave 服務器同步 DNS 資料所使用的資料: Serial: 其格式通常會是“年月日+修改次序”(但也不一定如此,,您自己能夠記得就行),。當 slave 要進行資料同步的時候,會比較這個號碼,。如果發(fā)現(xiàn)在這里的號碼比它那邊的數(shù)值“大”,,就進行更新,否則忽略,。不過設 serial 有一個地方您要留意:不能超過 10 位數(shù)字,! Refresh:這里是是告訴 slave 要隔多久要進行資料同步(是否同步要看 Serial 的比較結果)。 Retry:如果 slave 在進行更新失敗后,,要隔多久再進行重試,。 Expire:這是記錄逾期時間:當 slave 一直未能成功與 master 取得聯(lián)系,那到這里就放棄 retry,,同時這里的資料也將標識為過期( expired ),。 Minimum:這是最小默認 TTL 值,如果您在前面沒有用“$TTL”來定義,,就會以此值為準,。 請 注意:SOA 記錄中這對 “ ( ) ”符號之第一個 “ (”括號一定要和 SOA 寫在同一行,而不能用 Enter 斷行到下一行去,而且其左邊最好有一個空格鍵或 tab 建,。而最后一個 “ )”括號也不能寫在注解符號 “ ,;”的右邊,。 置 DNS 的 RR 記錄檔,,其格式要求非常嚴格,,我們絲毫不能掉以輕心。比方說:如果句子不是以空格鍵,、Tab 鍵,、 或注解符號 ( ; )開頭,也不在 SOA 的 “ ( ) ”之內(nèi),, 則表示要定義一個“新記錄項 (Entry) ”,;如果句子是以空格鍵或 tab 鍵開始的話,其設置被視為上一個“記錄項”的內(nèi)容,。所以,,如果您要為“同一個記錄項”定義多個記錄設置,而不想重復打字,,您倒可以偷懶:在接著它的后面幾 行用空白或 Tab 來縮排就可以了,。 NS表明負責.這個域的Name Server是這臺主機 MX記錄標明發(fā)往域的郵件由mail.這臺服務器接收 A記錄標明了IP地址和域名之間的對應關系 接下來創(chuàng)建該區(qū)的反向映射資源文件 /etc/bind/db.192內(nèi)容如下: ; ; BIND reverse data file for local loopback interface ; $TTL 604800 @ IN SOA . root.. ( 2006080401 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; @ IN NS . 47 IN PTR mail.. 47 IN PTR http://www.. 47 IN PTR ns.. 48 IN PTR ftp.. 48 IN PTR ns2.. 49 IN PTR ns3.. 其中PTR記錄用來解析IP地址對應的域名,也就是反向域名解析,,如果客戶端用nslookup,,顯示can't find server name,就要檢查一下這里 d. 重啟DNS服務 sudo /etc/init.d/bind9 restart 注:DNS服務只對該服務啟動前本機的ip地址有效,, 具體狀況可通過 sudo netstat -atnpl 查詢(端口53) 此時查看系統(tǒng)日志,,可了解BIND的啟動情況,比如如下輸出,,則說明引導正常 tonybox:~# tail /var/log/syslog Aug 14 08:36:45 localhost named[2792]: zone 127.in-addr.arpa/IN: loaded serial 1 Aug 14 08:36:45 localhost named[2792]: zone 102.168.192.in-addr.arpa/IN: loaded serial 2006080801 Aug 14 08:36:45 localhost named[2792]: zone 255.in-addr.arpa/IN: loaded serial 1 Aug 14 08:36:45 localhost named[2792]: zone localhost/IN: loaded serial 1 Aug 14 08:36:45 localhost named[2792]: zone /IN: loaded serial 2006080801 Aug 14 08:36:45 localhost named[2792]: running Aug 14 08:36:45 localhost named[2792]: zone /IN: sending notifies (serial 2006080801) Aug 14 08:36:45 localhost named[2792]: zone 102.168.192.in-addr.arpa/IN: sending notifies (serial 2006080801) Aug 14 08:36:45 localhost named[2792]: client 192.168.102.47#1030: received notify for zone '' Aug 14 08:36:45 localhost named[2792]: client 192.168.102.47#1030: received notify for zone '102.168.192.in-addr.arpa' e. 在客戶機上的設置 # cat /etc/resolv.conf search nameserver 192.168.102.47 每次重啟計算機之后這個文件都會被自動改寫,,所以每次重啟后需要手動設置此文件
f. 測試: 使用nslookup 測試 tonybox2:~# nslookup > set type=any > Server: 192.168.102.47 Address: 192.168.102.47#53 origin = mail addr = root. serial = 2006080801 refresh = 604800 retry = 86400 expire = 2419200 minimum = 604800 nameserver = ns.. mail exchanger = 0 mail.. Name: Address: 192.168.102.47 使用dig測試 tonybox2:~# dig @192.168.102.47 ; <<>> DiG 9.3.2 <<>> @192.168.102.47 ; (1 server found) ;; global options: printcmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 41793 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1 ;; QUESTION SECTION: ;. IN A ;; ANSWER SECTION: . 604800 IN A 192.168.102.47 ;; AUTHORITY SECTION: . 604800 IN NS ns.. ;; ADDITIONAL SECTION: ns.. 604800 IN A 192.168.102.47 ;; Query time: 31 msec ;; SERVER: 192.168.102.47#53(192.168.102.47) ;; WHEN: Mon Aug 14 09:16:27 2006 ;; MSG SIZE rcvd: 79 tonybox2:~# dig @192.168.102.47 ftp. ; <<>> DiG 9.3.2 <<>> @192.168.102.47 ftp. ; (1 server found) ;; global options: printcmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 63890 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1 ;; QUESTION SECTION: ;ftp.. IN A ;; ANSWER SECTION: ftp.. 604800 IN A 192.168.102.48 ;; AUTHORITY SECTION: . 604800 IN NS ns.. ;; ADDITIONAL SECTION: ns.. 604800 IN A 192.168.102.47 ;; Query time: 22 msec ;; SERVER: 192.168.102.47#53(192.168.102.47) ;; WHEN: Mon Aug 14 09:16:41 2006 ;; MSG SIZE rcvd: 83 反向查詢 tonybox2:~# dig @192.168.102.47 -x 192.168.102.47 ; <<>> DiG 9.3.2 <<>> @192.168.102.47 -x 192.168.102.47 ; (1 server found) ;; global options: printcmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 21885 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 1, ADDITIONAL: 1 ;; QUESTION SECTION: ;47.102.168.192.in-addr.arpa. IN PTR ;; ANSWER SECTION: 47.102.168.192.in-addr.arpa. 604800 IN PTR http://www.. 47.102.168.192.in-addr.arpa. 604800 IN PTR mail.. 47.102.168.192.in-addr.arpa. 604800 IN PTR . ;; AUTHORITY SECTION: 102.168.192.in-addr.arpa. 604800 IN NS . ;; ADDITIONAL SECTION: . 604800 IN A 192.168.102.47 ;; Query time: 33 msec ;; SERVER: 192.168.102.47#53(192.168.102.47) ;; WHEN: Mon Aug 14 09:17:00 2006 ;; MSG SIZE rcvd: 138 3.6 純緩存域名服務器 192.168.102.48 為我們的dns 緩存服務器,首先, 在在192.168.102.48 機器上安全bind9, 在配置前我們用dig 進行測試 tonybox2:/etc/bind# dig @192.168.102.48 http://www. ; <<>> DiG 9.3.2 <<>> @192.168.102.48 http://www. ; (1 server found) ;; global options: printcmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 34137 ;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;www.. IN A ;; Query time: 1844 msec ;; SERVER: 192.168.102.48#53(192.168.102.48) ;; WHEN: Tue Aug 8 12:05:17 2006 ;; MSG SIZE rcvd: 34 修改named.conf.options文件 tonybox2:/etc/bind# cat named.conf.options options { directory "/var/cache/bind"; // If there is a firewall between you and nameservers you want // to talk to, you might need to uncomment the query-source // directive below. Previous versions of BIND always asked // questions using port 53, but BIND 8.1 and later use an unprivileged // port by default. // query-source address * port 53; // If your ISP provided one or more IP addresses for stable // nameservers, you probably want to use them as forwarders. // Uncomment the following block, and insert the addresses replacing // the all-0's placeholder. forwarders { 192.168.102.47; //主域名服務器的IP地址 }; auth-nxdomain no; # conform to RFC1035 }; 然后再進行測試 tonybox2:/etc/bind# dig @192.168.102.48 http://www. ; <<>> DiG 9.3.2 <<>> @192.168.102.48 http://www. ; (1 server found) ;; global options: printcmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 54332 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1 ;; QUESTION SECTION: ;www.. IN A ;; ANSWER SECTION: http://www.. 604800 IN A 192.168.102.47 ;; AUTHORITY SECTION: . 604800 IN NS . ;; ADDITIONAL SECTION: . 604800 IN A 192.168.102.47 ;; Query time: 44 msec ;; SERVER: 192.168.102.48#53(192.168.102.48) ;; WHEN: Tue Aug 8 12:05:47 2006 ;; MSG SIZE rcvd: 80 所謂的 forwarder,,就是當某一臺 NS 主機遇到非本機負責的 zone ( slave zone 也屬于本機負責的范圍) 查詢請求的時候,,將不直接向 "." zone 查詢而把請求轉(zhuǎn)交給指定的 forwarder (一臺或多臺) 主機代為查詢。 我們知道,,當DNS服務器接到客戶端主機的查詢請求時,,首先會檢查這個查詢是否屬于本機管轄,否則將轉(zhuǎn)向 "." zone 再逐級的查詢下去,,最后再把查詢結果告訴客戶端,。 在這個過程之中,DNS服務器還會將查詢到的結果存放到緩存中,。只要緩存中的 TTL 沒過期,,在下次遇到同樣查詢的時候,就可以直接將結果響應給客戶端,,而無需再重復上次的查詢流程,。 如 果DNS服務器上指定了forwarder,那這個DNS發(fā)現(xiàn)緩存中沒有記錄時,,將不向 "." 查詢,,而是向 forwarder 送出同樣的請求(轉(zhuǎn)發(fā)),,然后等待查詢結果,即把逐級往下查詢這個耗費精力的動作,,交給 forwarder 負責,。但無論這個結果是自己直接查詢得來的,還是 forwarder 送回來的,,DNS服務器都會保存一份數(shù)據(jù)在緩存中,。 這樣,以后的相同查詢就快多了,,這對于DNS所服務的 客戶端而言查詢效率會提高很多,。 /var/named/named.ca dig @a.root-servers.net . ns > /var/named/named.ca 3.7 輔助域名服務器 a. 192.168.102.49 為我們的dns 緩存服務器,首先, 在在192.168.102.49 機器上安全bind9, b. 在主配置文件/etc/named.conf中加入如下內(nèi)容: zone "" { type slave; file "/etc/bind/slaves/db.mydebian"; masters {192.168.102.47;}; }; zone "102.168.192.in-addr.arpa" { type slave; file "/etc/bind/slaves/db.192"; masters {192.168.102.47;}; }; type后面的值已經(jīng)成為slave; 表示定義的是輔助域名服務器 file 后面也可以是別的文件名不必與主域DNS服務器的設置一樣 masters 后為主域DNS服務器的IP地址,, 可以是多個IP,,型如 masters {ip1;ip2;ip3;}; c. 創(chuàng)建/etc/bind/slaves/目錄 tonybox2:/etc/bind# mkdir slaves tonybox2:/etc/bind# chown bind.bind slaves d. 重啟dns服務 tonybox2:/etc/bind/slaves# /etc/init.d/bind9 restart named進程第一次啟動時,輔助域名服務器就下載主域名服務器的信息,;輔助域名服務器根據(jù)主域名服務器的對應SOA記錄規(guī)定的刷新時間間隔,,去主域名服務器查詢相關信息。 tonybox2:/etc/bind/slaves# ls -l total 8 -rw-r--r-- 1 bind bind 410 2006-08-08 12:23 db.192 -rw-r--r-- 1 bind bind 430 2006-08-08 12:23 db.mydebian 查看 /etc/bind/slaves 目錄,,我門會發(fā)現(xiàn)已經(jīng)從主域名服務器獲取了相應的資源文件 如果用戶bind對于/etc/bind/slaves目錄沒有寫權限,, 則查看 /var/log/syslog 會出現(xiàn)如下類似錯誤: tonybox:~# tail /var/log/syslog Aug 8 12:30:09 tonybox2 named[3849]: zone /IN: Transfer started. Aug 8 12:30:09 tonybox2 named[3849]: transfer of '/IN' from 192.168.102.47#53: connected using 192.168.102.15#1075 Aug 8 12:30:09 tonybox2 named[3849]: dumping master file: /etc/bind/tmp-VHTxU6CT5n: open: permission denied Aug 8 12:30:09 tonybox2 named[3849]: transfer of '/IN' from 192.168.102.47#53: failed while receiving responses: permission denied Aug 8 12:30:09 tonybox2 named[3849]: transfer of '/IN' from 192.168.102.47#53: end of transfer Aug 8 12:30:10 tonybox2 named[3849]: zone 102.168.192.in-addr.arpa/IN: Transfer started. Aug 8 12:30:10 tonybox2 named[3849]: transfer of '102.168.192.in-addr.arpa/IN' from 192.168.102.47#53: connected using 192.168.102.15#1076 Aug 8 12:30:10 tonybox2 named[3849]: dumping master file: /etc/bind/tmp-dxbiD1JtTK: open: permission denied Aug 8 12:30:10 tonybox2 named[3849]: transfer of '102.168.192.in-addr.arpa/IN' from 192.168.102.47#53: failed while receiving responses: permission denied Aug 8 12:30:10 tonybox2 named[3849]: transfer of '102.168.192.in-addr.arpa/IN' from 192.168.102.47#53: end of transfer |
|