Налаштування 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 не може встановити консенсус між налаштованими джерелами.
Поширені причини¶
- Занадто мало джерел NTP: маючи лише два джерела, які розходяться в часі, «хронічне» дослідження не може визначити, яке джерело є правильним
- Розбіжність у зміщенні джерел: Навіть за наявності правильної кількості джерел, якщо занадто багато джерел розходяться в думках понад прийнятні пороги, «хронічність» не може встановити більшість
- Проблеми з мережею: періодичне підключення до джерел 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 містить додаткові опції та розширені налаштування, що виходять за рамки цього посібника.
Посилання¶
- "chrony documentation" by Miroslav Lichvar https://chrony-project.org/documentation.html
- "Network Time Protocol Best Current Practices (RFC 8633)" by D. Reilly, H. Stenn, and D. Sibold https://datatracker.ietf.org/doc/html/rfc8633
- "chrony.conf(5) man page" by Miroslav Lichvar https://chrony-project.org/doc/4.6/chrony.conf.html
- "chronyc(1) man page" by Miroslav Lichvar https://chrony-project.org/doc/4.6/chronyc.html
Author: Howard Van Der Wal
Contributors: Steven Spencer