Tarkibga o'tish

NTP server va chronyd sozlamalari

Vaqt zonasi va locale sozlamalari maqolasida vaqt zonasini timedatectl bilan o'zgartirish va uning System clock synchronized/NTP service maydonlarini o'qish ko'rib chiqildi — lekin u maqola soatni aslida qaysi xizmat sinxronlayotgani yoki uni qanday sozlash haqida batafsil to'xtalmadi. Zamonaviy Ubuntu/Debian va RHEL serverlarida bu vazifani odatda chrony (chronyd xizmati) bajaradi. Bu maqola chronyd ichkarida qanday ishlashini, chrony.conf ni qanday sozlashni va serverni boshqa hostlar uchun NTP manbasiga qanday aylantirishni ko'rib chiqadi.

Nega tarmoq orqali vaqtni sinxronlash muhim

Har bir kompyuterning o'z uskuna soati (RTC, real-time clock) bor, lekin u asta-sekin haqiqiy vaqtdan uzoqlashib boradi (clock drift). Bir nechta server bo'ylab bu siljish real muammolarga sabab bo'ladi:

  • TLS sertifikatlari — sertifikatning amal qilish oralig'i serverning o'z soatiga nisbatan tekshiriladi; noto'g'ri soat hali amal qilayotgan sertifikatni "muddati o'tgan" yoki "hali kuchga kirmagan" deb rad etishiga sabab bo'lishi mumkin;
  • Kerberos autentifikatsiyasi — protokolning o'zi vaqt belgilariga tayanadi; farq ruxsat etilgan chegaradan (odatda bir necha daqiqa) oshsa, autentifikatsiya rad etiladi;
  • Taqsimlangan log'larni bog'lash — bir nechta serverdan yig'ilgan log'larda hodisalar tartibini solishtirish, agar ularning soatlari sinxron bo'lmasa, amalda imkonsiz bo'lib qoladi.

Aynan shu sababli deyarli har bir production Linux serveri o'z soatini tashqi tarmoq manbasiga nisbatan uzluksiz sinxronlab turadi.

chronyd va eskiroq ntpd

RHEL 8+ oilasida chrony sukut bo'yicha vaqt xizmati sifatida o'rnatilgan bo'ladi. Ubuntu/Debian’da esa sukut bo'yicha aslida systemd-timesyncd ishlaydi — u soatni sinxron ushlab turadigan, lekin boshqa hostlarga vaqt bera olmaydigan yengil SNTP klienti. To'liq NTP implementatsiyasi kerak bo'lganda — yuqoriroq aniqlik, boyroq diagnostika (chronyc) yoki boshqa mashinalar uchun NTP server vazifasini bajarish imkoniyati (quyidagi ichki NTP server roli) — chrony o'rnatiladi. Eskiroq ntpd (klassik NTP loyihasi) ayrim tizimlarda hali ham uchraydi, lekin yangi o'rnatmalar uchun tavsiya etilmaydi. chrony imkoniyatlari timesyncd dan qayerda oshib ketadi:

  • chronyd uzilgan yoki sekin tarmoq ulanishidan keyin tezroq va ishonchliroq barqarorlashadi — masalan, noutbukda yoki pause/resume’dan qaytgan virtual mashinada;
  • chronyd hech qachon doimiy internet ulanishiga ega bo'lmagan serverda — masalan, faqat vaqti-vaqti bilan ulanadigan izolyatsiyalangan ichki tarmoqda — vaqtni yaxshiroq boshqaradi;
  • ikkalasi ham bir xil asosiy NTP protokolidan foydalanadi, shuning uchun ular o'zaro ishlay oladi — chronyd vaqtni boshqa serverda ishlayotgan ntpd dan olishi mumkin va aksincha.

Qaysi xizmat ishlayotganini tekshirish:

systemctl status chronyd
timedatectl | grep 'NTP service'

Xizmat nomi Ubuntu’da ba’zan chrony, RHEL oilasida esa chronyd bo'ladi — aniq nomni systemctl list-units '*chron*' bilan tekshiring.

Note

Hech kim o'zgartirmagan standart Ubuntu Server’da ishlayotgan vaqt xizmati odatda chrony emas, systemd-timesyncd bo'ladi — shuning uchun chrony sudo apt install chrony bilan o'rnatilmaguncha systemctl status chronyd "Unit chronyd.service could not be found" qaytaradi. chrony o'rnatilganda systemd-timesyncd avtomatik o'chiriladi; ikkalasi bir-birini istisno qiladi va ikkalasini birdaniga ishlatish ularni bitta soat ustida "kurashtirib" qo'yardi.

chronyc: joriy sinxronlash holatini tekshirish

chronyc — chronyd xizmati bilan muloqot qilish uchun buyruq qatori vositasi.

chronyc tracking

chronyc tracking
Reference ID    : C0248F62 (ntp1.example.com)
Stratum         : 3
Ref time (UTC)  : Fri Jul 25 09:58:10 2026
System time     : 0.000012340 seconds fast of NTP time
Last offset     : +0.000015600 seconds
RMS offset      : 0.000045000 seconds
Frequency       : 3.256 ppm fast
Residual freq   : +0.002 ppm
Skew            : 0.045 ppm
Root delay      : 0.023456789 seconds
Root dispersion : 0.001234567 seconds
Update interval : 64.2 seconds
Leap status     : Normal

Muhim maydonlar:

  • Stratum — bu server etalon manbadan necha "hop" uzoqlikda ekani: stratum 1 — uskunaviy vaqt manbasiga (atom soati yoki GPS) to'g'ridan-to'g'ri ulangan server, stratum 2 — vaqtni stratum 1 manbadan oladigan server va hokazo; katta son uzoqroq va ehtimol kamroq aniq manbani bildiradi;
  • System time — joriy tizim soati NTP orqali hisoblangan "haqiqiy" vaqtdan qanchalik farq qilishi;
  • Leap status: Normal — kabisa soniyasi yoki boshqa maxsus holat yo'q; sinxronlash barqaror. Not synchronised tizim hali hech qanday manbaga bog'lanmaganini bildiradi.

chronyc sources

chronyc sources -v
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^* ntp1.example.com              2   6   377    23   +120us[ +135us] +/-  15ms
^+ ntp2.example.com              2   6   377    25   +310us[ +298us] +/-  18ms
^- 192.168.1.1                   3   6   177    41   -2.1ms[ -2.3ms] +/- 120ms

Ustunlar nimani anglatadi:

  • ^* — hozir asosiy manba sifatida tanlangan server (u har doim faqat bitta bo'ladi);
  • ^+ — umumiy hisobga qo'shiladigan ishonchli ikkilamchi manba;
  • ^- — hozir hisobga qo'shilmayotgan manba, odatda uning ko'rsatgan vaqti boshqalardan sezilarli farq qilgani uchun;
  • Reach — oxirgi so'rovlarga javoblar tarixi, sakkizlik bitmask sifatida ko'rsatiladi; 377 oxirgi sakkizta so'rovning hammasiga javob kelganini bildiradi;
  • Last sample — o'sha manbadan olingan eng so'nggi o'lchov va uning taxminiy xato chegarasi.

chronyc sourcestats har bir manbaning vaqt davomida barqarorlik statistikasini — masalan, chastota siljishini — ko'rsatadi; uzoq muddatli sifatni baholash uchun foydali.

chrony.conf: klient konfiguratsiyasi

Asosiy konfiguratsiya fayli Ubuntu/Debian’da /etc/chrony/chrony.conf da, RHEL oilasida esa odatda /etc/chrony.conf da turadi.

pool ntp.ubuntu.com iburst maxsources 4
driftfile /var/lib/chrony/chrony.drift
makestep 1.0 3
rtcsync

Asosiy direktivalar:

  • pool/server — vaqt manbasi; pool bir nechta serverdan iborat DNS pool’ga (masalan, pool.ntp.org), server esa aynan bitta muayyan serverga ishora qiladi;
  • iburst — dastlabki sinxronlashni tezlashtirish uchun ketma-ket bir nechta so'rov yuboradi;
  • driftfile — uskuna soatining taxminiy siljish tezligi saqlanadigan fayl; qayta ishga tushganda chronyd noldan emas, shu qiymatdan boshlaydi;
  • makestep 1.0 3 — agar vaqt farqi 1.0 soniyadan oshsa, dastlabki uchta o'lchovga soatni sekin moslashtirish o'rniga darhol "sakratib" tuzatishga ruxsat beradi; bu odatda faqat ishga tushishda kerak bo'ladi, chunki katta farqni sekin tuzatish uzoq vaqt oladi;
  • rtcsync — tizim soatini vaqti-vaqti bilan uskuna soatiga (RTC) qayta yozishni yoqadi.

Konfiguratsiya o'zgarishidan keyin xizmatni qayta yuklash:

sudo systemctl restart chronyd
chronyc tracking

Serverni ichki NTP manbasi sifatida sozlash

Ko'p serverli tarmoqda keng tarqalgan amaliyot — har bir hostni to'g'ridan-to'g'ri internetga ochish o'rniga bitta server vaqtni internetdan olib, uni ichki NTP server sifatida boshqa ichki hostlarga tarqatadi. Bu tashqi trafikni kamaytiradi va barcha ichki hostlar bitta manbaga tayanishini ta’minlaydi.

chrony.conf ga allow direktivasi qo'shiladi:

pool ntp.ubuntu.com iburst

allow 10.20.0.0/24

allow qaysi tarmoqning NTP so'rovlariga xizmat ko'rsatilishini belgilaydi. Sukut bo'yicha chronyd faqat klient sifatida ishlaydi va boshqa hostlarga xizmat ko'rsatmaydi; allow bo'lmasa, tashqi so'rovlar rad etiladi.

Warning

Haddan tashqari keng allow direktivasini — masalan, allow 0.0.0.0/0 ni — yozish serverni istalgan tashqi hostga vaqt beradigan ochiq NTP serverga aylantiradi. Bu resurslarni behuda sarflaydi va ayrim hollarda NTP asosidagi tarmoq hujumlarida kuchaytirish (amplification) vositasi sifatida suiiste’mol qilinishi mumkin. allow ni har doim aynan unga muhtoj bo'lgan ichki tarmoq bilan cheklang.

Xizmatni qayta yuklash va natijani tekshirish:

sudo systemctl restart chronyd
chronyc clients

chronyc clients hozir shu serverdan vaqt so'rayotgan klientlar ro'yxatini ko'rsatadi — ichki NTP server haqiqatan ishlayotganini tasdiqlashning eng to'g'ridan-to'g'ri usuli.

Firewall

NTP sukut bo'yicha UDP 123 portida ishlaydi. Serverni ichki NTP manbasi sifatida ochishdan oldin bu port faqat mo'ljallangan ichki tarmoq uchun ochiq ekanini tasdiqlang — bu Firewall va UFW maqolasida chuqurroq ko'rib chiqiladi.

sudo ufw status
sudo ufw allow from 10.20.0.0/24 to any port 123 proto udp

Danger

Firewall qoidasini o'zgartirish tarmoq xizmatlari boshqa hostlarga qanday ko'rinishini o'zgartiradi. Qoida qo'shishdan oldin joriy ufw status numbered chiqishini saqlang va aynan kerakli manzil hamda port bilan cheklangan qoida yozing — keng allow qoidalaridan qoching.

Amaliy vaziyat: "System clock synchronized: no" ni tuzatish

Muammo: timedatectl System clock synchronized: no deb ko'rsatyapti va TLS ulanishlari sertifikat xatolari bilan muvaffaqiyatsiz bo'la boshlagan.

1-qadam — tekshirish:

timedatectl
systemctl status chronyd
chronyc tracking

2-qadam — gipoteza tuzish: agar chronyd inactive/failed bo'lsa, xizmat umuman ishlamayapti; agar xizmat active bo'lsa-yu, chronyc sources da ^* yozuvi bo'lmasa, u hech qanday manbaga yeta olmayapti — masalan, tarmoq yoki firewall muammosi.

3-qadam — xizmatni tekshirish (agar u ishlamayotgan bo'lsa):

sudo systemctl restart chronyd
journalctl -u chronyd --since '10 min ago'

4-qadam — manbalar bor-u, lekin javob bermasa, ulanishni tekshirish:

chronyc -a 'burst 4/4'
dig +short ntp.ubuntu.com
sudo ss -unlp | grep 123

ss -unlp chronyd haqiqatan UDP 123 portini tinglayotganini tasdiqlaydi — bu Tarmoq diagnostikasi maqolasida chuqurroq ko'riladigan ss vositasining amaliy qo'llanishi.

5-qadam — natija: chronyc tracking Leap status: Normal ni, chronyc sources esa kamida bitta ^* yozuvini ko'rsatsa, sinxronlash tiklangan. timedatectl ni qayta tekshiring:

timedatectl | grep -E 'synchronized|NTP service'

6-qadam — hujjatlashtirish: xizmat nega to'xtaganini (masalan, oldingi qayta yuklashdan keyin avtomatik ishga tushmagan bo'lishi mumkin) va uni doimiy tuzatish uchun nima qilinganini — masalan, systemctl enable chronyd bilan yoqilganini — qayd qiling.

Keng tarqalgan xatolar

chronyc sources da faqat ^- yozuvlari chiqayotganini sezmaslik

Agar hech qaysi manba ^* ni ko'rsatmasa, tizim hali hech qaysi serverga to'liq ishonch bildirmagan — bu ko'pincha tarmoq yoki firewall to'sig'i, ishlamayotgan manba server yoki juda katta vaqt farqining belgisi.

allow ni tekshirmasdan serverni "ichki NTP server" deb hisoblash

chrony.conf da allow yozilmagan bo'lsa, xizmat faqat klient bo'lib qoladi va boshqa hostlarga xizmat ko'rsatmaydi. So'rovlar haqiqatan kelayotganini chronyc clients bilan tasdiqlang.

makestep siz katta vaqt farqi sekin tuzaladi deb kutish

Agar makestep bo'lmasa yoki u juda tor bo'lsa, katta dastlabki farq sekin, bosqichma-bosqich tuzatiladi — bu ayrim ilovalar uchun vaqt noto'g'ri harakatlanayotgandek ko'rinishiga sabab bo'lishi mumkin. Oddiy foydalanishda cheklangan sonli makestep faqat ishga tushishdagi bir martalik tuzatish uchun mo'ljallangan.

Vaqt zonasi sozlamasini NTP sinxronlash bilan adashtirish

Noto'g'ri vaqt zonasi soat sinxronlanmaganini anglatmaydi — bular ikki mustaqil sozlama. Avval chronyc tracking dagi Leap status va System time ni tekshiring, so'ng vaqt zonasi konfiguratsiyasini alohida tekshiring.

Intervyuda

Tayyor turishga arziydigan savol: "serverning Stratum qiymati 2 dan 10 ga sakrab ketdi — bu nimani anglatadi va bu muammomi?" Yuqori bir xonali yoki undan katta stratum odatda chronyd odatiy yuqori manbalari bilan aloqani yo'qotib, ancha past sifatli etalonga o'tganini yoki tashqi tuzatishsiz o'zining lokal soatida ishlayotganini bildiradi — bunga ko'pincha Leap status: Not synchronised hamroh bo'ladi. Bu quyi oqimdagi biror narsa (TLS, Kerberos, log tartibi) ishdan chiqishidan oldin sozlangan pool/server yozuvlariga ulanishni tekshirish kerakligining kuchli belgisi.

Mashqlar

  1. chronyc tracking va chronyc sources -v chiqishlarini solishtiring va Stratum, Leap status hamda ^* belgisi nimani anglatishini o'z so'zlaringiz bilan yozing.
  2. chrony.conf dagi pool, iburst, makestep va driftfile direktivalarining har biri nega kerakligini tushuntiring.
  3. Izolyatsiyalangan laboratoriya tarmog'ida bitta VM’ni ichki NTP server sifatida sozlang (allow bilan cheklangan), unga ikkinchi VM’dan ulaning va ulanishni chronyc sources bilan tasdiqlang.
  4. Yuqoridagi amaliy vaziyatni takrorlang: chronyd xizmatini ataylab to'xtating, timedatectl dagi o'zgarishni kuzating, so'ng xizmatni tiklang va sinxronlash yana tasdiqlanguncha kuting.

Mashqni bajardim deyish uchun: 4-mashqdagi yakuniy tekshiruvingiz chronyc tracking da Leap status: Normal ni va chronyc sources da kamida bitta ^* yozuvini ko'rsatishi kerak — xizmatning systemctl status da shunchaki active bo'lishi sinxronlash haqiqatan tiklanganining yetarli isboti emas.

Manbalar

  • Chrony — rasmiy hujjatlar: https://chrony-project.org/documentation.html
  • man7.org: chronyd(8): https://man7.org/linux/man-pages/man8/chronyd.8.html
  • man7.org: chronyc(1): https://man7.org/linux/man-pages/man1/chronyc.1.html
  • man7.org: chrony.conf(5): https://man7.org/linux/man-pages/man5/chrony.conf.5.html
  • freedesktop.org: timedatectl(1): https://man7.org/linux/man-pages/man1/timedatectl.1.html
  • Ubuntu Server — vaqtni sinxronlash: https://ubuntu.com/server/docs/network-ntp
  • Red Hat Enterprise Linux 9 — NTP’ni chrony bilan sozlash: https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/9/html/configuring_basic_system_settings/using-chrony-to-configure-ntp_configuring-basic-system-settings