Как сделать компьютер сервером времени
Для синхронизации времени устройства NetPing используют протокол NTP. При помощи этого протокола все устройства в сети корректируют своё время по указанному серверу. Устройства NetPing, подключенные к Internet, могут использовать публичный NTP сервер, как рекомендовано в статье. Если доступа к сети Internet нет, то можно настроить локальный NTP сервер. Таким сервером может являться любой компьютер с ОС Windows с настроенной службой W32Time («Служба времени Windows»). Данная служба не имеет графического интерфейса и настраивается либо через командную строку либо путём правки ключей реестра.
Инструкция по настройке сервера NTP на ОС Windows 7/8/2008/2012
Рассмотрим настройку службы времени через редактирование реестра. Настройка происходит одинаково для версий Windows 7/8, Windows Server 2008, Windows Server 2012.
Для данной настройки необходимо обладать правами администратора ОС Windows
Открываем редактор реестра либо через диалоговое окно «Выполнить», вызванное комбинацией клавиш «Win» + «R», либо через форму поиска, где набираем «regedit».
В открывшемся редакторе в левом древовидном меню открываем «ветвь» «HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\W32Time\TimeProviders\NtpServer», где ищем ключ с названием «Enable». Нажимаем правой кнопкой мыши и выбираем «Изменить». Меняем значение ключа с 0 на 1.
Изменив данный параметр, мы указали, что данный компьютер выступает в роли сервера NTP. Компьютер одновременно остаётся клиентом и может синхронизировать своё время по другим серверам в Internet или локальной сети. Если вы хотите, чтобы в качестве источника данных выступали внутренние аппаратные часы, то измените значение параметра ключа AnnounceFlags на 5 в ветке « HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config ».
Для вступления изменений в силу нам необходимо перезапустить службу. Доступ к службам осуществляется через «Панель управления» из меню «Пуск» -> «Панель управления» -> «Администрирование» -> «Службы». Также она находится в форме поиска при вводе «services.msc». В появившемся списке служб находим интересующую нас «Служба времени Windows» и через меню, вызванное правой кнопкой мыши, выбираем пункт «Перезапустить».
Для использования компьютера в качестве сетевого сервера времени для всех устройств локальной сети необходимо разрешить в настройках межсетевого экрана входящий и исходящий трафик по протоколу UDP на порт 123 .
Начиная с 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, который задает тип синхронизации. Он может принимать следующие значения:
В конце каждого имени можно добавлять флаг (напр. ,0x1) который определяет режим для синхронизации с сервером времени. Допускаются следующие значения:
0x1 – SpecialInterval, использование специального интервала опроса ;
0x2 – режим UseAsFallbackOnly;
0x4 – SymmetricActive, симметричный активный режим;
0x8 – Client, отправка запроса в клиентском режиме.
При использовании флага SpecialInterval, необходимо установленное значение интервала в ключе SpecialPollInterval. При значении флага UseAsFallbackOnly службе времени сообщается, что данный сервер будет использоваться как резервный и перед синхронизацией с ним будут выполнятся обращения к другим серверам списка. Симметричный активный режим используется NTP-серверами по умолчанию, а клиентский режим можно задействовать в случае проблем с синхронизацией. Подробнее о режимах синхронизации можно посмотреть здесь, либо не морочиться и просто ставить везде ,0x1 (как советует Microsoft).
Еще один важный параметр AnnounceFlags находится в разделе реестра HKLM\System\CurrentControlSet\services\W32Time\Config. Он отвечает за то, как о себе заявляет NTP-сервер и может принимать следующие значения:
Значение AnnounceFlags составляет сумму составляющих его флагов, например:
Ну и настроим интервал между обновлениями. За него отвечает уже упоминавшийся выше ключ 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 сравнений с указанным источником и выведет результат в текстовом виде.
Я проделывал эту работу примерно три года назад, когда в сети информации по этой теме было гораздо меньше. Основным источником моих познаний была документация из пакета ntp-doc (/usr/share/doc/ntp-doc/html/refclock.html), также её можно найти в сети.
- Радиостанции точного времени
Ничего сложного, берём подходящую частоту из справочника, паяем приёмник и преобразователь в удобный для компьютера интерфейс. ^_^
Я забросил этот вариант, т.к. напротив моей старой работы стояло здание то ли ФАПСИ, то ли ещё какой-то службы, в общем эфир был довольно зашумлён (-: - Телефон GSM или CDMA
Как-то я им не доверяю, хотя не самый плохой вариант. - Приёмник GPS или ГЛОНАСС
Этот вариант мне показался самым реальным.
Подключаем
Приёмник ГЛОНАСС тогда было сложно достать, поэтому я пошел в магазин и купил GPS-приёмник с RS232-м интерфейсом и внешней антенной. Антенну прилепил на металлический подоконник за окном, а приёмник соответственно подключил к COM-порту одного из серверов.
Первым делом нам нужно убедиться что приёмник «видит» спутники. Мой, например, в этом случае начинает весело подмигивать светодиодом.
Более универсальный способ — посмотреть что он отдаёт в COM-порт:
Тут мы должны увидеть дамп протокола NMEA.
Настраиваем
Для работы ntpd нам нужно сделать символические ссылки:
В строке server 127.127.20.0 число 20 — это ответ на «главный вопрос жизни, вселенной и вообще» номер соответствующего драйвера источника точного времени.
Перезапускаем NTPD и смотрим статус. Должно быть что-то подобное:
ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
LOCAL(0) LOCAL(0) 10 l 52 64 377 0.000 0.000 0.002
*GPS_NMEA(0) .GPS. 0 l 15 64 377 0.000 -0.018 0.004
Надеюсь эта статья поможет увеличить количество хороших NTP-серверов в рунете (-;
[Важный UPD]
Мне тут человек постучался в IM, у него нет аккаунта на Хабре, просил меня прояснить ситуацию с переходниками COM-USB. Цитирую:
brn:
Так вот, так как в приёмниках часто один из служебных пинов COM разъёма заведён на 1PPS сигнал, который обозначает начало очередной секунды, в случае USB этот сигнал будет потерян
А, так сигнал NMEA без PPS даёт точность порядка 50-100 миллисекунд, а для сервера точного времени это неприемлимо
Это как раз проясняет почему у меня был такой разбег с коллегой из Новосибирска — мой приёмник PPS не поддерживал.
Чтобы использовать PPS, нужно в конфиг ntp заменить NMEA на PPS:
[UPD2]
Встречаем нового хабраколлегу brn!
Он уже успел написать топик про NMEA.
Работа многих служб ОС зависит от того, насколько точны системные часы. Для чего нужна эта точность? Затем, что неточное время на сервере повлечет за собой много неприятностей.
В качестве примера приведем следующий: если в локальной сети часы машин, которые совместно используют файлы, не будут синхронизированы, то нельзя будет установить время изменения файлов. Из-за этого возникнет конфликт версий или перезаписи данных. Без установки точного времени на сервере появятся и сложности с задачами Cron – непонятно, когда они запустятся. Невозможно будет проанализировать журналы системных событий, чтобы понять причины неисправностей и сбоев.
Для того чтобы эти неприятности не возникли, нужно наладить синхронизацию системных часов. Для этого используется протокол NTP (Network Time Protocol).
Как устроен протокол NTP
Протокол NTP основан на иерархической структуре сервера точного времени, где выделены разные уровни. К нулевому уровню, на котором NTP-серверы не работают, относятся так называемые эталонные часы.
С ними синхронизируются NTP серверы уровня 1, являющиеся источниками для серверов уровня 2. Серверы второго уровня синхронизируются с серверами первого уровня, но еще могут синхронизироваться между собой. Точно так же функционируют серверы третьего уровня и ниже. В целом, поддерживается порядка 256 уровней.
Иерархическая структура NTP является отказоустойчивой и избыточной. Так, резервные серверы берут синхронизацию на себя, когда речь идет об отказах соединения с вышестоящими серверами. Для расчета точного времени NTP берет данные ото всех источников, синхронизируясь с несколькими серверами.
Как установить и настроить NTP-сервер
Чтобы синхронизировать время, используют демон ntpd, который может быть как сервером, принимающим время из удаленных хостов, так и клиентом, раздающим время сторонним хостам. Демон ntpd зависит от указанных в файле конфигурации настроек.
Для установки сервера NTP используется стандартный менеджер пакетов $ sudo apt-get install ntp.
После установки все необходимые настройки NTP будут находиться в файле /etc/ntp.conf.
Первая строчка файла конфигурации – driftfile /var/lib/ntp/ntp.drift. В ней указан файл, в котором хранится информация о том, как часто смещается время. В этом же файле содержится и значение, которое было получено из предыдущих изменений времени. Если по каким-то причинам внешние NTP-серверы недоступны, знание берут из этого файла.
После этого нужно указать файл, сохраняющий логи синхронизации – logfile /var/log/ntp.log.
В файле конфигурации нужно указать перечень серверов NTP, с которыми нужно синхронизироваться. По умолчанию этот перечень выглядит вот так:
Эти строки означают группу серверов, которые сообщают серверу верное время. Через опцию iburst можно увеличить точность синхронизации, то есть указать то, что на сервер необходимо отправлять несколько пакетов вместо одного:
Еще можно донести информацию о нужном сервере через опцию prefer:
Ареал использования серверов NTP
Резервный сервер точного времени
NTP-сервер, по какой-либо причине отключенный от интернета, может передавать для синхронизации данные своих системных часов. Для этого в конфигурационный файл нужно добавить следующую строку:
Особые случаи использования NTP
Например, NTP могут использовать, чтобы усилить трафик в DDoS-атаках. А чтобы избежать столкновения с различными злоупотреблениями, следует ограничить доступ для внешних клиентов. Говоря об ограничениях, то по умолчанию в /etc/ntp.conf файле выставлены такие:
- restrict − 4 default kod notrap nomodify nopeer noquery
- restrict − 6 default kod notrap nomodify nopeer noquery
Такие опции, как nomodify, notrap, nopeer и noquery, не позволяют внешним клиентам менять конфигурации на сервере. Параметр kod (расшифровывается как kiss of death, «смертельный поцелуй») дает дополнительный уровень защиты: клиент, который часто отправляет запросы, получает сперва kod-пакет, являющийся предупреждением о том, что в обслуживании отказано, а потом отключается от сервера.
Для синхронизации машин из локальной сети с сервером NTP в файл конфигурации добавляется такая строчка:
А для локального хоста устанавливается неограниченный доступ к серверу NTP:
Как проверить синхронизацию
После сохранения всех изменений в файле конфигурации NTP-сервер нужно перезагрузить:
А затем выполнить команду:
На выходе получится таблица, в которой указаны следующие параметры:
- remote – адрес сервера точного времени;
- refid – вышестоящий сервер;
- st – уровень (stratum) сервера;
- t – тип пира (u- unicast, m- multicast);
- when – время последней синхронизации;
- poll – время в секундах, за которое демон NTP синхронизируется с пиром;
- reach – состояние доступности сервера;
- delay – время задержки ответа от сервера;
- offset – временная разница между сервером и сервером синхронизации;
- jitter – смещение времени на удаленном сервере.
Слева от адреса сервера могут быть указаны еще и такие символы:
- * – сервер выбран для синхронизации;
- + – сервер, пригодный для синхронизации;
- – – с сервером синхронизироваться не стоит;
- х – сервер недоступен.
Чтобы проверить, насколько сервер подходит для синхронизации, нужно использовать команду ntpdate -q.
Как установить локальные дату и время
Чтобы установить локальные дату и время на сервере, нужно использовать команду ntpdate, при этом отправив необходимый запрос к серверу NTP:
Читайте также: