劉景云



在Windows的域環(huán)境中,有時會出現(xiàn)客戶機無法加入域或者登錄域失敗的情況,如果排除了別的原因,很可能是客戶機的時間和域控的時間差異較大的緣故。這一點很容易被人忽略,認為時間管理似乎并不重要,實際情況并非如此,如果域內(nèi)時間不同步的話,會造成各種奇怪的問題,例如對于系統(tǒng)日志來說,如果記錄的事件時間異常,對于問題的排查就會造成不利的影響。
活動目錄時間同步機制
在域環(huán)境中是利用名為“W32Time”的服務,來實現(xiàn)主機之間的時間同步的,時間同步對于Kerberos認證協(xié)議是極為重要的。時間同步使用的是SNTP簡單網(wǎng)絡(luò)時間協(xié)議,林中的根域PDC扮演著基準時間服務器的角色,PDC即模擬主機角色,是AD DS域服務定義的操作主機角色之一,確切地說PDC是域范圍內(nèi)操作主機角色,注意林中的每個域中只能有一個PDC角色。在CMD窗口中執(zhí)行“Netdom query FSMO”命令。在返回信息中顯示五種操作主機所在的域控名稱(圖1),可以查看到PDC主機名稱。
當然,PDC主機的功能有很多,例如可以兼容低版本的域控,PDC所在的域控優(yōu)先成為主域瀏覽器,PDC擁有活動目錄數(shù)據(jù)庫優(yōu)先復制權(quán),防止組策略套用出錯等。PDC很重要的功能之一是可以充當時間服務器,域中所有主機會和PDC同步時間,擁有PDC角色的域控會成為時間服務器。當前域中的PDC也會和林中根域的PDC自動對時,來保持整個林中的時間一致性,即子域中的PDC會自動和父域中的PDC對時。可以看出,這實際上是一種基于域的層次架構(gòu)。對于根域中的第一臺PDC來說,會和外網(wǎng)的時間服務器進行對時。在默認情況下,域中的客戶機每隔1小時和PDC進行一次時間同步,成員服務器和PDC的同步周期為100秒。
時間同步方式
時間同步服務和“w32tm”命令息息相關(guān)。在客戶機上登錄到域環(huán)境,執(zhí)行“w32tm /monitor”命令,在返回信息中顯示所有的域控信息(圖2),如果存在多臺域控的話,在對應的“RefID”欄中會顯示具體的時間服務器地址,如果顯示“unknown”“unspecified”等字樣,說明對應的DC不是時間服務器。對于擁有PDC角色的域控,以及成員服務器和客戶機來說,具體的時間同步方式要根據(jù)“W32Time”服務的配置信息而定。執(zhí)行“w32tm /query /configuration”命令,在返回信息中的“[TimeProviders]”欄中的“Type”行顯示了同步類型(圖3)。
如果顯示為“Nosync”,說明該機會使用本地時間,不會進行同步。如果顯示為“NTP”,說明本機從“NtpServer”行指定的外部時間服務器上同步時間。如果顯示為“NT5DS”,說明會從域中的PDC上同步時間。如果顯示為“AllSync”,說明本機會使用以上所有的同步方式。執(zhí)行“w32tm /query /source”命令,在返回信息中顯示當前的時間服務器名稱。如果要查看指定域名中的時間服務器,可執(zhí)行“w32tm /monitor /domain:xxx.com”命令,會顯示該域中PDC主機的名稱及地址信息,其中的“xxx.com”為具體的域名。執(zhí)行“w32tm /tz”命令,顯示本機的時區(qū)信息(圖4)。
配置時間服務器
執(zhí)行時間同步操作,可以通過命令行或者自動方式來實現(xiàn)。前面講過,PDC主機擔當著時間服務器的作用,實現(xiàn)域中所有主機的時間同步,因此必須保證PDC主機的時間是正確的,否則時間同步將失去意義。在默認情況下,PDC主機與微軟的“time.windows.com”服務器保持時間同步。
運行“regedit.exe”程序,在注冊表編輯器中打開“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\W32Time\Parameters”分支,在右側(cè)的“NtpServer”鍵值名中可以查看該時間服務器地址(圖5)。這里假設(shè)PDC主機的IP為192.168.1.2,那么在域中主機上執(zhí)行“net time \\192.168.1.2 /set /y”命令,在彈出的提示信息中輸入“y”鍵,可以讓該機立刻和PDC主機之間進行時間同步。
當然,也可以實現(xiàn)時間自動同步操作。登錄到PDC主機上,在域環(huán)境中,默認第一臺域控承擔PDC主機角色。在注冊表編輯器中打開上述分支,將“NtpServer”鍵值名的數(shù)值修改為“dc1.xxx.com”,這里假設(shè)PDC主機的名稱為“dc1.xxx.com”。將右側(cè)的“Type”鍵值名的數(shù)值修改為“NTP”。這樣,就禁止PDC主機使用外網(wǎng)的時間服務器,讓域中的其余主機可以以PDC主機的時鐘作為基準時間源。
打開“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\W32Time\Config”分支,將右側(cè)的“AnnounceFlags”的數(shù)值設(shè)置為10,格式為十進制。打開“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\W32Time\TimeProviders\NtpServer”分支(圖6),將右側(cè)的“Enabled”的值設(shè)置為1。在CMD窗口中執(zhí)行“w32tm /query /source”命令,顯示“Local CMOS Clock”字樣,說明以上設(shè)置成功(圖7)。
在客戶端上同步時間
為了讓客戶機在登錄域后,自動實現(xiàn)時間同步操作,可以以管理員身份登錄域控,打開組策略管理器(圖8),在左側(cè)選擇“林→域→域名→Domain Controllers”項,在其中的“Default Domain? Controllers Policy”項的右鍵菜單上點擊“編輯”項,在編輯窗口左側(cè)選擇“計算機配置→策略→管理模板→系統(tǒng)→Windows時間服務→時間提供程序”項(圖9),在右側(cè)窗口雙擊“配置Windows NTP客戶端”項,在其屬性窗口(圖10)中選擇“已啟用”項,在“NtpServer”欄中輸入“dc1.xxx.com,0x1”,在“SpecialPollInterval”欄中設(shè)置同步的周期,單位為秒,例如設(shè)置為3600,表示每隔1小時同步一次。
在右側(cè)雙擊“啟用Windows NTP客戶端”和“啟用Windows NTP服務器”項,在其屬性窗口中分別選擇“已啟用”項。在客戶端執(zhí)行“gpupdate /force”命令,刷新組策略,讓上述配置生效。在客戶機上執(zhí)行“net stop w32time”和“net start w32time”命令,重啟時間同步服務,就可以手動與PDC主機之間同步時間了。如果時間同步服務出現(xiàn)問題,可以執(zhí)行“net stop w32time”“w32m /unregister”“w32m /register”“net start w32time”等命令,來修復該組件。在一般情況下,是允許域控和客戶機之間存在時間差的,但不能超過5分鐘。
如果業(yè)務場景對時間要求很嚴格,可以在域控上打開上述組策略編輯器,選擇“計算機配置→策略→Windows設(shè)置→安全設(shè)置→賬戶策略→kerberos策略”項,在右側(cè)雙擊“計算機時鐘同步的最大容差”項,來設(shè)置最佳的時間差(圖11)。對于很多客戶端來說,可能因為種種原因沒有激活“Windows Time”服務,為此可以在域控上打開默認組策略,在編輯器中打開“計算機配置→策略→Windows設(shè)置→安全設(shè)置→系統(tǒng)服務”項。
在右側(cè)雙擊“Windows Time”,將其設(shè)置為自動啟動方式(圖12)。為了防止用戶隨意更改時間,可以在上述編輯器中打開“計算機配置→策略→Windows設(shè)置→安全設(shè)置→本地策略→用戶權(quán)限分配”項,在右側(cè)雙擊“更改系統(tǒng)時間”項,在打開窗口中顯示可以更改時間的賬戶和組(圖13),建議將其全部刪除,這樣可以保證域中主機之間的時間一致性。
使用專用工具,保持時間同步
使用Network Time System這款軟件,也可以讓內(nèi)網(wǎng)主機的時鐘保持一致。在選定的服務器上運行NTS服務器端程序,在其主界面中點擊“Settings”按鈕,在設(shè)置窗口中(圖14)的“Internal Time Server”面板中選擇“NTSv2 via UDP broadcasting”項,表示讓NTS服務器程序自動向內(nèi)網(wǎng)發(fā)送UDP對時數(shù)據(jù)包。在“every x”欄中設(shè)置自動發(fā)送對時UDP數(shù)據(jù)包的周期,默認為3分鐘。
應該指出,安裝NTS服務器端程序的主機應該處于聯(lián)網(wǎng)狀態(tài),可以訪問Internet,便于其從Internet上的時間服務器(也就是時間源)上取得準確的時間。在“External Time Sources”面板中可以添加新的外部時鐘服務器,設(shè)置自動對時間隔等。當然,可以在局域網(wǎng)中部署多臺NTS對時服務器。在客戶機上運行NTS客戶端程序,在其管理窗口中點擊“Settings”按鈕,在設(shè)置窗口中打開“Scheduling”面板中的“Synchronize time”項,在“every x”欄中設(shè)置同步的時間間隔,默認是2分鐘。
這樣,經(jīng)過預設(shè)的時間間隔后,客戶端即可自動和服務器端的NTS建立網(wǎng)絡(luò)連接,進而執(zhí)行時間同步操作。在“Time Source”面板中選擇“Find server via UDP Boardcasting”項,表示允許接受服務器的UDP廣播信息。如果在服務器端開啟了UDP廣播功能,客戶端就可以自動執(zhí)行對時操作。如果存在多臺NTS服務器,可以選擇“Custom server list”項,點擊“Add”按鈕,輸入NTS服務器端地址,來將其添加到服務器列表中。