В этой статье я покажу вам как установить сервер точного времени 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 устанавливается из стандартных репозиториев:
# apt install 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
После настройки сервера нужно перезапустить службу:
# systemctl restart chrony
Проверим источники времени. Опция -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.