Проблема
На серверах и рабочих станциях в локальной сети время расходится. Это приводит к проблемам с аутентификацией в домене, рассогласованию логов, ошибкам в распределённых системах и даже некорректной работе приложений, зависящих от временных меток. Встроенные часы компьютеров (CMOS) неточны и со временем уходят вперёд или назад.
Для корпоративной сети необходим собственный сервер точного времени, который будет синхронизироваться с надёжными внешними источниками и раздавать время всем внутренним устройствам. В Linux есть два основных демона для синхронизации времени: ntpd (классический NTP) и chrony (современная альтернатива). Chrony имеет преимущества для систем, которые не всегда подключены к сети, а также для виртуальных машин и сред с частыми изменениями времени .
Решение
Chrony это реализация NTP (Network Time Protocol), разработанная специально для систем, где важна быстрая синхронизация после загрузки, работа в условиях нестабильной сети и на виртуальном оборудовании. Chrony состоит из двух компонентов: chronyd (демон) и chronyc (интерактивная консоль для управления и мониторинга).
Chrony умеет:
- синхронизировать время с внешними NTP-серверами;
- выступать в роли NTP-сервера для локальной сети;
- корректировать время плавно (без скачков) или, при необходимости, делать мгновенные коррекции;
- работать с аппаратным таймером (RTC);
- хорошо адаптироваться к прерывистым соединениям и виртуализации.
Мы настроим chrony на Ubuntu Server (инструкции подойдут для Debian, CentOS/RHEL, Astra Linux и Alt Linux с небольшими различиями) в качестве NTP-сервера для локальной сети, синхронизирующегося с внешними источниками (pool.ntp.org).
Пошаговая инструкция
Шаг 1. Установка chrony
Во многих современных дистрибутивах chrony уже установлен по умолчанию (вместо ntpd). Проверим:
Дальше будут команды в терминале линукс.
systemctl status chrony # Ubuntu (имя службы chrony)
systemctl status chronyd # CentOS/RHEL (имя службы chronyd)
Если не установлен:
Ubuntu/Debian:
sudo apt update
sudo apt install chrony -y
CentOS/RHEL:
sudo yum install chrony -y
После установки служба автоматически запускается. Убедитесь:
sudo systemctl enable chrony # или chronyd
sudo systemctl start chrony
Шаг 2. Базовая настройка
Основной конфигурационный файл chrony находится в:
-
Ubuntu/Debian:
/etc/chrony/chrony.conf -
CentOS/RHEL:
/etc/chrony.conf
Сделаем резервную копию:
sudo cp /etc/chrony/chrony.conf /etc/chrony/chrony.conf.bak
Откроем файл для редактирования:
sudo nano /etc/chrony/chrony.conf # Ubuntu/Debian
sudo nano /etc/chrony.conf # CentOS/RHEL
Типичная конфигурация для сервера, который будет синхронизироваться с внешними источниками и обслуживать локальную сеть:
# Использовать публичные NTP-серверы (рекомендуется несколько)
pool 0.pool.ntp.org iburst
pool 1.pool.ntp.org iburst
pool 2.pool.ntp.org iburst
pool 3.pool.ntp.org iburst
# Сервер будет слушать все интерфейсы и отвечать на запросы
allow 192.168.0.0/16 # разрешить доступ для локальной сети
# allow 10.0.0.0/8 # при необходимости добавить другие подсети
# Для большей точности можно использовать локальные часы как fallback
local stratum 10
# Файл для хранения дрейфа (drift)
driftfile /var/lib/chrony/drift
# Логирование
logdir /var/log/chrony
log measurements statistics tracking
# Настройки для виртуальных машин
rtcsync # синхронизировать аппаратные часы
Пояснения:
-
pool— указывает группу NTP-серверов, к которым будет обращаться chrony. Ключiburstускоряет начальную синхронизацию. -
allow— разрешает доступ к NTP-серверу для указанных подсетей. Без этой директивы сервер не будет отвечать на запросы извне. -
local stratum 10— если внешние источники недоступны, chrony продолжит работать как сервер, но с высоким стратумом (указывает на то, что время не синхронизировано с внешним эталоном). Это полезно для изолированных сетей. -
rtcsync— сообщает ядру регулярно синхронизировать аппаратные часы (RTC) с системным временем. -
driftfile— хранит скорость дрейфа часов, вычисленную chrony.
Полная документация по формату конфигурации доступна в man-странице chrony.conf:
man chrony.conf
Или на официальном сайте chrony.
Шаг 3. Настройка разрешений для локальной сети
Убедитесь, что ваша локальная подсеть (например, 192.168.1.0/24) разрешена в директиве allow. Если у вас несколько подсетей, можно добавить несколько строк.
Если сервер должен принимать запросы из любой сети, используйте:
allow all
Но это не рекомендуется для серверов, доступных из интернета, так как их могут использовать в DDoS-атаках (открытые NTP-резолверы).
Шаг 4. Открытие порта в брандмауэре
NTP использует UDP-порт 123. Откройте его:
Ubuntu/Debian (ufw):
sudo ufw allow 123/udp
CentOS/RHEL (firewalld):
sudo firewall-cmd --permanent --add-service=ntp
sudo firewall-cmd --reload
Если сервер работает в виртуальной среде, также может потребоваться отключить синхронизацию времени с гипервизором (например, в VMware), чтобы chrony сам управлял временем. В VMware рекомендуется добавить в параметры виртуальной машины tools.syncTime = "FALSE".
Шаг 5. Проверка работы и мониторинг
После внесения изменений перезапустите chrony:
sudo systemctl restart chrony # или chronyd
Проверьте статус синхронизации с помощью chronyc:
chronyc sources -v
Вывод покажет список источников времени, их состояние (^* текущий выбранный источник, ^+ доступные резервные). Пример:
210 Number of sources = 4
MS Name/IP address Stratum Poll Reach LastRx Last sample
=========================================================================
^* ntp1.example.com 2 6 17 43 +0.012[ +0.012] +/- 0.023
^+ ntp2.example.com 2 6 17 45 -0.005[ -0.005] +/- 0.031
Команда chronyc tracking показывает подробную информацию о текущей синхронизации: смещение, дрейф, частоту обновления.
Чтобы проверить, что сервер отвечает на запросы из локальной сети, выполните с клиента:
chronyc -n sources
или
ntpdate -q 192.168.1.10 # где IP вашего NTP-сервера
Шаг 6. Настройка клиентов
На клиентских машинах (в том числе Windows) укажите в качестве NTP-сервера IP-адрес вашего chrony-сервера.
Для Windows:
- Панель управления → Дата и время → Интернет-время → Изменить настройки.
- Укажите
192.168.1.10(или имя сервера) в поле «Сервер».
Для Linux-клиентов (с chrony):
В /etc/chrony/chrony.conf вместо pool пропишите:
server 192.168.1.10 iburst
Для клиентов, использующих systemd-timesyncd (Ubuntu):
sudo timedatectl set-ntp true
sudo systemctl stop systemd-timesyncd
sudo nano /etc/systemd/timesyncd.conf
Укажите:
[Time]
NTP=192.168.1.10
Затем:
sudo systemctl start systemd-timesyncd
sudo systemctl status systemd-timesyncd
Шаг 7. Управление через chronyc (интерактивная консоль)
Chrony предоставляет мощную консоль chronyc для управления и мониторинга. Запустите:
chronyc
В интерактивном режиме доступны команды:
-
sources -vпросмотр источников; -
trackingстатус синхронизации; -
activityколичество активных серверов и клиентов; -
clientsсписок клиентов, обращавшихся к серверу; -
makestepпринудительная коррекция времени (если разрешено).
Выход quit.
Шаг 8. Обеспечение точности в виртуальных средах
Chrony имеет специальную поддержку для виртуальных машин. Настройки по умолчанию уже оптимизированы, но можно добавить:
# Увеличить чувствительность к изменениям времени (для VM)
tempcomp /sys/class/thermal/thermal_zone0/temp # если есть датчик температуры
Более подробные рекомендации для виртуальных сред можно найти в официальной документации chrony.
Шаг 9. Устранение распространённых проблем
| Проблема | Причина | Решение |
|---|---|---|
| Нет синхронизации с внешними источниками | Нет доступа в интернет или DNS не резолвит pool.ntp.org | Проверьте сеть, временно укажите IP-адреса (например, server 8.8.8.8). Убедитесь, что порт 123 открыт исходяще. |
| Сервер не отвечает клиентам | Не настроена директива allow | Добавьте allow 192.168.0.0/16 или allow all для теста. |
| Время скачет, нестабильно | Другие службы (например, ntpd) конфликтуют | Убедитесь, что ntpd отключён: sudo systemctl stop ntp && sudo systemctl disable ntp |
| Ошибка «No suitable source for synchronisation» | Нет доступных источников | Проверьте chronyc sources, возможно, серверы недоступны. Добавьте iburst для ускорения. |
| После перезагрузки время сильно отличается | Аппаратные часы неточны | Убедитесь, что включён rtcsync. Можно добавить makestep 1 3 в конфиг, чтобы chrony мог сделать резкий шаг при больших расхождениях в первые 3 обновления. |
Дополнительные возможности
- Аутентификация chrony поддерживает аутентификацию NTP с помощью симметричных ключей (NTPv4). Это полезно для защиты от подделки времени в критических системах .
-
Активный мониторинг можно настроить
chronycдля сбора метрик и интеграции с системами мониторинга (например, Prometheus). - Использование PTP (Precision Time Protocol) в версиях chrony, собранных с поддержкой PTP, можно синхронизировать время с ещё большей точностью для финансовых или промышленных систем .
Chrony это современный, гибкий и производительный NTP-демон, который идеально подходит для большинства сценариев: от домашнего сервера до корпоративной инфраструктуры. Он легко настраивается, быстро достигает точного времени и надёжно работает даже в нестабильных сетях. Используя chrony, вы обеспечите единое время для всех устройств в сети, что критически важно для корректной работы домена, логов и распределённых приложений.
Для более глубокого изучения обратитесь к официальным источникам:
- Официальный сайт chrony: https://chrony.tuxfamily.org
-
Документация chrony (man-страницы):
man chrony,man chrony.conf,man chronyc - Red Hat Enterprise Linux 9: Configuring chrony — официальное руководство
- Ubuntu Server Guide: Time Synchronization — Ubuntu documentation







