Установка ntp в Ubuntu. Установка и настройка сервера времени ntp в Linux Установка минимальной положительной и отрицательной коррекции

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

Немного пред истории. Как и положено, всё началось неожиданно, сервер который я настраивал на кануне ночью, при следующей загрузки завис. «Шикарно» подумал я и полез в логи... В результате в том что сервер вис был повинен ntpd сервис, который из-за неправильной настройки сети не мог связаться внешним сервером для синхронизации. Посмотрев скрипт запуска, я наткнулся на интересную запись:

start() { readconf; if [ -n "$dostep" ]; then gprintf $"Syncing time for ntpd: " # try hard, some networks/slow machines/... take a while to have DNS local triesleft=7 while [ $triesleft -gt 0 ]; do /usr/sbin/ntpdate -s -b $NTPDATE_OPT $tickers RETVAL=$? [ $RETVAL -eq 0 ] && break triesleft=$(($triesleft-1)) sleep 1 done unset triesleft [ $RETVAL -eq 0 ] && success || failure echo if [ $RETVAL -eq 0 ]; then [ "$SYNC_HWCLOCK" = "yes" ] && sync_hwclock else OPTIONS="$OPTIONS -g" fi else # -g can replace the grep for time servers # as it permits ntpd to violate its 1000s limit once. OPTIONS="$OPTIONS -g" fi # Start daemons. gprintf $"Starting $prog: " daemon ntpd $OPTIONS RETVAL=$? echo [ $RETVAL -eq 0 ] && touch /var/lock/subsys/ntpd return $RETVAL }

А теперь внимание на строку с номером 8. Это начало цикла, в котором целых 7-мь раз будет предпринята попытка начальной, грубой синхронизации времени. Всё бы хорошо, но если у вас неправильно настроена сеть, или DNS, то вызовет подвисание сервера, на 7*(1 + время проверки доступности DNS, порядка 5 сек) секунд. В общем ждать минуту меня явно не устраивало, итак приступим.

Настройка начальной, грубой синхронизации

В замечательном файле /etc/ntp/step-tickers, хранятся имена серверов с которыми производиться начальная, грубая (сотни милесекунд) корректировка. Если вы уверены что у вас всегда будет доступ к Internet, можете перечислить в нём имена серверов, например:

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

Задача: Организовать NTP сервер в локальной сети, который будет синхронизировать своё время с Интернетом, а устройства в локальной сети будут уже синхронизировать время с ним.
Дистрибутив: Mandriva 2010.2 free Версия ntpd: 4.2.4p8

Настройка NTPD

Мир Linux действительно великолепен, все настройки в нём сводятся к простому редактированию файлов конфигураций. ntpd в этом плане не исключение. Итак если у вас ещё не стоит ntpd сервер установим его:

Желающие могут скомпилировать из исходников, или установить его другим способом, в мои же платны входит показать как настроить это чудо, по скольку в интернете можно найти целое море мануалов по настройке ntpd, но ирония состоит в том, что 95% из них либо не совсем верны (и авторы этого даже не замечают при вызове статусов) либо не дают необходимой информации. Итак файл с настройками храниться в /etc/ntp.conf, минимальные настройки примерно такие:

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

Каждая строчка указывает на сервер (списки серверов можно найти здесь http://www.pool.ntp.org), с которым будет происходить синхронизация. Четыре строчки с server, соответственно четыре сервера. Хотя на самом деле в данном примере это не совсем так. Каждая запись указывает на пул (группу) серверов. При обращении скажем по адресу 2.ru.pool.ntp.org будет выбран 1 IP адрес сервера, с которым будет происходить синхронизация. Соответствия обновляются 1 раз в час. Теперь на более простом примере. Всего у нас имеется 4 коробки с часами. Мы берём и наугад достаём из каждой коробки 1 часы, всего у нас получается 4 часов, с которыми мы будем сверять наше время. В течении часа, каждый раз когда мы будем сверять время, мы будем брать одни и те же часы. Через час если мы опять обратимся к этим коробкам, то вытащим уже другие часы. Таким образом наше время будет сверяться постоянно с разными часами, и если какие-то из них окажутся не рабочими, то ничего страшного не случиться, ведь за 1 час, наши локальные часы не слишком сильно рассинхронизируются. Ну да мы отвлеклись, продолжим. Прежде чем запускать сервер ntpd, необходимо произвести начальную, грубую установку времени. Можно просто выставить время руками, а можно выполнить команду (разумеется если у нас корректно работает связь с интернетом):

После того как время грубо синхронизировано можно запускать основной сервис (на всякий случае перезапустим его):

После чего выполним команду:

В результате должны увидеть что-то на подобии:

remote refid st t when poll reach delay offset jitter ============================================================================== mx.kr-pro.ru 62.149.0.30 2 u 26 64 1 22.416 77.711 0.001 phobos.bsys-net 192.36.143.151 2 u 25 64 1 32.994 64.937 0.001 webhost.mitht.r 77.105.134.138 3 u 25 64 1 68.134 37.119 0.001 hornet.itconnec 77.233.172.7 3 u 24 64 1 58.604 38.047 0.001

Небольшие пояснения что есть что. remote - FQDN или IP-адрес сервера; refid - IP-адрес сервера с которым в настоящий момент выполняется синхронизация сервера из столбца remote; st - stratum сервера; t - режим работы сервера: "u" - unicast, "m" - multicast, "b" - broadcast, "-" - manycast; when - время, прошедшее с момента последнего ответа сервера в секундах или "-", если сервер еще ни разу не ответил (скорее всего, "умер", и сведения о нем пора удалить из файла конфигурации); poll - интервал опроса сервера в секундах (после запуска имеет небольшое значение, чтобы синхронизация происходила быстрее, с течением времени значение увеличивается); reach - состояние восьми последних попыток запроса времени у сервера в восьмеричном представлении (в случае успешной попытки устанавливается соответствующий бит); delay - задержка ответа сервера в секундах; offset - самое важное значение - различие локального времени и времени на сервере (с течением времени значение уменьшается, т.к. время становится более точным); jitter - дисперсия, дрожание фазы (более низкие значения обеспечивают более точную синхронизацию). Ждём 10 минут. Повторяем, команду и видем:

remote refid st t when poll reach delay offset jitter ============================================================================== *mx.kr-pro.ru 62.117.76.142 2 u 5 64 377 20.558 38.662 19.060 +phobos.bsys-net 192.36.143.151 2 u 6 64 377 17.726 38.447 15.132 -webhost.mitht.r 77.105.134.138 3 u 4 64 377 66.744 13.451 16.257 +hornet.itconnec 77.233.172.7 3 u 11 64 377 57.291 43.556 13.327

Ага, вот оно появились всякие дополнительные символы и вот что они означают: "*" - сервер, с которым в настоящий момент выполняется синхронизация, "#" - сервер отобран для синхронизации, но дистанция до него превышает максимально возможную, "?" - сервер отобран для синхронизации и использует сигнал PPS, "+" - сервер добавлен в список серверов, отобранных для синхронизации, "x" - сервер использует некорректный алгоритм, "." - сервер выбран из конца списка серверов, отобранных для синхронизации, "-" - сервер отвергнут группирующим алгоритмом, пробел - сервер имеет слишком высокий stratum и/или не может быть проверен; Теперь по простому, если видем "+", "-", "*" синхронизация пошла. offset - отклонение нашего времени и времени удалённого сервера, если значение скажем больше 100, то синхронизация реально не произошла. На некоторых ресурсах можно увидеть следующую картину:

remote refid st t when poll reach delay offset jitter ============================================================================== 172.22.128.8 93.185.187.89 3 u 142 256 377 3.906 -450.41 61.937 195.200.216.16 .INIT. 16 u - 64 0 0.000 0.000 0.000 ams1.x31.com .INIT. 16 u - 64 0 0.000 0.000 0.000 mail2.mgts.by .INIT. 16 u - 64 0 0.000 0.000 0.000 *LOCAL(1) .LOCL. 3 l 13 64 377 0.000 0.000 3.906

Видим что половина серверов (2, 3, 4) вообще не работает и реально происходит работа с локальным сервером и с 172.22.128.8. Смотрим значение offset которое говорит что никакой синхронизации нет и в помине! Из листинга можно сделать только один вывод, что сервер засинхронизирован сам с собой, и его время имеет мало общего с действительным. Будьте внимательны, не давайте вас нае... обмануть:) На этом бы можно и остановиться но теперь как говориться усложняем задачу. Нам надо чтоб наш сервер являлся источником времени для локальной сети, но при этом никто не смог сделать ничего плохого с вашим сервером. В чём проблема? В том что для нормальной синхронизации, даже если вы не планируете кому то давать синхронизировать время с вами, У ВАС ДОЛЖЕН быть открытым порт udp 123. После прочтения множества мануалов и дня потерянного времени вот что в /etc/ntp.conf получилось у меня:

01 # Public NPS servers, from we get time 02 server 0.ru.pool.ntp.org 03 server 1.ru.pool.ntp.org 04 server 2.ru.pool.ntp.org 05 server 3.ru.pool.ntp.org 06 server 0.europe.pool.ntp.org 07 server 1.europe.pool.ntp.org 08 09 # For all other acces denied 10 restrict default ignore 11 12 # Public NPS servers can"t control our local server 13 restrict 0.ru.pool.ntp.org nomodify notrap 14 restrict 1.ru.pool.ntp.org nomodify notrap 15 restrict 2.ru.pool.ntp.org nomodify notrap 16 restrict 3.ru.pool.ntp.org nomodify notrap 17 restrict 0.europe.pool.ntp.org nomodify notrap 18 restrict 1.europe.pool.ntp.org nomodify notrap 19 20 # Our server provide NTP service for local network, 21 # and clients can"t control our local server 22 restrict 192.168.0.0 mask 255.255.0.0 nomodify notrap nopeer 23 24 # Need for loopback synchronisation, without it no will work 25 restrict 127.0.0.1 nomodify notrap

Вникаем внимательно. Наш сервер засинхронизирован с 6-тью внешними пулами серверов, строки с 02 по 07. Строка 10, мы запрещаем кому либо чтобы-то не было делать с нашим сервером. Теперь нам надо внести исключение для серверов с которыми наш сервер будет синхронизироваться, строки с 13 по 18. При этом параметры nomodify notrap, говорят о том что запрещено изменять состояние НАШЕГО сервера и отправлять сообщения об исключениях ВНЕШНИМИ серверами, т. е. чтоб никто из этих серверов ничего не натворил. Строка 22, мы разрешаем участникам локальной сети синхронизировать время с нашим сервером, но при этом тоже вводим ограничение. Теперь самая важная строка - 25, будем считать что это локальная петля. Без неё работать не будет. В итоге, наш сервер синхронизируется с внешними серверами, при этом сам является сервером но только для нашей локальной сети, всем остальным доступ запрещён. Ещё раз перезапустим сервис:

Пойдём покурим, выпьем чаю, кофе (нужное подчеркнуть), после чего выполним команду:

remote refid st t when poll reach delay offset jitter ============================================================================== *mx.kr-pro.ru 62.117.76.142 2 u 5 64 377 20.558 38.662 19.060 +phobos.bsys-net 192.36.143.151 2 u 6 64 377 17.726 38.447 15.132 -webhost.mitht.r 77.105.134.138 3 u 4 64 377 66.744 13.451 16.257 +hornet.itconnec 77.233.172.7 3 u 11 64 377 57.291 43.556 13.327 +sinister.wzw.tu 129.69.1.153 2 u 1 64 377 80.064 48.067 14.367 +time.sunrise.ne 193.192.225.90 3 u 3 64 377 72.448 22.575 14.584

Видим, наш сервер засинхронизирован, отклонение не превышают и 50мс. Настройка NTPD практически одинакова для всех Xnix систем, и отличается по сути только способом запуска. Всем советую ознакомиться также со статьёй где расписан вариант настройки для FreeBSD. http://www.sergeysl.ru/freebsd-ntpd/ Вот собственно и всё.

OS: Windows 2000/XP/2003/Vista/2008/7.

Задача: настроить Windows системы для получения показателей точного времени с определённых NTP серверов.

Наши NTP серверы будут поддерживать протокол версий 3 (три) и 4 (четыре).
Служба точного времени работает на порту udp:123. Обеспечиваем видимость наших NTP серверов по указанному порту.
Авторизацию при запросе клиентом точного времени у NTP сервера проводить не будем; отношения в сети достаточно доверительные, да и парк активных устройств разномастен - далеко не все могут поддерживать что-то ещё, кроме простого запроса показателей времени.


Пользователям операционных систем Windows XP/2003/2008 придётся проделать ряд манипуляций.

Указать на применяемые NTP серверы (где ntp.local, ntp1.local и так далее - наши NTP серверы):

# w32tm /config /syncfromflags:manual /manualpeerlist:ntp.local,ntp1.local,...,ntpX.local
# w32tm /config /update



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

# net time /setsntp:ntp.local
# net stop w32time && net start w32time
# w32tm /resync


В результате должны получить нечто вроде этого:

Команда синхронизации отправлена на local computer...
Команда выполнена успешно.


Через некоторое время можно проверить журнал событий системы. Если все настроено и отработало верно, то в журнале будет информационное сообщение от источника W32Time с кодом (ID) 35 и текстом "Служба времени выполняет синхронизацию системного времени с источником времени". Если возникли какие-то проблемы, то в журнал будут записаны ошибки с кодами. Поисковая система поможет и в этом.

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

# net time /querysntp


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

# w32tm /stripchart /computer:computer.name


Иногда помогает вульгарная перерегистрация службы времени Windows:

# w32tm /unregister
# w32tm /register


Как вариант, можно настроить синхронизацию времени с помощью графического интерфейса.

Можно указать на применяемые NTP серверы с помощью утилиты regedit.exe:


Необходимо пройти в ветку (если её нет - создать) "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\DateTime\Servers":


Создать или изменить строковые параметры с именами "0" и "1" указав в них доменные имена или IP адреса наших NTP серверов:


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

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

Установка
Платформой для установки нам послужит, как обычно, Gentoo. Служба ntp - net-misc/ntp.
Первым делом обновляем дерево портеджей:

Устанавливаем ntp, тут нам особые параметры не требуются(по крайней мере пока), поэтому ставим с юзами по умолчанию:
Настройка сервера.

Определимся у кого будем брать время. Я предлагаю использовать сервера точного времени , Stratum 1 как никак.

ntp1.vniiftri.ru
ntp2.vniiftri.ru
ntp4.vniiftri.ru
Параметры запуска демона ntpd определяются в файле /etc/conf.d/ntpd
# /etc/conf.d/ntpd

# Options to pass to the ntpd process
# Most people should leave this line alone ...
# however, if you know what you"re doing, feel free to tweak
NTPD_OPTS="-g -c /etc/ntp.conf"

Здесь -g -ключ разрешающий переход на большой скачек времени, -с -файл конфигурации службы ntp, чтобы указать pid-файл отличный от используемого по умолчанию можно использовать ключ -p, например:
NTPD_OPTS="-p /var/run/ntpd.pid -g -c /etc/ntp.conf"
Настройка службы ntp по умолчанию производится в файле /etc/ntp.conf, если указали в предыдущем пункте другой, то правим тот который указали
# /etc/ntp.conf
# Наш локальный сервер
server 192.168.0.1
# Серверы в сети
server 195.2.64.6
server ntp1.vniiftri.ru
server ntp2.vniiftri.ru
server ntp4.vniiftri.ru

#Пути к служебным файлам
driftfile /var/lib/ntp/ntp.drift
logfile /var/log/ntpd.log

# Разрешения на доступ к нашему серверу
restrict default ignore # По умолчанию доступ запрещен
restrict localhost # Локально можно все
restrict 192.168.0.0 mask 255.255.255.0 nomodify nopeer notrap # По внутренней сети можно только читать время

# Разрешаем синхронизироваться с внешними серверами, иначе синхронизация не пойдет.
restrict 127.0.0.1
restrict 192.168.0.1
restrict 195.2.64.6
restrict ntp1.vniiftri.ru
restrict ntp2.vniiftri.ru
restrict ntp4.vniiftri.ru

# Эта запись позволяет присвоить самому себе Stratum 3, чтобы сервер доверял сам себе
server 127.127.1.1
fudge 127.127.1.1 stratum 3

Запускаем ntpd
Добавляем ntpd в автозагрузку
Теперь нужно обождать минут 10 - 20, поскольку синхронизация происходит не сразу, а через некоторое время.

Проверяем на сервере

Если в ответ получаем нечто похожее:

remote refid st t when poll reach delay offset jitter
==============================================================================
192.168.0.1 .INIT. 16 u - 1024 0 0.000 0.000 0.000
-ntp1.zenon.net 195.2.64.5 2 u 596 1024 377 2.261 -0.104 0.680
*ntp1.vniiftri.r .PPS. 1 u 909 1024 377 4.266 -0.603 0.353
+ntp2.vniiftri.r .PPS. 1 u 562 1024 377 3.914 -0.453 0.457
+ntp4.vniiftri.r .PPS. 1 u 554 1024 377 4.487 -0.664 0.249
LOCAL(1) .LOCL. 3 l 229m 64 0 0.000 0.000 0.000
значит все нормально, синхронизация пошла. Поподробнее рассмотрим обозначения в полученной таблице.
Поля таблицы:
remote - имена удаленных ntp серверов
refid - сервер, с которым производит синхронизацию удаленный сервер ntp
st - стратум (уровень) удаленного сервера. 1 - самый высокий, 16 - рядовая машина/клиент.
t - тип пира (u = unicast, m = multicast, l = local)
when - указывает на то, как давно была произведена синхронизация с сервером
poll - частота в секундах, с которой NTP демон синхронизируется с пиром
reach - состояние доступности сервера, это значение стабилизируется на уровне 377 если последних 8 попыток синхронизации с удаленным сервером были успешны
delay - задержка (в миллисекундах) ответа от сервера
offset - разница в миллисекундах между системным временем и временем удаленного сервера; значение с минусом - отставание, с плюсом - убегание
jitter - смещение времени на удаленном сервере
Значки в строках таблицы:
* - пир, с которым была выполнена синхронизация последний раз
+ - пригодный для обновления сервер
- - непригодный для обновления сервер
х - сервер не отвечает

Проверяем на клиенте:

Если синхронизация прошла успешно, получим ответ следующего вида:
25 Oct 17:28:04 ntpdate: adjust time server 192.168.0.1 offset -0.016567 sec
Однако, возможно получить следующее сообщение:
25 Oct 17:29:14 ntpdate: no server suitable for synchronization found
Чтобы понять что за ерунда выполняем:
Смотрим ответ:
192.168.0.1: Server dropped: strata too high
server 192.168.0.1, port 123
stratum 16, precision -8, leap 11, trust 000
Это означает, что уровень доверия очень мал (stratum=16, самый низкий уровень), то есть сервер сам себе не доверяет, чтобы отдавать время. Необходимо либо подождать, либо изменить список серверов, с которыми он синхронизируется. Поскольку в конфиге у нас прописано, что сервер наш stratum 3, то такое сообщение мы вряд ли увидим.

Настраиваем клиентов.

LINUX
Клиенты у меня тоже Gentoo, в основном, конфигурация клиента прописывается в файле /etc/conf.d/ntp-client. Тут не мудрим, оставляем все как есть, только указываем наш сервер в параметрах синхронизации:

# /etc/conf.d/ntp-client

# Command to run to set the clock initially
# Most people should just leave this line alone ...
# however, if you know what you"re doing, and you
# want to use ntpd to set the clock, change this to "ntpd"
NTPCLIENT_CMD="ntpdate"

# Options to pass to the above command
# This default setting should work fine but you should
# change the default "pool.ntp.org" to something closer
# to your machine. See http://www.pool.ntp.org/ or
# try running `netselect -s 3 pool.ntp.org`.
NTPCLIENT_OPTS="-s -b -u 192.168.0.1 "

Добавляем в автозагрузку:
# rc-update add ntp-client default
Следует иметь в виду, что служба ntp-client синхронизирует время только один раз, при запуске системы, поэтому для машин работающих длительное время без перезапуска делаем следующее:
Создаем в папке /etc/cron.hourly исполняемый файл со следующим содержимым
#!/bin/sh
NTPCLIENT_OPTS="-s -b -u 192.168.0.1"

Ntpdate $NTPCLIENT_OPTS >> /dev/null 2>&1

Все, теперь наша машина будет синхронизироваться с ntp ежечасно.

WINDOWS 2003 Server
Все телодвижения выполняем в командной строке.

#w32tm /config /syncfromflags:manual /manualpeerlist:192.168.0.1
#w32tm /config /update
Далее, в командной строке указываем приоритетный NTP сервер, перезапускаем службу точного времени и принудительно синхронизируем время:
#net time /setsntp:192.168.0.1
#net stop w32time && net start w32time
#w32tm /resync
В результате должны получить:
Команда синхронизации отправлена на local computer...
Команда выполнена успешно.
Через некоторое время можно проверить журнал событий системы. Если все настроено и отработало верно, то в журнале будет информационное сообщение от источника W32Time с кодом (ID) 37 и текстом "NTP-клиент поставщика времени получает правильные данные о времени от 192.168.0.1", а затем с кодом 35 и текстом "Служба времени выполняет синхронизацию системного времени с источником времени 192.168.0.1".

UPD
WINDOWS 2012 Server

Тут все аналогично Windows 2003 Server, но делаем все в Windows PowerShell запущенной от имени администратора.
Указываем какой ntp сервер использовать для синхронизации:

PS C:\> w32tm /config /syncfromflags:manual /manualpeerlist:192.168.0.1 /syncfromflags:MANUAL
PS C:\> w32tm /config /update
Далее, в командной строке перезапускаем службу точного времени и принудительно синхронизируем время:
PS C:\> Service-Stop w32time
PS C:\> Service-Start w32time
PS C:\> w32tm /resync
В результате должны получить:
Отправка команды синхронизации на локальный компьютер
Команда выполнена успешно.
Проверяем:
На выходе должны получить нечто подобное:
Индикатор помех: 0(предупреждений нет)
Страта: 3 (вторичная ссылка - синхронизирована с помощью (S)NTP)
Точность: -6 (15.625ms за такт времени)
Задержка корня: 0.0356903s
Дисперсия корня: 7.8069513s
Идентификатор опорного времени: 0xC0A86301 (IP-адрес источника: 192.168.0.1)
Время последней успешной синхронизации: 22.03.2016 16:21:25


Операционные системы семейства Windows содержат службу времени W32Time . Эта служба предназначена для синхронизации времени в пределах организации. W32Time отвечает за работу как клиентской, так и серверной части службы времени, причем один и тот же компьютер может быть одновременно и клиентом и сервером NTP (NTP - Network Time Protocol).

По умолчанию служба времени в Windows сконфигурирована следующим образом:

При установке операционной системы Windows запускает клиента NTP, который синхронизируется с внешним источником времени;

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

При повышении рядового сервера до контроллера домена на нем запускается NTP-сервер, который в качестве источника времени использует контроллер с ролью PDC-эмулятор;

PDC-эмулятор, расположенный в корневом домене леса, является основным сервером времени для всей организации. При этом сам он также синхронизируется с внешним источником времени.

Такая схема работает в большинстве случаев и не требует вмешательства. Однако структура сервиса времени в Windows может и не следовать доменной иерархии и надежным источником времени можно назначить любой компьютер.

В качестве примера приведем настройку NTP-сервера в Windows Server 2008 R2, по аналогии можно настроить NTP сервер и в Windows 7.

Запуск NTP сервера

Служба времени в Windows Server не имеет графического интерфейса и настраивается либо из командной строки, либо путем прямой правки системного реестра. Рассмотрим второй способ:

Необходимо запустить сервер NTP. Открываем ветку реестра:

HKLM\System\CurrentControlSet\services\W32Time\TimeProviders\NtpServer .

Для включения сервера NTP параметру Enabled надо установить значение 1. Затем перезапускаем службу времени командой net stop w32time && net start w32time.

После перезапуска службы NTP, сервер уже активен и может обслуживать клиентов. Убедиться в этом можно с помощью команды w32tm /query /configuration . Эта команда выводит полный список параметров службы. Если раздел NtpServer содержит строку Enabled:1 , то все в порядке, сервер времени работает.

Для того, чтобы NTP-сервер мог обслуживать клиентов, в брандмауэре необходимо открыть UDP порт 123 для входящего и исходящего трафика.

Основные настройки NTP сервера

Открываем ветку реестра:

HKLM\System\CurrentControlSet\services\W32Time\Parameters .

NoSync - NTP-сервер не синхронизируется с каким либо внешним источником времени. Используются системные часы, встроенные в микросхему CMOS самого сервера (в свою очередь эти часы могут синхронизироваться от источника NMEA по RS-232 например);

NTP — NTP-сервер синхронизируется с внешними серверами времени, которые указаны в параметре реестра NtpServer ;

NT5DS - NTP-сервер производит синхронизацию согласно доменной иерархии;

AllSync - NTP-сервер использует для синхронизации все доступные источники.

Значение по умолчанию для компьютера, входящего в домен - NT5DS, для отдельно стоящего компьютера - NTP.

В параметре NtpServer указываются NTP-сервера, с которыми будет синхронизировать время данный сервер. По умолчанию в этом параметре прописан NTP-сервер Microsoft (time.windows.com, 0×1), при необходимости можно добавить еще несколько NTP-серверов, введя их DNS имена или IP адреса через пробел. В конце каждого имени можно добавлять флаг (напр. ,0×1) который определяет режим для синхронизации с сервером времени.

Допускаются следующие значения режима:

0×1 - SpecialInterval , использование временного интервала опроса;

0×2 – режим UseAsFallbackOnly;

0×4 – SymmetricActive, симметричный активный режим;

0×8 – Client, отправка запроса в клиентском режиме.

Еще один важный параметр AnnounceFlags находится в разделе реестра:

HKLM\System\CurrentControlSet\services\W32Time\Config .

Он отвечает за то, как о себе заявляет NTP-сервер. Чтобы заявить рядовой сервер (не домен-контроллер) как надежный источник времени, нужен флаг 5 .

Если настраиваемый сервер в свою очередь является клиентом NTP (получает время от GPS-приемника по NTP, например), можно настроить интервал между обновлениями. Этот параметр может быть актуальным и для клиентских РС. За время обновления отвечает ключ SpecialPollInterval, находящийся в ветке реестра:

HKLM\System\CurrentControlSet\services\W32Time\TimeProviders\NtpClient .

Он задается в секундах и по умолчанию его значение равно 604800, что составляет 1 неделю. Это очень много, поэтому стоит уменьшить значение SpecialPollInterval до разумного значения - 1 часа (3600).

После настройки необходимо обновить конфигурацию сервиса. Сделать это можно командой w32tm /config /update.


И еще несколько команд для настройки, мониторинга и диагностики службы времени:

w32tm /monitor – при помощи этой опции можно узнать, насколько системное время данного компьютера отличается от времени на контроллере домена или других компьютерах. Например: w32tm /monitor /computers:time.nist.gov

w32tm /resync – при помощи этой команды можно заставить компьютер синхронизироваться с используемым им сервером времени.

w32tm /stripchart – показывает разницу во времени между текущим и удаленным компьютером. Команда w32tm /stripchart /computer:time.nist.gov /samples:5 /dataonly произведет 5 сравнений с указанным источником и выдаст результат в текстовом виде.


w32tm /config – это основная команда, используемая для настройки службы NTP. С ее помощью можно задать список используемых серверов времени, тип синхронизации и многое другое. Например, переопределить значения по умолчанию и настроить синхронизацию времени с внешним источником, можно командой w32tm /config /syncfromflags:manual /manualpeerlist:time.nist.gov /update


w32tm /query - показывает текущие настройки службы. Например команда w32tm /query /source покажет текущий источник времени, а w32tm /query /configuration выведет все параметры службы.

net stop w32time - останавливает службу времени, если запущена.

w32tm /unregister - удаляет службу времени с компьютера.

w32tm /register – регистрирует службу времени на компьютере. При этом создается заново вся ветка параметров в реестре.

net start w32time - запускает службу.

Особенности, замеченные в Windows 7 - служба времени не запускается автоматически при старте Windows. Исправлено в SP1 для Windows 7.


Синхронизация времени является важной задачей, хотя не многие задумывались об этом. Ну что плохого в убежавшем на сервере времени? А знаете ли вы, что многие проблемы с часами влияют на протоколы, связанные с криптографией? По этой причине в Active Directory разница в часах более 5 минут будет приводить к проблемам аутентификации Kerberos.

Часовые уровни. Strata.

Чтобы понять устройство NTP следует знать про концепцию strata или stratum . Авторитетные источники времени, такие как спутники GPS, цезиевые атомные часы, радио волны WWVB - всё это stratum 0 . Они авторитетны на том основании, что у них есть некоторый способ поддержания высокоточного хронометража. Можно, конечно, воспользоваться обычными кварцевыми часами, но зная, что за месяц с ними легко потерять 15 секунд, то лучше их не использовать в качестве мерила времени. Stratum 0 это когда секунда не потеряется за 300 000 лет!

Компьютеры, которые напрямую (не по сети!) берут время у stratum 0 - это stratum 1 . Так как всегда есть задержки из-за передачи сигнала и затраты на установку времени, то компьютеры stratum 1 не так точны как stratum 0 , но в реальной жизни различие достигает пару микросекунд (1 мкс = 10 -6 с), что вполне допустимое отклонение.

Следующий уровень компьютеров, берущих время по сети у stratum 1 - это... барабанная дробь... интрига... stratum 2 ! Опять таки из-за различных задержек (сетевые точно), stratum 2 чуток отстаёт от stratum 1 и уж точно от stratum 0 . На практике это разница от нескольких микросекунд (1 мкс = 10 -6 с) до нескольких миллисекунд (1 мс = 10 -3 с). Многие хотят синхронизироваться со слоем не дальше stratum 2 .

Как понятно из схемы, stratum 4 берёт время у вышестоящего stratum 3 . stratum 5 у stratum 4 и так далее. stratum 16 считается самым нижним слоем и время там считается несинхронизированным .

Чтобы синхронизировать время с помощью протокола NTP, следует сначала вручную выставить ваше время. Недопустима разница между вашим точным временем и показаниями ваших часов более 1000 секунд. Если используемый вами сервер времени врёт более 1000 миллисекунд (1 секунда), то он будет исключён из списка и будут использоваться другие вместо него. Данный механизм позволяет отсеивать плохие источники времени.

Клиент времени.

В файле /etc/ntp.conf для клиента важны строки Server. Их может быть несколько - до 10 штук!

Сколько добавлять? Следует иметь в виду:

  • Если у вас только один сервер (одна строка server), то если данный сервер начнёт врать, то вы будете слепо следовать за ним. Если его время убежит на 5 секунд и вы убежите в след за ним.
  • Если добавлено 2 сервера (2 строки server), то NTP пометит их обоих как false tickers . Если один из них будет врать, то NTP не может понять кто врёт, так как нет кворума.
  • Если добавлено 3 и более сервера времени, то можно вычислить одного вруна false tickers . Если серверов времени 5 или 6, то можно найти 2 вруна false tickers . Если серверов 7 или 8, то 3 false tickers . Если серверов 9 и 10, то 4 false tickers .

Проект NTP Pool.

Есть такой проект NTP Pool по адресу которого pool.ntp.org/zone/ru/ можно найти рекомендованные для русских пользователей сервера времени.

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

Такие операционные системы, как Debian и Ubuntu, предлагают пользователям свои сервера времени.

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

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

Если вызвать на вашем Linux компьютере, который использует NTP, команду ntpq -pn

Remote refid st t when poll reach delay offset jitter ============================================================================== +93.180.6.3 77.37.134.150 2 u 62 1024 377 53.658 -0.877 1.174 +85.21.78.23 193.190.230.65 2 u 1027 1024 377 54.651 0.167 1.531 *62.173.138.130 89.109.251.24 2 u 940 1024 377 52.796 -0.143 1.001 +91.206.16.3 194.190.168.1 2 u 258 1024 377 93.882 -0.680 2.196 -91.189.94.4 193.79.237.14 2 u 596 1024 377 100.219 1.562 1.482

О чём говорят названия столбцов:

  • remote - удалённые сервера, с которыми вы синхронизируете время.
  • refid - вышестоящий stratum для данного сервера.
  • st - уровень stratum. От 0 (нам недоступно) до 16 (нам не желательно). Идеально - 2.
  • t - тип соединения. "u " - unicast или manycast, "b " - broadcast или multicast, "l " local reference clock, "s " - симметричный узел, "A " - manycast сервер, "B " - broadcast server, "M " - multicast сервер.
  • when - время, когда последний раз сервер ответил нам. Параметр отображает число в секундах, но может в минутах, если число с m или в часах, если h .
  • poll - частота опроса. Минимум 16 секунд, максимум 32 часа. Число должно быть 2 n . Обычно в данном параметре наблюдается или 64 секунды или 1024.
  • reach - 8 бит октета, показывающий статус общения с удалённым сервером времени: успешный или сбойный. Если биты установлены - то успешно, иначе - сбой. Значение 377 - бинарно это 0000 0000 1111 1111.
  • delay - значение в миллисекундах показывает время между отправкой и получения ответа (round trip time - RTT).
  • offset - смещение в миллисекундах между вами и серверами времени. Может быть положительным и отрицательным числом.
  • jitter - абсолютное значение в миллисекундах с указанием среднеквадратичного отклонения вашего смещения.

Перед IP адресом NTP сервера есть символ - это tally code . Виды tally code :

  • " " - отброшен как недопустимый. Например, нет связи с ним или он в оффлайн, он слишком высокого ранга и не обслуживает таких как вы.
  • "x" - отброшен алгоритмом "пересечения" (intersection algorithm). Алгоритм пересечения подготавливает список кандидатов партнеров, могущих стать источниками синхронизации и вычисляет доверительный интервал для каждого из них.
  • "." - отброшен из-за переполнения таблицы.
  • "-" - отброшен алгоритмом кластеризации (cluster algorithm). Алгоритм кластеризации сортирует список кандидатов по кодам слоя и расстояния синхронизации.
  • "+" - сервер включён алгоритмом "комбинирования" (combine algorithm). Этот сервер - отличный кандидат если текущий сервер времени начнёт отказывать вам.
  • "#" - сервер является отличным альтернативным сервером времени. Сервер с # можно увидеть только если у вас более 10 записей server в /etc/ntp.conf
  • "*" - текущий сервер времени. Его показания используются для синхронизации ваших часов.
  • "o" - сервер Pulse per second (PPS). Обычно это означает, что данный сервер времени использует источники времени типа GPS спутников и другие сигналы точного времени. Если рисуется о , то другие типы tally code уже отображаться не будут.

В поле refid могут быть следующие значения:

  • IP адрес - адрес удалённого сервера времени.
  • .ACST.- NTP manycast сервер.
  • .ACTS.- Automated Computer Time Service из American National Institute of Standards and Technology.
  • .AUTH.- ошибка аутентификации.
  • .AUTO.- ошибка в последовательностях Autokey.
  • .BCST.- NTP broadcast сервер.
  • .CHU.- Shortwave radio receiver от станции CHU в Ottawa, Ontario, Canada.
  • .CRYPT.- ошибка протокола Autokey.
  • .DCFx.- LF radio receiver от станции DCF77 в Mainflingen, Germany.
  • .DENY.- В доступе отказано.
  • .GAL.- European Galileo satellite receiver.
  • .GOES.- American Geostationary Operational Environmental Satellite receiver.
  • .GPS.- American Global Positioning System receiver.
  • .HBG.- LF radio receiver от станции HBG в Prangins, Switzerland.
  • .INIT.- Peer association initialized.
  • .IRIG.- Inter Range Instrumentation Group time code.
  • .JJY.- LF radio receiver от станции JJY в Mount Otakadoya, рядом с Fukushima или Mount Hagane на острове Kyushu, Japan.
  • .LFx.- Обычный LF radio receiver.
  • .LOCL.- локальные часы хоста.
  • .LORC.- LF radio receiver от Long Range Navigation (LORAN-C).
  • .MCST.- NTP multicast сервер.
  • .MSF.- Anthorn Radio Station рядом с Anthorn, Cumbria.
  • .NIST.- American National Institute of Standards and Technology.
  • .PPS.- часы Pulse per second.
  • .PTB.- Physikalisch-Technische Bundesanstalt от Brunswick и Berlin, Germany.
  • .RATE.- превышен порог опроса NTP.
  • .STEP.- изменение шага NTP. Смещение offset менее 1000 миллисекунд, но более 125 миллисекунд.
  • .TDF.- LF radio receiver от станции TéléDiffusion de France в Allouis, France.
  • .TIME.- NTP association timeout.
  • .USNO.- United States Naval Observatory.
  • .WWV.- HF radio receiver от станции WWV в Fort Collins, Colorado, United States.
  • .WWVB.- LF radio receiver от станции WWVB в Fort Collins, Colorado, United States.
  • .WWVH.- HF radio receiver от станции WWVH в Kekaha, на острове Kauai на Hawaii, United States.

Во-первых, избавьтесь от мысли как бы получить время от stratum 1 , дескать они ближе всех к точному времени. Они то ближе к точнейшему времени на планете, только сами они перегружены и у них высокие задержки RTT для обычных серверов. Лучше найти нормальный stratum 2 и не переживать по этому поводу. Не забывайте, что речь идёт о микросекундах и миллисекундах, что в обычной жизни - вполне достаточно.

Во-вторых, помните, что подключение к ближайшему серверу времени не всегда идеальный вариант. Важнее не территориальная близость, а уровень stratum. Проект NTP Pool публикует список серверов только уровня stratum 1 и stratum 2 и лучше взять до 10 серверов времени из данного списка, что будет просто замечательно.

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

Для крупных контор, лучшим вариантом будет поднятие своего сервера времени для рабочих компьютеров. Данный сервер будет получать точное время от серверов времени в Интернете и предоставлять его локальным компьютерам. На серверах Debian и Ubuntu достаточно раскомментировать строку

Restrict 192.168.0.0 mask 255.255.0.0 nomodify notrap

в конфигурационном файле демона ntpd - /etc/ntp.conf

Пользователи из сети 192.168/16 будут иметь возможность брать с вашего сервера показания точнейших часов. Для внутренних серверов на базе Linux, которые не являются серверами времени и занимаются своими задачами, вместо запуска демона ntpd в клиентском режиме - вполне достаточно указать в файле /etc/cron.daily/syncntpd. Рекомендуется прочесть различия между ntpdate и ntp и решить для себя вопрос.
#!/bin/sh
/usr/sbin/ntpdate IP.адрес.вашего.сервера > /dev/null 2>&1
exit 0

и раз в сутки, благодаря команде ntpdate, будет произведена синхронизация времени. Во избежании недоразумений, не поленитесь перед внедрением сервера времени и синхронизации всего и вся через протокол NTP - выставите вручную правильное время на всех доступных вам серверах и рабочих станциях. Если ваше несинхронизированное время слишком отличается от правильного, то можно вначале огрести много не нужных проблем.

В-четвёртых, NTP никак не связан, в какой стране и какие часовые пояса используются и как происходит переход на летнее и зимнее время и делается ли в данной стране такой переход. Это обязанность лежит на операционной системе, которую вам нужно обновлять, если в стране происходят изменения в часовых делах. В системах Debian и Ubuntu за это отвечает пакет tzdata, который должен быть актуальным.

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