Linux環(huán)境下的DNS管理全攻略
原創(chuàng)【51CTO.com獨(dú)家特稿】2009年5月19日21:50開始,江蘇、安徽、廣西、海南、甘肅、浙江等六省用戶申告訪問網(wǎng)站速度變慢或無法訪問。5月20日,工業(yè)和信息化部通信保障局召集國家計(jì)算機(jī)應(yīng)急處理協(xié)調(diào)中心、電信研究院、中國電信集團(tuán)、暴風(fēng)影音等參加緊會(huì)議,經(jīng)查明,事故原因是系DNS域名解析故障,網(wǎng)絡(luò)故障造成多家網(wǎng)站受到影響,暴風(fēng)也是受害者之一。
例子中提到的DNS系統(tǒng)用于命名組織到域?qū)哟谓Y(jié)構(gòu)中的計(jì)算機(jī)和網(wǎng)絡(luò)服務(wù)。它主要應(yīng)用于Internet等TCP/IP網(wǎng)絡(luò)中,通過用戶友好的名稱查找計(jì)算機(jī)和服務(wù)。當(dāng)用戶在應(yīng)用程序中輸入DNS名稱時(shí),DNS服務(wù)可以將此名稱解析為與之相關(guān)的其他信息。從上述實(shí)例我們不難深刻地體會(huì)到,DNS服務(wù)器是非常關(guān)鍵的互聯(lián)網(wǎng)基礎(chǔ)設(shè)施,高效管理及使用DNS服務(wù)器是網(wǎng)絡(luò)管理員的一個(gè)非常重要的問題。本專題將詳細(xì)介紹如何通過相關(guān)配置和技術(shù)來高效管理Linux下的DNS服務(wù)。
一、DNS服務(wù)簡介
1.基本原理
DNS(Domain Name System,域名系統(tǒng))用于命名組織到域?qū)哟谓Y(jié)構(gòu)中的計(jì)算機(jī)和網(wǎng)絡(luò)服務(wù)。DNS命名用于Internet等TCP/IP網(wǎng)絡(luò)中,通過用戶友好的名稱查找計(jì)算機(jī)和服務(wù)。當(dāng)用戶在應(yīng)用程序中輸入DNS名稱時(shí),DNS服務(wù)可以將此名稱解析為與之相關(guān)的其他信息,如IP地址。因?yàn)?,用戶在上網(wǎng)時(shí)輸入的網(wǎng)址,是通過域名解析系解析找到相對(duì)應(yīng)的IP地址,這樣才能上網(wǎng)。其實(shí),域名的最終指向是IP。
值得一提的是,在引入DNS之前,網(wǎng)絡(luò)中的主機(jī)是將容易記憶的域名映射到IP地址并將它保存在一個(gè)共享的靜態(tài)文件hosts(該文件路徑為/etc/hosts)中,再由hosts文件來實(shí)現(xiàn)網(wǎng)絡(luò)中域名的管理。最初Internet非常小,僅使用這個(gè)集中管理的文件就可以通過FTP為連入Internet的站點(diǎn)和主機(jī)提供域名的發(fā)布和下載。每個(gè)Internet站點(diǎn)將定期地更新其主機(jī)文件的副本,并且發(fā)布主機(jī)文件的更新版本來反映網(wǎng)絡(luò)的變化。但是,當(dāng)Internet上的計(jì)算機(jī)迅速增加時(shí),通過一個(gè)中心授權(quán)機(jī)構(gòu)為所有Internet主機(jī)管理一個(gè)主機(jī)文件的工作將無法進(jìn)行。文件會(huì)隨著時(shí)間的推移而增大,這樣按當(dāng)前和更新的形式維持文件以及將文件分配至所有站點(diǎn)將變得非常困難。
域名系統(tǒng)為一個(gè)分布式數(shù)據(jù)庫,它使本地負(fù)責(zé)控制整個(gè)分布式數(shù)據(jù)庫的部分段,每一段中的數(shù)據(jù)通過客戶,服務(wù)器模式在整個(gè)網(wǎng)絡(luò)上均可存取,通過采用復(fù)制技術(shù)和緩存技術(shù)使得整個(gè)數(shù)據(jù)庫可靠的同時(shí),又擁有良好的性能。域名服務(wù)器包含數(shù)據(jù)庫的部分段的信息,并可提供被稱之為解析器的客戶來訪問。DNS的數(shù)據(jù)庫結(jié)構(gòu)形成一個(gè)倒立的樹狀結(jié)構(gòu),根的名字用空字符串""來表示,但在文本中用“.”來書寫。樹的每一個(gè)節(jié)點(diǎn)都表示整個(gè)分布式數(shù)據(jù)庫中的一個(gè)分區(qū)(域),每個(gè)域可再進(jìn)一步劃分成子分區(qū)(域),每個(gè)域都有一個(gè)標(biāo)簽(label),標(biāo)明了它與父域的關(guān)系。域也有一個(gè)域名(domain name),給出它在整個(gè)分布式數(shù)據(jù)庫中的位置。在DNS中,域名全稱是一個(gè)從該域到根的標(biāo)簽序列,以“.”分隔這些標(biāo)簽。該標(biāo)簽最多可包含63個(gè)字符。樹中每一節(jié)點(diǎn)的完整域名為從該節(jié)點(diǎn)到根之間路徑上的標(biāo)簽序列。如果根域在節(jié)點(diǎn)的域名中出現(xiàn),該名字看起來就象以點(diǎn)結(jié)尾(實(shí)際上是以點(diǎn)和空標(biāo)簽作結(jié)尾)。這些以點(diǎn)結(jié)尾的域名被稱之為絕對(duì)域名(Absolute Domain Name)。不以點(diǎn)結(jié)尾的域名被稱之為相對(duì)域名。域(Domains)即為樹狀域名空間中的一棵子樹,域的域名同該子樹根節(jié)點(diǎn)的域名一樣。也就是說,域的名字就是該域中最高層節(jié)點(diǎn)的名字。圖1給出了DNS分層結(jié)構(gòu)的圖示:
圖1 DNS域名空間的分層結(jié)構(gòu)
DNS基于C/S(Client/Server,客戶機(jī)/服務(wù)器)模式,因而分為Client和Server兩種角色。Client扮演詢問的角色,也就是向Server詢問一個(gè)Domain Name,而Server必須要回答此Domain Name所對(duì)應(yīng)的真正IP地址。而當(dāng)?shù)氐腄NS先會(huì)查自己的資料庫。如果自己的資料庫沒有,則會(huì)往該DNS上所設(shè)的的其他DNS進(jìn)行求助詢問,依此得到答案之后,將收到的答案存起來,并回答客戶。
DNS服務(wù)器會(huì)根據(jù)不同的授權(quán)區(qū)(Zone),記錄所屬該網(wǎng)域下的各名稱資料,這個(gè)資料包括網(wǎng)域下的次網(wǎng)域名稱及主機(jī)名稱。在每一個(gè)名稱服務(wù)器中都有一個(gè)高速緩存區(qū)(Cache),這個(gè)高速緩存區(qū)的主要目的是將該名稱服務(wù)器所查詢出來的名稱及相對(duì)的IP地址記錄在高速緩存區(qū)中,這樣當(dāng)下一次還有另外一個(gè)客戶端到次服務(wù)器上去查詢相同的名稱時(shí),服務(wù)器就不用在到別臺(tái)主機(jī)上去尋找,而直接可以從緩存區(qū)中找到該名稱記錄資料,傳回給客戶端,以加速客戶端對(duì)名稱查詢的速度。
舉個(gè)例子,當(dāng)DNS客戶端向指定的DNS服務(wù)器查詢網(wǎng)Internet上的某一臺(tái)主機(jī)名稱時(shí),DNS服務(wù)器會(huì)在該資料庫中找尋用戶所指定的名稱。如果沒有,該服務(wù)器會(huì)先在自己的高速緩存區(qū)中查詢有無該條紀(jì)錄,如果找到該條名稱記錄后,會(huì)從DNS服務(wù)器直接將所對(duì)應(yīng)到的IP地址傳回給客戶端;如果DNS務(wù)器在資料記錄查不到且高速緩存區(qū)中也沒有時(shí),服務(wù)器才會(huì)向別的DNS服務(wù)器查詢所要的名稱。例如,本地的DNS服務(wù)器會(huì)向最接近(比如屬于同一個(gè)IP地址段或者同一個(gè)ISP)的DNS服務(wù)器去要求幫忙找尋該名稱的IP地址.在另一臺(tái)服務(wù)器上也有相同的動(dòng)作的查詢,當(dāng)查詢到后會(huì)回復(fù)原本要求查詢的服務(wù)器,該DNS服務(wù)器在接收到另一臺(tái)DNS服務(wù)器查詢的結(jié)果后,先將所查詢到的主機(jī)名稱及對(duì)應(yīng)IP地址記錄到高速緩存區(qū)中,最后在將所查詢到的結(jié)果回復(fù)給客戶端。這樣就成功地完成了一次標(biāo)準(zhǔn)的DNS查詢-應(yīng)答過程。
2.DNS系統(tǒng)的組成
DNS系統(tǒng)基于客戶機(jī)/服務(wù)器模式,從概念上說他主要由三個(gè)部分組成:
(1)域名空間:域名空間中的記錄標(biāo)識(shí)一組主機(jī)并提供他們的有關(guān)信息。域中的每一個(gè)節(jié)點(diǎn)都有它的有關(guān)信息的數(shù)據(jù)庫。查詢命令試圖從這個(gè)數(shù)據(jù)庫中提取適當(dāng)?shù)男畔ⅰ:唵蔚卣f,域名空間是所有不同類型信息的列表,這些信息是域名、IP地址、郵件別名和那些在DNS系統(tǒng)中能查到的內(nèi)容。
(2)域名服務(wù)器:保持并維護(hù)域名空間中的數(shù)據(jù)的程序。每個(gè)域名服務(wù)器含有一個(gè)域名空間子集的完整信息,并保存其它有關(guān)部分的信息。一個(gè)域名服務(wù)器擁有它控制范圍的完整信息??刂频男畔磪^(qū)進(jìn)行劃分,區(qū)可以分布在不同的域名服務(wù)器上,以便為每個(gè)區(qū)提供服務(wù)。每個(gè)域名服務(wù)器都知道所有負(fù)責(zé)其他區(qū)的域名服務(wù)器。如果來了一個(gè)請(qǐng)求,它請(qǐng)求給定域名服務(wù)器負(fù)責(zé)的那個(gè)區(qū)的信息,那么這個(gè)域名服務(wù)器只是簡單地返回信息。但是,如果請(qǐng)求是不同區(qū)的信息,那么這個(gè)域名服務(wù)器就要與控制該區(qū)的相應(yīng)服務(wù)器聯(lián)系。
(3)解析器:解析器是簡單的程序或子程序庫,它從服務(wù)器中提取信息以響應(yīng)對(duì)域名空間內(nèi)主機(jī)的查詢。
DNS是一個(gè)很復(fù)雜的概念,下表列出了常用的DNS術(shù)語。?
◆域:代表網(wǎng)絡(luò)一部分的邏輯實(shí)體或組織。?
◆域名:主機(jī)名的一部分,它代表包含這個(gè)主機(jī)的域。它可以和域交換使用。?
◆主機(jī):網(wǎng)絡(luò)上的一臺(tái)計(jì)算機(jī)。?
◆節(jié)點(diǎn):網(wǎng)絡(luò)上的一臺(tái)計(jì)算機(jī)。?
◆域名服務(wù)器:提供DNS服務(wù)的計(jì)算機(jī),它將DNS名字轉(zhuǎn)化為IP地址。?
◆解析:把一個(gè)域名轉(zhuǎn)化為與其相應(yīng)的IP地址的過程。?
◆解析器:從域名服務(wù)器中提取DNS信息的程序或庫子程序。?
◆反向解析:將給出的IP地址轉(zhuǎn)化為其相應(yīng)的DNS名字。?
◆欺騙:使網(wǎng)絡(luò)看上去好象具有不同的IP地址或域名的行為。
3.DNS服務(wù)器的類型
DNS域名服務(wù)器是用來存儲(chǔ)主機(jī)-域名映射信息的,這些服務(wù)器具體又可以分為3類:
(1)主DNS服務(wù)器(primary name server):它是特定域所有信息的權(quán)威性信息源。它從域管理員構(gòu)造的本地磁盤文件中加載域信息,該文件(區(qū)文件)包含著該服務(wù)器具有管理權(quán)的一部分域結(jié)構(gòu)的最精確信息。主服務(wù)器是一種權(quán)威性服務(wù)器,因?yàn)樗越^對(duì)的權(quán)威去回答對(duì)其管轄域的任何查詢。
(2)輔助DNS服務(wù)器(secondary name server):它可從主服務(wù)器中復(fù)制一整套域信息。區(qū)文件是從主服務(wù)器中復(fù)制出來的,并作為本地磁盤文件存儲(chǔ)在輔助服務(wù)器中。這種復(fù)制稱為“區(qū)文件復(fù)制”。在輔助域名服務(wù)器中有一個(gè)所有域信息的完整拷貝,可以有權(quán)威地回答對(duì)該域的查詢。因此,輔助域名服務(wù)器也稱作權(quán)威性服務(wù)器。配置輔助域名服務(wù)器不需要生成本地區(qū)文件,因?yàn)榭梢詮闹鞣?wù)器中下載該區(qū)文件。
(3)高速緩存服務(wù)器(caching-only server):可運(yùn)行域名服務(wù)器軟件,但是沒有域名數(shù)據(jù)庫軟件。它從某個(gè)遠(yuǎn)程服務(wù)器取得每次域名服務(wù)器查詢的結(jié)果,一旦取得一個(gè),就將它放在高速緩存中,以后查詢相同的信息時(shí)就用它予以回答。高速緩存服務(wù)器不是權(quán)威性服務(wù)器,因?yàn)樗峁┑乃行畔⒍际情g接信息。對(duì)于高速緩存服務(wù)器只需要配置一個(gè)高速緩存文件,但最常見的配置還包括一個(gè)回送文件,這或許是最常見的域名服務(wù)器配置。 #p#
二、DNS服務(wù)管理中存在的問題和面臨的威脅
1.DNS設(shè)計(jì)中存在的問題
在系統(tǒng)設(shè)計(jì)方面,DNS的設(shè)計(jì)受到當(dāng)時(shí)條件限制,因而存在許多設(shè)計(jì)缺陷問題。
(1)單點(diǎn)故障。DNS采用層次化的樹形結(jié)構(gòu),由樹葉走向樹根就可以形成—個(gè)全域名(Fully Qualified Domain Name,F(xiàn)QDN),DNS服務(wù)器作為該FQDN唯一對(duì)外的域名數(shù)據(jù)庫和對(duì)內(nèi)部提供遞歸域名查詢的系統(tǒng),因而其安全和穩(wěn)定就存在單點(diǎn)故障風(fēng)險(xiǎn)。
(2)無認(rèn)證機(jī)制。DNS沒有提供認(rèn)證機(jī)制,查詢者在收到應(yīng)答時(shí)無法確認(rèn)應(yīng)答信息的真假,就容易導(dǎo)致DNS欺騙。假設(shè)當(dāng)提交給某個(gè)域名服務(wù)器的域名解析請(qǐng)求的數(shù)據(jù)包被黑客截獲,然后黑客將一個(gè)虛假的IP地址作為應(yīng)答信息返回給請(qǐng)求者,那么原始請(qǐng)求者就會(huì)把這個(gè)虛假的IP地址作為它所要請(qǐng)求的域名而進(jìn)行連接,顯然它被欺騙到了別處而連接不上原本想要連接的那個(gè)域名,這樣就導(dǎo)致了DNS欺騙。如圖2所示。
圖2 DNS欺騙原理示意
(4)訪問量和維護(hù)量巨大以及遠(yuǎn)距離集中式數(shù)據(jù)庫。單個(gè)名字服務(wù)器不得不處理所有DNS查詢消息,并保存所有因特網(wǎng)主機(jī)的記錄,數(shù)據(jù)庫會(huì)相當(dāng)巨大,需要為每臺(tái)新增的主機(jī)頻繁更新,而且單臺(tái)名字服務(wù)器主機(jī)不可能在所有請(qǐng)求查詢的客戶主機(jī)附近,就可能導(dǎo)致相當(dāng)大的延遲。
(5)BIND(Berkeley Intemet Name Domain)的漏洞:BIND是域名軟件,它在提供高效服務(wù)的同時(shí)也存在許多的安全性漏洞?,F(xiàn)已證明在BIND版本4和8上存在缺陷,攻擊者利用這些缺陷能成功地進(jìn)行DNs欺騙攻擊,這些漏洞可以被利用取得系統(tǒng)最高權(quán)限。構(gòu)成嚴(yán)重威脅的漏洞主要有兩種:一種是緩沖區(qū)溢出漏洞,嚴(yán)重的可以使攻擊者在DNS服務(wù)器上執(zhí)行任意指令,如BIND SIG Cached RR Ovemow DoS(CAN.2002-1219)在BIND 4和BIND 8中存在一個(gè)遠(yuǎn)程緩沖溢出缺陷,該缺陷使得攻擊者可以在DNS服務(wù)器上運(yùn)行任意指令。另一種是DoS漏洞,受攻擊后DNS服務(wù)器不能提供正常服務(wù),而且其所轄的子網(wǎng)無法正常工作。
2.DNS面臨的網(wǎng)絡(luò)威脅
(1)內(nèi)部攻擊:攻擊者在非法或合法地控制一臺(tái)DNS服務(wù)器后,可以直接操作域名數(shù)據(jù)庫,修改指定域名所對(duì)應(yīng)的IP為自己所控制的主機(jī)IP,當(dāng)客戶發(fā)出對(duì)指定域名的查詢請(qǐng)求后,將得到偽造的IP地址。
(2)序列號(hào)攻擊:DNS協(xié)議格式中定義了用來匹配請(qǐng)求數(shù)據(jù)包和響應(yīng)數(shù)據(jù)報(bào)序列ID,欺騙者利用序列號(hào)偽裝成DNS服務(wù)器向客戶端發(fā)送DNS響應(yīng)數(shù)據(jù)包,在DNS服務(wù)器發(fā)送的真實(shí)DNS響應(yīng)數(shù)據(jù)報(bào)之前到達(dá)客戶端,從而將客戶端帶到攻擊者所希望的網(wǎng)站,進(jìn)行DNS欺騙。
(3)信息插入攻擊:攻擊者可以在DNS應(yīng)答報(bào)文中隨意添加某些信息,指示權(quán)威域名服務(wù)器的域名及IP,那么在被影響的域名服務(wù)器上查詢?cè)撚虻恼?qǐng)求都會(huì)被轉(zhuǎn)向攻擊者所指定的域名服務(wù)器上去,從而威脅到網(wǎng)絡(luò)數(shù)據(jù)的完整性。
(4)緩存(cache)中毒:DNS使用超高速緩存,即當(dāng)一個(gè)名字服務(wù)器收到有關(guān)域名和IP的映射信息時(shí),它會(huì)將該信息存放在高速緩存中。當(dāng)再次遇到相同的映射請(qǐng)求,能直接使用緩存中的結(jié)果,這種映射表是動(dòng)態(tài)更新的,刷新也是有時(shí)限的,這樣假冒者如果在下次更新之前成功地修改了DNS服務(wù)器上的映射緩存,就可以進(jìn)行DNS欺騙或者DoS(Denial of Service)拒絕服務(wù)攻擊了。
(5)信息泄漏:BIND的缺省設(shè)置允許任何人進(jìn)行區(qū)傳送,區(qū)傳送可能會(huì)造成信息泄漏,區(qū)傳送一般用于主服務(wù)器和輔服務(wù)器之間的數(shù)據(jù)同步,輔服務(wù)器可以從主服務(wù)器獲取最新區(qū)數(shù)據(jù)文件的副本,也就可以獲得整個(gè)授權(quán)區(qū)域內(nèi)的所有主機(jī)信息。一旦這些信息泄漏,攻擊者就可以根據(jù)它輕松地推測主服務(wù)器的網(wǎng)絡(luò)結(jié)構(gòu),并從這些信息中判斷其功能或發(fā)現(xiàn)那些防范措施較弱的機(jī)器。
(6)不安全的動(dòng)態(tài)更新:隨著動(dòng)態(tài)主機(jī)配置協(xié)議(DHCP)的出現(xiàn),客戶計(jì)算機(jī)由DHCP服務(wù)器動(dòng)態(tài)分配IP地址,使原來手工更新其A記錄和PTR記錄變得很難管理。因此在RFC2136中提出了DNS動(dòng)態(tài)更新,使得DNS客戶端在IP地址或名稱出現(xiàn)更改的任何時(shí)候都可利用DNS服務(wù)器來注冊(cè)和動(dòng)態(tài)更新其資源記錄。盡管DNS動(dòng)態(tài)更新協(xié)議規(guī)定只有經(jīng)過授權(quán)的主機(jī)才能動(dòng)態(tài)更新服務(wù)器的zone file,但是攻擊者還是可以利用IP欺騙偽裝成DNS服務(wù)器信任的主機(jī)對(duì)區(qū)數(shù)據(jù)進(jìn)行添加、刪除和替換。 #p#
三、安裝DNS的最新版本
Linux下架設(shè)DNS服務(wù)器通常是使用BIND程序來實(shí)現(xiàn)的。BIND是Berkeley Internet Name Domain Service的簡寫,它是一款實(shí)現(xiàn)DNS服務(wù)器的開放源碼軟件。BIND原本是美國DARPA資助伯克里大學(xué)(Berkeley)開設(shè)的一個(gè)研究生課題,后來經(jīng)過多年的變化發(fā)展,已經(jīng)成為世界上使用最為廣泛的DNS服務(wù)器軟件,目前Internet上絕大多數(shù)的DNS服務(wù)器都是用BIND來架設(shè)的。
BIND經(jīng)歷了第4版、第8版和最新的第9版,第9版修正了以前版本的許多錯(cuò)誤,并提升了執(zhí)行時(shí)的效能。BIND能夠運(yùn)行在當(dāng)前大多數(shù)的操作系統(tǒng)系統(tǒng)平臺(tái)之上。目前BIND軟件由因特網(wǎng)軟件聯(lián)合會(huì)(Internet Software Consortium,ISC)這個(gè)非贏利性機(jī)構(gòu)負(fù)責(zé)開發(fā)和維護(hù)。ISC的官方網(wǎng)站(http://www.isc.org/,如圖3所示)包含了最新的錯(cuò)誤修復(fù)和更新,目前BIND的最新版本為9.6。
圖3 BIND下載網(wǎng)站主頁
為了保證DNS的安全,強(qiáng)烈建議采用BIND的最新版本進(jìn)行安裝使用,因?yàn)樽钚碌陌姹臼窃谝郧鞍姹镜幕A(chǔ)上進(jìn)行修改和完善,能從根本上解決一些安全隱患。從上述網(wǎng)站上下載Linux下的最新版本為bind-9.6.1b1.tar.gz,該安裝程序?yàn)樵创a安裝方式。安裝步驟如下所示:
(1)解壓縮下載的源碼安裝包
#tar zxvf bind-9.6.1b1.tar.gz |
(2)切換到解壓目錄,使用configure命令生成Makefile文件
|
命令中的configure是編譯前對(duì)源代碼進(jìn)行針對(duì)具體操作系統(tǒng)的編譯參數(shù)配置,有很多選項(xiàng)可以選擇:?
◆--prefix:指定安裝目錄;?
◆--sysconfdir:設(shè)置named.conf配置文件放置的目錄;?
◆--localstatdir:設(shè)置run/named.pid放置的目錄;?
◆--with-libtool:將BIND的庫文件編譯為動(dòng)態(tài)共享庫文件,這個(gè)選項(xiàng)默認(rèn)是未選擇的;?
◆--enable-threads:如果用戶系統(tǒng)有多個(gè)CPU,那么可以使用這個(gè)選項(xiàng)
(3)編譯和安裝相關(guān)模塊。需要注意:下面的編譯和安裝,安裝時(shí)需要有root權(quán)限
|
#p#
四、正確配置DNS相關(guān)文件
(1)幾個(gè)重要的DNS服務(wù)器配置文件類型
在使用DNS服務(wù)器之前,需要對(duì)與之相關(guān)的配置文件進(jìn)行安全配置,因而首先需要了解這些基本文件,表1詳細(xì)給出了幾種主要的與DNS有關(guān)的文件以及詳細(xì)描述:
表1 DNS相關(guān)配置文件介紹
(2)named.conf主配置文件
在使用named.conf進(jìn)行配置時(shí),需要了解如下常用的配置語句,如表2所示。
表2 named.conf主配文件配置語句說明
根據(jù)在實(shí)際應(yīng)用中的廣泛程度和重要性,下面我們著重對(duì)option語句和zone聲明的使用進(jìn)行介紹。
1.使用option語句
option語句的使用語法為:
|
在上述語法中,其配置子句常用的主要有如下兩類:?
◆directory:該子句后接目錄路徑,主要用于定義服務(wù)器區(qū)配置文件的工作目錄,如/home等;?
◆forwarders:該子句后接IP地址,定義轉(zhuǎn)發(fā)器;
2.使用zone聲明
區(qū)聲明是主配置文件中非常常用而且是最重要的部分,它一般要說明域名、服務(wù)器類型以及域信息源三個(gè)重要部分。它的語法為:
|
那么,圍繞上述三個(gè)重要部分,區(qū)聲明語句有如下兩類子句:?
◆type:其主要有如下三種,master(說明一個(gè)區(qū)為主域名服務(wù)器)、slave(說明一個(gè)區(qū)為輔助域名服務(wù)器)和hint(說明一個(gè)區(qū)為啟動(dòng)時(shí)初始化高速緩存的域名服務(wù)器)。?
◆file:后接文件路徑,主要說明一個(gè)區(qū)的域信息源的路徑。
3.使用ACL(訪問控制列表)
訪問控制列表(ACL,Access Control List)就是一個(gè)被命名的地址匹配列表。使用訪問控制列表可以使配置簡單而清晰,一次定義之后可以在多處使用,不會(huì)使配置文件因?yàn)榇罅康腎P地址而變得混亂。
要定義訪問控制列表,可以在BIND的主配置文件/etc/named.conf中使用acl語句來實(shí)現(xiàn)。acl語句的語法為:
|
BIND里默認(rèn)預(yù)定義了4個(gè)名稱的地址匹配列表,他們可以直接使用,分別為:?
◆Any:表示所有主機(jī);?
◆Localhost:表示本機(jī);?
◆Localnets:表示本地網(wǎng)絡(luò)上的所有主機(jī);?
◆None:表示不匹配任何主機(jī)。
需要注意的是:acl是named.conf中的頂級(jí)語句,不能將其嵌入其他的語句。要使用用戶自己定義的訪問控制列表,必須在使用之前定義。因?yàn)榭梢栽趏ptions語句里使用訪問控制列表,所以定義訪問控制列表的acl語句應(yīng)該位于options語句之前。
另外,為了便于維護(hù)管理員定義的訪問控制列表,可以將所有定義acl的語句存放在單獨(dú)的文件/etc/named.conf.acls中,然后在主配置文件/etc /named.conf中如下語句:
include "/etc/named.conf.options"; |
之前添加如下的配置行
include "/etc/named.conf.acls"; |
定義了ACL之后,可以在如下的子句中使用:?
◆allow-query options,zone:指定哪主機(jī)或網(wǎng)絡(luò)可以查詢本服務(wù)器或區(qū),默認(rèn)的是允許所有主機(jī)進(jìn)行查詢。
◆allow-transfer options,zone:指定哪些主機(jī)允許和本地服務(wù)器進(jìn)行域傳輸,默認(rèn)值是允許和所有主機(jī)進(jìn)行域傳輸。 ?
◆allow-recursion options:指定哪些主機(jī)可以進(jìn)行遞歸查詢。如果沒有設(shè)定,缺省是允許所有主機(jī)進(jìn)行遞歸查詢的。注意禁止一臺(tái)主機(jī)的遞歸查詢,并不能阻止這臺(tái)主機(jī)查詢已經(jīng)存在于服務(wù)器緩存中的數(shù)據(jù)。 ?
◆allow-update zone:指定哪些主機(jī)允許為主域名服務(wù)器提交動(dòng)態(tài)DNS更新。默認(rèn)為拒絕任何主機(jī)進(jìn)行更新。 ?
◆blackhole options:指定不接收來自哪些主機(jī)的查詢請(qǐng)求和地址解析。默認(rèn)值是none。
上面列出的一些配置子句既可以出現(xiàn)在全局配置options語句里,又可以出現(xiàn)在zone聲明語句里,當(dāng)在兩處同時(shí)出現(xiàn)時(shí),zone聲明語句中的配置將會(huì)覆蓋全局配置options語句中的配置。
(3)區(qū)文件
區(qū)文件定義了一個(gè)區(qū)的域名信息,通常也稱域名數(shù)據(jù)庫文件。每個(gè)區(qū)文件都是由若干個(gè)資源記錄(RR,resource records)和區(qū)文件指令所組成。
1.資源記錄
每個(gè)區(qū)域文件都是由SOA RR開始,同時(shí)包括NS RR。對(duì)于正向解析文件還包括A RR、MX RR、CNAME RR等等;而對(duì)于反向解析文件還包括PTR RR。
RR具有基本的格式。標(biāo)準(zhǔn)資源記錄的基本格式是:
[name] [ttl] IN type redata |
各個(gè)自字節(jié)之間由空格或制表符分隔。表3描述了這些字段的含義:
表3 標(biāo)準(zhǔn)資源紀(jì)錄中的字段
2.區(qū)文件指令
表4列出了可以在區(qū)文件中使用的4個(gè)區(qū)文件指令。
表4 區(qū)文件指令
為了方便讀者對(duì)DNS服務(wù)器配置文件的使用有個(gè)詳細(xì)的了解,本節(jié)將針對(duì)一個(gè)實(shí)際的配置文件例子來進(jìn)行講解。該配置文件如下所示。我們虛構(gòu)了一個(gè)域cmpbook.com來舉例說明主服務(wù)器的配置,下面是定義cmpbook.com域的主服務(wù)器的named.conf文件:
|
上例中第一個(gè)master告訴我們這是cmpbook.com域的主服務(wù)器。該域的數(shù)據(jù)是從named.hosts文件中加載的。在我們這個(gè)例子中,我們將文件名named.hosts作為區(qū)文件名。第三個(gè)master語句指向能將IP地址211.132.0.0映射為主機(jī)名的文件。它假定本地服務(wù)器是反向域132.211.in-addr.arpa的主服務(wù)器,該域的數(shù)據(jù)從文件named.rev中加載。
除了定義上述的主文件外,還需要定義如下的區(qū)文件(/var/named/cmpbook.com):
|
(5)使用Dlint工具進(jìn)行DNS配置文件檢查
Dlint是一個(gè)專門檢查DNS配置文件開放源代碼的軟件,用戶可以從網(wǎng)站http://www.domtools.com上自行下載安裝,目前該網(wǎng)站上的最新版本為Dlint1.4.1。需要注意:使用該軟件前要求系統(tǒng)安裝支持Perl語言和Dig命令(BIND中一個(gè)軟件包)的相關(guān)軟件包。
Dlint軟件的安裝步驟如下所示,系統(tǒng)會(huì)將Dlint安裝在/usr/bin/目錄下:
(1)解壓縮軟件包
|
(2)切換到解壓縮的目錄下,執(zhí)行安裝命令
|
Dlint主要針對(duì)DNS配置文件進(jìn)行如下檢查:?
◆檢查配置文件是否存在拼寫錯(cuò)誤;?
◆檢查配置文件中是否有A(Address)記錄的主機(jī)名稱都有配套的PTR(反向解析記錄的簡稱)記錄。如果有A記錄的主機(jī)名稱沒有PTR,則配置文件不能通過。另外,Dlint可以在用戶配置文件中為A記錄查找丟失的PTR記錄;?
◆記錄in-addr.arpa區(qū)的每一條PTR記錄是否有對(duì)應(yīng)的A記錄存在,并以遞歸的方式檢查子區(qū),查找它們的配置問題;
如下顯示了使用Dlint工具進(jìn)行DNS配置文件檢查的運(yùn)行結(jié)果:
|
(6)使用命令檢驗(yàn)DNS功能
1.nslookup命令
nslookup命令是用來驗(yàn)證DNS功能以及故障的一種非常簡便有效的工具,通過該命令可以對(duì)用戶搭建的DNS服務(wù)器或者是公用的服務(wù)器的功能進(jìn)行有效驗(yàn)證。該命令不但可以在Linux下使用,而且也可以在Windows系列操作系統(tǒng)中使用。如果該命令能夠成功返回信息,也就是能夠通過域名從DNS服務(wù)器得到需要解析的IP地址信息,或者通過提供IP地址信息得到域名信息。那么,就表明該DNS是正常運(yùn)行的。
如下例子給出使用nslookup命令向DNS查詢www.sohu.com域名IP地址的應(yīng)用場景,驗(yàn)證表明DNS功能正常:
//正向查詢 #nslookup www.google.com Note: nslookup is deprecated and may be removed from future releases. Consider using the `dig' or `host' programs instead. Run nslookup with the `-sil[ent]' option to prevent this message from appearing. Server: 10.2.13.18 Address: 10.2.13.18#53 Non-authoritative answer: www.google.com canonical name = www.l.google.com www.l.google.com canonical name = www-china.l.google.com. Name: www-china.l.google.com Address: 72.14.235.99 Name: www-china.l.google.com Address: 72.14.235.104 Name: www-china.l.google.com Address: 72.14.235.147 //反向查詢 #nslookup 72.14.235.99 Note: nslookup is deprecated and may be removed from future releases. Consider using the `dig' or `host' programs instead. Run nslookup with the `-sil[ent]' option to prevent this message from appearing. Server: 10.2.13.18 Address: 10.2.13.18#53 Non-authoritative answer: 99.235.14.72.in-addr.arpa name = tw-in-f99.google.com. Authoritative answers can be found from: 235.14.72.in-addr.arpa nameserver = ns3.google.com. 235.14.72.in-addr.arpa nameserver = ns1.google.com. 235.14.72.in-addr.arpa nameserver = ns4.google.com. 235.14.72.in-addr.arpa nameserver = ns2.google.com. ns1.google.com internet address = 216.239.32.10 ns2.google.com internet address = 216.239.34.10 ns3.google.com internet address = 216.239.36.10 ns4.google.com internet address = 216.239.38.10 |
2.dig命令
dig(域信息搜索器)命令是一個(gè)用于詢問DNS域名服務(wù)器的靈活的工具。它執(zhí)行DNS搜索,顯示從受請(qǐng)求的域名服務(wù)器返回的答復(fù)。多數(shù)DNS管理員利用dig作為DNS問題的故障診斷,因?yàn)樗`活性好、易用、輸出清晰。雖然通常情況下dig使用命令行參數(shù),但它也可以按批處理模式從文件讀取搜索請(qǐng)求。不同于早期版本,dig的BIND9實(shí)現(xiàn)允許從命令行發(fā)出多個(gè)查詢。除非被告知請(qǐng)求特定域名服務(wù)器,dig將嘗試/etc/resolv.conf中列舉的所有服務(wù)器。當(dāng)未指定任何命令行參數(shù)或選項(xiàng)時(shí),dig將對(duì)“.”(根)執(zhí)行NS查詢。
值得一提的是:dig命令比nslookup命令獲取的信息更加詳細(xì)和全面,因此在Linux下建議用戶采用該命令替代nslookup命令進(jìn)行查詢和驗(yàn)證DNS的功能(nslookup命令運(yùn)行中也提供了“Note: nslookup is deprecated and may be removed from future releases.Consider using the `dig' or `host' programs instead.”字樣進(jìn)行提示)。
另外,鑒于dig命令的強(qiáng)大功能,它提供了幾十個(gè)參數(shù)選項(xiàng)供用戶使用,具體情況可以使用man命令進(jìn)行查閱,這不是本專題的重點(diǎn)內(nèi)容,下面僅僅給出2個(gè)例子來進(jìn)行簡單演示和說明:
(1)運(yùn)行dig命令獲得根DNS信息
|
(2)正向解析域名www.google.com
|
#p#
五、配置輔助域名服務(wù)器進(jìn)行冗余備份
輔助服務(wù)器可從主服務(wù)器中復(fù)制一整套域信息。區(qū)文件是從主服務(wù)器中復(fù)制出來的,并作為本地磁盤文件存儲(chǔ)在輔助服務(wù)器中。這種復(fù)制稱為“區(qū)文件復(fù)制”。在輔助域名服務(wù)器中有一個(gè)所有域信息的完整拷貝,可以有權(quán)威地回答對(duì)該域的查詢。因此,輔助域名服務(wù)器也稱作權(quán)威性服務(wù)器。配置輔助域名服務(wù)器不需要生成本地區(qū)文件,因?yàn)榭梢詮闹鞣?wù)器中下載該區(qū)文件。
輔助服務(wù)器的配置與主服務(wù)器的配置不同,它使用slave語句代替master語句。slave語句指向用作域信息源的遠(yuǎn)程服務(wù)器,以替代本地磁盤文件。下面的named.conf文件可以配置cmpbook.com域的輔助服務(wù)器:
|
第一個(gè)slave語句是使這個(gè)服務(wù)器成為vbrew.com的輔助服務(wù)器。它告訴named從IP地址為211.132.10.3的服務(wù)器中下載cmpbook.com的信息,并將其數(shù)據(jù)保存在/var/named/named.hosts文件中。如果該文件不存在,named就創(chuàng)造一個(gè),并從遠(yuǎn)程服務(wù)器中取得區(qū)數(shù)據(jù),然后將這些數(shù)據(jù)寫入新創(chuàng)建的文件中。如果存在該文件,named就要檢查遠(yuǎn)程服務(wù)器,以了解該遠(yuǎn)程服務(wù)器的數(shù)據(jù)是否不同于該文件中的數(shù)據(jù),如果數(shù)據(jù)有變化,它就下載更新后的數(shù)據(jù),用新數(shù)據(jù)覆蓋該文件的內(nèi)容;如果數(shù)據(jù)沒有變化,named就加載磁盤文件的內(nèi)容,不必做麻煩的區(qū)轉(zhuǎn)移工作。將一個(gè)數(shù)據(jù)庫拷貝到本地磁盤文件中,就不必每次引導(dǎo)主機(jī)時(shí)都要轉(zhuǎn)移區(qū)文件;只有當(dāng)數(shù)據(jù)修改時(shí),才進(jìn)行這種區(qū)文件的轉(zhuǎn)移工作。該配置文件中的下一行表示該本地服務(wù)器也是反向域132.211.in-addr.arpa的一個(gè)輔助服務(wù)器,而且該域的數(shù)據(jù)也從211.132.10.3中下載。該反向域的數(shù)據(jù)存儲(chǔ)在named.rev中。 #p#
六、配置高速緩存服務(wù)器緩解DNS訪問壓力
高速緩存服務(wù)器可運(yùn)行域名服務(wù)器軟件,但是沒有域名數(shù)據(jù)庫軟件。它從某個(gè)遠(yuǎn)程服務(wù)器取得每次域名服務(wù)器查詢的結(jié)果,一旦取得一個(gè),就將它放在高速緩存中,以后查詢相同的信息時(shí)就用它予以回答。高速緩存服務(wù)器不是權(quán)威性服務(wù)器,因?yàn)樗峁┑乃行畔⒍际情g接信息。對(duì)于高速緩存服務(wù)器只需要配置一個(gè)高速緩存文件,但最常見的配置還包括一個(gè)回送文件,這或許是最常見的域名服務(wù)器配置。
配置高速緩存域名服務(wù)器是很簡單的。必須有named.conf和named.ca文件,通常也要用到named.local文件。下面是用于高速緩存服務(wù)器的named.conf文件的例子:
|
directory這一行告訴named到哪里去找尋文件。所有其后命名的文件都將是相對(duì)于此目錄的。該文件告訴named去維持一個(gè)域名服務(wù)器響應(yīng)的高速緩存,并利用named.ca文件的內(nèi)容去初始化該高速緩存。該高速緩存初始化文件的名字可以是任何名字,但一般使用/var/named/named.ca。值得注意的是:如上的示例并不是表明在該文件中僅僅使用一個(gè)hint語句就能完成高速緩存配置,事實(shí)上是幾乎每一種服務(wù)器的配置都要用到cache語句。在一些個(gè)別情況下,如果在配置中沒有出現(xiàn)master和slave語句,則可以認(rèn)為它就是一個(gè)高速緩存配置。
但是,在我們這個(gè)例子中卻有一個(gè)master語句。事實(shí)上,幾乎在每一個(gè)高速緩存的配置文件中都有這一個(gè)語句,它將本地服務(wù)器定義為它自己的回送域的主服務(wù)器,并假定該域的信息存儲(chǔ)在named.local文件中。這個(gè)回送域是一個(gè)in-addr.arpa域(in-addr.arpa域用于指定逆向解析,或IP地址到DNS名字解析),它將地址127.0.0.1映射為名字localhost。轉(zhuǎn)換自己的回送地址對(duì)于大多數(shù)人都是有意義的,因?yàn)榇蠖鄶?shù)的named.conf文件都包含這一項(xiàng)。
在大多數(shù)高速緩存服務(wù)器的配置文件中,這種directory、master和hint語句是唯一使用的語句,但也可以增加其他的語句,forwarders和slave等語句都可以使用。
七、配置DNS負(fù)載均衡
DNS負(fù)載均衡技術(shù)是在DNS服務(wù)器中為同一個(gè)主機(jī)名配置多個(gè)IP地址,在應(yīng)答DNS查詢時(shí),DNS服務(wù)器對(duì)每個(gè)查詢將以DNS文件中主機(jī)記錄的IP地址按順序返回不同的解析結(jié)果,將客戶端的訪問引導(dǎo)到不同的機(jī)器上去,使得不同的客戶端訪問不同的服務(wù)器,從而達(dá)到負(fù)載均衡的目的。
根據(jù)我們?cè)谏厦娼榻B的區(qū)文件的相關(guān)知識(shí)可以滿足DNS負(fù)載均衡的要求,我們通過下面的例子來進(jìn)行介紹。
現(xiàn)假設(shè)有三臺(tái)服務(wù)器來應(yīng)對(duì)www.cmpbook.com的請(qǐng)求。在采用Linux系統(tǒng)上實(shí)現(xiàn)起來比較簡單,只需在該域區(qū)文件的數(shù)據(jù)記錄中添加類似下面的資源記錄即可:
|
上述六條資源記錄的具體含義為:在DNS服務(wù)器中為www.cmpbook.com設(shè)定了三臺(tái)服務(wù)器響應(yīng)客戶的訪問請(qǐng)求。這三臺(tái)服務(wù)器分別為www1、www2和www3,而他們均為www服務(wù)器的別名。因此,在訪問www服務(wù)器時(shí),DNS服務(wù)器將依次循環(huán)地將訪問請(qǐng)求均衡到三臺(tái)服務(wù)器中去,以達(dá)到負(fù)載均衡的目的。
【51CTO.COM 獨(dú)家特稿,轉(zhuǎn)載請(qǐng)注明出處及作者!】