Установка сервера времени Chrony на Debian 11

В этой статье я покажу вам как установить сервер точного времени 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

 

Процесс синхронизации времени на серверах с использованием chrony
Процесс синхронизации времени на серверах

Сервера времени называют NTP серверами, так как они используют NTP протокол. Для Linux таких серверов несколько, например chrony, ntp, openntpd. Я покажу вам первый, так как это самый современный NTP сервер.

В Ubuntu и Debianchrony устанавливается из стандартных репозиториев:

# 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.