Windows Server’da Zaman Senkronizasyonu Sorunlarını Giderme: W32tm Kullanımı
Zaman senkronizasyonu sorunları, görünürde önemsiz gibi görünse de Active Directory ortamlarında Kerberos kimlik doğrulama hatalarından SQL Server replikasyon problemlerine, log tutarsızlıklarından sertifika doğrulama hatalarına kadar pek çok kritik soruna yol açabilir. Bir sabah gece vardiyasından devraldığınız sunucuda kullanıcılar oturum açamıyor, event log’larda Kerberos hataları dolup taşıyor ve kimse nedenini bilmiyorsa, ilk bakacağınız yer saat farkı olmalı. Bu yazıda Windows Server ortamlarında zaman senkronizasyonu sorunlarını w32tm aracıyla nasıl tespit edip çözeceğinizi gerçek dünya senaryolarıyla ele alacağız.
Zaman Senkronizasyonu Neden Bu Kadar Kritik?
Active Directory, Kerberos protokolüne dayanır ve Kerberos’un temel çalışma prensibi zaman damgalarına dayalı bilet doğrulamasıdır. RFC 4120 standardına göre istemci ile sunucu arasındaki maksimum saat farkı 5 dakikadır. Bu değeri aşan sistemlerde kimlik doğrulama tamamen çalışmayı durdurur.
Bunun dışında zaman kaymasının tetiklediği sorunlar şunlardır:
- Kerberos kimlik doğrulama hataları: Event ID 4, 14 ve KDC_ERR_SKEW gibi hatalar
- SQL Server Always On / Replikasyon sorunları: Log sequence number uyumsuzlukları
- SSL/TLS sertifika hataları: Geçerlilik süresi hesaplama hataları
- DFSR replikasyon gecikmeleri: Dosya sistemi çakışmaları
- Scheduled task sapmaları: Görev zamanlamasının kayması
- Log analizi güçlüğü: Farklı sunuculardaki log’ları kronolojik sıralamak imkansız hale gelir
Uyarı olarak şunu da belirteyim: Sanallaştırma ortamlarında (Hyper-V, VMware) bu sorunlar çok daha sık karşınıza çıkar çünkü VM’ler host makineyle zaman senkronizasyonu konusunda ek bir katmana sahiptir.
W32tm Nedir ve Ne İşe Yarar?
w32tm, Windows Time Service’i yönetmek için kullanılan komut satırı aracıdır. Windows XP’den bu yana Windows işletim sistemlerinde yerleşik olarak gelir. NTP (Network Time Protocol) istemcisi ve sunucusu olarak çalışabilen bu araç sayesinde zaman kaynaklarını yapılandırabilir, mevcut durumu sorgulayabilir, sorunları teşhis edebilir ve servisi yeniden yapılandırabilirsiniz.
Windows Time Service (W32Time) arka planda çalışan bir Windows servisidir ve varsayılan olarak otomatik başlatılır. Ancak bu servisin doğru yapılandırılmamış olması veya kaynakla bağlantı kuramaması çok yaygın bir durumdur.
Mevcut Durumu Sorgulamak
Önce mevcut durumu anlamalısınız. Aşağıdaki komutlarla başlayın.
Temel Durum Sorgulama
w32tm /query /status
Bu komutun çıktısı şu bilgileri verir:
- Leap Indicator: Saat ayarlaması gerekip gerekmediği
- Stratum: Zaman kaynağının hiyerarşik konumu (1 = doğrudan atom saatinden, 2 = Stratum 1’den alan sunucu)
- Precision: Yerel saat hassasiyeti
- Root Delay / Root Dispersion: Zaman kaynağına olan gecikme ve sapma değerleri
- ReferenceId: Bağlı olunan zaman kaynağının adresi
- Last Successful Sync Time: Son başarılı senkronizasyon zamanı
- Source: Aktif zaman kaynağı
- Poll Interval: Sorgulama aralığı
Çıktıda Source: Local CMOS Clock görüyorsanız bu büyük bir sorun işaretidir. Sunucu herhangi bir dış kaynakla senkronize olamamış ve kendi iç saatine düşmüş demektir.
Yapılandırma Detaylarını Görme
w32tm /query /configuration
Bu komut mevcut NTP yapılandırmasını gösterir. Hangi NTP sunucularının tanımlı olduğunu, senkronizasyon türünü (NTP, NT5DS, NoSync, AllSync) ve güvenlik ayarlarını buradan görebilirsiniz.
NT5DS değeri, sunucunun domain hiyerarşisinden zaman aldığı anlamına gelir ve domain üyesi sunucular için doğru ayardır. NTP ise doğrudan bir NTP sunucusundan zaman alır, PDC Emulator rolüne sahip domain controller için kullanılır.
Zaman Kaynaklarını Listeleme
w32tm /query /peers
Bu komut tanımlı NTP peer’larını ve bunlara ait senkronizasyon istatistiklerini listeler. When Last Reached alanı uzun süredir güncellenmemişse bağlantı sorunu vardır.
Senkronizasyon Testi Yapmak
Mevcut durumu anladıktan sonra aktif olarak test yapabilirsiniz.
Manuel Senkronizasyon Tetikleme
w32tm /resync /force
Bu komut anlık olarak senkronizasyon başlatır. /force parametresi büyük saat farkları varsa bile senkronizasyonu zorla uygular. Normalde Windows Time Service çok büyük farkları güvenlik nedeniyle reddeder.
Eğer komutu çalıştırdığınızda The computer did not resync because no time data was available hatası alıyorsanız, servis NTP kaynağına ulaşamıyor demektir.
Zaman Kaynağı ile Farkı Ölçmek
w32tm /stripchart /computer:time.windows.com /samples:5 /dataonly
Bu komut belirtilen NTP sunucusuyla saat farkınızı ölçer ve grafik olarak gösterir. /samples parametresi kaç ölçüm alınacağını belirtir. Çıktıdaki offset değerleri milisaniye cinsindendir ve tutarlı olarak 5000ms (5 saniye) üzerindeyse ciddi bir sorun var demektir.
Kendi domain controller’ınıza karşı da test yapabilirsiniz:
w32tm /stripchart /computer:dc01.sirket.local /samples:10 /dataonly
Gerçek Dünya Senaryosu 1: Domain Controller ile Saat Farkı
Bir müşteri ortamında sabah 08:00’de tüm kullanıcılar oturum açamaz hale geldi. Event Viewer’da Event ID 14 ve şu mesaj görünüyordu: The time provider NtpClient was unable to find a domain controller to use as a time source.
Önce PDC Emulator rolündeki domain controller’a bağlandım ve şunu çalıştırdım:
w32tm /query /status
Çıktıda Source: Local CMOS Clock ve son başarılı senkronizasyon zamanı 3 gün önceydi. Sunucu dış NTP kaynaklarına ulaşamıyordu. Firewall’da UDP 123 portu bloklanmıştı.
Firewall kuralı eklendikten sonra PDC Emulator’ı yapılandırdım:
w32tm /config /manualpeerlist:"0.tr.pool.ntp.org 1.tr.pool.ntp.org 2.tr.pool.ntp.org" /syncfromflags:manual /reliable:YES /update
Ardından servisi yeniden başlatıp senkronizasyonu zorladım:
net stop w32tm && net start w32tm
w32tm /resync /force
Senkronizasyon başarılı olduktan sonra diğer domain controller’larda da aşağıdaki komutu çalıştırdım:
w32tm /resync /rediscover /force
/rediscover parametresi domain hiyerarşisindeki zaman kaynağını yeniden keşfeder, bu önemlidir.
Gerçek Dünya Senaryosu 2: VMware Ortamında Çakışan Zaman Kaynakları
VMware ortamlarında sık karşılaşılan bir sorun, VMware Tools’un kendi zaman senkronizasyonunu yapması ve Windows Time Service ile çakışmasıdır. Bu durumda sunucu sürekli bir ileri bir geri gider ve Kerberos sporadan patlar.
Önce w32tm /stripchart ile offset’i izleyin. Değerler sürekli salınıyorsa VMware/Hyper-V zaman senkronizasyonu çakışıyor olabilir.
VMware ortamında ya VMware Tools zaman senkronizasyonunu kapatıp Windows Time Service’e güveneceksiniz, ya da tam tersini yapacaksınız. İkisini aynı anda aktif bırakmayın.
Windows Time Service’i birincil kaynak olarak kullanmak istiyorsanız, VMware Tools zaman senkronizasyonunu devre dışı bırakın ve şu registry ayarını yapın:
reg add "HKLMSYSTEMCurrentControlSetServicesW32TimeConfig" /v MaxNegPhaseCorrection /t REG_DWORD /d 3600 /f
reg add "HKLMSYSTEMCurrentControlSetServicesW32TimeConfig" /v MaxPosPhaseCorrection /t REG_DWORD /d 3600 /f
Bu değerler saniye cinsindendir. 3600 saniye = 1 saatlik maksimum düzeltmeye izin verir. Sanallaştırma ortamlarında daha toleranslı değerler gerekebilir.
Servis Yapılandırmasını Sıfırlamak
Bazen yapılandırma o kadar bozulmuş olur ki en mantıklı yol her şeyi sıfırlamaktır.
net stop w32tm
w32tm /unregister
w32tm /register
net start w32tm
w32tm /resync /force
Bu komutlar sırasıyla servisi durdurur, Windows Time Service’i sistemden kaldırır, yeniden kaydeder ve başlatır. Fabrika ayarlarına dönmüş olursunuz.
Domain member sunucularda sıfırlama sonrası NT5DS yapılandırması için:
w32tm /config /syncfromflags:domhier /update
w32tm /resync /force
Detaylı Hata Ayıklama: Debug Log Aktifleştirme
Sorun intermittent ise yani her zaman değil bazen oluşuyorsa, debug log aktifleştirip olayları kaydetmeniz gerekir.
w32tm /debug /enable /file:C:Logsw32tm.log /size:10000000 /entries:0-300
Parametreler şöyle:
- /enable: Log kaydını aktifleştirir
- /file: Log dosyasının konumu
- /size: Maksimum dosya boyutu (byte cinsinden, bu örnekte ~10MB)
- /entries: Log edilecek olay kategorileri (0-300 tüm olayları kapsar)
Birkaç saat sonra log’u inceleyebilirsiniz. Sorunu yeniden ürettikten sonra log’u kapatın:
w32tm /debug /disable
Log dosyasında NtpClient ve error kelimelerini arayarak başlayın. Sık görülen log mesajları şunlardır:
The time provider NtpClient cannot reach or is currently receiving invalid time data: NTP sunucusuna ulaşılamıyorThe time service has not synchronized the system time for X seconds: Uzun süredir senkronizasyon yokAn error occurred during the authentication of a digital signature: Güvenlik sorunu
Event Log ile Birlikte Kullanmak
W32tm sorunları Event Viewer’da System log altında kaydedilir. PowerShell ile bu logları filtreleyebilirsiniz:
Get-WinEvent -LogName System | Where-Object {$_.ProviderName -eq "Microsoft-Windows-Time-Service"} | Select-Object TimeCreated, Id, Message | Format-List
Dikkat edilmesi gereken Event ID’ler şunlardır:
- Event ID 29: Zaman senkronizasyonu yapıldı, bilgi amaçlı
- Event ID 36: Saat kaynağı değişti
- Event ID 47: Güvenilir zaman kaynağı bulunamadı
- Event ID 129: NTP sunucusuna ulaşılamıyor
Domain Genelinde Zaman Durumunu Kontrol Etmek
Büyük ortamlarda tüm sunucularda tek tek kontrol yapmak yerine domain genelinde hızlı bir kontrol yapabilirsiniz.
w32tm /monitor /domain:sirket.local
Bu komut domain’deki tüm domain controller’ların zaman durumunu ve PDC Emulator’a olan offset değerlerini gösterir. Yıldız (*) işareti PDC Emulator’ı gösterir. Offset değerleri milisaniye cinsinden olup 5000ms altında olmalıdır.
Belirli bir sunucu listesini izlemek isterseniz:
w32tm /monitor /computers:dc01,dc02,fileserver01,appserver01
Firewall ve Ağ Sorunlarını Teşhis Etmek
UDP 123 portu bloklanmışsa w32tm hiçbir zaman başarılı olamaz. Bağlantıyı test etmek için:
w32tm /stripchart /computer:pool.ntp.org /samples:3 /dataonly
Eğer bu komut error 0x800705B4 veya The wait operation timed out hatası veriyorsa UDP 123 bloklıdır. Windows Firewall tarafında kontrol edin:
netsh advfirewall firewall show rule name="Windows Time" dir=out
Kural yoksa ekleyin:
netsh advfirewall firewall add rule name="NTP Outbound" protocol=UDP dir=out localport=123 action=allow
Kurumsal firewall’da ise ağ ekibinizle koordineli çalışmanız gerekecektir. PDC Emulator’ın dış NTP kaynaklarına UDP 123 üzerinden çıkabilmesi zorunludur. Diğer tüm domain üyeleri domain controller’lar üzerinden zaman aldığı için dışarıya doğrudan erişim gerekmez.
Önerilen Yapılandırma Hiyerarşisi
Windows Server zaman senkronizasyonu için Microsoft’un önerdiği ve pratikte çalışan hiyerarşi şöyle olmalıdır:
- PDC Emulator Domain Controller: Dış NTP kaynaklarından (pool.ntp.org veya kurumsal NTP sunucusu) alır,
/syncfromflags:manualile yapılandırılır - Diğer Domain Controller’lar: PDC Emulator’dan alır,
/syncfromflags:domhier - Domain Üyesi Sunucular: Domain hiyerarşisinden alır,
/syncfromflags:domhier(varsayılan) - Workgroup Sunucular: Manuel NTP yapılandırması gerekir, domain hiyerarşisinden yararlanamazlar
Workgroup ortamında sunucu yapılandırması:
w32tm /config /manualpeerlist:"time.windows.com" /syncfromflags:manual /update
net stop w32tm && net start w32tm
w32tm /resync /force
w32tm /query /status
Sık Karşılaşılan Hatalar ve Çözümleri
“Access is denied” hatası: W32tm komutlarının büyük çoğunluğu yönetici (administrator) yetkisi gerektirir. Komutu yönetici olarak açılmış CMD veya PowerShell’den çalıştırın.
“The service has not been started” hatası: Windows Time Service çalışmıyor olabilir. services.msc üzerinden veya komut satırından net start w32tm ile başlatın. Servis başlamıyorsa w32tm /unregister ve w32tm /register ile yeniden kaydedin.
Offset değeri sürekli yüksek ama senkronizasyon başarılı görünüyor: Bu genellikle MaxPosPhaseCorrection ve MaxNegPhaseCorrection değerlerinin çok düşük ayarlandığı durumlarda olur. Büyük farklar küçük adımlarla düzeltildiği için görünürde başarılı ama gerçekte saat hala sapık olabilir. w32tm /resync /force komutunu çalıştırın.
Sanallaştırma ortamında sürekli kayma: Host makinesinin kendisi doğru zaman kaynağından beslendiğinden emin olun. Hyper-V için “Time synchronization” integration service’ini devre dışı bırakıp yalnızca Windows Time Service kullanmayı deneyin.
Sonuç
Zaman senkronizasyonu sorunları hem teşhis etmesi hem de açıklaması zor problemler arasındadır çünkü etkisi doğrudan görünmez, başka sorunlar üzerinden kendini gösterir. w32tm bu konuda son derece güçlü bir araçtır ve doğru kullanıldığında hem teşhis hem de çözüm aşamalarını tek başına üstlenebilir.
Özet olarak şu adımları takip edin: Önce w32tm /query /status ile mevcut durumu anlayın, w32tm /stripchart ile offset’i ölçün, sorun varsa yapılandırmayı düzeltin ve /resync /force ile senkronizasyonu zorlayın. Sorun tekrar ediyorsa debug log aktifleştirin ve Event Viewer ile birlikte analiz edin.
Son bir pratik öneri: PDC Emulator’ın hangi sunucu olduğunu ve zaman yapılandırmasının doğru olduğunu düzenli aralıklarla kontrol eden bir monitoring görevi kurun. Bunu erken yakalamanız, bir gün sabah 08:00’de tüm kullanıcıların kapınızda birikmesinden훨씬 daha iyidir.
