Добавление сервера CentOS 7 в NTP Pool Project

Published by Leave your thoughts

Точное хронометрирование очень важно для работы практически любого сервиса или программы. Электронные письма, логгеры, системы событий и планировщики, механизмы аутентификации пользователей и сервисы, работающие на распределенных платформах, нуждаются в точном времени для записи событий в хронологическом порядке. Все эти сервисы используют Network Time Protocol (или NTP) для синхронизации системных часов с надежным внешним источником (атомными часами, GPS-приемником или другим сервером времени, который уже использует NTP).

NTP Pool Project – это огромный всемирный кластер серверов времени, который обеспечивает синхронизацию времени десятков миллионов клиентов по всему миру. Сервер NTP Pool Project по умолчанию используется в Ubuntu и многих других основных дистрибутивах Linux. Также его используют множество сетевых устройств и программных приложений.

Данное руководство поможет настроить NTP-сервер и подключить его к NTP Pool Project.

Идеальный способ помочь сообществу NTP Pool Project – отдать неиспользованную полосу пропускания и циклы процессора. Требуемая полоса пропускания относительно невелика; вы можете скорректировать её в зависимости от ресурсного потенциала и местонахождения сервера. Каждый клиент отправляет только пару пакетов UDP каждые 20 минут, так что большинство серверов получают примерно дюжину пакетов NTP в секунду, с пиками пару раз в день до ста пакетов в секунду. Это соответствует пропускной способности в 10-15 Кб/сек с пиками в 50-120 Кб/сек.

Чтобы присоединиться к NTP Pool Project, необходимо выполнить три основных требования:

  • Ваш сервер должен иметь статический IP-адрес.
  • Ваш сервер должен иметь постоянный доступ к интернету.
  • IP-адрес сервера не меняется или меняется редко (один раз в год и реже).

Первые два требования обычно выполняются автоматически. Последнее требование подчеркивает, что присоединение к NTP Pool Project является долгосрочным обязательством. Разумеется, если ваши обстоятельства изменятся, вы можете вывести сервер из пула, но это займет много времени (обычно недели, но иногда месяцы или даже годы).

Требования

  • Сервер Centos 7.
  • Поддержка IPv6.
  • Пользователь с доступом к sudo.
  • Настроенный брандмауэр.

Читайте также:

1: Установка NTP

Пакет NTP не поставляется по умолчанию. Установите его с помощью стандартного пакетного менеджера. Обновите индекс пакетов:

sudo yum update

Установите NTP:

sudo yum install ntp

После этого запустите сервис и добавьте его в автозагрузку.

sudo systemctl start ntpd
sudo systemctl enable ntpd

Если вы настроили брандмауэр, разблокируйте UDP-трафик, чтобы сервер мог взаимодействовать с пулом NTP.

sudo firewall-cmd --permanent --add-service=ntp
sudo firewall-cmd --reload

Читайте также: Настройка брандмауэра FirewallD в CentOS 7

2: Выбор сервера

NTP Pool project просит операторов, которые хотят присоединиться к пулу, выбирать хорошие серверы местного времени, а не использовать серверы pool.ntp.org по умолчанию. Это обеспечивает надёжность и производительность NTP Pool Project. При выборе источника времени вам потребуется стабильное сетевое соединение без потери пакетов и наименьшее количество переходов между серверами.

Многоуровневый и иерархический протокол NTP делит участников на первичные серверы, вторичные серверы и клиенты. Первичные серверы называются Stratum 1 и подключаются непосредственно к источнику времени, который называется Stratum 0. Этим источником могут быть атомные часы, GPS-приемник или радионавигационная система. Вторичные серверы в цепочке называются Stratum 2, Stratum 3 и так далее.

Каждый сервер также является клиентом. Клиент Stratum 2 получает время от предыдущего сервера Stratum 1 и предоставляет время серверам Stratum 3 или другим клиентам. Чтобы участники проекта NTP Pool Project работали должным образом, демону NTP требуется как минимум три сервера. Проект рекомендует использовать минимум четыре и не более семи источников.

NTP Pool Project предоставляет список публичных серверов времени Stratum 1 и Startum 2. Списки перечисляют общедоступные серверы времени NTP, разделенные на три типа:

NTP

  • OpenAccess: этот сервер открыт для любого клиента, который отвечает рекомендациям по использованию пула NTP.
  • RestrictedAccess: этот сервер времени имеет некоторые ограничения доступа.
  • ClosedAccess: этот сервер закрыт или требует предварительной договоренности.

Важно! Не используйте серверы, которые не указаны в списке OpenAccess, если у вас нет на это разрешения.

Откройте список Stratum 1.

Отсортируйте список по ISO code и выберите один или два сервера, которые находятся близко к вашему центру обработки данных. Если в столбце Access Policy указан тип OpenAccess, вы можете использовать этот сервер без проблем. Чтобы использовать серверы типа RestrictedAccess, откройте запись и прочитайте инструкции в разделе AccessDetails. Обычно в NotificationMessage установлено значение Yes, а это означает, что вам необходимо написать письмо и отправить его по адресу, указанному в ServerContact, чтобы сообщить оператору сервера о своем желании использовать этот сервер времени в качестве источника.

После того как вы определили, какие серверы хотите использовать, кликните по ссылке для каждого сервера в столбце ISO и скопируйте его имя или IP-адрес (эти данные понадобятся в дальнейшей настройке).

Затем откройте список Stratum 2 и повторите процесс.

3: Подготовка сервера

Чтобы добавить сервер в пул NTP и настроить новые серверы времени, необходимо внести некоторые изменения в конфигурацию демона NTP. Отредактируйте файл /etc/ntp.conf:

sudo vi /etc/ntp.conf

Для начала убедитесь, что файл driftfile настроен. Он хранит сдвиг частоты между системными часами, работающими с номинальной частотой, и частотой, необходимой для синхронизации с правильным временем. Это помогает настроить стабильное и точное время. Этот файл указывается в начале конфигурационного файла:

# For more information about this file, see the man pages
# ntp.conf(5), ntp_acc(5), ntp_auth(5), ntp_clock(5), ntp_misc(5), ntp_mon(5).
driftfile /var/lib/ntp/drift
...

Затем удалите стандартные источники времени. Это строки, написанные по шаблону server 0.centos.pool.ntp.org iburst.

...
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst

Замените эти строки данными о серверах времени, которые вы выбрали ранее.

...
server ntp_server_hostname_1 iburst
server ntp_server_hostname_2 iburst
server ntp_server_hostname_3 iburst
server ntp_server_hostname_4 iburst
server ntp_server_hostname_5 iburst
...

Используйте опцию iburst для определения каждого сервера (согласно рекомендациям NTP Pool). Таким образом, если сервер станет недоступен, он отправит блок из восьми пакетов вместо обычного одного пакета. Использование опции burst в NTP Pool Project считается злоупотреблением: она будет отправлять эти восемь пакетов каждый интервал опроса, а опция iburst отправляет восемь пакетов только в первый раз.

Затем убедитесь, что конфигурация по умолчанию не позволяет запросы управления. Если вы этого не сделаете, ваш сервер может быть использован в атаках NTP и будет уязвим к запросам ntpq и ntpdc, которые пытаются изменить состояние сервера. Убедитесь, что в строках restrict по умолчанию добавлена опция noquery. Также нужно добавить опции kod и limited (они блокируют слишком настойчивых клиентов и включают ограничение скорости).

...
# Permit time synchronization with our time source, but do not
# permit the source to query or modify the service on this system.
restrict default nomodify notrap nopeer noquery kod limited
# Permit all access over the loopback interface.  This could
# be tightened as well, but to do so would effect some of
# the administrative functions.
restrict 127.0.0.1
restrict ::1

Больше информации об опциях вы найдёте в официальной документации проекта.

Теперь конфигурационный файл /etc/ntp.conf будет выглядеть таким образом (комментарии опущены):

driftfile /var/lib/ntp/ntp.drift
restrict default nomodify notrap nopeer noquery kod limited
restrict 127.0.0.1
restrict ::1
server ntp_server_hostname_1 iburst
server ntp_server_hostname_2 iburst
server ntp_server_hostname_3 iburst
server ntp_server_hostname_4 iburst
server ntp_server_hostname_5 iburst

Сохраните и закройте файл.

Перезапустите сервис NTP.

sudo systemctl restart ntpd

Через несколько минут проверьте состояние сервера:

ntpq -p

Команда должна вернуть:

remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
mizbeaver.udel. .INIT.          16 u    -   64    0    0.000    0.000   0.000
montpelier.ilan .GPS.            1 u   25   64    7   55.190    2.121 130.492
+nist1-lnk.binar .ACTS.           1 u   28   64    7   52.728   23.860   3.247
*ntp.okstate.edu .GPS.            1 u   31   64    7   19.708   -8.344   6.853
+ntp.colby.edu   .GPS.            1 u   34   64    7   51.518   -5.914   6.669

В столбце remote указывается имя сервера, используемого демоном NTP, а столбец refid определяет источник, используемый серверами. Таким образом, для серверов Stratum 1 поле refid должно отображать GPS, PPS, ACTS или PTB, а для серверов Stratum 2 и выше это поле будет указывать IP-адрес upstream-сервера. Столбец st показывает stratum, а delay, offset и jitter говорят о качестве источника времени (чем ниже их значения, тем лучше).

Теперь сервер времени может обслуживать клиентов. Чтобы убедиться в этом, вызовите ntpdate с другого хоста:

ntpdate -q your_server_ip

Вы должны получить такой результат:

server your_server_ip, stratum 2, offset 0.001172, delay 0.16428
2 Mar 23:06:44 ntpdate[18427]: adjust time server your_server_ip offset 0.001172 sec

4: Добавление сервера в NTP Pool

Чтобы добавить сервер в пул серверов проекта NTP Pool, откройте manage.ntppool.org и создайте аккаунт. Вы получите электронное письмо от help@ntppool.org с подтверждением аккаунта.

Откройте учётную запись, и вы получите доступ к простому интерфейсу для добавления серверов.

Введите IP-адрес сервера и нажмите Submit.

На следующем экране вам будет предложено подтвердить регион, в котором находится сервер. Если регион определен неправильно, используйте поле Comment, чтобы сообщить об этом.

Чтобы добавить сервер, нажмите «Yes, this is my server, add it!».

После этого сервер станет частью пула NTP Pool Project. Откройте ссылку:

http://www.pool.ntp.org/scores/your_server_ip

Здесь вы увидите информацию о сервере, которую собрала система мониторинга NTP Pool. Она проверяет сервер несколько раз в час и отображает данные о смещении и очки, полученные вашей системой. Пока сервер поддерживает правильное время и доступен, количество очков будет расти, пока не достигнет 20. В пуле используются только серверы со счетом выше 10.

Устранение неполадок подключения

Если у вас возникли проблемы с синхронизацией сервера, возможно, их причина в том, что брандмауэр сбрасывает исходящие пакеты порта 123.

Читайте также: Настройка брандмауэра FirewallD в CentOS 7

Если система мониторинга NTP Pool Project не может получить доступ к вашему NTP-серверу, количество очков падает или вы не можете синхронизировать часы клиента с помощью вашего сервера, убедитесь, что входящие на порт 123 пакеты не сбрасывает брандмауэр.

Если вы уверены, что проблема не в брандмауэре, возможно, пакеты сбрасываются вашим хостинг-провайдером (или провайдером других услуг). Если вы не можете решить эту проблему самостоятельно, лучше обратиться к сообществу. Для начала посетите форум NTP Pool Projects. Вы также можете присоединиться к списку рассылки или написать оператору проекта NTP Pool. Прежде чем обращаться за помощью, убедитесь, что можете подробно описать все предпринятые действия.

Заключение

Вы подключили свой сервер к пулу NTP Pool Project. Теперь нужно отслеживать очки своего сервера и вносить поправки в настройки в случае необходимости.

Tags: , , ,

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *


*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>