■ 河南 劉進(jìn)京
編者按: 在活動(dòng)目錄域環(huán)境下,使用DHCP動(dòng)態(tài)分配IP時(shí),有時(shí)也會(huì)出現(xiàn)多個(gè)主機(jī)域名使用相同IP的問(wèn)題,給網(wǎng)絡(luò)管理造成困難。本文則是另辟蹊徑找到解決該類問(wèn)題的方法。
在活動(dòng)目錄域環(huán)境中,會(huì)使用DNS和DHCP服務(wù)對(duì)IP地址進(jìn)行管理。很多情況下,在DNS中查看A記錄列表時(shí),會(huì)發(fā)現(xiàn)出現(xiàn)多臺(tái)設(shè)備使用相同IP的情況,給網(wǎng)絡(luò)管理造成了不利影響。如果是手工為客戶機(jī)指定IP,出現(xiàn)這樣IP沖突問(wèn)題就不奇怪。例如PC1的IP為192.168.1.100,那么當(dāng)關(guān)機(jī)后,在PC2上手工設(shè)置相同的IP,當(dāng)PC2加入域后,在DNS管理器中就會(huì)顯示這兩臺(tái)主機(jī)使用相同IP。但是在使用DHCP動(dòng)態(tài)分配IP時(shí),依然會(huì)出現(xiàn)多個(gè)主機(jī)域名使用相同IP的問(wèn)題。
之所以會(huì)出現(xiàn)上述問(wèn)題,還需要從DNS和DHCP工作機(jī)制談起。如果使用靜態(tài)IP地址分配方式,即手工為客戶端指派IP的話,那么當(dāng)其加入到域中,就會(huì)自動(dòng)在DNS中為自己注冊(cè)A記錄和PTR反向記錄。
例如,當(dāng)該客戶機(jī)(例如PC1)登錄到域環(huán)境后,管理員在域控上打開(kāi)DNS控制臺(tái),在左側(cè)選擇“正向查找區(qū)域”→“xxx”項(xiàng),“xxx”為具體的區(qū)域ID,點(diǎn)擊工具欄上的刷新按鈕,在右側(cè)會(huì)看到該機(jī)自動(dòng)注冊(cè)的A記錄。
在該記錄的屬性窗口中打開(kāi)“安全”面板,在組和用戶列表中選擇該機(jī)的賬號(hào)(例如“PC1$”),可以看到其擁有完全控制的權(quán)限。點(diǎn)擊“高級(jí)”按鈕,在打開(kāi)窗口中顯示該記錄的所有者為“PC1$”。在左側(cè)選擇“反向查找區(qū)域”-“xxx”,其中的“xxx”為具體的區(qū)域ID,在其中會(huì)顯示該機(jī)自動(dòng)創(chuàng)建的PTR反向記錄,在該記錄的屬性窗口中點(diǎn)擊“高級(jí)”按鈕,會(huì)顯示其所有者為“PC1$”。
如果開(kāi)啟了DHCP自動(dòng)分配IP功能后,當(dāng)客戶機(jī)獲取IP后登錄到域環(huán)境中后,情況則會(huì)發(fā)生一些變化,即其可以向DNS服務(wù)器自動(dòng)注冊(cè)A記錄,但是PTR反向記錄卻是由DHCP服務(wù)器為其產(chǎn)生的。
例如PC2使用DHCP得到IP后,登錄到域環(huán)境。管理員在DNS管理器中按照上述方法查看時(shí),會(huì)發(fā)現(xiàn)與其對(duì)應(yīng)的A記錄的擁有者為“PC2$”,但是反向PTR記錄的擁有者卻是DHCP服務(wù)器。
在DHCP控制臺(tái)左側(cè)選擇“IPv4”→“作用域”項(xiàng),在其右鍵菜單上點(diǎn)擊“屬性”項(xiàng),在打開(kāi)窗口中的“DNS”面板中顯示默認(rèn)了選擇“僅在DHCP客戶端請(qǐng)求時(shí)動(dòng)態(tài)更新DNS記錄”項(xiàng)。這表示當(dāng)啟用了DHCP自動(dòng)分配IP后,DHCP會(huì)和DNS服務(wù)進(jìn)行交互,幫助客戶端注冊(cè)PTR反向記錄。
在默認(rèn)情況下,“在租用被刪除時(shí)丟棄A和PTR記錄”項(xiàng)處于選擇狀態(tài),這說(shuō)明不管采用靜態(tài)或動(dòng)態(tài)設(shè)置IP,A記錄的所有者均為客戶機(jī)自身,所以DHCP服務(wù)器沒(méi)有權(quán)限丟棄A記錄的,其僅僅可以丟棄后者的PTR記錄。
例如,當(dāng)在PC1上執(zhí)行“ipconfig /release”命令釋放IP地址后,會(huì)自動(dòng)在DNS中刪除A和PTR記錄。但在PC2上釋放IP后,僅可以自動(dòng)刪除A記錄,必須依靠DHCP來(lái)為其刪除PTR記錄。
在實(shí)際的企業(yè)環(huán)境,即使所有的客戶端都使用DHCP來(lái)獲取IP,也會(huì)在DNS中產(chǎn)生多個(gè)指向同一個(gè)IP的A記錄。產(chǎn)生該問(wèn)題有多方面原因。當(dāng)DHCP客戶端在DNS中注冊(cè)了自己的A記錄后,當(dāng)DHCP租約過(guò)期(默認(rèn)為8天)后,DHCP就會(huì)對(duì)回收其IP,分配給別的客戶端使用。
如果某客戶端長(zhǎng)期關(guān)機(jī),例如PC1注冊(cè)自己的A記錄后,很長(zhǎng)時(shí)間處于關(guān)機(jī)狀態(tài),該A記錄會(huì)一致保存在DNS數(shù)據(jù)庫(kù)中。雖然DNS提供了自動(dòng)清理功能,但是該功能默認(rèn)沒(méi)有打開(kāi)。實(shí)際上,當(dāng)開(kāi)啟該功能后,會(huì)存在一定的風(fēng)險(xiǎn),這種風(fēng)險(xiǎn)指的是DNS服務(wù)器可能會(huì)誤刪記錄信息。那么當(dāng)租約過(guò)期后,DHCP服務(wù)器將其回收后分配給PC2使用,PC2就會(huì)使用該IP注冊(cè)自己的A記錄,這樣,兩條A記錄就會(huì)指向相同的IP。那么,當(dāng)對(duì)PC1進(jìn)行Ping探測(cè)時(shí),從表面上看是沒(méi)有任何問(wèn)題的,但是在進(jìn)行訪問(wèn)(例如登錄遠(yuǎn)程桌面等),訪問(wèn)到的卻是PC2。
如果在預(yù)先規(guī)劃時(shí),在地址池中的設(shè)置IP數(shù)量不夠,出現(xiàn)眾多客戶端頻繁搶用IP地址的情況,也會(huì)造成上述問(wèn)題。例如當(dāng)某些設(shè)備一段時(shí)間沒(méi)有開(kāi)機(jī),其之前獲取的IP已經(jīng)分配給了其他主機(jī),那么當(dāng)其開(kāi)機(jī)獲取IP后,必然會(huì)注冊(cè)自己的A記錄,這樣DNS就會(huì)產(chǎn)生多個(gè)A記錄指向相同IP的狀況。
對(duì)于規(guī)模較大的網(wǎng)絡(luò),上述情況很常見(jiàn)。將IP地址和MAC地址綁定,可以解決上述問(wèn)題,例如在DHCP管理器左側(cè)選擇“IPv4→作用域→保留”項(xiàng),在其右鍵菜單上點(diǎn)擊“新建保留”項(xiàng),將目標(biāo)客戶端IP和MAC地址綁定起來(lái)即可。
但對(duì)于數(shù)量眾多不斷變化的客戶端來(lái)說(shuō),該方法操作起來(lái)很繁瑣,如果打開(kāi)DHCP作用域?qū)傩源翱?,在“DHCP客戶端租用期限”欄中選擇“無(wú)限制”項(xiàng),不再回收已經(jīng)分配的IP,雖然也可以解決上述問(wèn)題,但很容易耗盡該作用域中的IP地址。
比較好的方法是在作用域?qū)傩源翱谥写蜷_(kāi)“DNS”面板,選擇“始終動(dòng)態(tài)更新DNS記錄”項(xiàng),讓DHCP服務(wù)器為所有的客戶端注冊(cè)A和PTR記錄,即A和PTR記錄的所有者變成DHCP服務(wù)器。當(dāng)然,對(duì)DHCP租期也需要進(jìn)行合理設(shè)置。這樣,當(dāng)租約到期后,當(dāng)DHCP服務(wù)器將對(duì)應(yīng)的IP分配給其他客戶端時(shí),就會(huì)自動(dòng)刪除之前的A和PTR記錄。但是,默認(rèn)該配置是無(wú)效的。
因?yàn)樵趯?shí)際的企業(yè)網(wǎng)絡(luò)中,為了防止單點(diǎn)故障,會(huì)使用多臺(tái)DCHP服務(wù)器為客戶提供服務(wù)。例如某客戶從DHCP1服務(wù)器上獲取IP,客戶機(jī)自動(dòng)注冊(cè)A記錄,DHCP1服務(wù)器為其注冊(cè)PTR反向記錄。當(dāng)DHCP1服務(wù)器出現(xiàn)故障后,該客戶就會(huì)向DHCP2服務(wù)器申請(qǐng)IP,但是原先的PTR記錄的所有者為DHCP1服務(wù)器,所以DHCP2服務(wù)器無(wú)權(quán)對(duì)這些記錄進(jìn)行更改。為此可以打開(kāi)Active Directory用戶和計(jì)算機(jī)窗口,在其中創(chuàng)建一個(gè)普通的域賬戶(例如“dhcpgl”),其密碼設(shè)置為永不過(guò)期。
之后選擇雙擊名為“DnsUpdateproxy”的 組 賬戶,在其屬性窗口中的“成員”面板中點(diǎn)擊“添加”按鈕,將上述“dhcpgl”賬戶添加進(jìn)來(lái),讓其擁有代表客戶端向DNS注冊(cè)記錄信息的權(quán)限。之后在DHCP管理器左側(cè)選擇“IPv4”項(xiàng),在其屬性窗口中的“高級(jí)”面板中的“DNS動(dòng)態(tài)更新注冊(cè)憑據(jù)”欄中點(diǎn)擊“憑據(jù)”按鈕,輸入上述賬戶的名稱和密碼以及域名等信息,點(diǎn)擊確定按鈕保存配置信息。
如果存在多臺(tái)DHCP服務(wù)器,在每臺(tái)服務(wù)器上都執(zhí)行同樣的配置。如此即可解決上述問(wèn)題。這樣,在客戶機(jī)上執(zhí)行“ipconfig /renew”命令獲取IP時(shí),在DNS控制臺(tái)上選擇其注冊(cè)的A或PTR記錄,會(huì)發(fā)現(xiàn)其所有者為上述“dhcpgl”賬戶。但是,在實(shí)際使用時(shí),會(huì)發(fā)現(xiàn)當(dāng)客戶端的DHCP租期過(guò)期后,DHCP服務(wù)器僅僅從控制臺(tái)中刪除了對(duì)應(yīng)的IP,沒(méi)有立即進(jìn)行清理,對(duì)應(yīng)的IP信息依然保存在DHCP數(shù)據(jù)庫(kù)中。這樣,過(guò)期的IP實(shí)際上沒(méi)有進(jìn)行真正的回收和重新分配。
對(duì)于DHCP服務(wù)器來(lái)說(shuō),其租期過(guò)期的寬限期為4小時(shí),數(shù)據(jù)庫(kù)清理間隔默認(rèn)為1小時(shí)。也就是說(shuō),在默認(rèn)狀態(tài)下,當(dāng)客戶的IP租期過(guò)期后,要經(jīng)過(guò)5個(gè)小時(shí)后,DHCP服務(wù)器才真正清理和回收,將其分配給其他用戶。執(zhí)行“regedit.exe”程序,在注冊(cè)表編輯器中打開(kāi)“HKEY_LOCAL_MACHINESYSTEMCurrentControlSetservicesDHCPServerParameters”分支,在右側(cè)雙擊 名 為“DatabaseCleanup Interval”的鍵值名,里面存儲(chǔ)這DHCP數(shù)據(jù)庫(kù)清理的間隔值,默認(rèn)為60分鐘,可將其修改合理的時(shí)間(例如1分鐘)。在右側(cè)窗口新建名為“LeaseExtension”,類 型為DWORD的鍵值名,作用是控制租期過(guò)期的寬限期,例如可以將其值修改為30,這樣經(jīng)過(guò)30分鐘后,DHCP服務(wù)器就會(huì)將其標(biāo)記為可刪除狀態(tài),再經(jīng)過(guò)預(yù)設(shè)的清理間隔后,就會(huì)將其回收并重分配。
除了利用DHCP服務(wù)器,來(lái)排除多個(gè)A記錄使用同一IP的問(wèn)題外,在DNS控制臺(tái)中選擇主機(jī)名,在其屬性窗口中的“高級(jí)”面板中選擇“啟用過(guò)時(shí)記錄自動(dòng)清理”項(xiàng),雖然可以實(shí)現(xiàn)DNS記錄的老化和清理功能,不過(guò)默認(rèn)其并沒(méi)有處于選擇狀態(tài),這和DNS記錄的刷新和清理機(jī)制有關(guān)。TTL是DNS記錄可以在客戶端緩存中存儲(chǔ)的時(shí)間,如果對(duì)應(yīng)的DNS記錄中的IP發(fā)生了變化,那么客戶端緩存的DNS記錄就與之匹配了。因此,當(dāng)TTL時(shí)間到期后,客戶端就會(huì)向DNS服務(wù)器發(fā)出新的請(qǐng)求,來(lái)查詢對(duì)應(yīng)的IP地址。
在DNS管理器中點(diǎn)擊菜單“查看→高級(jí)”項(xiàng),使其處于選中狀態(tài)。當(dāng)雙擊某條DNS記錄時(shí),自其屬性窗口中的“生存時(shí)間(TTL)”欄中會(huì)顯示其TTL值(默認(rèn)為20分鐘),管理員可以手動(dòng)進(jìn)行修改。當(dāng)在客戶端上執(zhí)行Ping命名對(duì)目標(biāo)主機(jī)進(jìn)行探測(cè)后,執(zhí)行“ipconfig /displaydns”命令,會(huì)顯示具體的TTL時(shí)間(單位為秒)。DNS時(shí)間戳主要用來(lái)記錄DNS記錄創(chuàng)建的時(shí)間和后續(xù)刷新的狀態(tài),可以據(jù)此判斷DNS記錄是否老化。當(dāng)創(chuàng)建DNS記錄后,會(huì)產(chǎn)生時(shí)間戳信息??蛻舳藭?huì)每隔24小時(shí)對(duì)DNS記錄進(jìn)行刷新,注意刷新可能成功也可能失敗。
刷新是客戶端對(duì)應(yīng)DNS沒(méi)有任何變化,僅僅是更新其時(shí)間戳信息。對(duì)于規(guī)模較大的網(wǎng)絡(luò)中,存在多臺(tái)DNS服務(wù)器,當(dāng)大量客戶端向DNS服務(wù)器發(fā)起更新請(qǐng)求后,不同DNS服務(wù)器之間會(huì)復(fù)制這些請(qǐng)求信息。這樣會(huì)產(chǎn)生很大流量,在多數(shù)情況下,客戶端的計(jì)算機(jī)名和IP地址都沒(méi)有發(fā)生變化,而僅僅更新對(duì)應(yīng)DNS記錄的時(shí)間戳信息,在實(shí)際上沒(méi)有太大的意義。如果開(kāi)啟了上述DNS老化和清理功能,就會(huì)激活非刷新間隔和刷新間隔兩個(gè)參數(shù)。
對(duì)于前者來(lái)說(shuō),主要用來(lái)降低DNS復(fù)制流量,避免DNS記錄被快速清除。在此期間(默認(rèn)為7天),如果客戶端僅僅是更新時(shí)間戳信息,那么DNS服務(wù)器是拒絕接受的。對(duì)于其他的更改請(qǐng)求,DNS服務(wù)器可以接受。
對(duì)應(yīng)地,在刷新間隔(默認(rèn)為7天)內(nèi),DNS服務(wù)器是可以接受客戶端的時(shí)間戳刷新請(qǐng)求的。所以,如果客戶端長(zhǎng)時(shí)間(例如大于14天)處于關(guān)機(jī)狀態(tài),沒(méi)有執(zhí)行刷新操作,那么DNS服務(wù)器會(huì)認(rèn)為對(duì)應(yīng)的DNS記錄是老化的,就會(huì)將其從DNS數(shù)據(jù)庫(kù)中清除,這就很可能帶來(lái)風(fēng)險(xiǎn)。當(dāng)然,對(duì)于手工配置的靜態(tài)DNS記錄來(lái)說(shuō),DNS服務(wù)器是不會(huì)將其刪除的。