NTP(Network Time Protocol) — это сетевой протокол для синхронизации системного времени между компьютерами в сети. Точное время критически важно для работы серверов, ведения логов, аутентификации, планировщиков задач и многих других системных сервисов.
В современных дистрибутивах Linux, включая ALT Linux, CentOS, Rocky Linux и другие, для работы с NTP чаще всего используется демон chrony — современная, быстрая и надёжная замена классического ntpd. Chrony особенно эффективен в условиях нестабильных сетей и на устройствах, которые не работают круглосуточно.
Принцип работы chrony основан на постоянном анализе задержек сети и плавной корректировке системных часов. Это позволяет избежать резких скачков времени, которые могут нарушить работу приложений.
Ключевые преимущества chrony:
- Быстрая синхронизация даже при нестабильном соединении;
- Поддержка работы в оффлайн-режиме с запоминанием дрейфа часов;
- Гибкая настройка источников времени (серверы, локальные часы);
- Встроенные инструменты мониторинга и диагностики;
- Минимальное потребление ресурсов.
> ⚠️Важно: даже идеально настроенный NTPне заменит резервное копирование и мониторинг. Но без точного времени многие механизмы безопасности и аудита просто не будут работать корректно.
Ниже приведён пример настройки NTP-сервера и клиента в корпоративной сети с использованием chrony.
🖥️Настройка NTP-сервера (host-1)
Предположим, что роль центрального сервера времени выполняет маршрутизатор или выделенный сервер host-01 с IP-адресом **IP-адрес вашего NTP-сервера**.
Шаг 1. Отключаем стандартные пулы серверов
Чтобы сервер не синхронизировался с внешними источниками, а использовал локальную конфигурацию:
bash
[root@host-01 ~] sed -i 's/^pool/ pool/' /etc/chrony.conf
Шаг 2. Добавляем конфигурацию сервера
Настраиваем chrony на работу в режиме сервера со стратумом 5 и разрешаем подключения из локальной сети:
bash
[root@host-01 ~] cat <<EOF >> /etc/chrony.conf
server ntp0.ntp-servers.net iburst prefer minstratum 4
local stratum5
allow0.0.0.0/0
EOF
> 📌*Параметр `local stratum5` указывает, что при отсутствии внешних источников сервер будет считать себя источником времени 5-го уровня. `allow0.0.0.0/0` разрешает подключения любым клиентам — в продакшене рекомендуется ограничить диапазон.
Шаг 3. Добавьте логирование для отладки.
bash
logdir /var/log/chrony
log measurements statistics tracking
Шаг 4. Перезапускаем службу
bash
[root@host-01 ~] systemctl restart chronyd
[root@host-01 ~] systemctl enable chronyd
Шаг 5. Настройте автозапуск и мониторинг.
bash
Проверка статуса службы
[root@host-01 ~] systemctl status chronyd
Добавление в мониторинг (например, для Prometheus)
chronyc tracking | grep "Stratum\|System time"
Шаг 6. Проверяем работу
bash
[root@host-1 ~] chronyc tracking
Ожидаемый вывод:
Reference ID : XXXXXXXX (источник)
Stratum : 5
Ref time (UTC) : Mon Mar 02 07:07:28 2024
System time : 0.000000316 seconds slow of NTP time
Last offset : +0.000360014 seconds
Root delay : 0.052456934 seconds
Leap status : Normal
> ✅ Если `Leap status: Normal` и `Stratum: 5` — сервер готов к работе.
Шаг 7. Проверьте открытые порты.
bash
Убедитесь, что порт 123/UDPоткрыт для клиентов
[root@host-01 ~] firewall-cmd --list-services | grep ntp
[root@host-01 ~] firewall-cmd --add-service=ntp --permanent
[root@host-01 ~] firewall-cmd --reload
💻 Настройка NTP-клиентов
🔹 Клиент host-2
Шаг 1. Отключаем стандартные пулы
bash
[root@host-02 ~] sed -i 's/^pool/ pool/' /etc/chrony.conf
Шаг 2. Указываем наш NTP-сервер
bash
[root@host-02 ~] echo "server**IP-адрес_вашего_NTP-сервера** iburst" >> /etc/chrony.conf
> 📌*Параметр `iburst` ускоряет начальную синхронизацию, отправляя пакет запросов "пачкой".
Шаг 3. Добавьте резервный сервер для отказоустойчивости.
bash
echo"server**IP-адрес_резервного_NTP-сервера** iburst minpoll 6 maxpoll 10" >> /etc/chrony.conf
Шаг 4. Перезапускаем chrony
bash
[root@host-02 ~] systemctl restart chronyd
[root@host-02 ~] systemctl enable chronyd
Шаг 5. Проверяем синхронизацию
bash
[root@host-02 ~] chronyc sources -v
Шаг 6. Настройте автоматическую проверку расхождения времени.
bash
Создайте скрипт проверки /usr/local/bin/check-ntp.sh
!/bin/bash
OFFSET=$(chronyc tracking | grep "System time" | awk '{print $4}')
if (( $(echo "$OFFSET > 1.0" | bc -l) )); then
echo "WARNING: NTP offset > 1 second!" | logger -t ntp-monitor
fi
Добавьте в cron каждые 15 минут
*/15 * * * * /usr/local/bin/check-ntp.sh
Шаг 7. Добавьте настройку для экономии трафика в медленных сетях.
bash
В /etc/chrony.conf добавьте:
minpoll8
maxpoll10
makestep1.0 3
> Это уменьшит частоту опроса сервера и позволит резкую подстройку только в первые 3 обновления.
Проверка:
bash
[root@host-03 ~] chronyc sources
Шаг 8. Включите синхронизацию аппаратных часов (RTC).
bash
В /etc/chrony.conf раскомментируйте или добавьте:
rtcsync
> Это позволит ядру периодически обновлять аппаратные часы, что полезно после перезагрузки.
> 🔔Подпишитесь на канал, чтобы не пропустить новые руководства по настройке Linux-сервисов!
*Статья подготовлена на основе практического опыта развёртывания NTPв корпоративных сетях. Все команды протестированы в среде ALT Linux и совместимых дистрибутивах.*