NTP (Network Time Protocol- Ağ Zamanlama Protokolü)

Eyl 06, 2013

NTP, fazlalık kapasitesi olan bir sıralı zaman dağıtım sistemidir. Ağdaki ve de hedef makinedeki algoritmaları, gecikmeleri ölçer. Bu teknikleri kullanarak saatleri saliselere kadar senkronize edebilir. NTP ayarları hangi dağıtımın kullanıldığına bağlı olarak ya  /etc/ntp.conf  ya da /etc/xntp.conf dosyasından yapılır.

Çoğu temel yapılandırmalı 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. (Bu örnekte 127.127.1.0)
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 dosyaları:

NTP konfigürasyon dosyası /ect/ntp.conf, xntpd “daemon” unun 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

Konfigürasyon dosyası istenilen formatta yazılabilir. # ile başlayan satırlar yorum satırlarıdır. İstemci modunda sunucu diğer sunuculara o anki zamanı almak için kontrol eder. Tüm sunucular kontrol edildikten sonra ana makine hangi sunucuya senkronize edileceğini seçer. Sunucuyu istemci modda yapılandırmak için NTP konfigürasyonunda kontrol edilecek sunucuların adının ve ip adresinin bulunduğu bir sunucu cümlesi olmalıdır.
 

NTP çalışma  modları:

Sistem xntpd “daemon” u ve aşağıdaki metodlar kullanılarak diğer sunucularla senkronize edilebilir:

  • İstemci modu
  • Broadcast ya da multicast istemci modu
  • Simetrik aktif mod 

İstemci modu: Bu modda sunucu diğer sunuculardan o anki zamanı almak için kontrol yapar. Tüm sunucular kontrol edildikten sonra yerel ana makine hangi sunucuyla senkronize edileceğini seçer. Sunucuyu istemci modda yapılandırmak için NTP konfigürasyonunda kontrol edilecek adının ve ip adresinin bulunduğu bir sunucu cümlesi olmalıdır.   

Broadcast ve multicast modları: Bu modda sunucu yoklama yapmaz, yerel ağdaki tüme gönderim ve çoğa gönderim NTP paketlerini dinler.
Bir sunucuyu bu modlardan birinde yapılandırmak için NTP konfigürasyon dosyasının “broadcast yes” ya da “multicast yes” cümleciğini içermesi gerekir. Yerel zaman sunucuları tüme gönderim modu tüme gönderim konfigürasyon cümleciğiyle yapılandırılmalıdır, çoğa gönderim modu ise çoğa gönderim konfigürasyon cümlesiyle yapılandırılmalıdır. Bir sunucunun NTP istemcisi olarak yapılandırılması için istemci yöneticisi kullanılabilir. Bunun dışında sunucuya “root” olarak bağlanılarak aşağıdaki adımlar takip edilebilir:
Basit bir ntp konfigürasyon dosyası hazırlansın:
 /etc/ntp.conf.

  1.  ps –ef|egrep in.xntpd komutu xntpd “daemon” un çalışmakta olduğunu gösterirse bu işlem id’sini kaydedip kill komutunu kullanarak SIGHUP sinyali gönderilsin:
    kill –HUP pid
    Bu xntpd konfigürasyon dosyasının tekrar okunmasını sağlar. xntpd çalışmıyorsain.xntpd komutu girilerek çalıştırılmalıdır.
  2.  /etc/ntp.conf dosyasındaki ntpd bakım programını (daemon) başlatmayı garantiye almak için aşağıdaki komut girilsin:
    /usr/sbin/in.xntpd::y:/etc/ntp.conf::
    Bu komut sistem tekrar başlatıldığında ntp bakım programını otomatik olarak başlatır.

NTP paylaşılan bilgisayarlarda kimlik doğrulama:

NTP paylaşılan bilgisayarlardan gelen senkronizasyon isteklerinde kimlik doğrulama için şu ayarlar yapılır:

  1. Öncelikle kimlik doğrulama isteklerinde kullanılmak için bir grup anahtar yaratılmalıdır.

     Kimlik doğrulama tanımlaması yapılandırmak istediğimiz her sunucu için
    /etc/inet/ntp.conf dosyasına aşağıdaki satırlar eklenmelidir:
    authenticate yes
    keys /etc/inet/ntp.keys
  2. Aşağıdaki satır /etc/ntp.conf dosyasına eklenir:

    trustedkey ID1 ID2 ... IDn

    Bu satır kimlik doğrulamada kullanılacak anahtarların listesidir.
  3. ntpd'nin konfigürasyon dosyasını tekrar okuması için aşağıdakiler yapılmalıdır. Bu sayede yapılan değişklikler geçerli olacaktır:
  • İşlem id'si ps komutuyla işlemlerden bulunduktan sonra kill komutuyla servisin çalışması kapatılır ve sonra tekrar başlatılır.
  • Çalışan konfigürasyon dosyasında izin verilmeyi bekleyen yeni bir anahtar varsa ntpd çalıştırılıp readkeys komutu çalıştırılır.
  • Driftfile:

    Driftfile (yığılım dosyası) /etc/ntp.conf içerisindedir ve bu ntpd’yi söyler ki bu saat yığılmasının yani sistem saatinin frekans hatasının nerede bulunabileceğini gösterir. Eğer dosya başlangıçta varsa, okunur ve bunun değeri ntpd nin frekans hatasının değerini başlatır. Saat başı ntpd tarafından güncellenir. Ntpd sunucusuna  iyi bir şekilde bağlanması hesaplandığı için bir yığılım dosyası mutlaka olmalıdır.

    Kısıtlama:

    Daha iyi bir kontrol sağlamak ve güvenliği elden bırakmamak için NTP'de kısıtlama (restrict) seçeneği kullanılabilir.

    NTP de Kısıtlama örneği:
     
    # By default, do not trust and do not allow modifications
       restrict default notrust nomodify
       
    # These hosts are trusted for time, but no modifications allowed
       restrict 172.16.0.0 mask 255.255.0.0 nomodify
       restrict 128.115.14.97 nomodify
       restrict 16.1.0.22 nomodify
    # These local addresses are unrestricted
       restrict 172.16.246.16
       restrict 127.0.0.1

    Basit Bir NTP Konfigürasyon Dosyası:

    # NTP configuration file for 172.16.246.11 (seattle.mynet.com)

       server 192.240.4.1       # ntp1.ossi.com
       server 129.189.134.6     # ntp.olivetti.com
     
       driftfile /etc/inet/driftfile

    Kısıtlama seçeneğini kullanmadan önce, düzgün çalışan bir NTP servisine sahip olunması şiddetle tavsiye edilir. Kazara, uyarlama yapılmasına kısıtlama getirebilir ve nerede hata olduğunu bulmak için çok uzun ve gereksiz zaman harcanmasına neden olabilir. NTP servisinin işini düzgün yapıp yapmadığını kontrol etmek için birkaç araç vardır. ntpq -p komutu, sistemin o anki zaman durumunu gösterecektir.

    Komplex NTP konfigürasyon dosyaları:

    Aşağıdaki Acapulco için bir ntp.conf dosyası içeriğidir:

       # NTP configuration file for 172.16.246.16 (acapulco.mynet.com)
       #
       server 128.115.14.97    # clock.llnl.gov
       server 16.1.0.22        # clepsydra.dec.com
       peer seattle.mynet.com
       peer moscow.mynet.com
       
       broadcast 172.16.246.255
       driftfile  /etc/inet/ntp.drift
       keys       /etc/inet/ntp.keys
       requestkey  65534
       controlkey  65535

       This is the ntp.keys file for acapulco:
       2313      M    APassword
       65534     M    NoSecret
       65535     M    BadKey
       #Configuration of the stratum 2 server seattle
       #This is the ntp.conf file for seattle:
       # NTP configuration for seattle (172.16.246.11)
       #
       server 129.189.134.6  # ntp.olivetti.com
       server 192.240.4.1    # ntp1.ossi.com
       peer acapulco
       peer moscow
       
       broadcast 172.16.246.255
       driftfile  /etc/inet/ntp.drift
       keys       /etc/inet/ntp.keys
       requestkey  65534
       controlkey  65535
       #This is the ntp.keys file for seattle:
       2313      M    APassword
       65534     M    NoSecret
       65535     M    BadKey

    Tabaka 2 moskova sunucusunun konfigürasyonu:

    Moskova sunucusunun ntp.conf dosyası içeriği aşağıdaki gibidir:

       # NTP configuration file for 172.16.246.7 (moscow.mynet.com)
       #
       server 130.43.2.2         # apple.com
       server 192.52.195.10      # norad.arc.nasa.gov
       peer seattle.mynet.com
       peer acapulco.mynet.com
       broadcast 172.16.246.255
       driftfile  /etc/inet/ntp.drift
       keys       /etc/inet/ntp.keys
       requestkey  65534
       controlkey  65535
       This is the ntp.keys file for moscow:
       2313      M    APassword
       65534     M    NoSecret
       65535     M    BadKey

    Broadcast istemcilerinin konfigürasyonu:

    Aşağıdaki broadcast istemcilerinin genel ntp.conf dosyası içeriğidir:

       # Peer configuration used by all broadcast clients at mynet.com
       #
       broadcastclient  yes
       broadcastdelay   0.0500
       driftfile        /etc/inet/ntp.drift
       keys             /etc/inet/ntp.keys
       requestkey  65534
       controlkey  65535
       This is the ntp.keys file:
       2313      M    APassword
       65534     M    NoSecret
       65535     M    BadKey

    NTP Servisinin kontrolü:

    NTP servisinin işini düzgün yapıp yapmadığını kontrol etmek için birkaç araç vardır:

    ntpq -p komutu, sistemin o anki zaman durumunu gösterecektir.

    # ntpq -p

         remote           refid      st t when poll reach   delay   offset  jitter
    ==============================================================
    *cudns.cit.corne ntp0.usno.navy.  2 u  832 1024  377   43.208    0.361   2.646
     LOCAL(0)        LOCAL(0)        10 l   13   64  377    0.000    0.000   0.008

    ntpdc -c loopinfo komutu; uzak sunucuya yapılan en son bağlantıdan beri sistem saatinin ne
    kadarlık bir hata yaptığını saniye cinsinden gösterir.

    # ntpdc -c loopinfo

    offset:               -0.004479 s
    frequency:            133.625 ppm
    poll adjust:          30
    watchdog timer:       404 s

    ntpdc -c kerninfo komutu, o anki kalan doğrulamayı gösterir:

    # ntpdc -c kerninfo

    pll offset:           -0.003917 s
    pll frequency:        133.625 ppm
    maximum error:        0.391414 s
    estimated error:      0.003676 s
    status:               0001  pll
    pll time constant:    6
    precision:            1e-06 s
    frequency tolerance:  512 ppm
    pps frequency:        0.000 ppm
    pps stability:        512.000 ppm
    pps jitter:           0.0002 s
    calibration interval: 4 s
    calibration cycles:   0
    jitter exceeded:      0
    stability exceeded:   0
    calibration errors:   0

    ntpdc -c kerninfo komutunun biraz değişik bir sürümü de ntptime komutudur.

    # ntptime

    ntp_gettime() returns code 0 (OK)
      time c35e2cc7.879ba000  Thu, Nov 13 2003 11:16:07.529, (.529718),
      maximum error 425206 us, estimated error 3676 us
    ntp_adjtime() returns code 0 (OK)
      modes 0x0 (),
      offset -3854.000 us, frequency 133.625 ppm, interval 4 s,
      maximum error 425206 us, estimated error 3676 us,
      status 0x1 (PLL),
      time constant 6, precision 1.000 us, tolerance 512 ppm,
      pps frequency 0.000 ppm, stability 512.000 ppm, jitter 200.000 us,
      intervals 0, jitter exceeded 0, stability exceeded 0, errors 0.

    NTP'nin nasıl çalıştığını görmenin bir diğer yöntemi de ntpdate -d komutudur. Bu komutla sistem bir NTP sunucuya bağlanır ve zaman sapması var ise bunu gösterir; ama sistem saatini ayarlamaz. 

    # ntpdate -d 132.236.56.250

    13 Nov 14:43:17 ntpdate[29631]: ntpdate 4.1.1c-rc1@1.836 Thu Feb 13 12:17:20
    transmit(132.236.56.250)
    receive(132.236.56.250)
    transmit(132.236.56.250)
    receive(132.236.56.250)
    transmit(132.236.56.250)
    receive(132.236.56.250)
    transmit(132.236.56.250)
    receive(132.236.56.250)
    transmit(132.236.56.250)
    sunucu 132.236.56.250, port 123
    stratum 2, precision -17, leap 00, trust 000
    refid [192.5.41.209], delay 0.06372, dispersion 0.00044
    transmitted 4, in filter 4
    reference time:    c35e5998.4a46cfc8  Thu, Nov 13 2003 14:27:20.290
    originate timestamp: c35e5d55.d69a6f82  Thu, Nov 13 2003 14:43:17.838
    transmit timestamp:  c35e5d55.d16fc9bc  Thu, Nov 13 2003 14:43:17.818
    filter delay:  0.06522  0.06372  0.06442  0.06442
             0.00000  0.00000  0.00000  0.00000
    filter offset: 0.000036 0.001020 0.000527 0.000684
             0.000000 0.000000 0.000000 0.000000
    delay 0.06372, dispersion 0.00044
    ofset 0.001020

    13 Nov 14:43:17 ntpdate[29631]: adjust time server 132.236.56.250 offset 0.001020 sec

    Sistem saatinin ayarlanma sürecini izlemek için ntptrace komutu kullanılabilir:. 

    ntptrace 132.236.56.250

    cudns.cit.cornell.edu: stratum 2, offset -0.003278, synch distance 0.02779
    dtc-truetime.ntp.aol.com: stratum 1, offset -0.014363, synch distance 0.00000, refid 'ACTS'

    Şayet sistem saatinin acilen ayarlanması gerekiyorsa, ntpdate uzak-sunucu-ismi komutu kullanılabilir.

    # ntpdate 132.236.56.250
    13 Nov 14:56:28 ntpdate[29676]: adjust time server 132.236.56.250 offset -0.003151 sec