NTP Ubuntu Server

ntp

Для того, чтобы часы на Ubuntu сервере всегда показывали правильное время, их нужно синхронизировать с сервером времени. В linux для синхронизации времени используется NTP сервер. Он синхронизирует время с выше стоящими серверами времени, и дает возможность синхронизировать время с собой.

По умолчанию Ubuntu server 16.04 не содержит в себе установленного NTP сервера. Для установки нужно выполнить команду

# apt install ntp

NTP сервер использует сложные алгоритмы точной подстройки времени. Дело в том, что на сервере могут работать чувствительные к смещению времени службы. При сильном смещении времени, к примеру на час, эти службы могут аварийно завершить свою работу.NTP сервер постепенно подстраивает время до нужного результата. При смещении времени более чем на 1000 секунд, NTP сервер аварийно завершает свою работу. Чтобы этого не случилось, при запуске системы, используется опция -g. Эта опция разрешает переход на большой скачек времени при первой синхронизации.

# less /etc/default/ntp
NTPD_OPTS='-g'

После установки NTP сервера, автоматически стартует процедура синхронизации, которую можно посмотреть командой

# ntpq -p
    remote            refid       st   t  when poll reach  delay     offset jitter
==================================================================================
-85.236.191.80    89.109.251.23    2   u   58   64   377   18.228   -5.435   2.692
*time100.stupi.s  .PPS.            1   u   6    64   377   20.108   -4.018   1.568
+78.140.251.2     194.190.168.1    2   u   65   64   377   12.009   -3.838   1.154
#juniperberry.ca  17.253.34.253    2   u   38   64   377   54.335   -3.559   2.172
+mail.sonur.ru    .PPS.            1   u   58   64   377   20.494   -2.278   1.809

Информация выводимая командой ntpq -p

Символ в начале строки:

пробел — слишком большой страт, цикл или явная ошибка.
x — фальшивый источник по алгоритму пересечения.
. — исключен из списка кандидатов из-за большого расстояния.
— удалено из списка кандидатов алгоритмом кластеризации.
+ — входит в конечный список кандидатов.
# — выбран для синхронизации, но есть 6 лучших кандидатов.
* — выбран для синхронизации.
o — выбран для синхронизации, но используется PPS.

remote — имя удаленного NTP сервера. Если использовать ключик -n, то будет показан IP.
refid — показывает откуда этот сервер берет время. Тут может быть имя (или IP) другого сервера или что то типа .GPS., .PPS. и т. п.
st — Stratum — слой в котором работает данный сервер, число от 1 до 16 указывающее удаление от источника синхронизации (например GPS или PPS). Слой данного сервера на 1 больше слоя сервера по которому идет синхронизацию.
t — Тип удаленного сервера (local, unicast, multicast or broadcast)
when — сколько секунд назад был получен последний пакет от данного сервера.
poll — период опроса сервера, секунд.
reach — восьмеричное представление массива из 8-ми бит, в котором фиксируется 8 последних попыток синхронизации. Если попытка была успешной, то устанавливается 1. Значение 377 говорит о том, что все 8 последних попыток были удачными.
delay — вычисленная задержка ответов от сервера (RTT) в миллисекундах.
offset — разница во времени между локальным и удаленным сервером, мс. Одно из наиболее важных значений. Чем оно меньше тем точнее время.
jitter — дисперсия отклонения удаленных часов относительно локальных, вычисленная по нескольким последним запросам, мс. Чем меньше это значение тем более точная возможно синхронизация.

Сервера времени выбираются из пулов, которые указаны в /etc/ntp.conf

# Specify one or more NTP servers.

# 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

Опция pool определяет имя пула, который содержит в себе несколько серверов. Если нужно определить конкретный сервер, используется опция server.  Вот пример определения контроллеров домена через опцию pool

pool 4skill.loc

а вот через server

server dc1.4skill.loc
server dc2.4skill.loc

Опция iburst посылается шквал пакетов, если не удается установить соединение с сервером с первого раза. Здесь можно почитать о других опциях.

Далее определяются ограничения

restrict -4 default kod notrap nomodify nopeer noquery limited
restrict -6 default kod notrap nomodify nopeer noquery limited

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

Чтобы запретить другим узлам синхронизацию с локальным сервером, нужно указать следующие ограничения

restrict -4 default ignore 
restrict -6 default ignore

Локальные сервер имеет полный доступ к службе времени

restrict 127.0.0.1
restrict ::1

Ограничения для серверов источников. Те адреса, которые указываются в директивах pool и и server

restrict source notrap nomodify noquery

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

server 127.127.1.0
fudge 127.127.1.0 stratum 10

Директива driftfile указываеют путь к файлу, хранящему погрешность часов системы

driftfile /var/lib/ntp/ntp.drift

Директива logfile позволяет записывать события в отдельный файл. По умолчанию логи пишутся в /var/log/syslog

logfile /var/log/ntp.log

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

# service ntp restart

Время на сервере можно посмотреть командой

# date
Пн дек  5 13:05:26 MSK 2016

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

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