Вопрос или проблема
Пытаюсь настроить chrony в локальной сети на RHEL-8.10. Служба на моем сервере chrony или клиенте, похоже, работает, как сообщается командой service chronyd status -l
. Однако я не могу синхронизировать время между двумя, они разошлись на пару минут.
# эта команда выполняется на сервере клиента, имеющем IP 192.168.1.4, например
chronyc> sources -a -v
.-- Режим источника '^' = сервер, '=' = пир, '#' = локальные часы.
/ .- Состояние источника '*' = текущий лучший, '+' = комбинированный, '-' = не комбинированный,
"https://unix.stackexchange.com/"x' = может быть ошибочным, '~' = слишком изменчивый, '?' = непригодный.
|| .- xxxx [ yyyy ] +/- zzzz
|| Регистр доступности (восьмеричный) -. | xxxx = скорректированный сдвиг,
|| Log2(интервал опроса) --. | | yyyy = измеренный сдвиг,
|| \ | | zzzz = оценочная ошибка.
|| | | \
MS Имя/адрес IP Стратум Опрос ПоследнийRx Последний образец
===============================================================================
^? 192.168.1.1 3 6 377 5 -1500мкс[-1705мкс] +/- 500мс
# Я отредактировал имя/IP здесь для публикации, оно разрешается в имя хоста через DNS в нашей маленькой локальной сети
Команда chronyc tracking
показывает нули, в то время как на другом сервере, который подключен к сети [интранет], синхронизируется с выделенным временным сервером, и здесь время совпадает с временем с time.gov до секунды, а chronyc tracking
сообщает такие данные, как Системное время : 0.000830548 секунды опережает NTP время
, а не все нули.
На моих системах локальной сети я пытался использовать setenforce 0
и service firewalld stop
, и ни одно из этих действий не помогло.
Что вызывает '?' = непригодный
в chronyc sources
? Это кажется самой очевидной проблемой при сравнении работающей и неработающей настройки.
Я чувствую, что моя ошибка в том, что на моем сервере RHEL-8.10, который я пытаюсь сделать сервером времени для синхронизации других, есть что-то особенное в /etc/chrony.conf
, что необходимо, но не было явно задокументировано в этом стандартном файле, предоставленном Red Hat? Ниже представлен мой /etc/chrony.conf
с сервера, который я хочу сделать сервером времени в своей локальной сети с IP 192.168.1.1
, который не синхронизируется ни с чем другим. Не хватает ли чего-то ниже, что могло бы вызвать '?' = непригодный
при выполнении chronyc sources -a -v
с временного клиента в моей локальной сети?
# Записать скорость, с которой системные часы накапливают/теряют время.
driftfile /var/lib/chrony/drift
# Разрешить шаг часов системы в первых трех обновлениях
# если их сдвиг больше 1 секунды.
makestep 1.0 3
# Включить синхронизацию ядра с часами реального времени (RTC).
rtcsync
# Включить аппаратную временную метку на всех интерфейсах, которые поддерживают это.
#hwtimestamp *
# Увеличить минимальное количество источников, которые можно выбрать, необходимых для корректировки
# системных часов.
#minsources 2
# Разрешить доступ NTP-клиента из локальной сети.
allow 192.168.1.0/24
# Обслуживать время, даже если не синхронизировано с источником времени.
local stratum 10
# Указать файл, содержащий ключи для аутентификации NTP.
keyfile /etc/chrony.keys
# Получить сдвиг TAI-UTC и дополнительные секунды из системной базы данных tz.
leapsectz right/UTC
# Указать директорию для журнальных файлов.
logdir /var/log/chrony
# Выбрать, какая информация будет записываться.
#log measurements statistics tracking
На моих клиентах их chrony.conf
просто содержит server 192.168.1.1 iburst
в начале.
В моем случае причиной ? = непригодный
, как сообщалось командой chronyc sources -a -v
, было отсутствие открытого порта 123 UDP в брандмауэре на моем временном сервере.
Мой файл /etc/firewalld/zones/custom.xml
имел строку для открытия 123/udp, однако команда firewall-cmd --list-all
не отображала этот номер порта. Решением в моем случае было:
- переотредактировать XML-файл брандмауэра, выполнить
firewall-cmd --complete-reload
и убедиться, что123/udp
отображается при выполненииfirewall-cmd --list-all
.- конечно, можно было бы также выполнить
systemctl stop firewalld
- конечно, можно было бы также выполнить
- однако даже при отключении брандмауэра как на сервере, так и на клиенте я заметил, что служба chronyd должна быть перезапущена на клиенте, и затем следует подождать как минимум 30 секунд перед выполнением
chronyc sources -a -v
, чтобы увидеть, получите ли вы ответ^*
вместо^?
. Когда я в первый раз выполнил все, печатая быстро, я всегда получал^?
отchronyc sources
, что вызывало недовольство. - Я обнаружил, что службу chrony также нужно было перезапустить на клиенте, только после этого
chrony sources -a -v
примерно через 30 секунд сообщала с* = лучший
вместо непригодного. Иchronyc tracking
затем не показывала все нули.
Ответ или решение
Диагностика проблем с невостребованными источниками Chrony: синхронизация времени
В процессе использования Chrony для синхронизации времени в локальной сети на RHEL-8.10, вы можете столкнуться с проблемами, связанными со статусом «?» в выводе команды chronyc sources -a -v
. Этот символ указывает на проблемы с доступностью источников времени и, как следствие, нарушает синхронизацию времени между сервером Chrony и клиентами.
Основные причины проблемы
-
Блокировка порта 123/UDP:
Поскольку Chrony использует протокол NTP (Network Time Protocol), он зависит от UDP-порта 123 для связи. Если этот порт закрыт на сервере Chrony, клиенты не смогут получать обновления времени. Это одна из наиболее распространенных причин появления статуса «?». -
Конфигурация Chrony:
Проверьте файл конфигурации/etc/chrony.conf
на наличие корректных настроек. Убедитесь, что директиваallow
прописана для локальной сети, что позволяет клиентам получать доступ к серверу. -
Статус сервиса Chrony:
Убедитесь, что сервис Chrony работает корректно на сервере и клиентах. Вы можете использовать командуservice chronyd status -l
для проверки состояния сервиса.
Решение проблемы
-
Проверка настроек Firewall:
Выполните следующие шаги:- Проверьте, открыты ли необходимые порты. Для этого выполните команду:
firewall-cmd --list-all
Убедитесь, что в списке отображается
123/udp
. - Если порт не открыт, добавьте его в конфигурацию firewall, внесите изменения и перезагрузите firewall:
firewall-cmd --permanent --add-port=123/udp firewall-cmd --reload
- Проверьте, открыты ли необходимые порты. Для этого выполните команду:
-
Перезапуск сервисов:
После внесения изменений не забудьте перезапустить сервис Chrony на обоих машинах:systemctl restart chronyd
-
Ожидание обновлений:
После перезапуска сервиса дайте системе некоторое время для синхронизации, обычно 30 секунд. Затем выполните командуchronyc sources -a -v
для проверки статуса синхронизации. Если вы все сделали правильно, вы должны увидеть знак «*», который указывает на лучшее решение. -
Дополнительные проверки:
- Проверьте журнал Chrony для выявления возможных ошибок:
journalctl -u chronyd
- Убедитесь, что системное время на сервере Chrony правильно настроено.
- Проверьте журнал Chrony для выявления возможных ошибок:
Заключение
Проблемы с синхронизацией времени в локальной сети могут быть вызваны множеством факторов, начиная от настроек файрвола и заканчивая самими конфигурациями Chrony. Убедившись, что порт 123 открыт и что сервисы работают, можно настроить надежную синхронизацию времени для всех устройств в сети. Пошаговое выполнение этих рекомендаций поможет исключить большинство распространенных ошибок и достичь успешной синхронизации времени.