Перейти к содержимому

Chrony вместо ntpd

В Debian/Ubuntu и RHEL/CentOS ntpd давно пора менять на chrony. Он быстрее сходится к точному времени, лучше работает при нестабильных сетях и меньше нагружает систему. В современных дистрибутивах chrony уже стоит по умолчанию — но если он ещё не развёрнут, переход занимает минуту.

Установка

На RHEL-подобных:

sudo dnf install chrony -y
sudo systemctl enable --now chronyd

На Debian/Ubuntu:

sudo apt install chrony -y
sudo systemctl enable --now chronyd

Если на машине раньше работал ntpd, остановите и отключите его, чтобы не было конфликта портов:

sudo systemctl stop ntpd
sudo systemctl disable ntpd

Конфигурация makestep

Ключевая директива в /etc/chrony/chrony.conf (или /etc/chrony.conf на RHEL) — makestep. Она определяет, как chronyd ведёт себя при старте: корректирует ли время плавно или резко.

makestep 1.0 3
makestep

Формат: makestep <max_offset> <max_updates>. Если смещение больше <max_offset> секунд и количество обновлений не превышает <max_updates>, chrony делает резкую корректировку вместо постепенной подстройки. По умолчанию стоит makestep 1.0 3 — три раза за первые три синхронизации допускается прыжок до 1 секунды.

Типичная ошибка — поставить makestep -1 1 и ожидать, что при старте сервер с большим смещением подстроится мгновенно. На практике отрицательное значение работает только при определённых условиях. Для надёжного старта используйте положительное число и ограничьте количество шагов.

Директива allow

По умолчанию chronyd работает только как клиент. Чтобы разрешить синхронизацию другим хостам через этот сервер, добавьте allow:

allow 10.0.0.0/24
allow

Можно указывать отдельные IP, подсети или несколько строк allow для разных сетей. Без этой директивы машина принимает запросы только от localhost.

Если нужно запретить конкретный хост, используйте deny — она работает после allow и перекрывает его:

allow 10.0.0.0/24
deny 10.0.0.42

После изменения конфигурации перезапустите службу:

sudo systemctl restart chronyd

Проверка через timedatectl

timedatectl показывает текущее состояние синхронизации и источник времени:

timedatectl

Пример вывода:

               Local time: Wed 2025-01-15 14:23:01 MSK
           Universal time: Wed 2025-01-15 11:23:01 UTC
                 RTC time: Wed 2025-01-15 11:23:01
                Time zone: Europe/Moscow (MSK, +0300)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no

Ключевые поля для диагностики:

ПолеЗначение при проблемеЧто означает
System clock synchronizednochrony ещё не догнал
NTP serviceinactiveслужба не запущена или не активирована
RTC in local TZyesаппаратные часы в локальном поясе — частая проблема на виртуалках

Для детальной информации о текущих источниках:

chronyc sources -v

Если NTP service: active и System clock synchronized: yes — всё работает. Если нет, проверьте sudo systemctl status chronyd и сетевой доступ к NTP-серверам (порт 123 UDP).