NTP (Network Time Protocol) en eski Internet protokollerinden biridir. David Mills tarafından Delaware Üniversitesi'nde geliştirilmiştir. Benzer protokollerde olduğu gibi NTP de milisaniye bazında bilgisayarların saatlerini senkronize etmek için UTC (Coordinated Universal Time) kullanır ve UDP 123.porttan çalışır.
NTP Neden Bu Kadar Önemli ??
Cisco cihazların dahili bir saat kaynakları olmadığı için ve cihaz açılıp kapandığında üzerindeki saat varsayılan zaman değerine döndüğü için cihaz üzerindeki zaman bazlı yazılımlar çalışamaz hale gelir. Bu yüzden de sadece Cisco cihazlar değil hemen hemen bütün network cihazları zaman kaynağı olarak harici bir kaynağı NTP protokolü üzerinden kullanırlar.
Cisco routerlar için, zaman ayarının doğru olması çok önemlidir çünkü, üzerinde çok çeşitli servisler çalışır. Örneğin, log servisi her logun tarih ve saatini gösterir ki bu da troubleshoot için oldukça kritik bir önem sağlar.
Bir diğer örnek, koordineli çalışan dağıtık prosedürler için geçerlidir. Bu prosedürlerin doğru sırada çalışması gerekir. Yine ağ üzerinde koordineli çalışan güvenlik mekanizmaları için söyleyebiliriz ya da birçok bilgisayar tarafından senkronize yapılan dosya sistem güncellemelerini.
Hava trafik sistemleri için de oldukça önem arz eden zaman senkronizasyonu NTP ile sağlanır.
İşletim Sistemlerine Göre NTP
Unix
Modern Unix Sistemlerde NTP istemcisi kernel alanında sürekli olarak çalışan bir daemon'dır. NTP ayarları dağıtıma bağlı olarak ya "/etc/ntp.conf" ya da "/etc/xntp.conf" dosyasından yapılır.Çoğu ntp.conf dosyasında iki sunucu ismi mevcuttur. Birisi, saat ayarının yapılması istenen sunucunun adı ve diğeri de sahte bir IP adresidir. Sahte IP adresi ağ problemleri olması durumunda veya NTP sunucusunun kapalı olması/çökmesi durumunda kullanılır. Sistemdeki NTP uygulaması, uzak NTP sunucusu ayağa kalkınca, sistem saatini tekrar ona göre ayarlayacaktır. Bu iki sunucudan birincisi asıl sunucu olarak işlem yapar, ikincisi ise yedek amaçlıdır. Ayrıca bu hedef dosyanın yeri de belirtilmelidir. NTP zamanla, sistem saatindeki hata oranını "öğrenecek" ve kendini buna göre ayarlayacaktır.
NTP konfigürasyon dosyası /etc/ntp.conf, xntpd “daemon” ının başlangıçta kullandığı şu bilgileri içerir:
- Olası senkronizasyon sunucularının listesi
- Hangi kriterlere göre senkronizasyon sunucunun seçileceği
- Sunucunun ana makineye bağlanırken içerdiği kısıtlamalar
- NTP paketlerinin ağda yayınlanıp yayınlanmayacağı
- Broadcast (tüme gönderim) NTP paketlerinin dinlenip dinlenmeyeceği
- Multicast (çoğa gönderim) NTP paketlerinin dinlenip dinlenmeyeceği
- Driftfile dosyasının yeri
- NTP bağlantılarının görüntülenip görüntülenmeyeceği
- Ana makineye konfigürasyon yenileme izninin verilip verilmeyeceği
Microsoft Windows
Microsoft Windows NT 4.0, NTP ile birlikte gelmemişti. Fakat Windows 2000 ve Windows XP 'den itibaren bütün Windows versiyonları, bilgisayar saatini NTP sunucu ile senkronize eden Windows Time Service'i içermektedir.W32Time Servisi uygulamaların ihtiyacını karşılayan tam donanımlı bir NTP çözümü değildir.
Esas olarak şunları üstlenir:
- Kerberos versiyon 5 kimlik kanıtlama protokolünün çalışmasını sağlamak.
- İstemci bilgisayarlar için gevşek senkronizasyon süresi sağlamak.
NTP Clock Strata
NTP, saat kaynaklarının hiyerarşik, yarı katmanlı sistem katmanlarını kullanır. Bu hiyerarşinin her katmanı "stratum" olarak adlandırılır ve 0 'dan başlayarak katman numarası atanır.Stratum seviyesi refereans saate olan uzaklığı tanımlar. Stratum bir kalite veya güvenilirlik göstergesi değildir. Stratum ifadesinin burda kullandığımız şekli telekomünikasyon sistemlerinde kullanılan clock strata kavramından farklıdır.
Stratum 0
- Bu cihazlar atomik saatler (caesium gibi), GPS saatler yada diğer radio saatlerdir ve genelde networke bağlı değildirler, local olarak bir bilgisayara bağlıdırlar.
- Bunlar Stratum 0 cihazlara bağlı bilgisayarlardır. Normalde NTP üzerinden Stratum 2 sunuculardan zamanlama talebinde bulunan sunucular gibi hareket ederler.
- Stratum 2
- Bunlar Stratum 1 sunuculara NTP isteği gönderen bilgisayarlardır. Stratum 2 bilgisayar, birkaç tane Stratum 1 sunucuya referens eder ve en iyi data örneklerini toplamak için NTP algoritmasını kullanır ve bu esnada da yanlış ise herhangi bir Stratum 1 sunucuyu drop eder. Stratum 2 bilgisayarlar eşdüzey gruptaki bütün bilgisayarlar için daha kararlı bir saat ayarı sağlamak için diğer Stratum 2 bilgisarlarla eşleşir.
- Stratum 3
Bu bilgisayarlar tam olarak Stratum 2 gibi data örneklemesi ve eşleşmesindeki NTP fonksiyonlarının aynısını kullanır.
Cisco Router'da NTP Konfigürasyonu
Buradaki örneklerde bir Cisco router'ın yazılım saatini NTP gibi harici bir kaynaktan senkronize etmesini ve bu router'ınızın dahili newtork cihazlarınız için bir NTP sunucu gibi nasıl davranacağını ele alacağız.
Başlangıç olarak NTP güncellemelerini ve senkronizasyonu harici bir public NTP sunucudan sağlayan bir router konfigüre edelim. Bu router'ın saati devamlı olarak senkronize olacak fakat bu router dahili hostlar için bir NTP sunucu görevi üstlenmeyecektir.
Router'ı ISP isim sunucusu sayesinde FQDN (fully qualified domanin name) adını çözmesi için konfigüre etmeliyiz:
R1(config)# ip nameserver 195.170.0.1
Şimdi de Cisco router'ın güncellemeleri, public bir NTP sunucudan alması için ayarlamalıyız:
R1(config)# ntp server 1.gr.pool.ntp.org
Bu komutu uyguladığımız anda router, ip'ye ait FQDN adını çözecek ve senkronizasyona başlayacak.
Dolayısıyla artık router'ın doğru bir şekilde konfigüre edildiğini ve senkronizasyon beklediğini doğrulayabiliriz.
R1# show ntp associations
address ref clock st when poll reach delay offset disp
~195.97.91.22 131.188.3.221 2 30 64 1 0.000 -1539.9 7937.5
* sys.peer, # selected, + candidate, - outlyer, x falseticker, ~ configured
R1# show ntp status
Clock is unsynchronised, stratum 16, no reference clock
nominal freq is 250.0000 Hz, actual freq is 250.0006 Hz, precision is 2**24
reference time is 00000000.00000000 (02:00:00.000 Greece Mon Jan 1 1900)
clock offset is 0.0000 msec, root delay is 0.00 msec
root dispersion is 0.00 msec, peer dispersion is 0.00 msec
loopfilter state is 'FSET' (Drift set from file), drift is -0.000002405 s/s
system poll interval is 64, never updated.
'show ntp associations' komutu sistemin, belirttiğimiz NTP sunucu ile senkronize olacak şekilde konfigüre edildiğini ama henüz senkronize olmadığını gösteriyor. Senkronize olduğunda ise, tilda (~) sembolünün önünde yıldız (*)sembolünü göreceğiz.
Router'ı ISP isim sunucusu sayesinde FQDN (fully qualified domanin name) adını çözmesi için konfigüre etmeliyiz:
R1(config)# ip nameserver 195.170.0.1
Şimdi de Cisco router'ın güncellemeleri, public bir NTP sunucudan alması için ayarlamalıyız:
R1(config)# ntp server 1.gr.pool.ntp.org
Bu komutu uyguladığımız anda router, ip'ye ait FQDN adını çözecek ve senkronizasyona başlayacak.
Dolayısıyla artık router'ın doğru bir şekilde konfigüre edildiğini ve senkronizasyon beklediğini doğrulayabiliriz.
R1# show ntp associations
address ref clock st when poll reach delay offset disp
~195.97.91.22 131.188.3.221 2 30 64 1 0.000 -1539.9 7937.5
* sys.peer, # selected, + candidate, - outlyer, x falseticker, ~ configured
R1# show ntp status
Clock is unsynchronised, stratum 16, no reference clock
nominal freq is 250.0000 Hz, actual freq is 250.0006 Hz, precision is 2**24
reference time is 00000000.00000000 (02:00:00.000 Greece Mon Jan 1 1900)
clock offset is 0.0000 msec, root delay is 0.00 msec
root dispersion is 0.00 msec, peer dispersion is 0.00 msec
loopfilter state is 'FSET' (Drift set from file), drift is -0.000002405 s/s
system poll interval is 64, never updated.
'show ntp associations' komutu sistemin, belirttiğimiz NTP sunucu ile senkronize olacak şekilde konfigüre edildiğini ama henüz senkronize olmadığını gösteriyor. Senkronize olduğunda ise, tilda (~) sembolünün önünde yıldız (*)sembolünü göreceğiz.
'ref. clock' sütunu bizim public sunucumuzun (1.gr.pool.ntp.org) senkronize olacağı NTP sunucunun IP adresidir.
'st' sütunu ise Stratum seviyesini göstermektedir. Burada değer 2'dir. Genel kural olarak, her zaman daha düşük Stratum seviyesine sahip sunucu ile senkronizasyon sağlanmalıdır.
Diğer bir deyişle Stratum seviyesi daha düşük olan bir cihaz daha yüksek olan bir cihaza göre clock durumunu ayarlar.
'show ntp status' komutu henüz NTP sunucuya senkronize olmadığımızı
"clock is unsynchronised" ifadesiyle belirtir ve ayrıca mevcut sistem zamanını bize gösterir : 1st of Jan. 1900.
Diğer bir deyişle Stratum seviyesi daha düşük olan bir cihaz daha yüksek olan bir cihaza göre clock durumunu ayarlar.
'show ntp status' komutu henüz NTP sunucuya senkronize olmadığımızı
"clock is unsynchronised" ifadesiyle belirtir ve ayrıca mevcut sistem zamanını bize gösterir : 1st of Jan. 1900.
Birkaç dakika sonra, komut satırında aynı komutu tekrarladığımızda şu sonucu alırız:
R1# show ntp associations
address ref clock st when poll reach delay offset disp
*~195.97.91.220 131.188.3.221 2 19 64 377 0.000 -59.272 5.317
* sys.peer, # selected, + candidate, - outlyer, x falseticker, ~ configured
R1# show ntp status
Clock is synchronised, stratum 3, reference is 212.251.14.84
nominal freq is 250.0000 Hz, actual freq is 250.0007 Hz, precision is 2**24
reference time is CD94CFEB.901B3679 (01:17:15.562 Athens Sun Apr 19 2009)
clock offset is -0.0592 msec, root delay is 0.09 msec
root dispersion is 0.12 msec, peer dispersion is 0.00 msec
loopfilter state is 'CTRL' (Normal Controlled Loop), drift is -0.000003099 s/s
system poll interval is 64, last update was 476 sec ago.
address ref clock st when poll reach delay offset disp
*~195.97.91.220 131.188.3.221 2 19 64 377 0.000 -59.272 5.317
* sys.peer, # selected, + candidate, - outlyer, x falseticker, ~ configured
R1# show ntp status
Clock is synchronised, stratum 3, reference is 212.251.14.84
nominal freq is 250.0000 Hz, actual freq is 250.0007 Hz, precision is 2**24
reference time is CD94CFEB.901B3679 (01:17:15.562 Athens Sun Apr 19 2009)
clock offset is -0.0592 msec, root delay is 0.09 msec
root dispersion is 0.12 msec, peer dispersion is 0.00 msec
loopfilter state is 'CTRL' (Normal Controlled Loop), drift is -0.000003099 s/s
system poll interval is 64, last update was 476 sec ago.
Yeni çıktıya bakarsak, Cisco router'ın public NTP sunucu ile senkronize olduğunu (*) görebiliriz. Çıktıda da görüldüğü gibi (poll sütunu) her 64 saniyede bir public NTP sunucu poll edilecektir.
'show ntp status' komutu senkronizasyonu ayrıca doğrulaycaktır. Burada gördüğümüz gibi router Stratum seviyesini 3'e ayarlamıştır. Burada referansın Stratum 2 olması beklenir.
Şimdi artık saat doğru bir şekilde karşımıza çıkar : (01:17:15.562 Athens Sun Apr 19 2009).
Software ve Hardware Clock Senkronizasyonu
Bir Cisco routerda software ve hardware saatleri farklı olabilir.
Hardware clock (calendar) router kapatılsa yada reboot edilse bile sürekli çalışır. Software clock ise böyle durumlarda silinir.
Şimdi bunları birbiriyle nasıl senkronize edeceğimize bakalım.
Aşağıdaki komutlar router'da iki saat arasındaki zaman farkını gösteriyor:
R1# show clock
01:51:31.532 Athens Sun Apr 19 2009
R1# show calendar
01:51:42 Athens Sun Apr 19 2009
01:51:31.532 Athens Sun Apr 19 2009
R1# show calendar
01:51:42 Athens Sun Apr 19 2009
Aradaki fark çok az olmasına, ağdaki senkronizasyonu olabildiğince sağlamak istediğimiz durumlar olabilir.
Unutmamız gereken nokta 'show clock' komutu routerın software clock değerine referans ederken 'show calendar' komutu hardware clock değerine referans eder.
Bu iki saati senkronize edebilmek için yapmamız gereken;
R1# configure terminal
R1(config)# ntp update-calendar
R1(config)# ntp update-calendar
'ntp update-calendar' komutu hardware saatin sistemin software saatine senkronize olmasını sağlar.
Sistemimizi Nasıl Yetkili bir NTP Sunucu Yapabiliriz ?
Eğer sistemimizin yetkili bir NTP sunucu olmasını ve diğer dahili router'ların yada makinaların senkronizasyonunu sağlamasını istiyorsak şu komutu kullanmalıyız:
Router bu komutla NTP sunucu gibi hareket eder ve dahili istemcilerin NTP taleplerine cevap verir.
"show ntp associations" komutu ile router'ın saat senkronizasyonunu kendi üzerinden yaptığını görebiliriz.
R1# show ntp associations
address ref clock st. when poll reach delay offset disp
*~127.127.1.1 LOCL. 7 4 16 377 0.000 0.000 0.253
~195.97.91.220 131.188.3.221 2 64 64 1 0.000 -179.09 7937.5
* sys.peer, # selected, + candidate, - outlyer, x falseticker, ~ configured