Перейти до змісту

Налаштування chrony

Знання: ⭐ ⭐ Час читання: 20 minutes

Використання штучного інтелекту

Цей документ відповідає політиці щодо внесків ШІ, яку можна знайти тут.. Якщо ви знайдете будь-які помилки в інструкціях, будь ласка, повідомте нас.

Вступ

Точна синхронізація часу є основоположною для роботи сучасних систем Linux. Такі служби, як автентифікація Kerberos, перевірка сертифікатів TLS, розподілені бази даних, кореляція журналів та планувальники кластерів, залежать від точних системних годинників. У Rocky Linux chrony є реалізацією NTP за замовчуванням і замінює застарілий демон ntpd.

chrony1 розроблено для середовищ, де мережеві з'єднання переривчасті або де системи часто зависають та відновлюються. За стабільних мережевих умов chrony досягає точності приблизно 35 мікросекунд порівняно з 234 мікросекундами ntpd. Він також підтримує апаратне позначення часу та мережеву безпеку часу (NTS), чого немає у ntpd.

Цей посібник охоплює основні аспекти налаштування chrony на Rocky Linux, включаючи вибір джерел NTP, діагностику проблем синхронізації, увімкнення апаратного позначення часу, налаштування chrony як локального NTP-сервера та роботу з мережами з ізоляцією.

Передумови

  • Система Rocky Linux 8, 9 або 10 з доступом root або sudo.
  • Пакет chrony встановлено (встановлено за замовчуванням у Rocky Linux).
  • Мережевий доступ до щонайменше одного NTP-сервера (для систем, підключених до Інтернету).

Перевірте, чи встановлено chrony:

rpm -q chrony

Конфігурація chrony за замовчуванням

Rocky Linux постачається зі стандартним файлом /etc/chrony.conf, який забезпечує налаштування синхронізації робочого часу "з коробки". Нижче наведено конфігурацію RPM за замовчуванням у Rocky Linux 10:

cat /etc/chrony.conf
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (https://www.pool.ntp.org/join.html).
pool 2.rocky.pool.ntp.org iburst

# Use NTP servers from DHCP.
sourcedir /run/chrony-dhcp

# Record the rate at which the system clock gains/losses time.
driftfile /var/lib/chrony/drift

# Allow the system clock to be stepped in the first three updates
# if its offset is larger than 1 second.
makestep 1.0 3

# Enable kernel synchronization of the real-time clock (RTC).
rtcsync

# Enable hardware timestamping on all interfaces that support it.
#hwtimestamp *

# Increase the minimum number of selectable sources required to adjust
# the system clock.
#minsources 2

# Allow NTP client access from local network.
#allow 192.168.0.0/16

# Serve time even if not synchronized to a time source.
#local stratum 10

# Require authentication (nts or key option) for all NTP sources.
#authselectmode require

# Specify file containing keys for NTP authentication.
#keyfile /etc/chrony.keys

# Save NTS keys and cookies.
ntsdumpdir /var/lib/chrony

# Specify directory for log files.
logdir /var/log/chrony

Ключовою директивою тут є pool 2.rocky.pool.ntp.org iburst, яка використовує пул NTP Rocky Linux як джерело часу.

Warning

Постачальники хмарних сервісів, інсталяції Kickstart та хостинг-провайдери часто змінюють /etc/chrony.conf під час налаштування. Наприклад, Vultr замінює рядок pool 2.rocky.pool.ntp.org власними директивами server, що вказують на time.constant.com. Якщо ваша конфігурація не відповідає наведеній вище, перевірте, чи ваш постачальник налаштував лінії джерела NTP. Основні директиви (makestep, driftfile, rtcsync) залишаються незмінними незалежно від постачальника.

Note

У Rocky Linux 8 та 9 є директиви keyfile /etc/chrony.keys та leapsectz right/UTC, яких немає у стандартних налаштуваннях Rocky Linux 10. У Rocky Linux 10 додано sourcedir, ntsdumpdir та authselectmode, яких немає в Rocky Linux 8 або 9. Основна конфігурація NTP (pool, makestep, driftfile, rtcsync) однакова для всіх трьох версій.

Розуміння директив pool та server

Директиви pool та server1 виконують різні функції у chrony.conf:

Директива server

Директива server вказує на один NTP-сервер:

server 10.0.0.1 iburst
server ntp1.example.com iburst

Використовуйте server, коли вказуєте на певний NTP-хост за IP-адресою або іменем хоста, що відповідає одній адресі.

Директива pool

Директива pool визначає пул NTP-серверів, де DNS-ім'я розв'язується як кілька адрес:

pool 2.rocky.pool.ntp.org iburst maxsources 4

Директива pool багаторазово розв'язує DNS-ім'я для отримання кількох джерел часу. Опція maxsources контролює, скільки джерел використовувати з пулу (за замовчуванням — 4, максимум — 16).

Warning

Не використовуйте директиву pool з індивідуальними IP-адресами. Директива pool призначена для DNS-імен, які відповідають кільком адресам. Для окремих IP-адрес завжди використовуйте директиву server.

Опція iburst

Опція iburst змушує chrony надсилати пакет із 4–8 запитів, коли вперше починається зв'язок із джерелом, що пришвидшує початкову синхронізацію.

Використання достатньої кількості джерел NTP

У розділі 3.2 RFC 86332 зазначено:

«Операторам, які стурбовані підтримкою точного часу, ПОВИННІ використовувати щонайменше чотири незалежні, різноманітні джерела часу».

Маючи менше чотирьох джерел, chrony не може надійно виявити несправне джерело часу («хибний тікер»). Наведені нижче сценарії ілюструють проблему:

  • Одне джерело: chrony не має можливості перевірити правильність джерела
  • Два джерела: Якщо джерела розходяться, chrony не може визначити, яке з них правильне, і реєструє Не вдається синхронізувати: немає більшості
  • Три джерела: chrony може терпіти одне несправне джерело, але якщо друге джерело тимчасово стає недоступним, виникає проблема двох джерел.
  • Чотири або більше джерел: chrony може ідентифікувати та виключати несправні джерела, зберігаючи при цьому синхронізацію

Налаштування чотирьох джерел

Для систем, підключених до Інтернету, використовуйте пул щонайменше з чотирма джерелами:

pool 2.rocky.pool.ntp.org iburst maxsources 4

Для корпоративних середовищ із внутрішніми NTP-серверами вкажіть щонайменше чотири окремі сервери:

server ntp1.example.com iburst
server ntp2.example.com iburst
server ntp3.example.com iburst
server ntp4.example.com iburst

Діагностика помилок «Не вдається синхронізувати: немає більшості»

Повідомлення «Не вдається синхронізувати: немає більшості»1 з'являється, коли chrony не може встановити консенсус між налаштованими джерелами.

Поширені причини

  1. Занадто мало джерел NTP: маючи лише два джерела, які розходяться в часі, «хронічне» дослідження не може визначити, яке джерело є правильним
  2. Розбіжність у зміщенні джерел: Навіть за наявності правильної кількості джерел, якщо занадто багато джерел розходяться в думках понад прийнятні пороги, «хронічність» не може встановити більшість
  3. Проблеми з мережею: періодичне підключення до джерел NTP зменшує кількість доступних джерел

Діагностичні команди

Перевірте поточні джерела та їхній стан:

chronyc sources -v
  .-- Source mode  '^' = server, '=' = peer, '#' = local clock.
 / .- Source state '*' = current best, '+' = combined, '-' = not combined,
| /             'x' = may be in error, '~' = too variable, '?' = unusable.
||                                                 .- xxxx [ yyyy ] +/- zzzz
||      Reachability register (octal) -.           |  xxxx = adjusted offset,
||      Log2(Polling interval) --.      |          |  yyyy = measured offset,
||                                \     |          |  zzzz = estimated error.
||                                 |    |           \
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^* 172-105-192-74.ip.linode>     2   6    17     8   +189us[ +145us] +/- 1251us
^+ v160-16-113-133.ntp.tky2>     2   6    17     9    -28us[  -71us] +/- 1088us
^- 108.160.132.224.vultruse>     2   6    17     8  -2669ns[  -46us] +/-   28ms
^+ vps-tyo2.orleans.ddnss.de     2   6    17     8   -203us[ -246us] +/- 1213us

Значення стопвців:

Колонка Значення
M Режим джерела: сервер ^, = вузол, # локальний годинник
S Стан джерела: * найкращий, + об'єднаний, - можна вибрати, але не вибрано, ? непридатний для використання, x хибний позначник, ~ занадто змінна
Stratum Відстань від опорного годинника (1 = безпосередньо підключений)
Poll Інтервал опитування у вигляді логарифма за основою 2 у секундах
Reach Регістр досяжності у вісімковій системі числення (377 = останні 8 спроб – усі успішні)
LastRx Час з моменту останнього хорошого зразка
Last sample Зсув між локальним годинником та джерелом

Перевірка стану відстеження годинника:

chronyc tracking
Reference ID    : AC69C04A (172-105-192-74.ip.linodeusercontent.com)
Stratum         : 3
Ref time (UTC)  : Mon Mar 09 06:00:25 2026
System time     : 0.000003264 seconds slow of NTP time
Last offset     : -0.000043458 seconds
RMS offset      : 0.000043458 seconds
Frequency       : 6.725 ppm fast
Residual freq   : -19.823 ppm
Skew            : 0.307 ppm
Root delay      : 0.002041159 seconds
Root dispersion : 0.000522824 seconds
Update interval : 2.0 seconds
Leap status     : Normal

Ключові поля:

Поле Значення
Reference ID Сервер chrony наразі синхронізовано з
Stratum stratum цієї системи (вихідний stratum + 1)
System time Поточний зсув між часом NTP та системним годинником
Frequency Швидкість дрейфу системного годинника без корекції (ppm)
Root delay Загальна затримка мережевого шляху до джерела stratum-1
Leap status Normal, Insert second, Delete second, або Not synchronised

Перевірка статистики джерела:

chronyc sourcestats -v

Ця команда відображає кількість точок вибірки, розрахункове зміщення частоти та стандартне відхилення для кожного джерела. Це корисно для оцінки стабільності та надійності окремих джерел NTP з плином часу.

Опція trust

Опція trust1 вказує chrony вважати, що час з джерела завжди правильний. Довірене джерело може бути відхилено як фальшиве джерело лише тоді, коли інше довірене джерело з ним не погоджується.

server ntp1.example.com iburst trust
server ntp2.example.com iburst trust

Warning

Опція trust є тимчасовим рішенням для середовищ з менш ніж 4 джерелами NTP. Це змінює виявлення фальшивих тікерів таким чином, що довірені джерела можуть бути відхилені лише за умови незгоди іншого довіреного джерела. Використовуйте його лише тоді, коли додавання додаткових джерел NTP неможливе. Завжди надавайте перевагу додаванню більшої кількості джерел, ніж використанню trust.

Апаратне позначення часу

Апаратне позначення часу1 використовує власний годинник мережевого контролера для позначення часу NTP-пакетів на фізичному рівні, уникаючи затримок обробки та постановки в чергу в ядрі та мережевому драйвері. Це значно покращує точність позначення часу.

Вимоги

  • Ядро Linux 3.19 або новіша версія
  • Мережева карта, яка підтримує апаратне позначення часу

Перевірка підтримки мережевої карти, замінивши eth0 на назву вашого інтерфейсу:

ethtool -T eth0

Вивід повинен містити hardware-raw-clock, hardware-transmit та hardware-receive у списку можливостей. Фільтр отримання повинен містити all або ntp.

На системах без апаратної підтримки позначок часу (наприклад, віртуальних машинах) вивід показує лише можливості програмного забезпечення:

Time stamping parameters for enp1s0:
Capabilities:
    software-transmit
    software-receive
    software-system-clock
PTP Hardware Clock: none
Hardware Transmit Timestamp Modes: none
Hardware Receive Filter Modes: none

Note

Апаратне позначення часу недоступне на віртуальних машинах або хмарних екземплярах. Для цього потрібні фізичні мережеві карти з підтримкою апаратного тактового сигналу PTP. Для повної користі його має бути ввімкнено як на клієнті, так і на сервері.

Увімкнення апаратного позначення часу

Додайте наступний код до /etc/chrony.conf:

hwtimestamp eth0

Щоб увімкнути апаратне позначення часу на всіх інтерфейсах, які його підтримують:

hwtimestamp *

Після внесення змін перезапустіть chrony:

sudo systemctl restart chronyd

Перевірте режим позначення часу, перевіривши дані NTP для джерела:

chronyc ntpdata

Поля TX timestamping та RX timestamping вказують на джерело мітки часу. Якщо ввімкнено апаратне позначення часу, у цих полях відображається Hardware. Без нього вони показують Kernel:

TX timestamping : Kernel
RX timestamping : Kernel
Total TX        : 3
Total RX        : 3
Total valid RX  : 3
Total good RX   : 3
Total kernel TX : 3
Total kernel RX : 3

NTP у мережах з повітряним проміжком та мережах з обмеженим доступом

У середовищах без зовнішнього доступу до NTP одна або декілька внутрішніх машин можуть служити орієнтиром часу мережі.

Налаштування автономного сервера часу

На призначеному сервері часу налаштуйте директиву local1 для відображення часу на основі системного годинника, навіть якщо він не синхронізований із зовнішнім джерелом:

local stratum 10

Значення stratum (1-15, за замовчуванням 10) вказує на якість часу. Більше число означає нижчу впевненість. Stratum 10 – це конвенція для несинхронізованих локальних годинників.

Режим «сиріт» для резервування

Коли кілька серверів повинні надавати час в ізольованій мережі, використовуйте опцію orphan1 директиви local:

local stratum 10 orphan

У режимі «осиротіння» сервери з однаковим локальним стратумом синхронізуються один з одним. Сервер з найменшим ідентифікатором посилання має активне локальне посилання, і інші сервери синхронізуються з ним. Якщо цей сервер стає недоступним, його візьме на себе сервер із наступним найменшим ідентифікатором посилання.

Tip

Режим «осиротіння» сумісний з режимом «осиротіння» ntp, тому сервери chrony та ntp можуть співіснувати в одній групі «осиротіння».

Конфігурація клієнта для ізольованих мереж

На клієнтських машинах у мережі з ізоляцією вкажіть на внутрішні сервери часу:

server 10.0.0.1 iburst
server 10.0.0.2 iburst
server 10.0.0.3 iburst
server 10.0.0.4 iburst

Налаштування chrony як NTP-сервера

Щоб дозволити іншим машинам у мережі синхронізувати час з вашим сервером, використовуйте директиву allow1.

Дозвіл доступу NTP-клієнту

Відредагуйте /etc/chrony.conf та додайте директиву allow, що вказує на підмережу:

allow 192.168.1.0/24

Щоб дозволити доступ усім клієнтам IPv4:

allow 0/0

Щоб дозволити певну підмережу IPv6:

allow 2001:db8::/32

Відкриття брандмауера

NTP використовує UDP-порт 123. Відкрийте його за допомогою firewalld:

sudo firewall-cmd --permanent --add-service=ntp
sudo firewall-cmd --reload

Перевірте, чи правило активне:

sudo firewall-cmd --list-services

Вивід має містити ntp.

Перезапуск chrony

Після внесення будь-яких змін у конфігурацію:

sudo systemctl restart chronyd

Перевірте, чи сервер прослуховує:

sudo ss -ulnp | grep chronyd

Вивід має показати, що chronyd прослуховує 0.0.0.0:123:

UNCONN 0      0            0.0.0.0:123       0.0.0.0:*    users:(("chronyd",pid=1362,fd=7))

Довідник ключових директив конфігурації

Директива Призначення Приклад
server Визначає один NTP-сервер server ntp1.example.com iburst
pool Вказує пул NTP-серверів (DNS-ім'я) pool 2.rocky.pool.ntp.org iburst
makestep Кроки тактової частоти, якщо зміщення перевищує поріг makestep 1.0 3
driftfile Файл для запису швидкості дрейфу годинника driftfile /var/lib/chrony/drift
rtcsync Синхронізує апаратний час реального часу (RTC) rtcsync
allow Дозволяє NTP-клієнту доступ з підмережі allow 192.168.1.0/24
local Обслуговує час, коли не синхронізовано зовні local stratum 10
hwtimestamp Увімкнення апаратного позначення часу hwtimestamp *
trust Вважає, що час джерела завжди правильний Додано до рядка server
iburst Прискорює початкову синхронізацію Додано до рядка server або pool

Висновок

Правильне налаштування chrony є важливим для надійної синхронізації часу в Rocky Linux. Найпоширенішою неправильною конфігурацією є використання занадто малої кількості джерел NTP. Дотримуйтесь RFC 86332 та налаштуйте щонайменше чотири незалежні джерела. Використовуйте директиву server для окремих IP-адрес та директиву pool для DNS-імен, які розв'язуються як кілька адрес. Для діагностики chronyc sources та chronyc tracking надають інформацію, необхідну для виявлення та вирішення проблем синхронізації.

Для мереж з повітряною щілиною директива local з режимом orphan забезпечує стійкий розподіл часу без зовнішнього підключення. Апаратне позначення часу1 може досягти точності субмікросекунд у поєднанні з хорошими мережевими комутаторами та короткими інтервалами опитування.

Повна документація chrony1 містить додаткові опції та розширені налаштування, що виходять за рамки цього посібника.

Посилання

  1. "chrony documentation" by Miroslav Lichvar https://chrony-project.org/documentation.html
  2. "Network Time Protocol Best Current Practices (RFC 8633)" by D. Reilly, H. Stenn, and D. Sibold https://datatracker.ietf.org/doc/html/rfc8633
  3. "chrony.conf(5) man page" by Miroslav Lichvar https://chrony-project.org/doc/4.6/chrony.conf.html
  4. "chronyc(1) man page" by Miroslav Lichvar https://chrony-project.org/doc/4.6/chronyc.html

Author: Howard Van Der Wal

Contributors: Steven Spencer