База знаний по Open Source
Авторизация
Поиск по базе знаний

NTP — Network Time Protocol — специальный сетевой протокол,используемый для синхронизации внутренних часов компьютера по сети.

До недавнего времени за синхронизацию времени отвечал демон ntpd. Он подключал сервер к пулу серверов NTP, что обеспечивало точное хронометрирование.

В Ubuntu 16.04 вместо ntpd по умолчанию использует timesyncd. Сервис timesyncd подключается к тем же серверам времени и работает примерно таким же образом, но он легче ntpd и интегрирован с systemd.

В большинстве случаев сервис timesyncd подходит для работы, но если ваши приложения чувствительны к малейшим колебаниям времени, лучше обслуживать их с помощью ntpd, так как этот демон использует более сложные методы синхронизации системного времени.

Прежде чем установить ntpd, отключите timesyncd:

$sudo timedatectl set-ntp no

Убедитесь, что timesyncd отключился:

$timedatectl

В выводе должна быть строка:

Network time on: no

Установка NTP и конфигурирование NTP сервера в Ubuntu 16.04 для синхронизации точного времени через интернет

В своей работе NTP использует порт 123 по протоколу UDP. Клиенты запрашивают текущее время на сервере и используют его для установки своих собственных часов.

В зависимости от настроек, указанных в конфигурационном файле, он может выступать как в качестве сервера, так и в качестве клиента, т.е может как принимать время с удаленных хостов, так и раздавать его другим хостам.

Установка NTP:

somebody@myvds:~$ sudo apt-get -y install ntp

Конфигурирование NTP сервера

В конфигурационном файле указывается список NTP-серверов, с которыми будет осуществляться синхронизация. По умолчанию он выглядит так:

server 0.ubuntu.pool.ntp.org
server 1.ubuntu.pool.ntp.org
server 2.ubuntu.pool.ntp.org
server 3.ubuntu.pool.ntp.org

Каждая строка означает группу серверов, которые будут cообщать нашему серверу корректное время. Повысить точность синхронизации можно с помощью опции iburst (она указывает, что на сервер для синхронизации нужно посылать не один, а несколько пакетов):

server 0.ubuntu.pool.ntp.org iburst
server 1.ubuntu.pool.ntp.org iburst
server 2.ubuntu.pool.ntp.org iburst
server 3.ubuntu.pool.ntp.org iburst

Можно также указать предпочитаемый сервер при помощи опции prefer:

server 0.ubuntu.pool.ntp.org iburst prefer

Работу общедоступных серверов точного времени координирует проект pool.ntp.org — это огромный кластер серверов точного времени, предоставляющий надежный и простой в использовании NTP-сервис для миллионов клиентов.

Чтобы обеспечить более точную установку системных часов, рекомендуется синхронизироваться только с ntp-серверами того региона, в котором географически расположен наш сервер.

Правим файл настроек NTP – /etc/ntp.conf:

somebody@myvds:~$ sudo nano /etc/ntp.conf
# line 18: Закомментируем сервера по умолчанию
# 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
# pool ntp.ubuntu.com
# Добавим сервера для нашей временной зоны (здесь приводятся для Москвы) для синхронизации точного времени:
server ntp2.stratum2.ru iburst
server ntp3.stratum2.ru iburst
server ntp4.stratum2.ru iburst
server ntp5.stratum2.ru iburst
server ntp1.stratum1.ru iburst
server ntp2.stratum1.ru iburst
server ntp3.stratum1.ru iburst
server ntp4.stratum1.ru iburst
server ntp5.stratum1.ru iburst
# line 50: add the network range you allow to receive requests
restrict 127.0.0.1
restrict 10.0.0.0 mask 255.255.255.0 nomodify notrap

Резервный сервер точного времени

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

server 127.127.1.0

Перестартуем NTP сервер:

somebody@myvds:~$ sudo service ntp restart

И в завешении установки проверим статус NTP сервера:

somebody@myvds:~$ sudo ntpq -p 

Должно выдать что-то типа:

  remote         refid          st   t  when poll reach delay offset jitter
==============================================================================
 192.168.1.255   .BCST.         16   B  -     64     0  0.000   0.000 0.000
-n1.sigma.d6.hsd 91.226.136.141  2   u  190  256   377 23.334 -13.156 4.350
-ns5.hsdn.org    244.165.32.6    2   u  206  256   377 32.584   3.045 1.380
-91.226.136.155  244.165.32.6    2   u  183  256   377 34.251  -3.888 1.850
-n1.vfose-ru.d6. 91.226.136.141  2   u  115  256   377 32.864  -5.900 2.251
-n44-1.time3.d6. .GPS.           1   u  187  256   377 34.104  -4.338 0.658
*109.195.19.73 ( .GPS.           1   u  226  256   377 21.238   0.698 0.445
+n44.time3.d6.hs .GPS.           1   u  135  256   377 34.269  -3.855 0.321
-88.147.254.229  .GPS.           1   u  170  256   377 32.354   3.879 0.788
+88.147.254.227  .GPS.           1   u  177  256   377 32.803   3.473 1.077

В заголовке указываются следующие параметры:

remote — адрес сервера точного времени (в этой графе отображаются серверы из списка в конфигурационном файле);
refid — вышестоящий сервер (тот, от которого сервер из предыдушей графы получает синхронизацию);
st — уровень (stratum) сервера;
t — тип пира (u- unicast, m- multicast);
when — время последней синхронизации;
poll — время в секундах, за которое демон NTP синхронизируется с пиром;
reach — состояние доступности сервера; после восьми успешных попыток синхронизации значение этого параметра становится равным 377;
delay — время задержки ответа от сервера;
offset — разница времени между нашим сервером и сервером синхронизации; положительное значение этого параметра означает, что наши часы спешат, отрицательное — что отстают;
jitter — смещение времени на удаленном сервере.

Слева от адреса сервера могут быть указаны следующие символы:

* сервер выбран для синхронизации;
+ сервер, пригодный для обновления (с которым можно синхронизироваться);
— с сервером синхронизироваться не рекомендуется;
х сервер недоступен.

Для защиты от DDoS-атак по умолчанию в файлe /etc/ntp.conf установлены следующие ограничения:

restrict −4 default kod notrap nomodify nopeer noquery
restrict −6 default kod notrap nomodify nopeer noquery

Параметры nomodify, notrap, nopeer и noquery запрещают сторонним клиентам изменять что-либо на сервере. Параметр kod (эта аббревиатура означает kiss of death — «поцелуй смерти») обеспечивает дополнительную защиту: клиент, отправляющий слишком частые запросы, сначала получит так называемый kod-пакет (предупреждение об отказе в обслуживании), а затем будет отключен от сервера.

Чтобы с NTP-сервером могли синхронизироваться машины из локальной сети, в конфигурационный файл следует добавить следующую строку:

restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap

Для локального хоста можно установить доступ к NTP-серверу без ограничений:

restrict 127.127.1.0