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