Chrony NTP Server Nedir?

chrony, Ağ Zaman Protokolünün (NTP) bir uygulamasıdır . NTP'nin referans uygulaması olan ntpd'ye bir alternatiftir . Unix benzeri işletim sistemlerinde Linux ve macOS dahil çalışır ve GNU GPL v2 altında yayınlanır. Red Hat Enterprise Linux 8 ve SUSE Linux Enterprise Server 15'te varsayılan NTP istemcisi ve sunucusudur ve Ubuntu Bionic ile başlayarak , hızlı ve doğru zaman senkronizasyonu için tercih chrony'dir.
Ntpd'nin güncellenmiş bir çatalı olan NTPsec'in aksine , chrony sıfırdan uygulandı. Kesintili ağ bağlantıları ( dizüstü bilgisayarlar gibi ) ve sıkışık ağlar gibi zor koşullarda bile zamanı senkronize etmek için tasarlanmıştır. ntpd'den farklı olarak , sistem saatinin donanım zaman damgası aracılığıyla eşitlenmesini destekleyerek, bir LAN üzerindeki makineler arasındaki zaman eşitlemesinin doğruluğunu artırır. Ayrıca manuel giriş ile senkronizasyonu destekler ve yalıtılmış bir ağ içinde zaman düzeltmesi gerçekleştirebilir. Zamanın doğru tutulması bilgisayarların iletişim kurması, sistem bileşenlerini çalıştırması ve daha fazlası için çok önemlidir ve chrony bu sorunlarınıza yardımcı olabilir.
chrony'nin diğer zaman senkronizasyonu uygulamalarıyla karşılaştırması için chrony sitesine bakabilirsiniz.
Doğru zaman işleyişi, ağ tabanlı bilgisayarlar arasında güvenilir iletişim için gereken en önemli yapılandırmalardan biridir. Ayrıca sistem zamanlayıcıları ve cronjobs dahil olmak üzere sistem bileşenlerinin doğru zamanda çalışmasını sağlamak için gereklidir. Bilgisayarlar, doğru zamanı korumak için zamanlarını bir yukarı akış zaman sunucusuna veya bir sunucu havuzuna senkronize etmek için Ağ Zaman Protokolünü (NTP) kullanabilir. RHEL, chrony paketi tarafından sağlanan chronyd arka plan programı, varsayılan NTP istemcisidir. Alternatif olarak, chronyd arka plan programı, dahili ağınızdaki bilgisayar sistemlerine doğru zaman sağlamak için bir sunucu olarak yapılandırılabilir.
Ön Bilgi
UTC+0 kelimesi açılımı 'Universal Time Coordinate' şeklindedir. Standart zaman başlangıcını ifade etmek için kullanılmakta olan bir kısaltmadır. UTC, Greenwich'de yer alan sıfır derece boylamını esas almaktadır. UTC, eş güdümlü evrensel zaman anlamında kullanılmakta olan bir kelime olarak ifade edilebilir. UTC, İngiltere tabanlı olarak belirlenmiş bir saattir. Türkiye saati ise UTC+3 olarak belirlenmiştir.
Bir ntp sunucu kurarken ilk aşamada timezone doğru ayarlamanız gerekmektedir. Aksi halde ntp sunucusunu eşleşme yaparken her zaman UTC+0 baz alacaktır. https://www.ntppool.org/zone gibi ntp sunucuları her zaman UTC+0 baz aldığını bilmekte fayda var. Buda demek oluyor türkiye değil farklı bir sunucuyu seçilse bile eğer timezone doğru ise saatiniz doğru olacaktır. Ancak türkiye'yi seçmek her zaman doğru olandır. Aşağıdaki örnekte fransa sunucusu ayarlandığı halde UTC+0 baz alındığı için saatin doğru olduğunu görebilirsiniz.

Ön Gereksinimler
- Ubuntu 22.04 x 2
- root kullanıcı haklarına sahip kullanıcı
- vip
Sözü fazla uzatmadan kurulum aşamalarına geçelim. Normalde makinalara birden fazla ntp sunucu girebiliyorsunuz. Ancak tüm makinalarda birden fazla ntp sunucu giremediğimiz durumlar olabiliyor. Biz cluster bir sistem kuracağımız için tek sanal ip üzerinden, aşağıdaki görseldeki gibi cluster bir sistem kuracağız. İlk olarak chrony kurup gerekli ayarlamaları yapıp, keepalived ile cluster bir şekilde çalışmasını sağlayacağız. Son olarak kurulan ntp sunucusunu, diğer sunuculara tanıtacağız.

Chrony'yi bir NTP Sunucu Kurulumu
Chrony paketinin en iyi özelliklerinden biri, yetkili bir zaman sunucusunu kolayca yapılandırabilmenizdir. İlk adım olarak, chrony kurulumunu gerçekleştirelim.
Kurulumu 2 sunucu üzerinde gerçekleştiriniz.
[Debian/Ubuntu]
apt -y install chrony
[CentOS/RHEL]
yum -y install chrony

Firewall NTP Hizmetine İzin Verilmesi
Güvenlik duvarını önkoşullarda belirtilen şekilde yapılandırdıysanız, NTP havuzuyla iletişim kurmak için UDP trafiğine izin vermelisiniz.
[Firewalld]
sudo firewall-cmd --add-service=ntp --permanent
sudo firewall-cmd --reload
[UFW]
Güvenlik duvarını önkoşullarda belirtilen şekilde yapılandırdıysanız, 123 bağlantı noktasında NTP havuzuyla iletişim kurmak için UDP trafiğine izin vermelisiniz.
sudo ufw allow 123/udp

Chrony'yi bir NTP sunucusu olarak yapılandırın
Şimdi, sunucunun kendi zaman kaynağını yapılandıralım. NTP havuzu projesi, havuza katılmak isteyen operatörlerden varsayılan sunucuları kullanmak yerine iyi ağ-yerel saat sunucularını seçmelerini ister. pool.ntp.org projesi , NTP Havuz Projesinin güvenilir, hızlı ve sağlıklı kalmasını sağlar. Zaman kaynağınızı seçerken, paket kaybı olmayan ve sunucular arasında mümkün olduğunca az atlama olan istikrarlı bir ağ bağlantısı isteyeceksiniz.
pool.ntp.org projesi güvenilir, kolay kullanılır, milyonlarca kullanıcıya NTP hizmeti veren büyük sanal zaman sunucularının kümesidir. Aşağıdaki link üzerinden türkiye için sunucuları kullanabilirsiniz.
Chrony yapılandırma dosyası ilk olarak yedekleyelim.
sudo cp /etc/chrony/chrony.conf /etc/chrony/chrony.conf.bak
Şimdi /etc/chrony/chrony.conf yapılandırma dosyasını editör ile açalım.
sudo vim /etc/chrony/chrony.conf
İlk olarak varsayılan olarak gelen ubuntu ntp sunucularını, # sembolü ile kapalı hale getirelim. Saat sunucu olarak ilk sunucuya tübitak bilgileri girip, ikinci sunucuya makalenin başında bahsettiğim poot ntp sunucu bilgilerini giriyorum. Havuza isterseniz birden fazla sunucu ekleyebilirsiniz.
Önemli: Cluster sistemde sunucuya erişim gittiği zaman diğer sunucuya geçiş yapacaktır. Ancak eklediğiniz, ntp server (tüpitak vb.) erişim giderse diğer sunucu devreye girmeyecektir. Kılavuzda, örnek olması adına sunuculara 1 tane ntp server girilmiştir. En az 2 tane girmeniz doğru olacaktır.

Yukarıdaki yapılandırma aşağıdaki bilgileri sağlar.
- server/pool – bu direktif, senkronize edilecek bir NTP sunucusunu tanımlamak için kullanılır.
- stratumweight – senkronizasyon kaynağına katman başına ne kadar mesafe eklenmesi gerektiği. Varsayılan değer 0.0001'dir .
- driftfile – sürüklenme verilerini içeren dosyanın konumu ve adı.
- Makestep – bu yönerge, krony'nin saati gerektiği gibi hızlandırarak veya yavaşlatarak herhangi bir zaman farkını kademeli olarak düzeltmesine neden olur.
- logdir – chrony'nin günlük dosyasına giden yol.
Ek olarak allow yönergesi , NTP istemcilerinin bilgisayara bir NTP sunucusu olarak erişmesine izin verilen belirli bir alt ağı belirlemek için kullanılır. Sunucuda NTS etkinleştirildiğinde, NTS-KE istemcilerinin erişimini de denetler. Varsayılan ayar, hiçbir istemcinin erişimine izin verilmemesidir, yani chronyd yalnızca bir NTP istemcisi olarak çalışır. allow yönergesi kullanılırsa , chronyd hem sunucularının istemcisi hem de diğer istemcilerin sunucusu olacaktır.
Direktifin kullanımına ilişkin örnekler aşağıdaki gibidir.
Aşağıdaki örnek, allow yönergesini 192.168.0.0/24 alt ağından bağlantıları kabul edecek şekilde yapılandırır.
allow 192.168.0.0/24
Aşağıdaki örnek, allow yönergesini tüm ipv4 ve ipv6 ağından bağlantıları kabul edecek şekilde yapılandırabilirsiniz.
allow 0/0
allow ::/0
deny yönergesi, allow yönergesine benzer , ancak NTP ve NTS-KE istemcisinin belirli bir alt ağa veya ana bilgisayara erişimine izin vermek yerine onu reddetmesini sağlar. Sözdizimi aynıdır ve yönerge birden çok kez kullanılabilir. Aşağıdaki örnek, deny yönergesini 192.168.0.0/24 alt ağından bağlantıları red edecek şekilde yapılandırır.
deny 192.168.0.0/24
Aşağıdaki örnek, deny yönergesini tüm ipv4 ve ipv6 ağından bağlantıları red edecek şekilde yapılandırabilirsiniz.
deny 0/0
deny ::/0
NTP sunucusu ile senkron olmasını istediğiniz, ip aralıklarını girin.

Zaman kaynağını yapılandırdıktan ve allow yönergesini ekledikten sonra son olarak chronyd hizmetini etkinleştirip ve yeniden başlattın.
sudo systemctl enable chrony
sudo systemctl start chrony
sudo systemctl restart chrony

Chrony Senkronizasyonunu Kontrol Edin
Chrony'nin kaynakları hakkındaki bilgileri kontrol etmek için 2 sunucuda aşağıdaki komutu verebilirsiniz.
chronyc sources

Chrony'nin gerçekten senkronize olup olmadığını kontrol etmek için, ilgili bilgileri sağlayacak izleme seçeneğine sahip chronyc komut satırı programını kullanacağız.
chronyc tracking

Listelenen dosyalar aşağıdaki bilgileri sağlar:
- Reference ID – bilgisayarın o anda eşitlendiği referans kimliği ve adı.
- Stratum – ekli bir referans saati olan bir bilgisayara atlama sayısı.
- Ref time – bu, referans kaynağından yapılan son ölçümün yapıldığı UTC zamanıdır.
- System time – senkronize sunucudan sistem saatinin gecikmesi.
- Last offset– son saat güncellemesinin tahmini ofseti.
- RMS offset – ofset değerinin uzun vadeli ortalaması.
- Frequency – bu, chronyd onu düzeltmiyorsa sistem saatinin yanlış olma oranıdır . ppm (milyonda parça) cinsinden verilir.
- Residual freq – artık frekans, referans kaynaktan alınan ölçümler ile o anda kullanılmakta olan frekans arasındaki farkı gösterir.
- Skew – frekansın tahmini hata sınırı.
- Root delay – bilgisayarın eşitlenmekte olduğu katman bilgisayarına giden ağ yolu gecikmelerinin toplamı.
- Leap status – bu, aşağıdaki değerlerden birine sahip olabilen sıçrama durumudur – normal, saniyeyi ekle, saniyeyi sil veya senkronize değil.
Keepalived Kurulumu
Yük dengeleme, IP trafiğini gerçek bir kümeye dağıtma yöntemidir bir veya daha fazla yüksek düzeyde kullanılabilir sanal hizmet sağlayan sunuculardır. Keepalived, hem yük dengeleme hem de yüksek kullanılabilirlik için çerçeveler sağlar. Yük dengeleme çerçevesi iyi bilinen ve yaygın olarak kullanılan Linux'a dayanır Sanal Sunucu ( IPVS ) çekirdek modülü, Katman 4 yük dengelemesi sağlar. Keepalived, dinamik ve uyarlanabilir bir dizi sağlık denetleyicisi uygular yük dengeli sunucu havuzlarını sağlıklarına göre korumak ve yönetmek. Sanal Yedeklilik Yönlendirme Protokolü ile yüksek kullanılabilirlik elde edilir ( VRRP ). VRRP, yönlendirici yük devretmesi için temel bir tuğladır. Ayrıca, kalıcı VRRP sonlu durum makinesine bir dizi kanca uygular düşük seviyeli ve yüksek hızlı protokol etkileşimleri sağlar. Her Kaldı çerçeve esnek veya esnek olmak için bağımsız olarak veya birlikte kullanılabilir altyapıları.
Daha fazla bilgi için bakınız:
Keepalived standart paket depolarında mevcuttur.
[Debian/Ubuntu]
sudo apt install -y keepalived
[CentOS/RHEL]
sudo yum install -y keepalived
En temel Keepalived yapılandırma, iki sunucu arasında paylaşılan bir IP adresi sağlar. Yukarıdaki topolojide, sunucu1 ana, sunucu2 yedeklemedir. Her iki sunucu için yapılandırma basittir.
Dosya üzerinde, ethernet, parola ve virtual ip kısmını kendi yapınıza göre değişitirin.
Sunucu 1 yapılandırması: (master)
Editör ile konfigürasyon dosyasını açalım.
sudo vi /etc/keepalived/keepalived.conf
Aşağıdaki ayarları kendi yapımıza göre düzenleyin.
vrrp_instance VI_1 {
state MASTER
interface ens160
virtual_router_id 51
priority 255
advert_int 1
authentication {
auth_type PASS
auth_pass 12345
}
virtual_ipaddress {
10.106.250.47/24
}
}
Kayıt edip çıkın.
:wq!

Yapılandırma yönergeleri adlandırma kurallarından açıkça anlaşılmalıdır.
- vrrp_instance Bireysel bir örneği tanımlar VRRP bir arayüzde çalışan protokol. Bu örneği VI_1 olarak keyfi olarak adlandırdım.
- state Örneğin başlaması gereken başlangıç durumunu tanımlar.
- interface Arayüzü tanımlar VRRP devam eder.
- virtual_router_id Bu serinin ilk makalesinde öğrendiğiniz benzersiz tanımlayıcıdır.
- priority Bu serinin ilk makalesinde öğrendiğiniz reklamı yapılan önceliktir. Bir sonraki makalede öğreneceğiniz gibi, öncelikler çalışma zamanında ayarlanabilir.
- advert_int Reklamların ( 1 saniyede, bu durumda ) 'de gönderilme sıklığını belirtir.
- authentication Katılan sunucular için gerekli bilgileri belirtir VRRP birbirleriyle kimlik doğrulaması yapmak. Bu durumda, basit bir şifre tanımlanır.
- virtual_ipaddress IP adreslerini tanımlar ( birden fazla ) olabilir VRRP sorumludur.
Sunucu 2 yapılandırması: (Backup)
Editör ile konfigürasyon dosyasını açalım. ve aşağıdaki ayarları girelim.
sudo vi /etc/keepalived/keepalived.conf
Aşağıdaki ayarları girelim.
vrrp_instance VI_1 {
state BACKUP
interface ens160
virtual_router_id 51
priority 254
advert_int 1
authentication {
auth_type PASS
auth_pass 12345
}
virtual_ipaddress {
10.106.250.47/24
}
}
Kayıt edip çıkın.
:wq!

Servisi yeniden başlatıp durumlarını kontrol edelim.
sudo systemctl restart keepalived
sudo systemctl status keepalived

Aşağıdaki kod ile, ağ arayüzüne ve ip bilgilerine erişilebilir
ip -brief address show

Chrony and Keepalived Test
Artık test işlemleri gerçekleştirebiliriz. Dns üzerinde bir A kaydı oluşturup, sanal ip adresini girdim. Windows makinanız üzerinde denetim masasını açın ve arama kısmına saat yazın. Saat dilimi değiştir kısmından, açılan pencerede İnternet Saati alanına gelin. Sunucu kısmına NTP FQDN veya ip adresini yazıp şimdi güncelleştir butonuna basınız.

Başarılı bir şekilde ntp sunucumuz çalışmaktadır. Cluster test etmek için master sunucunun network kartını veya sunucuyu kapatın. Akabinde tekrar ntp sunucusunu güncelleştirin. İşlem başarılı bir şekilde gerçekleştirecektir.

Bilgisayarınızı NTP Saatine Eş Zamanlı Hale Getirme
Verilen ntp hizmetten faydalanabilmek için bilgisayarınıza aşağıdaki adımları uygulamanız yeterlidir. Uygulama sonrasında zaman sunucusuna bağlanarak Ulusal Zaman bilgisini alacak ve bilgisayarınızın saatini de gerekli ise düzeltecektir.
Windows Active Directory
NTP Network Time Protocolün kısaltmasıdır. Türkçesi Ağ Zaman Protokolü'dür. NTP, değişken gecikmeye sahip paket anahtarlamalı ağlar üzerindeki bilgisayarların saatlerinin eş zamanlanmasının sağlanması için kullanılan bir protokoldür.
Active Directory ortamında, İlk olarak PDC rolünün kurulu olduğu domain controllerini bulmamız gerekmektedir. Eğer hangisi olduğunu bilmiyorsanız, domain controller üzerinde CMD'yi yönetici olarak çalıştırıp aşağıdaki komutu çalıştırınız.
netdom query fsmo

PDC makinasını bulduktan sonra oturum açalım. CMD'yi yönetici olarak çalıştıralım. Aşağıdaki komutu çalıştıralım. Aşağıdaki komutta ntp sunucularını www.ntppool.org sitesinden aldım. Sunucuların uzun yıllardır, uptime süreleri yüksek olduğu için tercih ettim. İsterseniz kendi ntp sunucularınızı kurup ekleyebilirsiniz.
w32tm.exe /config /manualpeerlist:”time.onkoloji.gov.tr" /syncfromflags:manual /reliable:YES /update
Şimdi konfigürasyonu güncelleyip ve ilgili servisi yeniden başlatalım.
w32tm.exe /config /update
net stop w32time /y & net start w32time /y
Senkron süreleri, PDC ve ayarladığınız zaman sunucusu üzerinde her 64 saniyede, Domain Controller ve PDC üzerinde 4 dk'da bir ve son olarak, normal sunucu ve istemciler ile PDC her 17 dk'da saat senkronu gerçekleştirecektir.
NTP Kontrol
Artık her şey hazır. Anlık olarak ntp'yi güncellemek için aşağıdaki komutu çalıştırınız.
w32tm /resync /nowait
Ntp sunucu kaynağını aşağıdaki komutu çalıştırarak görebilirsiniz.
w32tm /query /source
Ayarlı olan ntp sunucusunun kim olduğunu ve senkron süresi vb. durumunlarını görebiliriz. Ben PDC üzerinde işlemi gerçekleştirdim. İsterseniz istemci tarafında da yapabilirsiniz. Aşağıdaki görselde 4 peer, öncelik sıraları ve saniye cinsinden senkron sürelerini görebiliyoruz.
w32tm /query /peers

Clientlerin varsayılan olarak PDC üzerinden zamanı aldığını görebiliriz. Kayıt defterinde ilgili yere gittikten sonra TYPE kısmında NT5DS yazması bunun için yeterlidir.

İşlemler tamamlandı, diğer domain controller, sunucu ve istemcilerde ek bir işlem yapmaya gerek yoktur. Ancak başka domain controller var ise kontrol etmekte fayda vardır. Diğer Domain Controllerin veya farklı bir makinanın hemen ayarlarını çekmesini isterseniz aşağıdaki komutu çalıştırınız.
w32tm /resync /nowait
Aşağıdaki gibi yetkili bir kullanıcıda kontrol ettiğimiz zaman, istemcilerin domain sunucusundan çektiğini görebilirsiniz.

Sanallaştırma Ayarları
Eğer makinanız bir sanallaştırma uygulamasında (ESXI, Hyper-V, VirtulaBox, KVM) koşuyor ise zaman senkronu olup olmadığını kontrol ediniz. Eğer kendi belirlediğini zaman sunucusunu kullanacak ise bu kısmı iptal ediniz.
Örnek, sanal makina ayarları Hyper-V

Örnek, sanal makina ayarları VCenter

NTP Varsayılan Ayarlara Döndürme
NTP ayarlarını herhangi bir durumdan varsayılan ayarlara döndürebilirsiniz.
net stop w32time
w32tm /unregister
w32tm /register
net start w32time
Bireysel Windows İşletim Sistemi
Windows makinanız üzerinde denetim masasını açın ve arama kısmına saat yazın. Saat dilimi değiştir kısmından, açılan pencerede İnternet Saati alanına gelin. Sunucu kısmına NTP FQDN veya ip adresini yazıp şimdi güncelleştir butonuna basınız.

MacOSx İşletim Sistemi
Ekranın sol üst köşesinde bulunan tarih ve saat kısmına tıklayıp açılan menüden “Tarih ve Saat Tercihlerini Aç…” ı seçin.

Açılan pencerede değişikliğe izin verebilmek için pencerenin sağ alt kısmında bulunan kilit işaretine tıklayın. Çıkan ekranda bilgisayarda kullandığınız kullanıcı adı ile şifrenizi girin.

Açılan pencerede sunucu kısmına NTP FQDN veya ip adresini yazıp şimdi güncelleştir butonuna basınız. Değişikliklerin uygulanması için pencerenin sol altında bulunan kilit sembolüne tekrar tıklayın.

GNU/Linux İşletim Sistemi
Linux tabanlı işletim sistemleri pek çok çeşit dağıtıma sahip olduklarından ntp ile ilgili ayarların yapılması dağıtımlara göre değişiklikler gösterebilmektedir. Burada verilen ayarlama yöntemi Ubuntu dağıtım içindir. Benzer bir yol izlenerek diğer dağıtımlarda da gerekli ayarlamalar yapılabilir. Ancak yine de en iyi yöntem dağıtımınıza ait yardım sayfalarına başvurmaktır. Linux tabanlı işletim sistemlerinde öncelikle ntpdate ile ilgili paketlerin kurulu olduğundan emin olun. Aşağıdaki komutu çalıştırarak paketi yükleyebilirsiniz.
sudo apt -y install ntpdate

Şimdi ntp sunucunuzun FQDN veya ip adresini yazıp ile ntpdate komutunu senkronize edin.
sudo ntpdate -dv ntp-server

NTP Sunucusuna Bağlı Clientleri Kontrol Etme
Yönlendirme sonrasında sonra clients komutunu tekrar çalıştırdığımızda Chrony NTP sunucumuza yapılmış olan bağlantıları aşağıdaki gibi gözlemleyebilirsiniz.
sudo watch chronyc clients

Açılan pencerede, 2 saniyede bir güncellenecektir ve dahil olan istemcileri görebilirsiniz.
