Ntp сервер своими руками

Содержание
  1. Windows cервер для синхронизации времени в локальной сети (NTP)
  2. Возникла необходимость синхронизации времени на компьютерах в локальной сети на стандартном 123 UDP порту? Или как я настраивал сервер NTP в локальной сети на Windows хосте.
  3. Ситуация следующая: в одноранговой локальной сети есть одна Windows машина которая ходит в нтернет и синхронизирует время, например с time.nist.gov. Рабочие станции этой сети не ходят в Интернет, или им запрещено синхронизироваться, или вы не хотите дополнительный трафик по UDP 123 порту наружу, или есть проблемы синхронизации времени с популярных интернет ntp cерверов. C помощью этой статьи вы настроите синхронизацию времени в среде Windows и настроите NTP сервер на обычной Windows машине.
  4. Сервер синхронизации времени ntp может работать на Windows 2000, Windows XP Prof, Windows 7, Windows Server 2003/2008 .
  5. Начнем с ОС Windows XP Prof (Windows XP Home — то же самое).
  6. Для WINDOWS 2000
  7. Как сделать сервер времени (NTP) на Arduino
  8. 1 Схема NTP сервера на Arduino
  9. 2 Скетч NTP сервера для Arduino
  10. 3 Программа для тестирования NTP сервера на Arduino
  11. Скачать вложения:
  12. Поделиться
  13. Похожие материалы (по тегу)
  14. Последнее от aave
  15. Другие материалы в этой категории:
  16. 15 комментарии

Windows cервер для синхронизации времени в локальной сети (NTP)

31 Августа 2011

Возникла необходимость синхронизации времени на компьютерах в локальной сети на стандартном 123 UDP порту?
Или как я настраивал сервер NTP в локальной сети на Windows хосте.

Ситуация следующая: в одноранговой локальной сети есть одна Windows машина которая ходит в нтернет и синхронизирует время, например с time.nist.gov.
Рабочие станции этой сети не ходят в Интернет, или им запрещено синхронизироваться, или вы не хотите дополнительный трафик по UDP 123 порту наружу, или есть проблемы синхронизации времени с популярных интернет ntp cерверов. C помощью этой статьи вы настроите синхронизацию времени в среде Windows и настроите NTP сервер на обычной Windows машине.

Сервер синхронизации времени ntp может работать на Windows 2000, Windows XP Prof, Windows 7, Windows Server 2003/2008 .

Начнем с ОС Windows XP Prof (Windows XP Home — то же самое).

Открываем реестр — Пуск -> выполнить -> regedit
идем в ветку:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControl\Set\Services\W32Time\Config

присваеваем параметру AnnounceFlags значение 5. Тем самым мы обьявим наш будущий NTP сервер, достоверным и компьютеры при синхронизации с ним не будут ругаться.
Далее Пуск -> выполнить -> mmc и добавляем оснастку «Редактор обьекта групповой полтики». Обьектом группвой политики выступит Локальный компьютер.

Идем по разделам Конфигурация компьютера -> Администрантивные шаблоны -> Система -> Служба времени Windows -> Поставщики времени. Там находим «Включить Windows NTP-сервер» и в свойствах выбираем позицию «включить». В заключении проходим в Службы, ищем «Служба времени Windows» и перезапускаем этот сервис. Если он не включен, то включаем его и ставим тип запуска «Авто».

Кроме этого на раздающем сервере необходимо изменить интервал через который он сам будет ходить в инет за временем.
Открываем реестр — Пуск -> выполнить -> regedit
идем в ветку:

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

По умолчанию интервал между обновлениями времени в Windows – 1 неделя (604800 сек). При низкой точности системных часов компьютера это слишком большой интервал. При такой настройке за 1 неделю часы Вашего компьютера могут получить погрешность величиной порядка минуты или даже нескольких минут. Рекомендую уменьшить интервал обновления до нескольких часов. Это изменение не увеличит ни трафика, ни нагрузки на NTP-сервер, при этом позволит поддерживать более высокую точность хода часов Вашего компьютера.

Читайте также:  Как сделать одежду для кота своими руками

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

w32tm /config /update

И при необходимости выполнить немедленную синхронизацию

w32tm /resync

На этом настройка сервера закончена.

На клиентских компьютерах следуем в «Панель управления», выбираем «дата и время» и в закладке «Время интернета» меняем строку сервер на IP (или имя) вашего локального сервера.
Вот и все.

Можно раскидать батник на рабочие станции :
w32tm /config /manualpeerlist:IP_адрес_сервера,0x1 /syncfromflags:MANUAL
net stop w32time
net start w32time
w32tm /resync

И запускаем его на клиентских машинах с правами Администратора.

Для WINDOWS 2000

Теперь поясню, как установить синхронизацию основного компьютера времени, т. е. корневого PDC-эмулятора леса, с реальным временем. Для этого следует Пуск -> выполнить -> ввести команду:

net time /setsntp:

Параметр /setsntp команды Net Time показывает, что используется Simple Network Time Protocol (SNTP), стандартный протокол Internet. Internet Engineering Task Force (IETF) Request for Comments (RFC-2030), датированный октябрем 1996 г., определяет SNTP. Можно указать любой сервер времени SNTP в Internet для корневого PDC-эмулятора леса и заставить его синхронизировать свое время с временем этого сервера. Многие брандмауэры включают сервер времени, так что для конкретного контроллера — эмулятора PDC — нет нужды обращаться куда-либо из своей внутренней сети для синхронизации с SNTP-сервером. Но если брандмауэр требуется настраивать, то нужно иметь в виду, что SNTP использует 123-й порт UDP.

Остановит сервер времени Windows Time Service:

net stop w32time

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

w32tm -once

чтобы установить время от источника времени однократно (по умолчанию W32tm обновляет время периодически). Система выдает страницу запутанной информации; в случае успешного выполнения команды в одной из строк появится Recv`ed from server 48 Bytes. Далее необходимо набрать:

net start w32time

чтобы снова запустить службу времени.

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

Если неизвестно, с каким SNTP-сервером синхронизируется система, в командной строке следует ввести:

net time /querysntp

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

Источник

Как сделать сервер времени (NTP) на Arduino

Для проекта нам понадобятся:

  • Arduino UNO или иная совместимая плата;
  • Ethernet-модуль, например, на микросхеме Wiznet W5100;
  • приёмник ГНСС сигнала (GPS, ГЛОНАСС) c UART;
  • модуль с часами реального времени DS3231 или DS1307;
  • макетная плата (breadboard);
  • соединительные провода;
  • персональный компьютер со средой разработки Arduino IDE.

1 Схема NTP сервера на Arduino

GPS/GLONASS приёмник с UART

Модуль с часами реального времени DS1307

И, конечно же, нам понадобится модуль с сетевым интерфейсом или т.н. Ethernet-шилд. Этот модуль позволит подключить Arduino к локальной сети или к компьютеру по Ethernet.

Читайте также:  Деревья интерьерные свои руками

Ethernet-шилд с микросхемой Wiznet W5100

В качестве альтернативы можно использовать Wi-Fi модуль, разумеется. Лишь бы ваши устройства, время на которых необходимо синхронизировать с сервером времени, находились в одной локальной сети с сервером времени на Arduino.

Теперь соединим все наши части воедино. Для этого сначала соберём «бутерброд» из Arduino и сетевого шилда, который выполнен в виде мезонинной платы. Далее подключим модуль часов DS1307 к выводам A4 и A5, а это шина I2C, как мы помним. Следовательно, пин A4 – это SDA, пин A5 – SCL. Приёмник сигналов ГНСС необходимо подключить к UART. Для этого можно подключить его к стандартным выводам RX и TX Arduino (пины 0 и 1, соответственно). Но тогда мы не сможем одновременно работать с приёмником и отлаживаться с выводом отладочных сообщений в последовательный порт. Поэтому рекомендую реализовать программный UART с помощью штатной библиотеки SoftwareSerial. Для этого подключим GPS приёмник к любым цифровым выводам (кроме 0 и 1), например, к 10 и 11.

Общий вид NTP сервера на Arduino

Не забудем питание и землю, разумеется. И модуль часов, и приёмник питаются одним напряжением, равным 5 вольтам.

2 Скетч NTP сервера для Arduino

Напишем скетч для Arduino, в котором реализуем функциональность сервера времени с поддержкой протокола NTP и с минимальным использованием сторонних библиотек.

Формат пакета NMEA с данными о времени

В конце статьи приложена программа для тестирования связи с NTP сервером.

Скетч сервера времени NTP и Arduino (разворачивается)

Проверка NMEA пакетов осуществляется в функции decodeTime().

Несколько слов о функции dec2hex(). В ней несколько извращённо число переводится из десятичного представления в 16-ное. Точнее, так. Модуль часов показывает время в виде, например, 16:52:08. Но здесь каждое из этих чисел не десятичное, а 16-ное. То есть, в действительности это время в RTC хранится так: 0x16:0x52:0x08. А с GPS-приёмника мы получаем время в десятичном формате. И чтобы записать те же 16 часов в модуль RTC, нужно преобразовать десятичное 16 в шестнадцатеричное 0x16, что является десятичным 22. А полное время 0x16:0x52:0x08 будет в десятичном представлении 22:82:08. Хм, 82 минуты, странно, да? 🙂 Но такое уж надо сделать преобразование, чтобы модуль часов реального времени запомнил правильное время.

3 Программа для тестирования NTP сервера на Arduino

В приложении к статье имеется архив с программой тестирования NTP .

Главное окно программы тестирования NTP/SNTP

Всё, что требуется для проверки NTP сервера – это ввести адрес сервера и нажать кнопку «Отправить запрос». Соответственно, нужно знать адрес вашего NTP сервера на Arduino. Можно выбрать сервер из списка предложенных в меню («Выбрать сервер»).

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

Скачать вложения:

    Описание NMEA протокола обмена (580 Скачиваний) Программа проверки NTP сервера (1049 Скачиваний)

Поделиться

Похожие материалы (по тегу)

Последнее от aave

Другие материалы в этой категории:

15 комментарии

Добрый день! Наткнулся на Вашу статью по NTP серверу, решил собрать, т.к все для этого было, но возникла сложность с библиотекой EthernetUdp, которая присутствует в скетче. Где ее можно скачать? В интернете найти не удалось.

Добрый день, Вадим!
EthernetUdp — это один из заголовочных файлов, который присутствует в библиотеке Ethernet. Эта библиотека присутствует в Arduino IDE «из коробки». Ничего специально скачивать не нужно. Просто добавьте импорт, как написано в скетче, и скетч должен скомпилироваться без проблем.

Читайте также:  Декоративные цветы делаем своими руками

Да с этим, разобрался, но почему то при подключении к ПК, пропинговать его не могу и когда к роутеру подключаю с этим скетчем я его не вижу в устройствах подключенных к роутеру, хотя подсеть такая же как у роутра 192.168.1.1, индикатор ЛАН загорается. А в сеть не проходит, то есть также пропинговать не могу, в чем может быть сложнось?

Вероятно, неправильно инициализировался Ethernet-шилд, а точнее — микросхема Wiznet. Эти шилды бывают нескольких разновидностей: на микросхемах Wiznet W5100, W5500 и т.д. И они могут несколько отличаться друг от друга. Я бы в таком случае попробовал другую библиотеку, например, Ethernet2 (https://github.com/adafruit/Ethernet2). Скетч при этом останется без изменений, кроме того, что в секции импорта будет указана другая библиотека.

Заработало, спасибо!
А можете подсказать есть ли такой же модуль реального времени только который считает миллисекунды? Если известны конкретные модели подскажите пожалуйста.

Мне не известен такой модуль. И вряд ли вы вообще найдёте такой модуль RTC. Потому что получать время с точностью до миллисекунд, в общем-то, не имеет большого смысла. Ведь время на чтение показаний часов может занять десятки миллисекунд от момента формирования запроса до получения ответа, т.е. вся эта точность потеряется при обмене с Arduino.
Можно подумать, например, вот в каком направлении с имеющимся модулем часов. Каждый из описанных модулей часов имеет выход меандра SQW. Можно настроить его на частоту 1 кГц, и подать этот сигнал на вход прерываний Arduino. Каждое прерываение будем инкрементировать счётчик, а на 1000-ный отсчёт сбрасывать. Тогда, считывая показания часов и прибавляя к ним значение счётчика, мы как раз и будем иметь миллисекундную точность.

Как-то не очень толково описано.
Пытаюсь собрать на LGT8F328P и W5500 с 10-пиновым разъёмом.
Если я понял правильно, надо переопределить пины SoftwareSerial на другие, например, 3 и 4, так как 10 и 11 уже используются для W5500.

Блин, сколько времени потратил.
Ладно, GPS не тот и протокол немного отличается. Переписал.
При получении валидного пакета printDate() выводила корректные дату-время, но к записи в RTC не переходило. Поправил.
Теперь вроде всё запустилось, но время выдаёт типа:
Get date: 37.05.2032 21:73:52.000
То есть ещё копать и копать. Либо с записью — чтением RTC проблемы, либо в программе что-то не то.

Ага. При записи в RTC делаем конвертацию, а при чтении что, не надо?

Всё, запустил. Спасибо за девайс. Хоть и пришлось посидеть над скетчем , но удовольствие от результата всё же огромное.
Теперь в гараже и комп будет точное время получать, и часы настенные.

kiv69, я рад, что вы разобрались! Удачи!)

Подскажите, пожалуйста, функция writeRtc(); содержится в void setup(), т.е. выполняется при старте программы
каким образом потом часы RTC из которых мы отправляем врямя корректируются от данных полученных с GPS. т.е. вызов синхронизации где?

Роман! Мы вызываем writeRtc() один раз при старте скетча. Синхронизация времени в данном примере не показана. Показанного функционала практически достаточно, чтобы добавить синхронизацию самостоятельно.

значит описанного события по тексту «то происходит его разбор, далее запоминание в модуле RTC» не происходит, зачем тогда это писать и вводить людей в заблуждение

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

Источник

Оцените статью