Michal Dobšovič

Môj blog nielen o IT

Rozbitý čas v doméne?

Správne nastavený čas v doménovom prostredí je jedna z najdôležitejších vecí, ktoré musíte vedieť v doméne zabezpečiť. Nie je to kvôli užívateľom, ktorí používajú hodiny pre svoju potrebu, ale hlavne pre správne fungovanie autentifikácie, pretože ak sa čas na počítači líši o viac ako 5 minút, nebudete sa vedieť prihlásiť alebo nebudete vedieť pristupovať k prostriedkom domény.

Viackrát som sa stretol s problémom, kedy počítače nemajú správne synchronizovaný čas a okrem toho, že to nevyzerá dobre, užívatelia sa stretávajú s praktickými problémami, že sa nemôžu prihlásiť alebo sa nevedia dostať k potrebným dokumentom v sieti.

Ako funguje synchronizácia času?

Stanice a servery v doméne synchronizujú svoj čas z doménového radiča. Ak je doménových radičov v doméne viac, zosynchronizuje sa čas z ktoréhokoľvek radiča v doméne. Samotné doménové radiče teda musia mať tiež medzi sebou správne nastavenú synchronizáciu času, aby nevznikali rozdiely medzi jednotlivými klientmi. Funguje to teda tak, že doménové radiče synchronizujú svoj čas s tým radičom, na ktorom beží rola PDC emulator (spravidla to býva ten prvý, ktorý bol v doméne nainštalovaný). PDC emulator si svoj čas synchronizuje s nejakým externým NTP serverom, tým pádom je čas v doméne správny a konzistentný. Synchronizáciu času znázorňuje nasledovný obrázok:

Synchronizácia času v doméne

Analýza situácie

Najskôr je vhodné zistiť, kde je problém, aby sme nemuseli zbytočne nastavovať celú doménu. Zistíme to jednoducho:

Má problém iba jeden počítač alebo ich je viac?

Ak je problémom iba jeden počítač (stanica, server), treba sa toto zariadenie prihlásiť a zistiť, odkiaľ si synchronizuje čas. To sa dá spraviť z administrátorského cmd.exe príkazom:

w32tm /query /source

Pokiaľ príkaz vrátil názov doménového radiča, klient si synchronizuje čas z neho. Čokoľvek iné znamená, že klient nepoužíva doménový čas.

Majú problém všetky počítače?

Tiež je nutné skontrolovať, či sa synchronizujú z doménového radiča alebo nie. Ak príkaz vypisuje Local CMOS clock znamená to, že buď majú všetky počítače zlú konfiguráciu (nepravdepodobné), alebo že je problém s doménovými radičmi. Preto je nutné spustiť diagnostiku DC priamo na doménovom radiči pomocou príkazu

dcdiag /s:NAZOV_DC

Tento nástroj urobí diagnostické testy na zadané DC, resp. ak parameter vynecháme, urobí diagnostiku na lokálnom DC. Najviac nás zaujíma test Advertising, ktorý by mal byť úspešný. Diagnostika by teda mala vypísať toto:

Testing server: Bratislava\DC2
Starting test: Advertising
......................... DC2 passed test Advertising

Pokiaľ vypíše niečo iné, problém može byť:

  • nefunkčná synchronizácia medzi DC a PDC
  • nebežiaca služba Windows Time na DC
  • nastavenie firewallu medzi DC a PDC, resp. medzi DC a ostatnými stanicami
  • medzi nebom a zemou 🙂

Najviac nám samozrejme prezradí Event Viewer v logoch, takže odporúčam pozrieť a tým zistiť, čo je príčinou problému.

Nastavenie PDC

Štandardne by sa PDC mal synchronizovať s nejakým verejným NTP serverom. Na to je potrebné poznať adresu NTP servera (dá sa nájsť napríklad na pool.ntp.org, alebo môžete použiť rovno NTP server Microsoftu – time.windows.com). PDC musí byť pochopiteľne schopný s NTP serverom komunikovať, t.j. musí byť schopný použiť Outgoing UDP port 123. Keďže PDC bude potom zdroj času pre ostatné zariadenia v sieti, je nutné, aby bol schopný prijímať aj požiadavky cez NTP, t.j. musí mať povolené pravidlo Incomming UDP port 123. Keď máme potrebné informácie, môžeme vyresetovať nastavenia služby Windows Time, nakonfigurovať službu a použiť konfiguráciu. Na to budeme potrebovať administrátorský cmd.exe a nasledovné príkazy:

Zastavenie služby Windows Time:

net stop w32time

Zmazanie nastavení:

w32tm /unregister

Vytvorenie štandardných nastavení:

w32tm /register

Spustenie sluťby Windows Time:

net start w32time

V tejto chvíli máme spustenú službu Windows Time s jej štandardnými nastaveniami. Následne potrebujeme nakonfigurovať zdroj času, čo urobíme opäť z príkazového riadka:

w32tm /config /manualpeerlist:time.windows.com,0x1 /syncfromflags:manual /reliable:yes /update

Teraz je nutné reštartovať službu Windows Time a aktualizovať čas manuálne:

net stop w32time
net start w32time
w32tm /resync /rediscover

Ak sa nám čas aktualizoval bez problémov, PDC je funkčný a môžeme postúpiť ďalej na opravu ostatných doménových radičov. Samozrejme, že je dobré skontrolovať, či všetko funguje tak, ako má pomocou príkazov:

w32tm /query /source
w32tm /query /configuration

Nastavenie doménových radičov

Pokiaľ už PDC správne funguje, potrebujeme doménovým radičom oznámiť, že sa majú synchronizovať s hierarchiou domény, t. j. v administrátorskom cmd.exe spustíme nasledovné príkazy:

Vyresetujeme všetky nastavenia služby Windows Time:

net stop w32time
w32tm /unregister
w32tm /register
net start w32time

Nastavíme synchronizáciu so štruktúrou domény:

w32tm /config /syncfromflags:domhier /update

Reštartujeme službu Windows Time a aktualizujeme čas:

net stop w32time
net start w32time
w32tm /resync /rediscover

A skontrolujeme, či všetko funguje správne:

w32tm /query /source
w32tm /query /configuration

Teraz by sme mali vidieť, že DC aktualizujú svoj čas z PDC.

To, čo je pri DC dôležité je, aby bežala služba Windows Time, aby jej spúšťanie bolo nastavené na Automatic a aby príkaz dcdiag zbehol v časti Advertising správne, t. .j výsledok testu musí byť Passed. Rovnako je dobré skontrolovať, či je povolené pravidlo Inbound UDP port 123 a či NTP server aj beží, čo sa dá skontrolovať napr. príkazom:

nestat -anp udp | findstr 123

Správny výpis by mal vyzerať takto:

UDP 0.0.0.0:123 *:*

Nastavenie ostatných serverov a staníc

Keď nám funguje PDC a všetky DC v doméne, nastavíme aj ostatné servery, resp. stanice tak, aby svoj čas synchronizovali so štruktúrou domény. Tento krok však väčšinou nie je nutné robiť, keďže členovia domény majú tieto nastavenia automaticky. Postup je rovnaký ako pri nastavovaní ostatných DC (viď vyššie).

Na čo si dať pozor?

Pokiaľ sú DC rozbehnuté ako virtuálne stroje, je dôležité, aby virtualizačný host (Hyper-V, VMWare, atď.) „netlačili“ svoj lokálny čas ako zdroj času pre virtuálne DC. Dá sa to zakázať vypnutím služby Time Synchronization v nastavení konkrétneho virtuálneho stroja v Hyper-V:

Vypnutie Time Synchronization v Hyper-V

Pokiaľ používate VMWare, postup na vypnutie synchronizácie času nájdete na ich KB.

Záver

Verím, že tento článok niekomu môže pomôcť, nakoľko na internete sa veľmi ťažko zháňajú (funkčné) riešenia na tento problém. Nie je síce problém nájsť hŕstku príkazov, ktoré treba spustiť, ale vždy je dobré rozumieť tomu, čo vlastne do príkazového riadku píšete 🙂

Pokiaľ sa chcete dozvedieť viac, rád vás uvidím na niektorom z mojich kurzov Windows Server.