В этой статье я покажу вам как установить сервер точного времени Chrony на Debian 11, а также как настроить и использовать его.
Что используется для синхронизации времени по умолчанию
Эта инструкция по настройке Chrony для Debian 11, но она подойдет и для Ubuntu 20.04 и скорее всего для Ubuntu 22.04.
Если вы ещё не устанавливали Chrony, то для синхронизации времени будет использована служба systemd-timesyncd. Эта служба использует конфиг /etc/systemd/timesyncd.conf, именно в нём прописаны NTP сервера с которыми сервер синхронизирует своё время.
Служба 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:
$ 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 сервер.
Для начала установим само серверное приложение:
# apt install chrony
При установке этого пакета будет создана одноименная служба, которая будет запущена и помещена в автозапуск, а вдобавок служба systemd-timesyncd будет выключена.
Конфигом для службы является файл /etc/chrony/chrony.conf. В нем нужно закомментировать используемый пул и добавить свои NTP сервера. А также нужно указать разрешённую сеть для наших клиентов:
# nano /etc/chrony/chrony.conf #pool 2.debian.pool.ntp.org iburst server ntp1.stratum2.ru iburst server ntp2.stratum2.ru iburst server ntp3.stratum2.ru iburst server ntp4.stratum2.ru iburst server ntp5.stratum2.ru iburst allow 192.168.0.0/24
После этого, перезапустим службу:
# systemctl restart chrony
Проверим источники времени. Опция -N указывает что нужно вывести оригинальные имена источников времени:
# chronyc -N sources MS Name/IP address Stratum Poll Reach LastRx Last sample =============================================================================== ^- ntp1.stratum2.ru 2 6 37 37 -4184us[-4184us] +/- 58ms ^+ ntp2.stratum2.ru 2 6 37 37 -1960us[-1960us] +/- 61ms ^* ntp3.stratum2.ru 2 6 37 37 -220us[ +214us] +/- 54ms ^- ntp5.stratum2.ru 2 6 37 37 +1960us[+1960us] +/- 56ms
В выводе, сервер обозначенный звездочкой (в моём случае ^* ntp3.stratum2.ru) является наилучшим и текущем сервером для синхронизации времени.
Сервер времени chrony, также как и другие NTP сервера слушает порт udp 123:
$ sudo netstat -nulp | grep chronyd udp 0 0 0.0.0.0:123 0.0.0.0:* 1529/chronyd udp 0 0 127.0.0.1:323 0.0.0.0:* 1529/chronyd udp6 0 0 ::1:323 :::* 1529/chronyd
Вдобавок к порту 123 вы можете заметить ещё один порт – udp 323. Он используется для того чтобы утилита chronyc, подключалась к процессу chronyd. А именно с помощью этой утилиты мы смотрели источники времени.
Настройку фаервола nftables для Debian 11 я описывал здесь.
Настройка клиентских серверов
Теперь наш сервер синхронизирует своё время с серверами в интернете. Осталось лишь на остальных серверах прописать наш сервер в качестве источника времени. Для этого укажите его адрес в /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.
