Настройка NTP сервера
Last updated
Last updated
В системах базирующихся на SystemD клиентом синхронизации времени, по умолчанию, выступает служба systemd-timesyncd.
Эта служба использует конфиг /etc/systemd/timesyncd.conf, именно в нём прописаны NTP сервера с которыми сервер синхронизирует своё время.
Сервера времени называют NTP серверами, так как они используют NTP протокол. Для Linux таких серверов несколько, например chrony, ntp, openntpd. Рассмотрим первый, так как это самый современный NTP сервер.
В Ubuntu и Debian – chrony устанавливается из стандартных репозиториев:
# apt install chrony
При установке этого пакета будет создана одноименная служба, которая будет запущена и помещена в автозапуск. А служба systemd-timesyncd будет выключена.
Служба этого приложения – chrony.
Конфигурационный файл – /etc/chrony/chrony.conf.
Серверный процесс – chronyd.
Утилита для получения информации – chronyc.
Конфигом для службы является файл /etc/chrony/chrony.conf. В нем нужно закомментировать используемый пул и добавить свои NTP сервера. А также можно указать разрешённую сеть для клиентов:
Приведу обозначение некоторых директив, используемых в файле chrony.conf:
server — данная директива описывает NTP-сервер, с которым необходимо синхронизироваться.
allow - используется для обозначения конкретной подсети, из которой клиентам NTP разрешен доступ к компьютеру в качестве NTP-сервера.
Он также контролирует доступ клиентов NTS-KE, когда на сервере включена NTS.
По умолчанию клиентам не разрешен доступ, т.е. chronyd работает исключительно как клиент NTP. Если используется директива allow , chronyd будет и клиентом своих серверов, и сервером для других клиентов.
Эту директиву можно использовать несколько раз.
Примеры использования директивы следующие:
Первая директива разрешает доступ с адреса IPv4. Вторая директива разрешает доступ со всех компьютеров в подсети IPv4, указанной в нотации CIDR. Третья директива указывает ту же подсеть, используя более простую нотацию, в которой длина префикса определяется количеством точек. Четвертая директива определяет подсеть IPv6. Пятая и шестая директивы разрешают доступ со всех адресов IPv4 и IPv6 соответственно. Седьмая директива разрешает доступ со всех адресов (как IPv4, так и IPv6).
stratumweight — какую задержку следует добавить к источнику синхронизации для каждой группы. Значение по умолчанию – 0,0001.
driftfile —расположение и имя файла, содержащего данные смещения.
Makestep — эта директива заставляет сервис постепенно корректировать любое смещение во времени путем снижения скорости или замедления хода часов по мере необходимости.
logdir — путь к файлу журнала chrony.
pool name [option]... .Синтаксис этой директивы аналогичен синтаксису директивы server, за исключением того, что она используется для указания пула NTP-серверов, а не одного NTP-сервера. Предполагается, что имя пула будет разрешаться в несколько адресов, которые могут меняться с течением времени. Эта директива может использоваться несколько раз для указания нескольких пулов. Все опции, используемые в директиве server, могут быть использованы и в этой директиве. Есть одна опция, специфичная для директивы pool: maxsources sources Эта опция задает желаемое количество источников, которые будут использоваться из пула. chronyd будет неоднократно пытаться разрешить имя, пока не получит это количество источников, отвечающих на запросы. Значение по умолчанию равно 4, а максимальное значение - 16.
Примером директивы pool может служить
pool pool.ntp.org iburst maxsources 3
keyfile — файл, содержащий пары ID-ключей для аутентификации пакетов NTP
commandkey — используется для установки номера ключа, используемого для аутентификации пользовательских команд с помощью программы chronyc во время выполнения
generatecommandkey — если командный ключ не найден при запуске, chronyd создаст новый командный ключ из файла /dev/urandom и запишет его в файл ключа
noclientlog — клиентские обращения не должны регистрироваться
logchange — пороговое значение для настройки системных часов, которые будут генерировать сообщение системного журнала
logdir — путь к файлу журнала
После настройки сервера нужно перезапустить службу:
# systemctl restart chrony
Проверим источники времени (без указания опции -N):
В выводе, сервер обозначенный звездочкой (в моём случае 3.ru.pool.ntp.org) является наилучшим и текущем сервером для синхронизации времени.
Сервер времени chrony, также как и другие NTP сервера слушает порт udp 123:
Вдобавок к порту 123 вы можете заметить ещё один порт – udp 323. Он используется для того чтобы утилита chronyc подключалась к процессу chronyd. А именно с помощью этой утилиты мы смотрели источники времени.
Настраиваем правило для NTP на вашем фаерволе
Кроме этого, вы можете посмотреть количество активных и не активных источников:
Заметьте, если Chrony не сможет получить время из интернета, то клиенты перестанут синхронизировать своё время с этим сервером. Поэтому нужно следить, чтобы у сервера Chrony всегда были рабочие источники времени.
Для того, чтобы клиенты могли успешно синхронизироваться с сервером времени, необходимо, чтобы у них были одинаковые часовые пояса.
Перед изменением часового пояса вам нужно узнать длинное название часового пояса, который вы хотите использовать. В соглашении об именах часовых поясов обычно используется формат «Регион / Город».
Чтобы просмотреть все доступные часовые пояса, используйте команду timedatectl
или перечислите файлы в каталоге /usr/share/zoneinfo
:
Как только вы определите, какой часовой пояс соответствует вашему местоположению, выполните следующую команду от имени пользователя root или sudo :
Например, чтобы изменить часовой пояс системы на America/New_York
, введите:
Чтобы проверить изменение, снова вызовите команду timedatectl
:
Теперь нужно, на остальных серверах, прописать наш сервер Chrony в качестве источника синхронизации времени. Для этого укажем его адрес в /etc/systemd/timesyncd.conf на остальных серверах. А затем перезапустим службу синхронизации времени, и проверим работу:
Для большей информации вы можете использовать следующие команды:
Также, на сервере времени вы можете посмотреть клиентов, которые к нему подключились:
В выводе:
Hostname – имя или адрес клиента;
NTP – количество NTP-пакетов, полученных от клиентов;
Drop – сколько NTP-пакетов было отброшено из-за ограничения скорости отклика;
Int – средний интервал между NTP-пакетами;
Last – время с момента получения последнего NTP-пакета;
Остальные поля я не рассматриваю, так как обычно этих достаточно.
Чтобы синхронизировать системные пакеты с их последними версиями, просто выполните команду;
Пакет Chrony по умолчанию устанавливается на производных от RHEL, включая CentOS 8. Однако вы можете проверить это, выполнив команду ниже;
Если пакет установлен, вы должны получить такой вывод:
В противном случае вы получите такой результат:
Чтобы увидеть больше информации о Chrony;
Если по каким-то причинам он не установлен по умолчанию, вы всегда можете установить его, выполнив команду ниже;
Предполагая, что Chrony установлен, вы можете приступить к его настройке для обеспечения синхронизации времени.
Файл конфигурации Chrony по умолчанию — /etc/chrony.conf
. Поэтому мы внесем большинство изменений конфигурации в этот файл.
По умолчанию Chrony использует в 2.centos.pool.ntp.org
качестве сервера времени по умолчанию. Вам необходимо определить серверы времени, близкие к вашему региону.
Чтобы получить список серверов NTP, близких к вашему региону, перейдите на страницу « Интернет-кластер серверов NTP» и выберите свой регион. Например, если вы находитесь в Европе, ниже перечислены доступные серверы NTP;
Чтобы использовать пул серверов NTP в вашем регионе, просто закомментируйте ( добавьте # в начале ) строку, pool 2.centos.pool.ntp.org iburst
заменив ее следующим образом;
Chrony не разрешает доступ к серверу NTP. Чтобы ограничить или контролировать доступ к NTP
службе, работающей в системе, используйте директиву allow. Эта директива просто предназначена для обозначения определенных серверов, с которых клиентам NTP разрешен доступ к компьютеру, в качестве сервера NTP.
Например, чтобы разрешить всем серверам в сетевой подсети 192.168.56.0/24 доступ к вашему серверу NTP;
Подробнее на man chrony.conf
,.
Чтобы разрешить клиентам NTP доступ к вашему серверу NTP, вам необходимо открыть порт 123 / UDP на брандмауэре.
Открыть доступ NTP клиенту и серверу в IPTables необходимо добавить правила:
Чтобы открыть доступ только конкретной сети, например 10.0.0.0/24:
Удалить правило укажем ту же команду, заменив -A на -D, например:
Посмотреть список правил можно командой:
Chronyd
демон управляет реализацией NTP. Таким образом, вы можете запустить и разрешить его запуск при загрузке системы, выполнив команду ниже;
Команды chronyc используются для проверки синхронизации времени Chrony с помощью параметров командной строки, таких как sources, tracking, sourcestats
.
Чтобы отобразить информацию об источниках текущего времени, к которым обращается chronyd, выполните команду;
М колонка указывает режим источника;
^ означает сервер
= означает одноранговый
# указывает на локально подключенные опорные часы
S колонка показывает состояние источников;
“*” Указывает на источник, с которым в настоящее время синхронизируется chrony.
“+” Указывает на приемлемые источники, которые объединены с выбранным источником.
“-” Допустимые источники, которые исключаются алгоритмом объединения.
“?” Источники, подключение к которым было потеряно или чьи пакеты не проходят все тесты. Это состояние также отображается при запуске, пока не будет собрано по крайней мере 3 образца.
“x” Обозначает часы, которые хронид считает фальшивыми (их время несовместимо с большинством других источников).
“~” Указывает на источник, время которого кажется слишком изменчивым.
Для отображения детальной информации о синхронизации времени введите:
Reference ID — идентификатор и имя, с которым компьютер в настоящее время синхронизирован.
Stratum — количество переходов к компьютеру с установленными основными часами.
Ref time — это время по Гринвичу, в которое было выполнено последнее измерение из эталонного источника.
System time — задержка системных часов от синхронизированного сервера.
Last offset — расчетное смещение последнего обновления часов.
RMS offset — долгосрочное среднее арифметическое значения смещения.
Frequency — это частота, на которой часы системы будут работать неправильно, если хронограф не проведет коррекцию. Она выражена в ppm – ч/м (частей на миллион).
Residual freq — остаточная частота указывает на разницу между измерениями от опорного источника и используемой в настоящее время частотой.
Skew — расчетная погрешность, связанная с погрешностью частоты.
Root delay — суммарная задержка сетевого пути к опорному серверу, с которым синхронизируется компьютер.
Leap status — это статус, который может иметь одно из следующих значений – нормальное, добавить второй, удалить второй или не синхронизироваться.
Для ручного обновления времени можно запустить команду:
Если ответ 200 OK, тогда chrony произвел соединение с эталонным сервером и синхронизировал время.
Дополнительные параметры команды см. в man chronyc
.
Поскольку наш NTP-сервер, использующий Chrony в CentOS 8, настроен и работает, пришло время проверить, может ли он обслуживать наших клиентов NTP, как ожидалось.
В этой демонстрации мы используем другую виртуальную машину CentOS 8 в качестве нашего NTP-клиента.
Проверьте, установлен ли Chrony;
Настройка клиента NTP в CentOS 8 аналогична настройке сервера NTP, как описано выше, за исключением того, что у клиента не установлены разрешения на доступ, поэтому ни один сервер не может запрашивать у него информацию о времени.
Откройте файл конфигурации и настройте сервер NTP, как показано ниже;
Убедитесь, что имя хоста сервера NTP разрешимо, в противном случае используйте IP-адрес.
Чтобы убедиться, что клиент NTP подключен к серверу NTP через порт 123 UDP, просто используйте команду netcat, как показано ниже;
Для проверки подключения к UDP-порту 123;
Отлично. Теперь вы можете перейти к перезагрузке и разрешить запуск chronyd при загрузке системы.
Чтобы убедиться, что синхронизация времени работает, можно использовать команду отслеживания источников с командой chronyc, как показано ниже;
Reference ID — идентификатор и имя, с которым компьютер в настоящее время синхронизирован.
Stratum — количество переходов к компьютеру с установленными основными часами.
Ref time — это время по Гринвичу, в которое было выполнено последнее измерение из эталонного источника.
System time — задержка системных часов от синхронизированного сервера.
Last offset — расчетное смещение последнего обновления часов.
RMS offset — долгосрочное среднее арифметическое значения смещения.
Frequency — это частота, на которой часы системы будут работать неправильно, если хронограф не проведет коррекцию. Она выражена в ppm – ч/м (частей на миллион).
Residual freq — остаточная частота указывает на разницу между измерениями от опорного источника и используемой в настоящее время частотой.
Skew — расчетная погрешность, связанная с погрешностью частоты.
Root delay — суммарная задержка сетевого пути к опорному серверу, с которым синхронизируется компьютер.
Leap status — это статус, который может иметь одно из следующих значений – нормальное, добавить второй, удалить второй или не синхронизироваться.
Используя команду sources;
Проверить статистику источников
Клиент NTP теперь подключен к нашему серверу NTP.
Теперь вы знакомы с сервером времени Chrony. Он позволяет запустить свой локальный NTP сервер и синхронизировать время с другими NTP серверами. Chrony может работать и в качестве клиента и в качестве сервера.
Подробнее почитать про утилиту chrony и её директивы можно по в man:
Или на оф. сайте проекта: