Добавление сервера Ubuntu 16.04 в 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 является долгосрочным обязательством. Разумеется, если ваши обстоятельства изменятся, вы можете вывести сервер из пула, но это займет много времени (обычно недели, но иногда месяцы или даже годы).

Требования

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

Читайте также: Начальная настройка сервера Ubuntu 16.04

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

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

sudo apt-get update

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

sudo apt-get install ntp

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

sudo ufw allow 123/udp

Читайте также: Настройка брандмауэра UFW на сервере Ubuntu 16.04

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, разделенные на три типа:

  • 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 nano /etc/ntp.conf

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

# /etc/ntp.conf, configuration for ntpd; see ntp.conf(5) for help
driftfile /var/lib/ntp/ntp.drift
...

Затем удалите стандартные источники времени. Это строки, написанные по шаблону pool [0-3].ubuntu.pool.ntp.org iburst или pool ntp.ubuntu.com.

# Use servers from the NTP Pool Project. Approved by Ubuntu Technical Board
# on 2011-02-08 (LP: #104525). See http://www.pool.ntp.org/join.html for
# more information.
pool 0.ubuntu.pool.ntp.org iburst
pool 1.ubuntu.pool.ntp.org iburst
pool 2.ubuntu.pool.ntp.org iburst
pool 3.ubuntu.pool.ntp.org iburst
# Use Ubuntu's ntp server as a fallback.
pool ntp.ubuntu.com

Замените удалённые строки данными о серверах времени, которые вы выбрали ранее. Используйте ключевое слово server вместо pool.

...
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:

...
# By default, exchange time with everybody, but don't allow configuration.
restrict -4 default kod notrap nomodify nopeer noquery limited
restrict -6 default kod notrap nomodify nopeer noquery limited
# Local users may interrogate the ntp server more closely.
restrict 127.0.0.1
restrict ::1

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

Теперь конфигурационный файл демона NTP будет выглядеть таким образом:

driftfile /var/lib/ntp/ntp.drift
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
# By default, exchange time with everybody, but don't allow configuration.
restrict -4 default kod notrap nomodify nopeer noquery limited
restrict -6 default kod notrap nomodify nopeer noquery limited
# Local users may interrogate the ntp server more closely.
restrict 127.0.0.1
restrict ::1

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

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

sudo systemctl restart ntp.service

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

ntpq -p

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

remote            refid    st t when poll reach   delay   offset  jitter
==============================================================================
mizbeaver.udel.  .INIT.    6 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.

Читайте также: Настройка брандмауэра UFW на сервере Ubuntu 16.04

Если система мониторинга 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>