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ıyor
  • The time service has not synchronized the system time for X seconds: Uzun süredir senkronizasyon yok
  • An 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:manual ile 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.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir