Ubuntu — настройка NTP клиента Chrony
Настроим NTP клиент Chrony на сервере Ubuntu для синхронизации с NTP серверами.
У меня есть парочка стареньких серверов Ubuntu 14, на которых постоянно отстаёт время, причём прилично так отстаёт. Еще есть корпоративные NTP сервера, с которыми было бы неплохо синхронизировать время.
Установим и настроим Chrony для синхронизации времени. После установки появится две программы:
- chronyc — интерфейс командной строки для Chrony
- chronyd — служба Chrony
Установка Chrony
service chrony status systemctl status chronyd etc/init.d/chronyd status
Для автозапуска вам может пригодиться:
systemctl enable chrony chkconfig --add chronyd
Настройка Chrony
Конфигурационный файл Chrony находится по адресу /etc/chrony/chrony.conf.
Настроим. Я указываю четыре NTP сервера:
server 10.12.33.13 iburst server 10.12.33.14 iburst server 10.12.33.15 iburst server 10.12.33.16 iburst stratumweight 0 driftfile /var/lib/chrony/chrony.drift rtcsync makestep 10 3 bindcmdaddress 127.0.0.1 keyfile /etc/chrony/chrony.keys commandkey 1 generatecommandkey noclientlog logchange 0.5 logdir /var/log/chrony
- server — NTP-сервер для синхронизации
- stratumweight — задержка синхронизации
- driftfile — расположение и имя файла, содержащего данные смещения
- rtcsync — включает режим, в котором системное время периодически копируется в RTC
- makestep — эта директива корректирует смещение во времени путем снижения скорости или замедления хода часов
- bindcmdaddress — позволяет указать IP-адрес интерфейса, на котором chronyd будет прослушивать пакеты команд мониторинга
- keyfile — файл, содержащий пары ID-ключей для аутентификации пакетов NTP
- commandkey — используется для установки номера ключа, используемого для аутентификации пользовательских команд с помощью программы chronyc во время выполнения
- generatecommandkey — если командный ключ не найден при запуске, chronyd создаст новый командный ключ из файла /dev/urandom и запишет его в файл ключа
- noclientlog — клиентские обращения не должны регистрироваться
- logchange — пороговое значение для настройки системных часов, которые будут генерировать сообщение системного журнала
- logdir — путь к файлу журнала
Проверка Chrony
- Reference ID — текущий источник синхронизации
- Stratum — количество переходов
- Ref time — время по Гринвичу
- System time — задержка системных часов от синхронизированного сервера
- Last offset — расчетное смещение последнего обновления часов
- RMS offset — долгосрочное среднее арифметическое значения смещения
- Frequency — это частота, на которой часы системы будут работать неправильно, если хронограф не проведет коррекцию. Она выражена в ppm — ч/м (частей на миллион)
- Residual freq — остаточная частота указывает на разницу между измерениями от опорного источника и используемой в настоящее время частотой
- Skew — расчетная погрешность частоты
- Root delay — суммарная задержка сетевого пути к опорному серверу, с которым синхронизируется компьютер
- Leap status — это статус, который может иметь одно из следующих значений — нормальное, добавить второй, удалить второй или не синхронизироваться
У меня Leap status — Normal, всё синхронизировано.
Sysadminium
В этой статье я покажу вам как установить сервер точного времени Chrony на Debian 11, а также как настроить и использовать его.
Клиент синхронизации времени на SystemD
В системах базирующихся на SystemD клиентом синхронизации времени, по умолчанию, выступает служба systemd-timesyncd.
$ sudo systemctl status systemd-timesyncd ● systemd-timesyncd.service - Network Time Synchronization Loaded: loaded (/lib/systemd/system/systemd-timesyncd.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2022-05-05 12:05:00 MSK; 2s ago Docs: man:systemd-timesyncd.service(8) Main PID: 60424 (systemd-timesyn) Status: "Initial synchronization to time server 91.189.94.4:123 (ntp.ubuntu.com)." Tasks: 2 (limit: 2274) Memory: 1.4M CGroup: /system.slice/systemd-timesyncd.service └─60424 /lib/systemd/systemd-timesyncd
Эта служба использует конфиг /etc/systemd/timesyncd.conf, именно в нём прописаны NTP сервера с которыми сервер синхронизирует своё время.
$ cat /etc/systemd/timesyncd.conf # This file is part of systemd. # # systemd is free software; you can redistribute it and/or modify it # under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation; either version 2.1 of the License, or # (at your option) any later version. # # Entries in this file show the compile time defaults. # You can change settings by editing this file. # Defaults can be restored by simply deleting this file. # # See timesyncd.conf(5) for details. [Time] #NTP= #FallbackNTP=ntp.ubuntu.com #RootDistanceMaxSec=5 #PollIntervalMinSec=32 #PollIntervalMaxSec=2048
Установка и настройка chrony
Сервера времени называют NTP серверами, так как они используют NTP протокол. Для Linux таких серверов несколько, например chrony, ntp, openntpd. Я покажу вам первый, так как это самый современный NTP сервер.
В Ubuntu и Debian — chrony устанавливается из стандартных репозиториев:
При установке этого пакета будет создана одноименная служба, которая будет запущена и помещена в автозапуск. А служба systemd-timesyncd будет выключена.
Конфигом для службы является файл /etc/chrony/chrony.conf. В нем нужно закомментировать используемый пул и добавить свои NTP сервера. А также можно указать разрешённую сеть для клиентов:
# nano /etc/chrony/chrony.conf server 0.ru.pool.ntp.org iburst server 1.ru.pool.ntp.org iburst server 2.ru.pool.ntp.org iburst server 3.ru.pool.ntp.org iburst allow 192.168.0.0/24
После настройки сервера нужно перезапустить службу:
Проверим источники времени. Опция -N указывает что нужно вывести оригинальные имена источников времени:
# chronyc -N sources MS Name/IP address Stratum Poll Reach LastRx Last sample =============================================================================== ^- 0.ru.pool.ntp.org 2 8 377 197 +1306us[+1337us] +/- 134ms ^- 1.ru.pool.ntp.org 2 7 377 524 +35ms[ +35ms] +/- 100ms ^- 2.ru.pool.ntp.org 2 7 377 67 -476us[ -476us] +/- 81ms ^* 3.ru.pool.ntp.org 1 9 377 67 -197us[ -164us] +/- 14ms
В выводе, сервер обозначенный звездочкой (в моём случае 3.ru.pool.ntp.org) является наилучшим и текущем сервером для синхронизации времени.
Сервер времени chrony, также как и другие NTP сервера слушает порт udp 123:
$ sudo ss -ulpn | grep chronyd UNCONN 0 0 127.0.0.1:323 0.0.0.0:* users:(("chronyd",pid=1507,fd=5)) UNCONN 0 0 0.0.0.0:123 0.0.0.0:* users:(("chronyd",pid=1507,fd=7)) UNCONN 0 0 [::1]:323 [::]:* users:(("chronyd",pid=1507,fd=6))
Вдобавок к порту 123 вы можете заметить ещё один порт — udp 323. Он используется для того чтобы утилита chronyc подключалась к процессу chronyd. А именно с помощью этой утилиты мы смотрели источники времени.
Настройку фаервола nftables для Debian 11 я описывал здесь.
Кроме этого, вы можете посмотреть количество активных и не активных источников:
# chronyc activity 200 OK 4 sources online 0 sources offline 0 sources doing burst (return to online) 0 sources doing burst (return to offline) 0 sources with unknown address
Заметьте, если Chrony не сможет получить время из интернета, то клиенты перестанут синхронизировать своё время с этим сервером. Поэтому нужно следить, чтобы у сервера Chrony всегда были рабочие источники времени.
Настройка клиентских серверов
Теперь нужно, на остальных серверах, прописать наш сервер Chrony в качестве источника синхронизации времени. Для этого укажем его адрес в /etc/systemd/timesyncd.conf на остальных серверах. А затем перезапустим службу синхронизации времени, и проверим работу:
# nano /etc/systemd/timesyncd.conf [Time] NTP=192.168.0.15 # systemctl restart systemd-timesyncd # date # journalctl --since -1h -u systemd-timesyncd
Для большей информации вы можете использовать следующие команды:
# systemctl status systemd-timesyncd.service # timedatectl show-timesync # timedatectl timesync-status
Также, на сервере времени вы можете посмотреть клиентов, которые к нему подключились:
# chronyc clients Hostname NTP Drop Int IntL Last Cmd Drop Int Last =============================================================================== 192.168.0.2 4 0 5 - 5 0 0 - -
- Hostname — имя или адрес клиента;
- NTP — количество NTP-пакетов, полученных от клиентов;
- Drop — сколько NTP-пакетов было отброшено из-за ограничения скорости отклика;
- Int — средний интервал между NTP-пакетами;
- Last — время с момента получения последнего NTP-пакета;
- Остальные поля я не рассматриваю, так как обычно этих достаточно.
Итог
Теперь вы знакомы с сервером времени Chrony. Он позволяет запустить свой локальный NTP сервер и синхронизировать время с другими NTP серверами. То-есть может работать и в качестве клиента и в качестве сервера.
- Служба этого приложения — chrony.
- Конфигурационный файл — /etc/chrony/chrony.conf.
- Серверный процесс — chronyd.
- Утилита для получения информации — chronyc.
В этой статье я покажу вам как установить сервер точного времени Chrony на Debian 11, а также как настроить и использовать его