W32Time¶
Операционные системы семейства Windows содержат службу времени W32Time. Эта служба предназначена для синхронизации времени в пределах организации. W32Time отвечает за работу как клиентской, так и серверной части службы времени, причем один и тот же компьютер может быть одновременно и клиентом и сервером NTP (NTP — Network Time Protocol).
По умолчанию служба времени в Windows сконфигурирована следующим образом:
-
При установке операционной системы Windows запускает клиента NTP, который синхронизируется с внешним источником времени;
-
При добавлении компьютера в домен тип синхронизации меняется. Все клиентские компьютеры и рядовые сервера в домене используют для синхронизации времени контроллер домена, проверяющий их подлинность;
-
При повышении рядового сервера до контроллера домена на нем запускается NTP-сервер, который в качестве источника времени использует контроллер с ролью PDC-эмулятор;
-
PDC-эмулятор, расположенный в корневом домене леса, является основным сервером времени для всей организации. При этом сам он также синхронизируется с внешним источником времени.
Настройка¶
Можно получить доступ к параметрам сервиса через реестр — HKEY_LOCAL_MACHINE System CurrentControlSet services W32Time
-
Включить сервис можно по пути — …\W32Time\TimeProviders\NtpServer через параметр «Enabled»
-
Затем следует перезапустить сервис для применения настроек
#cmd
net stop w32time
net start w32time
- Основная конфигурация сервера производится по пути — …\W32Time\Parameters.
-
Type — тип синхронизации
Возможные значения:
NoSync
— NTP-сервер не синхронизируется с каким либо внешним источником времени. Используются системные часы, встроенные в микросхему CMOS самого сервера (в свою очередь эти часы могут синхронизироваться от источника NMEA по RS-232 например);NTP
— NTP-сервер синхронизируется с внешними серверами времени, которые указаны в параметре реестра NtpServer;NT5DS
— NTP-сервер производит синхронизацию согласно доменной иерархии;AllSync
— NTP-сервер использует для синхронизации все доступные источники.
Значение по умолчанию для компьютера, входящего в домен — NT5DS, для отдельно стоящего компьютера — NTP.
-
NtpServer — указываются NTP-сервера, с которыми будет синхронизировать время данный сервер. Указывать новые сервера можно введя их DNS имена или IP адреса через пробел. В конце каждого имени можно добавлять флаг (напр. ,0×1) который определяет режим для синхронизации с сервером времени.
Допускаются следующие значения режима:
0×1
– SpecialInterval, использование временного интервала опроса;0×2
– режим UseAsFallbackOnly;0×4
– SymmetricActive, симметричный активный режим;0×8
– Client, отправка запроса в клиентском режиме.
-
AnnounceFlags — Он отвечает за то, как о себе заявляет NTP-сервер
Чтобы заявить рядовой сервер (не домен-контроллер) как надежный источник времени, нужен флаг 5.
-
SpecialPollInterval — время обновления
Путь — …\W32Time\TimeProviders\NtpClient
Он задается в секундах и по умолчанию его значение равно 604800, что составляет 1 неделю. Это очень много, поэтому стоит уменьшить значение SpecialPollInterval до разумного значения — 1 часа (3600).
Команды¶
w32tm /query /configuration
— вывод всех параметров сервераw32tm /config /update
— обновление конфигурации после настройкиw32tm /monitor
— отображение состояния синхронизации контроллеров домена в доменеw32tm /monitor /computers:200.100.100.100
— различия во времени сервера и удаленного компьютераw32tm /resync
— принудительная синхронизацияw32tm /stripchart
— показывает разницу во времени между текущим и удаленным компьютеромw32tm /stripchart /computer:200.100.100.100 /samples:5 /dataonly
— произведет 5 сравнений с указанным источником и выдаст результат в текстовом видеw32tm /config
— это основная команда, используемая для настройки службы NTP. С ее помощью можно задать список используемых серверов времени, тип синхронизации и многое другое.w32tm /query
— показывает текущие настройки службыw32tm /query /source
— покажет текущий источник времени-
w32tm /query /peers
— отображение текущих источников синхронизации и их статуса -
net stop w32time
&&net start w32time
— выключение и запуск службы -
netdom query fsmo
— проверка параметров, среди которых есть NTP сервер, к которому обращается текущая машина.
Источники¶
- http://skylarkrussia.tv/support/ntp_server_activation/
- http://pyatilistnik.org/kak-nastroit-ntp-server-i-sinhronizatsiyu-vremeni-v-domene-active-directory/
From Wikipedia, the free encyclopedia
Developer(s) | Microsoft |
---|---|
Initial release | October 25, 2001; 23 years ago |
Operating system | Microsoft Windows |
Type | Command |
License | Proprietary commercial software |
In computing, w32tm
is a command-line tool of Microsoft Windows operating systems used to diagnose problems occurring with time setting or to troubleshoot any problems that might occur during or after the configuration of the Windows Time service.[1] It was introduced as a standard feature of Windows XP.[2][3]
The command can be used to convert an NTTE or NTP formatted date into a readable format.[3]
The current time zone settings can be displayed using the /tz
parameter:
- DATE (command)
- TIME (command)
- ^ How do I use the Windows Time Service?
- ^ Technet, MS (2010). «W32tm on MS Technet». Retrieved 2010-03-23.
- ^ a b «W32TM.exe». Retrieved 2023-11-30.
- John Paul Mueller (2007). Windows Administration at the Command Line for Windows Vista, Windows 2003, Windows XP, and Windows 2000. John Wiley & Sons. ISBN 978-0470165799.
- Windows Time Service Tools and Settings | Microsoft Docs
Для управлением службой времени в Windows используется команда win32tm.exe.
Посмотреть текущие настройки службы времени (выполнять из консоли с правами администратора):
w32tm /query /configuration
Посмотреть текущее состояние службы времени можно командой:
w32tm /query /status
Чтобы понять, что это нам там Windows выводит на экран, нужно разобраться как Windows работает со временем. Служба времени зависит от того является ли компьютер частью централизовано администрируемого домена или нет.
Возможные две ситуации:
- компьютер (сервер) входит в состав рабочей группы, т.е. это домашний компьютер или компьютер в небольшом офисе;
- компьютер (сервер) входит в состав домена Active Directory.
Компьютер входит в состав рабочей группы.
В этом случае централизованного управления компьютером нет, он сам заботиться о синхронизации времени. На нем вывод команды
w32tm /query /configuration будет следующим.
Обратите внимание на параметры:
SpecialPollInterval — интервал синхронизации в секундах, 604800 секунд — это неделя, т.е. синхронизация будет проводиться раз в неделю.
Type — определяет источник синхронизации времени. Возможные значени параметра Type:
NoSync. Служба времени вообще не синхронизируется ни с чем.
NTP. Служба времени синхронизируется с серверами указынными в параметре NtpServer. Типично для домашних компьютеров. Как на скриншоте вверху.
NT5DS. Служба времени синхронизируется используя доменную иерархию (только для компьютеров — членов домена Active Directory). Как на самом первом скриншоте.
AllSync. Служба времени использует все возможные механизмы для синхронизации.
NtpServer — указывает сервреры, с которым может синхроинизировать время компьютер.
Как можно видеть, по умолчанию интервал синхронизации 1 неделя, сервер time.windows.com, значение Type NTP.
Компьютер входит в состав домена Active Directory.
Домен AD — иерархичная централизованная структура. Время на всех компьютерах в домене синхронизируется с контроллерами домена, а те в свою очередь синхронизируются с одним контроллером, выполняющим FSMO роль PDC-Emulator. Синхронизация времени происходит раз в 1 час.
Как узнать какой контроллер — PDC-Emulator? Простейший способ — это выполнить команду из командной строки:
netdom /query fsmo
и вот на нем то и надо настраивать синхнонизацию времени в внешним источников времени, которым является какой либо NTP сервер.
Делается это из командной строки с адмнистративными правами следующим образом (один из способов):
- Останавливаем службу времени W32Time: C:\>net stop w32time
- Конфигурируем внешние источники синхронизации:
C:\> w32tm /config /syncfromflags:manual /manualpeerlist:”0.ru.pool.ntp.org, 1.ru.pool.ntp.org, 2.ru.pool.ntp.org” - Делаем PDC-Emulator надежным источником для клиентов: C:\>w32tm /config /reliable:yes
- Запускаем службу времени w32time : C:\>net start w32time
- Служба должна начать синхронизироваться. Можно проверить как применились настройки уже знакомой командой: C:\>w32tm /query /configuration
- Проверяем Event Viewer на наличие ошибок, относящихся к службе времени.
На остальных компьютерах домена вывод команды C:\>w32tm /query /configuration будет следующим:
Если вы по какой-то причине поменяли конфигурацию службы времени на доменном компьютере, то чтобы вернуть настройки по-умолчанию выполните команду:
w32tm /config /syncfromflags:domhier /update
Иногда при переносе роли PDC-Emulator на другой контроллер домена, старый продолжает считает считать себя сервером времени для всего домена, что может стать причиной ошибок в Системном логе, например таких:
«The time provider NtpClient was unable to find a domain controller to use as a time source. NtpClient will try again in 15 minutes.»
и других веселых глюков. «Успокоить» его можно такой-же командой с небольшим дополнением:
w32tm /config /syncfromflags:domhier /reliable:no /update
Несколько комментариев:
- В примере настройки контроллера домена мы останавливали службу времени, меняли настройки, потом запускали опять. Можно этого не делать, а использовать ключ /update, который принуждает службу времени считать конфигурацию заново.
- Для работы протокола NTP необходимо открыть порт UDP 123 на вход и на выход, на файерволе сервера и внешнем файерволе.
- Существует еще одна старая команда конфигурации времени net time, оставленная для совместимости, с меньшим количеством опций, которую все еще можно использовать.
Компьютерные часы
Итак, нас интересует учет и использование времени на компьютерах или точнее на отдельных узлах-будь то персональный компьютер, сервер, виртуальный компьютер или иное устройство которому нужно точное время. Для этого придумали протокол NTP, который мы не будем рассматривать здесь. В основном он использует алгоритм Марзулло, который мы тоже не будем рассматривать здесь.
Так уж повелось, что любой компьютер имеет встроенные часы. В обычном компьютере имеется 2 реализации часов:
- часы реального времени (Real Time Clock — RTC, CMOS clock, hardware clock);
- системные часы (system clock, software clock);
Часы реального времени представляют собой отдельную микросхему, питающуюся от литиевой батарейки (от нее питается также CMOS, хранящий настройки BIOS), и работают независимо от того, включен компьютер или нет. Физически RTC состоят из тактового генератора (кварц) и запоминающего устройства (микросхемы, участка памяти) куда периодически записываются значения времени (точнее количество «тиков»).
Большинство RTC использует кварцевый резонатор, но некоторые используют частоту питающей сети!
Узлу(компьютеру) удобнее отсчитывать время в промежутках (секундах, которые формируются из тактов, генерируемых кварцем и измеряемых в герцах). Стабильность частоты типичного кварцевого генератора невелика (например, зависит от температуры, напряжения, механических деформаций и т.д.), к тому же базовая частота меняется от кристалла к кристаллу (что может приводить к уходу системных часов на 40 секунд в день). В большинстве случаев используется кварцевый резонатор на частоте 32768 Гц. Та же частота используется в кварцевых часах. Такая частота обеспечивает 215 циклов в секунду, что очень удобно для простых двоичных счётчиков.
За работу системных часов отвечает операционная система. И здесь мы сталкиваемся с первой проблемой- во время работы системы она выполняет множество задач. В результате чего, при сильной загрузке процессора операционная система просто не успевает точно вести часы. Часы начинают отставать. Именно поэтому необходима синхронизация времени и согласование RTC и SYS.
Согласование хода аппаратных и системных часов увеличивает точность хода, но недостаточно для некоторых задач. Системные часы серверов должны быть согласованы (синхронизированы) между собой с большой точностью (при небольшой загрузке — доли секунды), иначе невозможно отслеживать последовательность событий, разбирать журналы сообщений и т.д. Чем больше плотность событий (загрузка сервера), тем более точной должна быть синхронизация. При синхронизации обычно используется система времени UTC.
ОС при загрузке считывает текущее время из RTC, после чего ведет свой счетчик времени (системные часы) самостоятельно основываясь на подсчете количества специальных регулярных прерываний (timer interrupt), обычно 100 Гц (1024 Гц). Системное время обслуживается ядром ОС. Системное время выражается в числе секунд (или микросекунд или наносекунд) после 00:00:00 1 Января 1970 года (Linux) или после 1 Января 1601 (Windows). Эти даты называются началом Эры (Epoch). Эра это базовая дата, от которой ведется отсчет времени узлом. RTC может использовать свою базовую дату, установленную производителем BIOS или производителем самой платы.
Чтение и запись RTC, согласование RTC и системного времени осуществляются как BIOS так и ОС.
Учитывая частоту обновления счетчика «тиков» времени RTC имеют точность в районе 1 секунды, а системные часы могут иметь точность до 1 мс.
Таким образом, показания этих часов могут и будут отличаться друг от друга (и от реального времени).
А реальное время, как говорилось первой части, мы сами себе выдумали. J
В Windows, например, разница между RTC и SYS может составлять не больше 1 минуты, в случае превышения этого лимита ОС корректирует значение RTC по значению SYS. Где находится настройка этого интервала неизвестно.
Для сравнения про Linux:
Каждый раз перед выключением демон
hwclock
сравнивает аппаратное и системное время (последнее принимается за наиболее точное) и вычисляет погрешность аппаратных кварцевых часов в день. Вычисленное значение погрешности записывается в файл/var/lib/hwclock/adjtime
. Еслиhwclock
не использовался больше суток, то он, на всякий случай, вычисляет новое значение погрешности.Специальный скрипт корректирует аппаратные часы в соответствии с вычисленной погрешностью каждый час. Если вы видите, что ваши аппаратные часы идут все более и более неверно, то, вероятнее всего, в файле
/var/lib/hwclock/adjtime
записано неверное значение погрешности.Это происходит если на аппаратных часах время изначально было установлено неверно или ваш временной стандарт (см. выше) не такой как у другой операционной системы, используемой на компьютере. Чтобы исправить это, удалите
/var/lib/hwclock/adjtime
и настройте время на всех ваших часах.Обратите внимание: Если вы всегда выключаете свой компьютер чаще чем раз в сутки, погрешность, записанная в
/var/lib/hwclock/adjtime
не будет перепроверятьсяhwclock
. Кварцевый генератор, конечно, надежная штука, но со временем параметры его могут меняться (например батарейка CMOS разряжается). Возможно, стоит иногда выключать компьютер реже чем раз в сутки. Тогда можно быть уверенным, что значение погрешности, по которому корректируются часы, будет самым новым, а часы самыми точными.Системное время рассчитывается ядром, начиная с полуночи первого января 1st 1970 по стандарту UTC. Начальное значение системных часов рассчитываается исходя из показаний часов аппаратных (после корректировки погрешности и пересчета на местный часовой пояс UTC) при включении и идут независимо от аппаратных. Ядро Linux отслеживает системные часы, подсчитывая прерывания таймера. Как и аппаратные, они не являются идеально точными. Иногда системные часы могут потерять точность, если ядро сбрасывает прерывания. Но показания системынх часов можно сделать точными с помощью NTP. NTP будет регулировать частоту прерываний и количество тактов в секунду для уменьшения дрейфа системных часов. Эти значения могут быть скорректированы с помощью приложения
adjtimex
из AUR.Обратите внимание: Если вы не используете NTP, то ваши аппаратные часы будут более точными, чем системные. Соответственно описанный механизм корректировки будет только вносить дополнительную погрешность и его лучше отключить. Для этого можно закомментировать строку
hwclock --systohc
в файле {/etc/rc.d/hwclock
. Теперь при выключении компьютера система не будет изменять значение ваших аппаратных часов.
Производители разработали технологию счетчиков HPET(таймер событий высокой точности), но они не стали популярны по ряду причин.
А для обычных задач вполне подошла бы утилита Clockmon. К сожалению, она была разработана в 2002 году и не работает на x64 системах. Покажу, что она умеет на картинках.
Как видно утилита показывает разницу между RTC и SYS.
Но она также умеет синхронизировать эти часы с точностью до миллисекунды. Причем с заданным интервалом может делать это постоянно.
Жаль, что разработчика программы теперь не найти.
Итак, как уже стало ясно, RTC и SYS работают в явно взаимодействии с друг другом. Общий алгоритм совместной работы часов таков:
-
Компьютер выключен, RTC продолжает отсчитывать время(точность +/ - 1 секунда).
-
После включения компьютера во время инициализации ядра ОС время из RTC считывается в системные часы.
-
После запуска службы w32time, она начинает поддерживать точность часов до 1мс с помощью синхронизации времени.
-
При выключении компьютера, ОС переписывает значение часов RTC значением из системных часов, которые более точные. Таким образом, Windows пытается обеспечить максимальную точность часов при следующем включении…
Служба Windows Time
Служба времени[W32Time] обеспечивает точность системных часов во время работы Windows. Однако у разных узлов разные требования к точности часов. И первое, что нужно понимать про службу времени Windows то, что она не предназначена для поддержки высокой точности системных часов. Под словами высокая точность предполагается расхождение времени между партнерами около миллисекунды. Служба времени Windows не способна обеспечить точность синхронизации (а не хода часов, час идут довольно точно, если правильно синхронизированы) даже в пределах 1-2 секунд!! Шокированы? Давайте разберемся, почему так.
Во- первых, служба w32time появилась в Windows 2000 для поддержки протокола аутентификации Kerberos v5 и только. Напомню, по умолчанию необходимо обеспечить отклонение времени между контроллерами и членами домена не больше 5 минут. Т.е. системные часы членов домена должны быть не идеально точными, а синхронизированными.
Кстати, в Windows 4.0 и ранее не было поддержки NTP, вместо него использовался протокол SNTP. Для этого использовался предок службы времени- TimeServ.
Как написано в статье базы знаний 939322 :
Мы не гарантируем точность службы W32Time между узлами сети. Служба W32Time не является полнофункциональным решением NTP, соответствующим потребностям зависимых от времени приложений. Служба W32Time главным образом предназначена для следующих задач: - Обеспечить работу протокола проверки подлинности Kerberos версии 5. - Обеспечить примерную синхронизацию времени для клиентских компьютеров. Служба W32Time не может надежно поддерживать синхронизацию времени в диапазоне 1-2 секунд. Такие допуски находятся за пределами спецификации разработки службы W32Time.
В общем, в тех.задании не требовалось, разработчики и не сделали. А нам рекомендуют пользоваться сторонними решениями, например списочек поставщиков на сайте Национального института по стандартизации и технологиям
Сама служба представляет собой библиотеку w32time.dll которая реализует все необходимые функции, причем как клиентские, так и серверные. Два в одном, так сказать. По умолчанию серверные функции службы отключены, и узел не выступает как источник времени. Однако если хост- контроллер домена, то служба времени на нем автоматически включена. Часть процесса DCPromo это активация серверной части службы w32time.
В общем, в области службы времени и протокола NTP царит полная демократия, в отличие от доменых политик AD(как мы дальше увидим). Все могут со всеми. Каждый узел выступает и сервером и клиентом(за исключением самого- пре самого точного, да и тот небось синхронизируется с атомами или нейтрино).
Утилиты
Прежде чем мы углубимся в тонкости службы W32Time, давайте познакомимся с утилитами, которые позволяют нам работать с настройками этой службы.
Это Regedit, групповые политики, команда Net time и утилита w32tm.
- Regedit позволяет изменять настройки службы в реестре, т.е. там где они и хранятся, но только для локального компьютера. Конечно можно экспортировать REG-файл или подключиться к удаленному реестру, но сейчас не об этом. Настройки службы хранятся по адресу:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time
Для того, чтобы настройки возымели результат, необходимо перезапустить службу, или заставить ее перечитать настройки.
- NET TIME – старая добрая утилита NET существовала еще до Windows Однако дальнейшее развитие службы времени потребовало отдельной утилиты для управления и диагностики, поэтому часть функций в Windows Vista у NET TIME отняли (имеется в виду ключи /QUERYSNTP /SETSNTP) и официально рекомендуется пользоваться утилитой w32tm.exe. Однако у команды NET TIME есть одно отличие от утилиты w32tm- она использует для общения протокол RPC, т.е. теоретически может общаться с компьютером, на котором не запущена служба времени и, например, заставить эту службу запуститься и ответить. Утилита w32tm использует протокол NTP, общаясь на 123 UDP порту, который может быть заблокирован брандмауэром.
- W32TM – утилита диагностики службы времени, так написано в документации. Мощная утилита для управления и диагностики службы времени.
Рассмотрим команды.
Параметр | Действие |
NET TIME | Запросить время партнера. Если выполнить команду в домене, будет запрошено время у случайно выбранного контроллера домена. |
NET TIME /domain: | Запросить время партнера из определённого домена. |
NET TIME \\computer | Запросить время конкретного компьютера. |
NET TIME \\computer /set | Запросить и синхронизировать время с конкретным компьютером. |
Параметр | Действие | Аналог |
w32tm /debug /enable /file:C:\windows\temp\w32time.log /size:10000000 /entries:0-300 | Включает протоколирование службы времени, задает парметры- файл лога, размер лога, фильтр событий которые будут записаны в лог. | В Windows XP, 2003 протоколирование включается в разделе HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config»FileLogName»=»C:\\windows\\temp\\w32time.log» «FileLogEntries»=»0-300» «FileLogSize»=dword:00989680 |
w32tm /debug /disable | Выключает протоколирование службы времени | Очистка вышеприведенных параметров реестра, а именно FileLogName. |
w32tm /config /update | Указывает службе перечитать ее параметры в реестре | — |
w32tm /config /syncfromflags:domhier /update | Задает доменный тип синхронизации NT5DS и перезагружает параметры службы | HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config“Type”=”NT5DS” |
w32tm /query /configuration | Выводит текущие настройки службы | Просмотреть разделы HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\ConfigHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders |
w32tm /monitor | Показывает состояние синхронизации между контроллерами домена |
[Эта статья — часть цикла статей о службе времени Windows]
Служба времени Windows (Windows Time Service; имя службы W32Time) обеспечивает синхронизацию системных часов. В доменах Active Directory точность времени особенно важна потому, что клиенты работающие под управлением систем Windows 2000 и выше, и контроллеры домена при аутентификации используют протокол Kerberos V5, для нормальной работы которого необходимо, чтобы показания часов на компьютерах отличались не более чем на 5 минут.
В составе стека протоколов TCP/IP имеется протокол NTP (Network Time Protocol, RFC 1119), который служит для синхронизации системных часов компьютеров, связанных сетью TCP/IP. Клиент протокола NTP синхронизирует показания своих часов сервера NTP.
Примечание:
Работа службы времени определяется параметрами реестра, расположенными в разделе HKLM\SYSTEM\CurentControlSet\Services\W32Time.
По умолчанию служба времени Windows синхронизируется от внешнего сервера времени (поскольку параметр TimeProviders\NtpClient\Enable равен 1), при этом параметр Parameters\Type имеет значение NTP, с которым происходит синхронизация. Параметр TimeProviders\NtpServer\Enabled изначально равен 0, и компьютер не может выполнять функции сервера времени.
В случае подключения компьютера к домену параметр Parameters\Type изменяет свое значение на NT5DS, и синхронизация времени осуществляется только от контроллеров домена. (Для систем Windows Server 2008 также можно использовать значение AllSync — тогда компьютер может получать точное время как от контроллеров домена, так и от внешних серверов времени). то же самое происходит и при повышении роли рядового сервера до контроллера домена (при этом параметр TimeProviders\NtpServer\Enabled становится равным 1, поскольку каждый контроллер домена может выполнять функции сервера времени).
Примечание:
После каждого изменения параметров в реестре службы времени Windows ее следует перезапустить с помощью оснастки Службы (Service) или в окне консоли (используя команду net stop w32time && net start w32time). Если для настройки параметров используется утилита w32tm.exe, то новые значения начинают действовать только после выполнения команды:
w32tm /config /update
Клиенты, работающие под управлением систем Windows 2000/XP/Windows Server2003 и выше, автоматически синхронизируют время с контроллерами домена Active Directory в процессе загрузки системы. Контроллеры домена сверяют время с контроллером, выполняющим функции эмулятора PDC (PDC Emulator), или с любым контроллером родительского домена. Эмулятор PDC синхронизирует время с эмулятором PDC родительского домена (или корневого домена леса) или с любым сервером этого домена. Эмулятор PDC корневого домена леса должен получать время от внешнего NTP-сервера, либо возможна ситуация, когда синхронизация часов контроллера корневого домена леса не выполняется. В этом случае показания системных часов эмулятора PDC этого домена считаются эталонными.
Настройка синхронизации с источником времени
В общем случае имя или IP-адрес внешнего сервера времени можно задать с помощью команды:
net time /SETSNTP:
а команда
net time /QUERYSNTP
показывает, какой внешний сервер (серверы) времени используются в данный момент.
Примечание:
В качестве внешних можно использовать различные NTP-серверы времени, имеющиеся в Интернете, их примерный список имеется в статье КВ262680 базы знаний Microsoft.
Эту задачу можно выполнить с помощью двух команд:
w32tm /config /syncfromflags:MANUAL /manualpeerlist:
w32tm /config /update
По умолчанию все компьютеры, работающие под управлением Windows, в качетсве сервера времени используют веб-узел time.windows.com
Для того чтобы часы компьютера синхронизировались только в соответствии с иерархической структурой доменов (чтобы параметр Parametrs\Type изменил назначение на NT5DS), нужно выполнить команду:
w32tm /config /syncfromflags:DOMHIER /update
Команда:
w32tm /config /syncfromflags:ALL /update
позволяет получение точного времени от контроллеров домена и внешних серверов времени (при этом параметр Parametrs\Type изменит значение на AllSync).
Запуск NTP сервера
Служба времени в Windows Server (начиная с 2000 и выше) не имеет графического интерфейса и настраивается либо из командной строки, либо путем прямой правки системного реестра.
Итак, первым делом нам надо запустить сервер 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 – регистрирует службу времени на компьютере. При этом создается заново вся ветка параметров в реестре.
Смена часового пояса в Windows
Для смены часового пояса в операционных системах семейства Windows используется специальная утилита командной строки tzutil.exe (Windows Time Zone Utility), устанавливается в виде отдельного обновления KB 2556308. Исполняемый файл утилиты хранится в каталоге %WINDIR%\System32.
Запускаем командную строку (cmd.exe). Чтобы узнать текущий часовой пояс и его идентификатор (TimeZoneID), выполните команду:
tzutil /g
Выведем список всех часовых поясов с их названием и идентификаторами так:
tzutil /l
Для быстрого вывода всех доступных часовых поясов, например, со сдвигом UTC +5, используем следующую команду:
tzutil /l | find /I «utc+05»
Изменим текущий часовой пояс на (UTC+05:00) Ашхабад, Ташкент (West Asia Standart Time). Для этого нужно указать идентификатор часового пояса.
tzutil /s «West Asia Standard Time»
Проверим, что пояс сменился другим способом:
reg query HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation
Чтобы отключить переход на летнее время для конкретного пояса, указываем идентификатор часового пояса с суффиксом _dstoff, например
tzutil /s “West Asia Standard Time_dstoff”
После выполнения данной команды Мы изменим часовой пояс рабочей станции или сервера и отключим сезонный перевод часов.
Выведем информацию о часовом поясе и настройках сезонного перевод часов:
w32tm /tz
Управление часовым поясом из консоли PowerShell
Получаем настройки текущего часового пояса в консоли PowerShell, выполняем следующую команду
[TimeZoneInfo]::Local
Или
Get-TimeZone
Чтобы посмотреть все возможные часовые пояса, доступные в Windows можно использовать команду Powershell:
[System.TimeZoneInfo]::GetSystemTimeZones()
Или
Get-TimeZone -ListAvailable
Для смены часового пояса из PowerShell, выполните команду:
Set-TimeZone -Name «West Asia Standard Time»