Настройка NTP на сервере Ubuntu Linux
Чтобы компьютерные системы, особенно распределенные, корректно работали, применяется механизм синхронизации времени. Точное время важно для сетевых взаимодействий, записи логов и информации в базы данных, обеспечения безопасности, настройки расписаний. Для синхронизации чаще всего применяется протокол Network Time Protocol (NTP). Разберем тонкости его работы и алгоритм настройки на Ubuntu Linux.

Как функционирует NTP
Network Time Protocol — протокол синхронизации времени, который позволяет привести системные часы на серверах и пользовательских устройствах к эталонному времени UTC с учетом сетевых задержек.
Протокол NTP устроен по иерархическому принципу. NTP-серверы распределяются по уровням (stratum):
Stratum 0 — источники эталонного времени. Они получают показатели с атомных часов, радиопередатчиков, систем спутниковой навигации;
Stratum 1 — серверы, которые напрямую взаимосвязаны со Stratum 0;
Stratum 2, 3, 4 и т.д. — серверы, которые синхронизируются со Stratum 1.
Принцип синхронизации
Протокол работает поверх протокола UDP на порту 123 по клиент-серверной модели. NTP-клиент отправляет к серверу запросы, фиксируя время отправки. Сервер принимает запрос и посылает ответ. Клиент получает ответ и фиксирует время. Выходит, что в процессе обмена используются такие метки, как:
момент запроса клиента;
время получения запроса сервером;
момент направления ответа от сервера;
время получения ответа клиентом.
Эти метки нужны клиенту для расчета сетевых задержек и смещения локальных часов. Показатели вычисляются с учетом времени в пути запроса и ответа.
Расчет времениЕсли расхождение по времени маленькое, система постепенно меняет частоту системных часов и плавно подтягивает нужные показатели. При значительной разнице корректировка происходит одномоментно. После этого запускается процесс регулярной синхронизации.
Если в процессе участвует несколько серверов, NTP применяет алгоритмы отбора, которые позволяют исключить источники с недостоверными данными.
Установка NTP-сервера на Ubuntu
Для работы NTP-сервера на современных версиях Ubuntu (начиная с 20.04) потребуется пакет chrony, который включает демон chronyd, конфигурационные файлы и инструменты управления. Он часто предустановлен по умолчанию. Если его нет, установите из официальных репозиториев:
При использовании chrony конфликта с systemd-timesyncd, как правило, не возникает, так как chrony автоматически становится основным сервисом синхронизации, а systemd-timesyncd останавливается. Однако для гарантии можно проверить и отключить его:
Если в системе остался пакет ntp, его необходимо полностью удалить (sudo apt purge ntp), чтобы избежать конфликтов с chrony.
При развертывании инфраструктуры в облаке, синхронизация времени особенно важна. Например, на выделенных серверах это делается по тому же принципу, что и на локальной машине.
Настройка NTP-сервера
В конфигурационном файле нужно задать источники времени, правила доступа для пользователей и основные параметры безопасности. Рассказываем, каких настроек будет достаточно для запуска сервера.
Основная конфигурация
Основной конфигурационный файл находится по пути /etc/chrony/chrony.conf. Для удобства поддержки рекомендуется создавать отдельные файлы в директории /etc/chrony/conf.d/, например, sudo nano /etc/chrony/conf.d/local-server.conf.
Пример содержимого конфигурационного файла:
Параметр driftfile по-прежнему актуален. Для управления доступом клиентов используется директива allow, а не restrict. Остальные ограничения (nopeer, noquery и т.д.) в классическом виде не применяются — безопасность обеспечивается через allow и настройки брандмауэра.
После настроек перезапустите службу с помощью команды:
Выбор приоритетных серверов
Рекомендуется использовать несколько внешних источников времени. Директива pool автоматически выбирает из пула доступные серверы. Либо можно обозначить их вручную. Пример:
Приоритетный сервер выбирается с помощью параметра prefer:
При равных условиях сервер prefer будет служить основным источником времени для синхронизации.
В корпоративной инфраструктуре в качестве приоритетных серверов лучше выбирать внутренние NTP-серверы организации. Для этого используйте параметр prefer:
server ntp.corp.local iburst prefer
pool 0.pool.ntp.org iburst
Внешние серверы из пула будут использоваться как резервные, если основной недоступен. Параметр iburst, как и в ntp, ускоряет начальную синхронизацию.
Настройка безопасности
Настройки безопасности включают несколько аспектов:
1. Ограничение доступа: В chrony доступ клиентов регулируется директивой allow. Ограничьте доступ только доверенными подсетями:
По умолчанию доступ запрещен всем.
2. Брандмауэр: Откройте UDP-порт 123 в брандмауэре только для доверенных сетей.
3. Аутентификация (NTS): Современные версии chrony (и Ubuntu 22.04+) поддерживают протокол Network Time Security (NTS) для шифрования и аутентификации NTP-трафика. Это предотвращает атаки "человек посередине" и подмену времени. Для использования NTS с публичными пулами (например, Cloudflare) укажите в конфигурации:
Для корпоративных серверов также можно настроить NTS.
Подключение и настройка клиентов
Необходимо подключить клиентские устройства к настроенному NTP-серверу. Подсказываем, как обеспечить постоянную и однократную синхронизацию.
Синхронизация клиентских устройств
На клиентской машине также должен быть установлен chrony. Откройте конфигурационный файл:
Закомментируйте или удалите строки с общедоступными серверами pool или server, укажите адрес вашего внутреннего NTP-сервера, например:
Параметр iburst поможет обеспечить быструю начальную синхронизацию при первом запуске.
После настроек перезапустите службу:
Убедитесь, что все правильно работает:
Проверьте, что клиент синхронизируется с сервером, используя команду chronyc:
Эта команда отобразит перечень серверов. У активных источников синхронизации в столбце S будет символ ^* (или *+). Для просмотра детальной информации о текущем состоянии используйте:
Команда ntpq -p может работать, если установлены пакеты совместимости, но ее использование не рекомендуется.
Принудительная однократная синхронизация
Если вам нужно немедленно и принудительно синхронизировать время (например, при сильном расхождении), не дожидаясь медленной подстройки демоном chronyd, используйте встроенную команду chronyc:
Эта команда заставит chronyd выполнить коррекцию времени скачком (step), если это разрешено в конфигурации. Останавливать службу chrony при этом не нужно. Утилита ntpdate устарела и не рекомендуется к использованию в современных версиях Ubuntu.
Тестирование и устранение проблем
После установки и настройки NTP убедитесь, что служба работает, и сервер Ubuntu Linux синхронизируется с источниками точного времени. Периодически могут возникать ошибки, которые нужно быстро исправлять. Подсказываем проверенные решения.
Проверка работы NTP-сервера
После всех настроек еще раз убедитесь, что служба запущена и правильно работает. Выполните команду:
Если видите active или running, значит, служба работает. Если нет, выполните:
Устранение ошибок
Типичные ошибки и способы их устранения:
Проблема | Вероятная причина | Проверка | Решение |
Служба NTP не запускается | Сервис конфликтует с systemd-timesyncd | systemctl status ntp или timedatectl status | Удалите ненужный сервис с помощью sudo apt remove systemd-timesyncd и перезапустите NTP |
Время не синхронизируется | Нет доступа к NTP-серверам | chronyc sources -v | Проверьте подключение к интернету и настройки серверов в конфигурационным файле /etc/chrony/chrony.conf. Можно заменить внутренние источники на внешние |
Сильное смещение времени | Постоянная разница в системном времени | chronyc sources -v для анализа параметра offset | Остановите службу NTP и выполните синхронизацию вручную командой sudo chronyc -a makestep, потом перезапустите сервис |
Брандмауэр не пускает NTP-трафик | Закрытый рабочий порт | sudo ufw status или iptables -L | Откройте порт командой sudo ufw allow 123/udp |
Сервер не отвечает | Неверные ограничения в конфигурации chrony | Проверка файла /etc/chrony/chrony.conf или файлов в /etc/chrony/conf.d/ | Убедитесь, что добавлена директива allow для нужной подсети, например: allow 192.168.1.0/24. Проверьте, что нет конфликтующих правил. |
Служба работает, но время не обновляется | Некорректно выбранный источник времени | chronyc activity | Укажите не доменные имена серверов, а IP-адреса |
Предупреждение no server suitable for synchronization found | Серверы недоступны либо не выполняют запрос | chronyc sources -v | Проверьте сетевые ограничения и настройки брандмауэра. Если там все нормально, но ситуация не меняется, выберите другой пул серверов |
Резюме
Настроенный NTP-сервер Ubuntu поможет прийти к единому системному времени, что упростит работу кластеров, проверку логов и проведение аудита. Чтобы синхронизация выполнялась корректно и без сложного администрирования, достаточно выставить верные базовые настройки и периодически проверять доступы к источникам времени.

