Ntp клиент для синхронизации времени. Установка ntp в Ubuntu. Настройка политики синхронизации NTP на контролере домена PDC

Настройка NTP сервера в Windows

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

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

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

Такая схема работает в большинстве случаев и не требует вмешательства. Однако структура сервиса времени в Windows может и не следовать доменной иерархии, и надежным источником времени можно назначить любой компьютер. В качестве примера я опишу настройку NTP-сервера в Windows Server 2008 R2, хотя со времен Windows 2000 процедура не особо изменилась.

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

Сразу отмечу, что служба времени в Windows Server (начиная с 2000 и заканчивая 2012) не имеет графического интерфейса и настраивается либо из командной строки, либо путем прямой правки системного реестра. Лично мне ближе второй способ, поэтому идем в реестр.

Итак, первым делом нам надо запустить сервер 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 сервера

NTP сервер включили, теперь надо его настроить. Открываем ветку реестра HKLM\System\CurrentControlSet\services\W32Time\Parameters. Здесь в первую очередь нас интересует параметр Type , который задает тип синхронизации. Он может принимать следующие значения:

NoSync — NTP-сервер не синхронизируется с каким либо внешним источником времени. Используются часы, встроенные в микросхему CMOS самого сервера;
NTP — NTP-сервер синхронизируется с внешними серверами времени, которые указаны в параметре реестра NtpServer;
NT5DS — NTP-сервер производит синхронизацию согласно доменной иерархии;
AllSync — NTP-сервер использует для синхронизации все доступные источники.

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

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

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

0x1 – SpecialInterval, использование специального интервала опроса;
0x2 – режим UseAsFallbackOnly;
0x4 – SymmetricActive, симметричный активный режим;
0x8 – Client, отправка запроса в клиентском режиме.

При использовании флага SpecialInterval, необходимо установленное значение интервала в ключе SpecialPollInterval . При значении флага UseAsFallbackOnly службе времени сообщается, что данный сервер будет использоваться как резервный и перед синхронизацией с ним будут выполнятся обращения к другим серверам списка. Симметричный активный режим используется NTP-серверами по умолчанию, а клиентский режим можно задействовать в случае проблем с синхронизацией. Подробнее о режимах синхронизации можно посмотреть , либо не морочиться и просто ставить везде ,0x1 (как советует Microsoft).

Еще один важный параметр AnnounceFlags находится в разделе реестра HKLM\System\CurrentControlSet\services\W32Time\Config. Он отвечает за то, как о себе заявляет NTP-сервер и может принимать следующие значения:

0x0 (Not a time server) — сервер не объявляет себя через NetLogon, как источник времени. Он может отвечать на NTP запросы, но соседи не смогут распознать его, как источник времени;
0x1 (Always time server) — сервер будет всегда объявлять о себе вне зависимости от статуса;
0x2 (Automatic time server) — сервер будет объявлять о себе только, если он получает надежное время от другого соседа (NTP или NT5DS);
0x4 (Always reliable time server) — сервер будет всегда заявлять себя, как надежный источник времени;
0x8 (Automatic reliable time server) — контроллер домена автоматически объявляется надежным если он PDC-эмулятор корневого домена леса. Этот флаг позволяет главному PDC леса заявить о себе как об авторизованном источнике времени для всего леса даже при отсутствии связи с вышестоящими NTP-серверами. Ни один другой контроллер или рядовой сервер (имеющие по умолчанию флаг 0x2 ) не может заявить о себе, как надежном источнике времени, если он не может найти источник времени для себя.

Значение AnnounceFlags составляет сумму составляющих его флагов, например:

10=2+8 — NTP-сервер заявляет о себе как о надежном источнике времени при условии, что сам получает время из надежного источника либо является PDC корневого домена. Флаг 10 задается по умолчанию как для членов домена, так и для отдельно стоящих серверов.

5=1+4 — NTP-сервер всегда заявляет о себе как о надежном источнике времени. Например, чтобы заявить рядовой сервер (не домен-контроллер) как надежный источник времени, нужен флаг 5.

Ну и настроим интервал между обновлениями. За него отвечает уже упоминавшийся выше ключ 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 выведет все параметры службы.

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

В интернете можно найти целое море мануалов по настройке сервера времени - 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/ Вот собственно и всё.

Сетевой протокол задания времени NTP (network time protocol; Network Time Protocol Version 3 Specification, Implementation and Analysis, David L. Mills, RFC-1305, March 1992) служит для осуществления синхронизации работы различных процессов в серверах и программах клиента. Он определяет архитектуру, алгоритмы, объекты и протоколы, используемые для указанных целей. NTP был впервые определен в документе RFC-958 , но с тех пор несколько раз переделан и усовершенствован (RFC-1119 ). Протокол использует для транспортных целей UDP . Целью протокола является обеспечение максимально возможной точности и надежности, несмотря на значительный разброс задержек при прохождении через большое число промежуточных маршрутизаторов.

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

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

Для наглядности предоставляю архитектуру NTP

  • Установим сервер времени:
CentOS: yum install ntp
Arch Linux: pacman -S ntp
Ubuntu, Debian: apt-get install ntp
  • Отредактируем файл конфигурации:
#vim /etc/ntp.conf
  • У меня листинг следующий:

logfile /var/log/ntp.log
driftfile /var/lib/ntp/drift


disable monitor

server 31.28.161.68 iburst
server 193.67.79.202 iburst
server 62.149.0.30 iburst
server 198.123.30.132 iburst


server 127.127.1.0
fudge 127.127.1.0 stratum 10


restrict default ignore

restrict 127.0.0.1

  • теперь немного подробнее по каждому пункту:

logfile /var/log/ntp.log

Путь куда ntp будет писать свой лог

driftfile /var/lib/ntp/drift

Путь к дрифт файлу

___________________________________________

disable monitor

Устранение уязвимости, позволяющей использовать сервер синхронизации времени для проведения DDoS-атак, путем многократного увеличения трафика

___________________________________________
server 31.28.161.68 iburst

Добавляем сервера с которых будет производится синхронизация

Опция "iburst" рекомендуется, с ее помощью посылается шквал пакетов, если не удается установить соединение с сервером с первого раза. Напротив, опцию "burst" не используйте никогда без особого разрешения, так как Вы можете попасть в "черный список".

___________________________________________

server 127.127.1.0
fudge 127.127.1.0 stratum 10

Эти два пункты предназначены для работы сервера времени в случае потери связи с эталонными серверами. Параметром fudge мы назначаем стратум для локального сервера.

___________________________________________

restrict default ignore

Запрещаем всем использовать наш сервер времени

___________________________________________

restrict 127.0.0.1

Разрешаем использовать наш сервер для локалхоста.

___________________________________________

restrict 10.0.0.0 mask 255.0.0.0 nomodify notrap

Разрешаем использовать наш сервер для сети 10.*.

nomodify notrap - не позволять хосту/подсети менять любые настройки NTPD нашего сервера.

___________________________________________

  • Сохраняемся, выходим, наш сервер настроен, осталось перезапустить демон.
CentOS: service ntpd restart

Arch Linux: systemctl restart ntpd
Ubuntu, Debian: service ntp restart

OpenSUSE: service ntp restart

  • Ждем минут 5-10, в зависимости от вашей железки и смотрим
#ntpq -pn


remote refid st t when poll reach delay offset jitter

==============================================================================

10.18.1.13 10.44.0.15 3 u 2 128 377 7.306 13.106 11.948

*10.18.0.53 198.123.30.132 2 u 62 128 377 7.156 10.279 4.308

10.18.0.52 79.53.154.33 3 u 61 128 377 7.469 1.791 4.898

127.127.1.0 .LOCL. 10 l 56 64 377 0.000 0.000 0.001

  • А означает наша таблица следующее:

remote - имена удаленных ntp серверов;

refid - сервер, с которым производит синхронизацию удаленный сервер ntp (то есть ntp-сервер для remote);

st - стратум (вес) удаленного сервера. Чем меньше значение - тем точнее время на этом сервере;

t - тип пира (u = unicast, m = multicast);

when - указывает на то, как давно была произведена синхронизация с сервером;

poll - частота в секундах, с которой NTP демон синхронизируется с пиром;

reach - состояние доступности сервера. Это значение стабилизируется на уровне 377 если последних 8 попыток синхронизации с удаленным сервером были успешны;

delay - задержка ответа от сервера;

offset - разница в миллисекундах между системным временем и временем удаленного сервера; значение с минусом - отставание, с плюсом - наши часики спешат;

jitter - смещение времени на удаленном сервере.

Просьба также обратить внимание на спецсимволы в поле перед remote:

"*" - указывает на сервер, с которым последний раз была произведена синхронизация;

"+" - сервер возможно использовать в качестве сервера точного времени

"-" - не рекомендуется для использования.
  • Посмотреть статус нашего сервера можно с помощью:
root@oto:(~)ntpstat
synchronised to NTP server (10.44.0.16) at stratum 3
time correct to within 1170 ms
polling server every 64 s


  • Иногда при синхронизации Windows клиента на стороне сервера можем наблюдать вот такое сообщение:
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
18:09:16.326827 IP (tos 0x0, ttl 125, id 26677, offset 0, flags , proto UDP (17), length 76)
10.5.104.11.ntp > oto.ua.mti.ntp: NTPv3, length 48
symmetric active, Leap indicator: clock unsynchronized (192), Stratum 0 (unspecified), poll 10s, precision -6
Root Delay: 0.000000, Root dispersion: 1.015625, Reference-ID: (unspec)
Reference Timestamp: 0.000000000
Originator Timestamp: 0.000000000
Receive Timestamp: 0.000000000
Transmit Timestamp: 3961667129.750000000 (2025/07/16 18:05:29)
Originator - Receive Timestamp: 0.000000000

Originator - Transmit Timestamp: 3961667129.750000000 (2025/07/16 18:05:29)

Это нам говорит о том что виндовс не верит нашему времени, слишком большое розхождение во времени клиента и сервера.

Максимальная положительная и отрицательная коррекция времени (разница между внутренними часами и источником синхронизации) в секундах, при превышении которой синхронизация не происходит. Рекомендую значение 0xFFFFFFFF, при котором коррекция сможет производиться всегда.

Добрый день уважаемые читатели и гости блога сайт, как много люди говорят о времени, что оно быстро или медленно бежит, и все понимают, что оно бесценно и важно. Так и в инфраструктуре Active Directory, она является одним из важнейших факторов, правильного функционирования домена. В домене все друг другу доверяют, и один раз авторизовавшись и получив все тикеты от Kerberos , пользователь ходит куда угодно, ограничиваясь лишь своими доступными правами. Так вот если у вас не будет точного времени на ваших рабочих станциях к контроллеру домена, то можете считать, что у вас начинаются серьезные проблемы, о которых мы поговорим ниже и рассмотрим как их устранить с помощью настройки NTP сервера в Windows .

Синхронизация времени в Active Directory

Среди компьютеров, участвующих в Active Directory работает следующая схема синхронизация времени.

  • Контроллер корневого домена в лесу AD, которому принадлежит FSMО-роль эмулятора PDC (назовем его корневым PDC), является источником времени для всех остальных контроллеров этого домена.
  • Контроллеры дочерних доменов синхронизируют время с вышестоящих по топологии AD контроллеров домена.
  • Рядовые члены домена (сервера и рабочие станции) синхронизируют свое время с ближайшим к ним доступным контроллером домена, соблюдая топологию AD.

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

Синхронизация клиентов корневого PDC может осуществятся как с его внутренних часов, так и с внешнего источника. В первом случае сервер времени корневого PDC объявляет себя как «надежный» (reliable).

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

Вводим netdom query fsmo. В моем примере, роль PDC и NTP сервера, принадлежит контроллеру dc7

Конфигурация NTP-сервера на корневом PDC

Конфигурирование сервера времени в Windows (NTP-сервера) может осуществляться как с помощью утилиты командной строки w32tm , так и через реестр. Где возможно, я приведу оба варианта. Но в начале посмотрите полностью ваши настройки на компьютере, делается это командой:

w32tm /query /configuration

EventLogFlags: 2 (Локально)
AnnounceFlags: 10 (Локально)
TimeJumpAuditOffset: 28800 (Локально)
MinPollInterval: 6 (Локально)
MaxPollInterval: 10 (Локально)
MaxNegPhaseCorrection: 172800 (Локально)
MaxPosPhaseCorrection: 172800 (Локально)
MaxAllowedPhaseOffset: 300 (Локально)

FrequencyCorrectRate: 4 (Локально)
PollAdjustFactor: 5 (Локально)
LargePhaseOffset: 50000000 (Локально)
SpikeWatchPeriod: 900 (Локально)
LocalClockDispersion: 10 (Локально)
HoldPeriod: 5 (Локально)
PhaseCorrectRate: 7 (Локально)
UpdateInterval: 100 (Локально)

NtpClient (Локально)

Enabled: 1 (Локально)
InputProvider: 1 (Локально)
CrossSiteSyncFlags: 2 (Локально)

ResolvePeerBackoffMinutes: 15 (Локально)
ResolvePeerBackoffMaxTimes: 7 (Локально)
CompatibilityFlags: 2147483648 (Локально)
EventLogFlags: 1 (Локально)
LargeSampleSkew: 3 (Локально)
SpecialPollInterval: 3600 (Локально)
Type: NT5DS (Локально)

NtpServer (Локально)
DllName: C:\Windows\system32\w32time.dll (Локально)
Enabled: 1 (Локально)
InputProvider: 0 (Локально)
AllowNonstandardModeCombinations: 1 (Локально)

VMICTimeProvider (Локально)
DllName: C:\Windows\System32\vmictimeprovider.dll (Локально)
Enabled: 1 (Локально)
InputProvider: 1 (Локально)

Включение синхронизации внутренних часов с внешним источником


Включение NTP-сервера

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


Задание списка внешних источников для синхронизации


Флаг 0×8 на конце означает, что синхронизация должна происходить в режиме клиента NTP, через предложенные этим сервером интервалы времени. Для того, чтобы задать свой интервал синхронизации, необходимо использовать флаг 0×1.

Задание интервала синхронизации с внешним источником

Время в секундах между опросами источника синхронизации, по умолчанию 900с = 15мин. Работает только для источников, помеченных флагом 0×1.


  • "SpecialPollInterval"=dword:00000384

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

Максимальная положительная и отрицательная коррекция времени (разница между внутренними часами и источником синхронизации) в секундах, при превышении которой синхронизация не происходит. Рекомендую значение 0xFFFFFFFF, при котором коррекция сможет производиться всегда.


"MaxPosPhaseCorrection"=dword:FFFFFFFF
"MaxNegPhaseCorrection"=dword:FFFFFFFF

Все необходимое одной строкой

w32tm.exe /config /manualpeerlist:"time.nist.gov,0x8 ntp1.imvp.ru,0x8 ntp2.imvp.ru,0x8 time.windows.com,0x8 pool.ntp.org,0x8" /syncfromflags:manual /reliable:yes /update

Полезные команды

  • Применение внесенных в конфигурацию службы времени изменений
    w32tm /config /update
  • Принудительная синхронизация от источника
    w32tm /resync /rediscover
  • Отображение состояния синхронизации контроллеров домена в домене
    w32tm /monitor
  • Отображение текущих источников синхронизации и их статуса
    w32tm /query /peers

Настройка NTP сервера и клиента групповой политикой

Раз уж у нас с вами домен Active Directory, то глупо не использовать групповые политики, для массовой настройки серверов и рабочих станций, я покажу как настроить ваш NTP сервер в windows и клиента. Открываем оснастку "Редактор групповых политик". Перед тем как настроить наш NTP сервер в Windows, нам необходимо создать WMI фильтр, который будет применять политику, только к серверу мастера PDC.

Вводим имя запроса, пространство имен, будет иметь значение "root\CIMv2" и запрос "Select * from Win32_ComputerSystem where DomainRole = 5". Сохраняем его.

Затем вы создаете политику на контейнере Domain Controllers.

В самом низу политики применяете ваш созданный WMI фильтр.

Переходим в ветку: Конфигурация компьютера > Политики > Административные шаблоны > Система > Служба времени Windows > Поставщики времени.

Тут открываем политику "Настроить NTP-клиент Windows". Задаем параметры

  • NtpServer: 0.ru.pool.ntp.org.0x1, 1.ru.pool.ntp.org.0x1, 2.ru.pool.ntp.org.0x1, 3.ru.pool.ntp.org.0x1
  • Type: NTP
  • CrossSiteSyncFlags: 2. Двойка означает, если этот параметр равен 2 (Все), можно использовать любого участника синхронизации. Это значение игнорируется, если не задано значение NT5DS. Значение по умолчанию: 2 (десятичное) (0x02 (шестнадцатеричное))
  • ResolvePeerBackoffMinutes: 15. Это значение, выраженное в минутах, определяет интервал ожидания службы W32time перед попыткой разрешения DNS-имени в случае неудачи. Значение по умолчанию: 15 минут
  • Resolve Peer BAckoffMaxTimes: 7. Это значение определяет число попыток разрешения DNS-имени, предпринимаемых службой W32time перед перезапуском процесса обнаружения. При каждом неудачном разрешении DNS-имени интервал ожидания перед следующей попыткой удваивается. Значение по умолчанию: семь попыток.
  • SpecilalPoolInterval: 3600. Это значение параметра NTP-клиента, выраженное в секундах, определяет частоту опроса настроенного вручную источника времени, который использует особый интервал опроса. Если для параметра NTPServer установлен флаг SpecialInterval, клиент использует значение, заданное как SpecialPollInterval, вместо значений MinPollInterval и MaxPollInterval, чтобы определить частоту опроса источника времени. Значение по умолчанию: 3600 секунд (1 час).
  • EventLogFlags: 0

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

  • NtpServer: Адрес вашего контроллера домена с ролью PDC.
  • Type: NT5DS
  • CrossSiteSyncFlags: 2
  • ResolvePeerBackoffMinutes: 15
  • Resolve Peer BAckoffMaxTimes: 7
  • SpecilalPoolInterval: 3600
  • EventLogFlags: 0

В операционных системах Windows за синхронизацию времени отвечает служба времени Windows, она же w32time. Эта служба обеспечивает работу серверной, и клиентской частей. Иными словами один и тот же компьютер может выступать в роли сервера и клиента одновременно.

Служба времени Windows не имеет графического интерфейса. Настройка производится через CMD утилитой w32tm, ручной правкой реестра, или через групповые политики.

Утилита w32tm меняет параметры в разделе

HKLM\SYSTEM\CurrentControlSet\Services\W32Time

Групповые политики создают раздел в

HKLM\SOFTWARE\Policies\Microsoft\W32Time

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

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

и для доменного компьютера

Ключ NtpServer определяет список серверов времени, с которыми будет происходить синхронизация. По умолчанию указан адрес time.windows.com,0x9. При указании более одного сервера времени, адреса нужно разделять пробелами.

Параметр 0x9, является суммой 0x1 и 0x8.

0x1 – SpecialInterval, использование специального интервала опроса.
0x2 – режим UseAsFallbackOnly.
0x4 – SymmetricActive, симметричный активный режим.
0x8 – Client, отправка запроса в клиентском режиме.

Специальный интервал опроса указан в ключе

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpClient\SpecialPollInterval

и составляет 3600 секунд. То есть синхронизация происходит каждый час.

Ключ Type определяет тип синхронизации, и имеет следующие значения:

NoSync- служба времени не синхронизируется с другими источниками.
NTP- служба времени выполняет синхронизацию с серверами, указанными в записи реестра NtpServer.
NT5DS- служба времени выполняет синхронизацию на основе иерархии домена.
AllSync — служба времени использует все доступные механизмы синхронизации.

В случае с компьютером из рабочей группы, используется тип NTP, то есть синхронизация времени происходит с сервером time.windows.com, указанном в ключе NtpServer.

Доменный компьютер использует тип NT5DS. В данном случае синхронизация времени происходит с контроллером домена, на котором авторизовался компьютер. Контроллеры синхронизируют свое время с контроллером, являющимся владельцем роли PDC Emulator. Владелец роли PDC Emulator, также использует тип NT5DS и синхронизирует свое время с локальным часами, получившими время от CMOS схемы, расположенной на материнской плате. Минус в том, что время полученное от CMOS схемы постоянно «съезжает» относительно реального. Чтобы такого не происходило, на корневом контроллере с ролью PDC Emulator, меняют тип на NTP и в NtpServer указывают список внешних серверов времени.

На корневом контроллере домена, с ролью PDC Emulator, откроем CMD и выполним команду

C:\>w32tm /config /manualpeerlist:"0.ru.pool.ntp.org,0x9 1.ru.pool.ntp.org,0x9 2.ru.pool.ntp.org,0x9 3.ru.pool.ntp.org,0x9" /syncfromflags:MANUAL /update

/manualpeerlist — задает список адресов источников времени. Этот список будет добавлен в значение уже известного ключа NtpServer.

/syncfromflags — определяет источник синхронизации. Этот параметр меняет значение ключа Type. Возможные варианты:

MANUAL — синхронизация с узлами из заданного вручную списка. Аналогичен значению NTP.
DOMHIER — синхронизация с контроллером домена Active Directory в доменной иерархии. Аналогичен значению NT5DS.
NO — без синхронизации. Аналогичен значению NoSync.
ALL — синхронизация как с узлами, заданными вручную, так и с узлами домена. Аналогичен значению AllSync.

/update — уведомляет службу времени, что конфигурация изменилась, чтобы изменения вступили в силу.

Может ли компьютер выступать в роли сервера времени, определяется следующим ключом

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer\Enabled

У контроллера данный ключ имеет значение 1, у компьютера 0. Иными словами любой контроллер домена выступает в качестве сервера времени.

За то, как служба времени будет корректировать время на клиенте, отвечает ключ

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config\MaxAllowedPhaseOffset

У компьютера, находящегося в рабочей группе, значение ключа MaxAllowedPhaseOffset равно 1-ой секунде. У доменного компьютера 300 секунд. Если разница во времени между клиентом и сервером времени будет больше, чем значение ключа MaxAllowedPhaseOffset, то служба времени сразу поменяет время на клиенте, на время, установленное на сервере времени. Если разница во времени меньше, то корректировка часов будет происходить постепенно. Это сделано, чтобы предотвратить сбои служб, чувствительных к сдвигам времени. С другой стороны 300 секунд, это 5 минут, или максимально допустима разница во времени, для протокола Kerberos.

Чтобы изменить настройки службы времени через групповые политики, нужно создать фильтр WMI, для нацеливания политики на корневой контроллер домена, с ролью PDC Emulator. Для этого нужно открыть оснастку «Управление групповой политикой», нажать на раздел «Фильтры WMI» правой кнопкой мыши и выбрать «Создать». В поле имя нужно написать название фильтра, например, «PDC Emulator». Далее нужно нажать кнопку «Добавить» и вставить WMI запрос

Select * from Win32_ComputerSystem where DomainRole = 5

Создадим политику, нажмем правой кнопкой мыши на раздел «Domain Controllers» и выберем «Создать объект групповой политики…», назовем его «PDC Emulator Time Sources». Нажмем правой кнопкой мыши по созданному объекту, выберем «Изменить». Откроем раздел «Конфигурация компьютера->Политики->Административные шаблоны->Система->Служба времени Windows->Поставщики времени». Выберем параметр «Настроить NTP-клиент Windows». В поле NtpServer вставим адреса серверов времени

0.ru.pool.ntp.org,0x9 1.ru.pool.ntp.org,0x9 2.ru.pool.ntp.org,0x9 3.ru.pool.ntp.org,0x9

В поле Type нужно выбрать значение «NTP», затем нажать «Ок» и закрыть окно «Редактор управления групповыми политиками».

После этого нужно выбрать созданную политику «PDC Emulator Time Sources» и в поле «Фильтр WMI» выбрать созданный ранее фильтр «PDC Emulator»

Диагностика

Принудительно синхронизировать время можно командой

C:\>w32tm /resync

Посмотреть текущий источник времени можно командой

C:\>w32tm /query /source

Эта команда показывает текущий источник времени, время синхронизации и прочую информацию

C:\>w32tm /query /status

Эта команда показывает данные о всех источниках времени

C:\>w32tm /query /peers

Разницу во времени между компьютером и источником времени можно посмотреть командой

C:\>w32tm /monitor

Для просмотра текущей конфигурации используется команда

C:\>w32tm /query /configuration

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

C:\>net stop w32time && net start w32time

Если что-то пошло не так, можно перерегистрировать службу времени. При этом создастся заново вся ветка реестра, относящаяся к службе времени

C:\>net stop w32time c:\>w32tm /unregister c:\>w32tm /register c:\>net start w32time

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

C:\>NET TIME \\DC1.4SKILL.LOC /SET /Y

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