Как установить Chrony сервер Linux.

Введение.

В предыдущей статье блога рассматривалась работа клиента NTP, установленного по умолчанию на дистрибутив ALT Linux рабочая станция. Автору предложили продолжить тему chrony и рассказать, как переключиться с режима chronyd клиент на chronyd сервер точного времени.

  • Стенд:
    • ALT Linux сервер, имя lin-ntp; ip-10.0.2.11;

Установка.

В качестве базового, выберем сервер минимальной конфигурации ALT Linux, как отдельного узла в виртуальном облаке организации. С помощью командной строки установим программу chrony.

# apt-get update
# apt-get install chrony

Запуск и управление chronyd.

Команды для управления chronyd приводятся ниже.

# systemctl start|enable|status|restart|is-enabled|stop chronyd

Настройка chronyd.

Перевести chrony в режим сервера можно двумя способами: консольным или графическим.

Консольный режим предполагает убрать комментарий в строке файла конфигурации /etc/chrony.conf, после чего необходимо перегрузить службу.

# /etc/chrony.conf
....
# Allow NTP client access from local network.
allow all
...
# systemctl restart chronyd

Графический способ, потребует запустить acc и отметить нужные позиции, как показано ниже. Проверить установку acc и модуля времени можно, используя команды приведённые ниже.

# apt-get update
# apt-get install acc
# apt-get install alterator-datetime
# acc
Вид: перевод chronyd режим ntp.
Вид: перевод chronyd режим ntp.

acc — ALT Linux control center — центр управления ALT Linux

Проверка работы chronyd.

timedatectl

Команда оценивает работу сервера синхронизации NTP. Для chronyd, может служить в качестве быстрого «взгляда» на работу NTP.

# timedatectl
          Local time: Чт 2022-03-03 21:16:15 MSK
          Universal time: Чт 2022-03-03 18:16:15 UTC
          RTC time: Чт 2022-03-03 18:16:16    
          Time zone: Europe/Moscow (MSK, +0300)
System clock synchronized: yes                       
              NTP service: active                    
          RTC in local TZ: no   
  • Local time — местное время
  • Universal time — UTC всемирное время
  • RTC time — аппаратное время
  • Time Zone — часовой пояс
  • NTP synchronized — синхронизация с ntp сервером
  • RTC in local TZ — аппаратные часы: если no показывает локальное время , если yes показывает всемирное время

Основную проверку работу сервера chronyd можно осуществить несколькими популярными командами, из набора утилиты chronyc, подробности читай здесь.

tracking

Показывает производительность системных часов на сервере.

# chronyc tracking
Reference ID    : 59DDCF71 (89.221.207.113)
Stratum         : 3
Ref time (UTC)  : Mon Feb 28 14:24:52 2022
System time     : 0.000478345 seconds slow of NTP time
Last offset     : +0.000350668 seconds
RMS offset      : 0.002563184 seconds
Frequency       : 27.618 ppm slow
Residual freq   : -0.026 ppm
Skew            : 0.673 ppm
Root delay      : 0.039620969 seconds
Root dispersion : 0.000692389 seconds
Update interval : 64.8 seconds
Leap status     : Normal
  • Reference ID — идентификатор и имя NTP сервера синхронизации
  • Stratum — количество переходов к NTP серверу
  • Ref time — время, UTC, последнего измерения от эталонного источника
  • System time — скорость задержки системных часов от NTP сервера
  • Last offset — локальное смещение при последнем обновлении часов от NTP
  • RMS offset — долгосрочное среднее значение смещения времени
  • Frequency — частота скорости ошибки, без исправления chronyd, в ppm — ч/м частей на миллион
  • Residual freq — разница частоты между NTP и локальным источником времени
  • Skew — предполагаемая ошибка, связанная с частотой
  • Root delay — общая задержка сетевого пути к NTP серверу синхронизации
  • Update interval — интервал между двумя последними обновлениями часов
  • Leap status — статус скачка, «нормальный», «вставить секунду», «удалить секунду», «не синхронизировано»

sources

Проверяет источники опорного времени сервера NTP, ключ -v, вывод подробно.

# chronyc sources 
210 Number of sources = 5
MS Name/IP address         Stratum Poll Reach LastRx Last sample               
===============================================================================
^? _gateway                      0   8     0     -     +0ns[   +0ns] +/-    0ns
^+ fizdlganet.ru                 2   6   377     6  +2120us[+2120us] +/-   51ms
^* 89.221.207.113                2   7   377    73  -3526us[-3527us] +/-   22ms
^+ ftpshare1.corbina.net         2   6   377    11  +2081us[+2081us] +/-   26ms
^+ cello.corbina.net  
  • + источники, которые комбинируются с выбранным источником
  • * источник синхронизируется с chronyd
  • ? связь потеряна или если пакеты не проходят тесты в течении 3 раз

sourcestats

Скорость дрейфа серверов опорного смещения.

# chronyc sourcestats 
210 Number of sources = 5
Name/IP Address            NP  NR  Span  Frequency  Freq Skew  Offset  Std Dev
==============================================================================
_gateway                    0   0     0     +0.000   2000.000     +0ns  4000ms
fizdlganet.ru              24  11   30m     +0.069      0.294  +2180us   179us
89.221.207.113             25  15   31m     +0.290      0.585  -4180us   437us
ftpshare1.corbina.net      15  10   21m     -0.233      0.425  +1803us   153us
cello.corbina.net          16   9   969     +0.192      0.673  +1825us   192us

reselect

Повторно выбирает лучший источник синхронизации для cronyd.

chronyc> reselect
200 OK

add server/delete

Добавляет/удаляет NTP сервер в перечне опорных серверов времени.

chronyc add server lin-ntp1
200 OK
chronyc delete  lin-ntp1
200 OK

burst

Выполняет набор измерений, chronyd, для каждого источника опорного NTP указанного в списке, аргументы команды см. ниже

  • good — количество хороших измерений от каждого источника
  • max — максимальное количество измерений
  • mask — IP-адреса источников опорных NTP
  • masked-address — IP-адрес источника для обработки пакетной команды
  • address — IP-адрес или имя хоста одного источника опорного NTP

Пример: провести три хороших измерения от каждого источника в списке, не более 15 попыток

chronyc> burst 3/15

makestep

Имеет две формы: без параметров и с параметрами. Первый режим приводит к немедленной коррекции времени при больших временных отставаниях. Второй режим производит пошагово-пороговую коррекцию в сек, для которого порог активен.

chronyc> makestep
200 OK
chronyc> makestep 0.1 2
200 OK

manual

Управляет режимом ручной установки для команды settime.

  • on — включает settime
  • off — выключает settime
  • list — история изменений settime
  • delete index — удаляет из истории строку
  • reset — удаляет из истории все образцы (samples)
chronyc> manual list
210 n_samples = 5
#    Date     Time(UTC)    Slewed   Original   Residual
=======================================================
 0 2022-03-02 10:08:48     -71.08     -37.49     -71.08
 1 2022-03-02 10:09:00       0.00      71.47       0.00
 2 2022-03-02 10:12:08       8.41     -82.48       8.41
 3 2022-03-02 10:14:56      -8.21     -83.72      -8.21
 4 2022-03-02 10:18:05       0.00      12.54       0.00

settime

Позволяет ввести текущее время вручную используя команду manual или директиву manual в файле /etc/chrony.conf. Точность показаний часов будет зависеть от нажатия кнопки enter. Перед выполнением необходимо убедится, что часовой пояс ПК настроен правильно. Сказанное выше закрепим несколькими примерами на лабораторном стенде.

chronyc> manual on
200 OK
chronyc> settime 13:12
200 OK
Clock was -82.47 seconds fast.  Frequency change = -162095.64ppm, new frequency = 418952.16ppm
chronyc> settime 13:15:05
200 OK
Clock was -83.72 seconds fast.  Frequency change = -700702.19ppm, new frequency = 11810.69ppm
chronyc> settime Mar 02, 2022 13:18:05
200 OK
Clock was 12.54 seconds fast.  Frequency change = 22489.20ppm, new frequency = 34034.28ppm
chronyc> manual off

clients

Выводит количество клиентов NTP подключённых к серверу синхронизации.

chronyc> clients
Hostname   NTP   Drop Int IntL Last     Cmd   Drop Int  Last
==============================================================
10.0.2.33  60      0   9   -   216       0      0   -     -
  • hostname — имя хоста клиента
  • NTP — пакеты NTP, полученные от клиента
  • Drop — отклонённые пакеты для ограничения скорости отклика
  • Int — средний интервал между пакетами
  • IntL — средний интервал между пакетами, когда скорость ограничена
  • Last — время получения последнего пакета NTP
  • Cmd — количество команд полученных от клиента
  • Drop — отклонённые команд для ограничения скорости отклика
  • Int — средний интервал между пакетами команд
  • Last — время с момента получения последнего командного пакета

Заключение.

При планировании корпоративной системы предприятия, необходимо учитывать выбор NTP сервера. Наверное будет правильно, оставить в системе, тот NTP который «исторически» использовался в организации. Как правило, большинство организаций «выросли» из продукции компании Microsoft — служба NTPD. В силу известных обстоятельств, многие компании планируют переход на продукцию OC Linux из Российских дистрибутивов. Планирование и миграция на Linux ставит перед администратором многие вопросы, одним из которых является, выбор сервера NTP. Дистрибутив ALT Linux зарекомендовал себя, как надёжный, устойчивый, перспективный продукт с хорошей историей эксплуатации.. Из статьи видно, основным «коробочным» NTP сервером для ALT Linux является OpenNTPD. Его можно оставит, как бальзовый, при планировании новой структуры корпоративной ИТ. Изменить выбор сервера NTP можно по разным причинам. Серия статей о NTP поможет администратору сделать этот шаг более уверенно.

Как работает Chrony клиент Linux

Введение.

Этой публикацией заканчивается серия статей о работе NTP Linux. Напомним, в предыдущих публикациях рассматривались вопросы использования OpenNTP и NTPD в дистрибутиве ALT Linux сервер. Теперь давайте разберёмся, как устроена работа NTP на уровне рабочей станции ALT Linux из «коробки». Разговор пойдёт не о сервере NTP, а клиенте NTP установленного на рабочей станции, по умолчанию.

Подготовка.

У нас имеется ALT Linux рабочая станция. Воспользуемся графическим менеджером пакетов Synaptic и посмотрим какие NTP установлены из «коробки». Нас интересуют не утилиты NTP, а клиент NTP для синхронизации часов ПК.

Вид: synaptic, поиск клиента ntp.
Вид: synaptic, поиск клиента ntp.

Поиск в Synaptic выявил chrony — клиентскую программу для синхронизации времени с NTP сервером.

  • Стенд:
    • ALT Linux, имя lin-ntp; ip-10.0.2.11;
    • ALT Linux рабочая станция, имя lin-kde; ip- 10.0.2.33;

Программа chrony состоит из двух частей: фонового демона chronyd и утилиты командной строки chronic, лицензия GPLv2. Сам chrond хорош тем, что может работать в медленных сетях, где возможны отключение интернета. Страна у нас большая, погодные и природные условия разные, всё это может приводить к временным отключениям и сбоям в сети. Задача клиента сводится к проверки соединения, периодически отправляя запросы на сервер NTP для мягкой коррекции времени. Период синхронизации с опорными часами проходит через ~ 10 мин. Клиент chrony, допускает установку времени на ПК в ручную с помощью наручных часов, GPS, ГЛОНАСС, в ntpd и openntpd — можно только корректировать.

Установка.

Как говорилось выше chrony уже установлен, по умолчанию, на рабочей станции.

# apt-cache search chrony
chrony - Chrony clock synchronization program
...

Управление.

Выполнить управление chrony можно следующими командами.

# systemctl start|enable|stop|restart|status chronyd

Файл конфигурации находится в /etc/chrony.conf, смотрим какие строки не комментированы.

# 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
# Specify directory for log files.
logdir /var/log/chrony
...
# Select which information is logged.
#log measurements statistics tracking
pool lin-ntp iburst
  • driftfile — записывает время +/- дрейфа системных часов при старте
  • makestep — пошаговая коррекция времени, 1 сек 3 шага
  • rtcsync — синхронизацию ядра с часами реального времени
  • logdir — журнал
  • pool — сервер опорного времени

Проверка.

Проверить работу клиента NTP можно, с помощью утилиты chronyc.

chronyc

Утилита командной строки имеет широкий набор инструкций, некоторые из которых приводятся ниже. Вводить команды для управления демоном chronyd, можно двумя синтаксическими способами.

$ chronyc
...
chronyc> tracking

или

$ chronyc tracking

По ходу публикации, будут использованы оба варианта.

tracking

Команда показывает производительность системных часов на клиенте.

$ chronyc tracking
Reference ID    : 00000000 ()
Stratum         : 0
Ref time (UTC)  : Thu Jan 01 00:00:00 1970
System time     : 0.000000017 seconds slow of NTP time
Last offset     : +0.000000000 seconds
RMS offset      : 0.000000000 seconds
Frequency       : 14.997 ppm slow
Residual freq   : +0.000 ppm
Skew            : 0.000 ppm
Root delay      : 1.000000000 seconds
Root dispersion : 1.000000000 seconds
Update interval : 0.0 seconds
Leap status     : Not synchronised
  • Reference ID — идентификатор и имя NTP сервера синхронизации*
  • Stratum — количество переходов к NTP серверу
  • Ref time — время, UTC, последнего измерения от эталонного источника*
  • System time — скорость задержки системных часов от NTP сервера
  • Last offset — локальное смещение при последнем обновлении часов от NTP
  • RMS offset — долгосрочное среднее значение смещения времени
  • Frequency — частота скорости ошибки, без исправления chronyd, в ppm — ч/м частей на миллион
  • Residual freq — разница частоты между NTP и локальным источником времени
  • Skew — предполагаемая ошибка, связанная с частотой
  • Root delay — общая задержка сетевого пути к NTP серверу синхронизации
  • Update interval — интервал между двумя последними обновлениями часов*
  • Leap status — статус скачка, «нормальный», «вставить секунду», «удалить секунду», «не синхронизировано»*

* Отмечены строки, которые в режиме клиента NTP не работают.

sources

Проверка источника опорного времени, ключ -v, вывод подробно.

$ chronyc sources -v
210 Number of sources = 1
...    
MS Name/IP address   Stratum Poll Reach LastRx Last sample     
^? lin-ntp              0  10  0  -  +0ns[  +0ns] +/-  0ns

sourcestats

Скорость дрейфа и оценка смещения опорного источника.

$ chronyc sourcestats 
210 Number of sources = 1
Name/IP Addr NP NR Span Frequency Freq Skew  Offset Std Dev
===========================================================
lin-ntp   0  0   0   +0.000   2000.000 +0ns  4000ms

add server

Добавить новый опорный NTP сервер в список.

chronyc> add server 10.0.2.16
200 OK
chronyc> sources 
210 Number of sources = 1
MS Name/IP address         Stratum Poll Reach LastRx Last sample               
===============================================================
^? 10.0.2.11            0   6   0   -  +0ns[   +0ns] +/-    0ns
^? 10.0.2.16            0   6   0   -  +0ns[   +0ns] +/-    0ns

delete

Удалить опорный NTP сервер из списка.

chronyc> delete 10.0.2.16
200 OK
chronyc> sources 
210 Number of sources = 1
MS Name/IP address         Stratum Poll Reach LastRx Last sample               
===============================================================
^? 10.0.2.8               0   7   0  - +0ns[ +0ns] +/-    0ns

makestep

Быстрое исправление коррекции времени на клиенте NTP.

chronyc> makestep
200 OK

waitsync

Ожидание синхронизация с опорным NTP сервером, ключ 0 — ожидание не ограниченно.

chronyc> waitsync
try: 1, refid: 00000000, correction: 0.000000007, skew: 0.000
try: 2, refid: 00000000, correction: 0.000000008, skew: 0.000
try: 3, refid: 00000000, correction: 0.000000009, skew: 0.000
...

Пример: ожидание 10 мин, 60 раз по 10 секунд, коррекция ~10 мс.

waitsync 60 0.01
try: 1, refid: 00000000, correction: 0.000000009, skew: 0.000
...
try: 5, refid: 00000000, correction: 0.000000010, skew: 0.000
...
try: 12, refid: 00000000, correction: 0.000000011, skew: 0.000
...

allow all

Разрешает доступ к chronyd NTP сервера синхронизации из локальной сети.

chronyc> allow all
200 OK

accheck

Проверяет клиентский NTP доступ с определенного рабочего хоста серверу синхронизации.

chronyc> accheck lin-kde9
208 Access allowed

cmdallow

Разрешает использовать мониторинг опорного NTP chronyd, сервера синхронизации, из текущего ПК. По умолчанию chronyd опорного NTP принимает команды только с localhost (127.0.0.1).

chronyc> cmdallow lin-kde9
200 OK

cmdaccheck

Проверка доступа мониторинг chronyd, опорного NTP сервера с именованного ПК.

chronyc> cmdaccheck lin-kde9
208 Access allowed

refresh

Обновление IP адресов после остановки или сбоя сети.

chronyc> refresh
200 OK

local

Заставляет ПК работать в режиме NTP сервера в изолированной сети, при сбоях с опорным узлом точного времени.

chronyc> local     
200 OK

local off

Отключает режим узла NTP сервера, точное время получает с опорного NTP сервера.

chronyc> local off
200 OK

Журнал.

Следить за сообщением журнала systemd о работе chronyd.

# journalctl -uf chronyd

Заключение.

Применение chrony, в качестве клиента NTP, является хорошим примером для сетей с неустойчивой инфраструктурой. Электропитание, интернет, разобщённость подразделений, нехватка специалистов, всё это может влиять на работу оборудования и его грамотную эксплуатацию. Клиент chrony не прихотлив, не требует к себе особого внимания. После штатного или нештатного отключения оборудования, временные штаммы сохраняются в файле drift. При включении, демон chronyd проверяет drift, выставляя время на основе его значения. После синхронизации времени с опорным сервером NTP, происходит плавная корректировка частоты отметок временных колебаний. Основная задача которых «выпрямить» время так, что бы работающие приложения не почувствовали скачков и резких изменений в своей работе. В следующей публикации, по просьбе читателей, будет рассказано как перевести chrony в режим сервера точного времени.

Полезные ссылки.

  • chronyd фоновый демон ntp
  • chrony утилита поддержки точности часов
  • chronyc командная строка для chronyd
  • chrony.conf конфигурационный файл
  • точное время эталон времени