- Делаем собственный NTP-сервер Stratum-1
- Выбор источника точного времени
- Подключаем
- Настраиваем
- Блог о системном администрировании. Статьи о Linux, Windows, СХД NetApp и виртуализации.
- Протокол NTP
- Назначение сервера NTP в локальной сети
- Режимы работы NTP сервера/клиента
- Клиент/сервер
- Симметричный активный/пассивный режим
- Режим Broadcast
- Режим Multicast
- Режим Manycast
- Время в Linux
- NTP Server Linux
- Введение
- Установка ntpd
- Управление демоном ntpd
- Настройка сервера ntpd
- Наблюдение за сервером ntpd и за синхронизацией
- Настройка netfilter (iptables) для NTP сервера
- Настройка клиентских машин
- Заключение
Делаем собственный NTP-сервер Stratum-1
Выбор источника точного времени
Я проделывал эту работу примерно три года назад, когда в сети информации по этой теме было гораздо меньше. Основным источником моих познаний была документация из пакета ntp-doc (/usr/share/doc/ntp-doc/html/refclock.html), также её можно найти в сети.
Само название Stratum-1 означает, что наш NTP-сервер непосредственно подключен к источнику точного времени.
Давайте посмотрим какие у нас есть варианты этих источников:
- Радиостанции точного времени
Ничего сложного, берём подходящую частоту из справочника, паяем приёмник и преобразователь в удобный для компьютера интерфейс. ^_^
Я забросил этот вариант, т.к. напротив моей старой работы стояло здание то ли ФАПСИ, то ли ещё какой-то службы, в общем эфир был довольно зашумлён (-: - Телефон GSM или CDMA
Как-то я им не доверяю, хотя не самый плохой вариант. - Приёмник GPS или ГЛОНАСС
Этот вариант мне показался самым реальным.
Подключаем
Приёмник ГЛОНАСС тогда было сложно достать, поэтому я пошел в магазин и купил GPS-приёмник с RS232-м интерфейсом и внешней антенной. Антенну прилепил на металлический подоконник за окном, а приёмник соответственно подключил к COM-порту одного из серверов.
Первым делом нам нужно убедиться что приёмник «видит» спутники. Мой, например, в этом случае начинает весело подмигивать светодиодом.
Более универсальный способ — посмотреть что он отдаёт в COM-порт:
Тут мы должны увидеть дамп протокола NMEA.
Настраиваем
# Local Clock — если теряем спутники, то снижаем stratum до 10
server 127.127.1.0
fudge 127.127.1.0 stratum 10
# NMEA GPS driver
server 127.127.20.0 prefer
driftfile /var/lib/ntp/ntp.drift
restrict default nomodify notrust # Отдаём время всем
restrict 127.0.0.1 # Разрешаем себе всё
disable auth
logfile /var/log/ntp/messages
В строке 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 driver
server 127.127.22.0 prefer
enable pps
[UPD2]
Встречаем нового хабраколлегу brn!
Он уже успел написать топик про NMEA.
Блог о системном администрировании. Статьи о Linux, Windows, СХД NetApp и виртуализации.
Доброго дня, гости и постоянные читатели блога. Постепенно перехожу от основ к более углубленному изучению Linux. Сегодня хочу рассмотреть работу протокола ntp, а так же настройку сервера времени на Linux (ntp server). Итак, начнем с теории.
Протокол NTP
Network Time Protocol (NTP) — сетевой протокол для синхронизации внутренних часов компьютера с использованием сетей с переменной латентностью (читай «шириной»/качеством канала).
NTP использует для своей работы протокол UDP и порт 123.
Текущая версия протокола — NTP 4. NTP использует иерархическую систему «часовых уровней» (их так же называют Stratum). Уровень 0 (или Stratum 0) — это, обычно, устройства представляющие собой атомные часы (молекулярные, квантовые), GPS часы или радиочасы. Данные устройства обычно не публикуются во всемирную сеть, а подключаются напрямую к серверам времени уровня 1 посредством протокола RS-232 (на иллюстрации обозначены желтыми стрелками). Уровень 1 синхронизирован с высокоточными часами уровня 0, обычно работают в качестве источников для серверов уровня 2. Уровень 2 синхронизируется с одной из машин уровня 1, а так же возможна синхронизация с серверами своего уровня. Уровень 3 работает аналогично второму. Обычно в сеть публикуются сервера уровней от второго и ниже. Протокол NTP поддерживает до 256 уровней. Так же хочется отметить, что сервера уровней 1 и2, а иногда и 3 не всегда открыты для всеобщего доступа. Иногда, чтобы синхронизироваться с ними, необходимо послать запрос по почте — администраторам домена.
Для чего делается ограничение на доступ к серверам? С переходом на каждый уровень немного возрастает погрешность относительно первичного сервера, но зато увеличивается общее число серверов и, следовательно, уменьшается их загрузка.
Назначение сервера NTP в локальной сети
Для чего нам может понадобиться NTP server? Например, существуют службы в операционных системах, которые могут зависеть от синхронизированного времени. Наиболее ярким примером таких служб является протокол аутентификации Kerberos. Для его работы необходимо, чтобы на компьютерах, доступ к которым осуществляется с использованием этого протокола, системное время различалось не более чем на 5 минут. Кроме того, точное время на всех компьютерах значительно облегчает анализ журналов безопасности при расследовании инцидентов в локальной сети.
Режимы работы NTP сервера/клиента
Клиент/сервер
Этот режим на сегодняшний день наиболее часто используется в сети Интернет. Схема работы – классическая. Клиент посылает запрос, на который в течение некоторого времени сервер присылает ответ. Настройка клиента производится с помощью директивы server в конфигурационном файле, где указывается DNS имя сервера времени.
Симметричный активный/пассивный режим
Этот режим используется в том случае, если производится синхронизация времени между большим количеством равноправных машин. Помимо того, что каждая машина синхронизируется с внешним источником, она также осуществляет синхронизацию со своими соседями (peer), выступая для них в качестве клиента и сервера времени. Поэтому даже если машина «потеряет» внешний источник, она все еще сможет получить точное время от своих соседей. Соседи могут работать в двух режимах – активном и пассивном. Работая в активном режиме, машина сама передает свое время всем машинам-соседям, перечисленным в секции peers конфигурационного файла ntp.conf. Если же в этой секции соседи не указаны, то считается, что машина работает в пассивном режиме. Для того чтобы злоумышленник не смог скомпрометировать другие машины, представившись в качестве активного источника, необходимо использовать аутентификацию.
Режим Broadcast
Этот режим рекомендуется использовать в тех случаях, когда малое количество серверов обслуживает большое количество клиентов. Работая в этом режиме, сервер периодически рассылает пакеты, используя широковещательный адрес подсети. Клиент, настроенный на синхронизацию таким способом, получает широковещательный пакет сервера и производит синхронизацию с сервером. Особенностью этого режима является то, что время доставляется в рамках одной подсети (ограничение broadcast-пакетов). Кроме того, для защиты от злоумышленников необходимо использовать аутентификацию.
Режим Multicast
Данный режим во многом похож на broadcast. Отличие заключается в том, что для доставки пакетов используются multicast-адреса сетей класса D адресного пространства IP-адресов. Для клиентов и серверов задается адрес multicast-группы, которую они используют для синхронизации времени. Это делает возможным синхронизацию групп машин, расположенных в различных подсетях, при условии, что соединяющие их маршрутизаторы поддерживают протокол IGMP и настроены на передачу группового трафика.
Режим Manycast
Этот режим является нововведением четвертой версии протокола NTP. Он подразумевает поиск клиентом среди своих сетевых соседей manycast-серверов, получение от каждого из них образцов времени (с использованием криптографии) и выбор на основании этих данных трех «лучших» manycast-серверов, с которыми клиент будет производить синхронизацию. В случае выхода из строя одного из серверов клиент автоматически обновляет свой список.
Для передачи образцов времени клиенты и серверы, работающие в manycast-режиме, используют адреса multicast-групп (сети класса D). Клиенты и серверы, использующие один и тот же адрес, формируют одну ассоциацию. Количество ассоциаций определяется количеством используемых multicast-адресов.
Время в Linux
Кратко расскажу, какое время существует в Linux и как его задать. В Linux, как и в другой ОС, существует 2 времени. Первые — аппаратные, иногда называемые Real Time Clock, сокращенно (RTC) (они же — часы BIOS) обычно они связаны с колеблющимся кварцевым кристаллом, имеющим точность хода до нескольких секунд в день. Точность зависит от различных колебаний, например, окружающей температуры. Вторые часы — внутренние программные часы, которые идут непрерывно, в том числе и при перерывах в работе системы. Они подвержены отклонениям, связанным с большой системной нагрузкой и задержкой прерываний. Однако система обычно считывает показания аппаратных часов при загрузке и потом использует системные часы.
Дата и время операционной системы устанавливается при загрузке на основании значения аппаратных часов, а так же настроек часового пояса. Настройки часового пояса берутся из файла /etc/localtime. Данный файл — есть ссылка (но чаще — копия) одного из файлов в структуре каталога /usr/share/zoneinfo/.
Аппаратные часы Linux могут хранить время в формате UTC (аналог GMT), либо текущее территориальное время. Общая рекомендация в том, какое время устанавливать (?) следующая: если на компьютере установлено несколько ОС и одна из них — Windows, то необходимо использовать текущее время (т.к. Windows берет время из BIOS/CMOS и считает его локальным). Если используются только операционные системы UNIX семейства, то желательно хранить время в BIOS в UTC формате.
После загрузки операционной системы, часы операционной системы и BIOS полностью независимы. Ядро системы раз в 11 секунд синхронизирует системные часы с аппаратными.
Через некоторое время между аппаратными и программными часами может быть разница в несколько секунд. Какие же часы содержат правильное время? Ни те, ни другие, пока мы не настроим синхронизацию времени.
Примечание:
Ядро Linux’а всегда хранит и вычисляет время, как число секунд прошедших с полночи 1-го января 1970 года, в независимости от того, установлены ваши часы на локальное или всемирное время. Преобразование в локальное время производится в процессе запроса.
Поскольку количество секунд с 1-го января 1970 года всемирного времени сохраняется как знаковое 32-битное целое (это справедливо для Linux/Intel систем), ваши часы перестанут работать где-то в 2038 году. Linux не имеет проблемы 2000-го года, но имеет проблему 2038 года. К счастью, к тому времени все linux’ы будут запущены на 64-х разрядных системах. 64-х битное целое будет содержать наши часы приблизительно до 292271-миллионного года.
NTP Server Linux
Введение
Существует масса реализаций для синхронизации времени для ОС Linux. Наиболее известными являются Xntpd (NTP версия 3), ntpd (NTP версия 4), Crony и ClockSpeed. В нашем примере мы будем использовать ntp-сервер ntpd.
Демон ntpd является одновременно и сервером времени и клиентом, в зависимости от настроек конфигурационного файла /etc/ntpd.conf (иногда /etc/ntp.conf), демон может и «принимать» время с уделенных серверов и «раздавать» другим хостам время.
Общая схема синхронизации времени в локальной сети следующая: необходимо иметь 1 или 2 сервера, имеющие доступ в глобальную сеть, которые будут получать время из интернет. Все компьютеры локальной сети синхронизировать с указанными серверами, получающими время из интернет.
Установка ntpd
Собственно, установка демона сводится к установке следующих пакетов: ntp (пакет включающий самого демона), ntpdate (утилита для ручной синхронизации времени — устарела), ntp-doc (документация по пакету), в некоторых дистрибутивах нужно будет установить так же ntp-utils (утилиты для диагностики), в некоторых они включены в пакет ntp. Как производить установку программ в Linux , я описывал в управление ПО Linux. После установки пакета, в большинстве дистрибутивов, демон будет уже сконфигурирован как как ntp-клиент (например в Debian было так). Соответственно, автоматически были созданы основные конфигурационные файлы: /etc/ntp.conf и /var/lib/ntp/ntp.drift и автоматом запущен демон.
Перед настройкой демона на синхронизацию с внешним миром я бы посоветовал установить текущую системную дату на значение, максимально приближенное к реальному времени. Установка даты в Linux производится командой: date MMDDhhmmCCYY.ss, где MM — месяц, DD — день месяца, hh — часы, mm — минуты, CCYY — 4 цифры года, ss — секунды. При этом, значения CCYY.ss указывать не обязательно.
Как видно, указанная команда установит текущие дату и время на 27 декабря 2010года, 20:06:30. Команда date без параметров, выводить текущее системное время. У данной команды есть куча параметров, с которыми можно ознакомиться в man date.
Так же, необходимо правильно настроить аппаратные часы и часовой пояс. Как говорилось выше, часовой пояс настраивается копированием необходимого файла зоны из каталога /usr/share/zoneinfo/ в файл /etc/localtime:
Аппаратные часы я настроил на UTC:
В первом примере указан конфигурационный файл, определяющий использование UTC для RH, второй — для Deb-дистрибутивов.
Кроме установки настроек на использование времени в формате UTC, необходимо задать аппаратное время. (в большинстве случаев в этом нет необходимости, потому что заданное системное время неизбежно синхронизируется с аппаратным, силами ядра). Но все же, если у вас есть желание это сделать. Команда hwclock читает и устанавливает аппаратные часы на основании переданных ему параметров. Доступные параметры описаны в странице руководства команды. Вот несколько примеров использования hwclock:
Другим вариантом изменения времени в аппаратных часах — это доступ в BIOS при загрузке системы. Поскольку время ОС независимо от аппаратных часов, любые изменения в BIOS будут учтены при следующей загрузке.
Теперь, когда у нас все подготовлено и установлено, приступим к настройке.
Управление демоном ntpd
Управление демоном ntpd ничем не отличается от управления любыми другими демонами. Запуск или перезапуск службы ntpd:
Демон имеет следующие параметры запуска:
-p — PID-файл,
-g — разрешить переход на большой скачек времени
-c — конфиг файл
-q — принудительная ручная синхронизация
Настройка сервера ntpd
Первым делом, посоветую изменить параметры запуска демона в следующем конфигурационном файле :
Данный параметр позволит синхронизировать часы, даже если образовалась очень большая разница во времени.
Итак, как я уже говорил, информация о конфигурации демона ntpd лежит в файле /etc/ntp.conf. Синтаксис файла стандартен, как и во многих других конфигах: пустые строки и строки, начинающиеся с символа «#» игнорируются. Вот простой пример:
Параметр server задает, какие серверы будут использоваться для синхронизации, по одному в каждой строке. Если сервер задан с аргументом prefer, как ntplocal.example.com, то этому серверу отдается предпочтение перед остальными. Ответ от предпочтительного сервера будет отброшен, если он значительно отличается от ответов других серверов, в противном случае он будет использоваться безотносительно к другим ответам. Аргумент prefer обычно используется для серверов NTP, о которых известно, что они очень точны, такими, на которых используется специальное оборудование точного времени.
Параметр driftfile задает файл, который используется для хранения смещения частоты системных часов. На сколько я понял, данный файл постоянно хранит какое-то значение, которое формируется на основании анализа прошедших корректировок времени и если внешние источники времени становятся недоступны, то корректировка времени происходит по значению из файла drift. Он не должен изменяться никакими другими процессами. И перед указанием данного файла в конфигурации — файл должен быть создан.
По умолчанию сервер NTP будет доступен всем хостам в Интернет. Параметр restrict в файле /etc/ntp.conf позволяет вам контролировать, какие машины могут обращаться к вашему серверу. Если вы хотите запретить всем машинам обращаться к вашему серверу NTP, добавьте следующую строку в файл /etc/ntp.conf:
restrict default ignore
Если вы хотите разрешить синхронизировать свои часы с вашим сервером только машинам в вашей сети, но запретить им настраивать сервер или быть равноправными участниками синхронизации времени, то вместо указанной добавьте строчку:
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
где 192.168.1.0 является IP адресом вашей сети, а 255.255.255.0 её сетевой маской. /etc/ntp.conf может содержать несколько директив restrict.
Для корректной и более точной работы демона, желательно выбрать сервера уровня — от stratum 2 (можно конечно stratum1, но придется убить время на поиски такого сервера) и из выбранных stratum 2 те, до которых минимальное «расстояние». Обычно такие сервера могут предоставляться вашим провайдером. Количество выбираемых серверов желательно — более 2-х 3-х, чем больше тем лучше, но в разумных пределах. Если Вам лень выбирать лучшие сервера, то можно взять список открытых серверов второго уровня отсюда: http://support.ntp.org/bin/view/Servers/StratumTwoTimeServers.
Выбираем список эталонных NTP серверов
Идем по указанному адресу (http://support.ntp.org/bin/view/Servers/StratumTwoTimeServers) и подбираем список начальных серверов. Из данного списка выбираем удовлетворяющий нашим требованиям серверы, с помощью анализа вывода команды ntpdate. При выполнении команды, применяется следующий синтаксис:
ntpdate параметры серверы_через_пробел
Для того чтобы наш запрос не вносил изменения в систему, необходимо использовать параметр -q, который указывает на использование запроса без внесения изменений. Так же, возможно использовать ключ -d, указывающий, что команда будет выполняться в отладочном режиме, с выводом дополнительных сведений, без внесения реальных изменений (при данном ключе выводится куча другого мусора :), который нам в данный момент не нужен ). Остальные параметры можно посмотреть в man 8 ntpdate . Из указанной ссылки я выбрал все сервера Open Access, расположенные в России (RU) + тот, который предоставил провайдер и запустил команду, получилось примерно следующее:
В примере наши сервера удачно выдали уровень stratum1, что не может не радовать (кроме сервера провайдера ), offset — это расхождение во времени с этим сервером в секундах, delay — задержка синхронизации в секундах. Обычно, бОльшая точность получается при использовании серверов, которые имеют низкую задержку передачи пакетов по сети. Для выявления этого, возможно воспользоваться утилитами ping и traceroute. Соответственно, выбрав сначала те, у которых время ответа меньше, а из них — те, до которых меньше хопов. Я же, чтобы не терять время, воспользуюсь всем указанными серверами и впишу их в конфигурационный файл. Итого, зная все вышеперечисленное, опишу свой получившийся файл /etc/ntp.conf:
Для более углубленного понимания и настройки сервера, опишу некоторые параметры конфигурации ntpd, о которых не упоминал::
- enable/disableauth/monitor/pll/pps/stats — включить/выключитьрежим работы:
- auth — с неупомянутыми соседями общаться только в режиме аутентификации;
- monitor — разрешить мониторинг запросов;
- pll — разрешить настраивать частоту местных часов по NTP;
- stats — разрешить сбор статистики;
- statisticsloopstats — при каждой модификации локальных часов записывает строчку в файл loopstats;
- statisticspeerstats — каждое общение с соседом записывается в журнал, хранящийся в файле peerstats;
- statisticsclockstats — каждое сообщение от драйвера локальных часов записывается в журнал, хранящийся в файле clockstats;
- statsdir— задает имя каталога, в котором будут находится файлы со статистикой сервера;
- filegen[file
] [type — определяет алгоритм генерации имен файлов, которые состоят из:] [flag ] [link|nolink] [enable|disable] - префикс — постоянная часть имени файла, задается либо при компиляции, либо специальными командами конфигурации;
- имя файла — добавляется к префиксу без косой черты, две точки запрещены, может быть изменена ключем file;
- суффикс — генерируется в зависимости от typename;
- restrictnumeric-address [mask
] [flag] — задает ограничение доступа: пакеты сортируются и маскам, берется исходный адрес и последовательно сравнивается, от последнего удачного сравнения берется флаг [flag]доступа:- нет флагов — дать доступ;
- ignore — игнорировать все пакеты;
- noquery — игнорировать пакеты NTP 6 и 7 (запрос и модификация состояния);
- nomodify — игнорировать пакеты NTP 6 и 7 (модификация состояния);
- limited — обслуживать только ограниченное количество клиентов из данной сети;
- nopeer — обслуживать хост, но не синхронизироваться с ним;
- clientlimitlimit — для флага limited определяет максимальное количество обслуживаемых клиентов (по дефолту 3);
Итого, мы получили ntpd-server, который синхронизируется с внешним миром, позволяет получать время для клиентов из локальной сети 192.168.0.1 с маской 255.255.255.0, а так же может синхронизироваться с локальным сервером (если раскомментировать несколько строк). Нам осталось настроить клиентов и узнать, как наблюдать за нашим сервером.
Наблюдение за сервером ntpd и за синхронизацией
Когда у вас все настроено. NTP будет держать время в синхронизированном состоянии. Этот процесс можно наблюдать при помощи команды NTP Query (ntpq):
Данная команда с ключом -p выводит на стандартный вывод список источников времени с их характеристиками (остальные параметры команды в man ntpq ). Значение каждой колонки следующее:
remote
Имя удаленного NTP-сервера. Если указать ключ -n, вы получите IP-адреса серверов вместо имён.
refid
Указывает, откуда каждый сервер получает время в данный момент. Это может быть имя хоста или что-то вроде .GPS., указывающее на источник глобальной системы позиционирования (Global Positioning System).
st
Stratum (уровень) это число от 1 до 16, указывающее на точность сервера. Единица означает максимальную точность, 16 — сервер недоступен. Ваш уровень будет равен уровню наименее точного удаленного сервера плюс 1.
poll
Интервал между опросами (в секундах). Значение будет изменяться между минимальной и максимальной частотой опросов. В начале интервал будет маленьким, чтобы синхронизация происходила быстро. После того как часы синхронизируются, интервал начинает увеличиваться, чтобы уменьшить трафик и нагрузку на популярные сервера времени.
reach
Восьмеричное представление массива из 8 бит, отражающего результаты последних восьми попыток соединения с сервером. Бит выставлен, если удаленный сервер ответил.
delay
Количество времени (в секундах) необходимого для получения ответа на запрос «который час? «.
offset
Наиболее важное поле. Разница между временем локального и удаленного серверов. В ходе синхронизации это значение должно понижаться (приближаться к нулю), указывая на то, что часы локальной машины идут все точнее.
jitter
Дисперсия (Jitter) — это мера статистических отклонений от значения смещения (поле offset) по нескольким успешным парам запрос-ответ. Меньшее значение дисперсии предпочтительнее, поскольку позволяет точнее синхронизировать время.
Значение знаков перед именами серверов
x — фальшивый источник по алгоритму пересечения;
. — исключён из списка кандидатов из-за большого расстояния;
— — удалено из списка кандидатов алгоритмом кластеризации;
+ — входит в конечный список кандидатов;
# — выбран для синхронизации, но есть 6 лучших кандидатов;
* — выбран для синхронизации;
o — выбран для синхронизации, но используется PPS;
пробел — слишком большой уровень, цикл или явная ошибка;
Служба ntpd «умная» и сама отсеивает источники времени слишком выбивающиеся за рамки разумного. Через некоторое время после запуска ntpd выберет наиболее достоверные источники данных и будет синхронизироваться с ними. Представленный нами список эталонных NTP серверов регулярно пересматривается службой.
Проверить возможность синхронизации локально на сервере возможно командой:
Из вывода команды видно, что наш сервер уже стал уровня stratum 2. Для достижения данного уровня, необходимо некоторое время. Возможно, в первые 10-15 минут уровень сервера будет выше.
О корректной работе сервера ntp можно так же судить по логам демона ntpd:
Настройка netfilter (iptables) для NTP сервера
Настроив работу сервера, неплохо было бы его защитить. Мы знаем, что сервер работает на 123/udp порту, при этом запросы так же отправляются с порта 123/udp. Ознакомившись со статьей, что такое netfilter и правила iptables и ознакомившись с практическими примерами iptables, можно создать правила фильтрации сетевого трафика:
Это типовой пример! Для задания правил iptables под Ваши задачи и конфигурацию сети, необходимо понимать принцип работы netfilter в Linux, почитав вышеуказанные статьи.
Настройка клиентских машин
Для синхронизации времени на UNIX-машинах локальной сети целесообразно использовать утилиту ntpdate, запуская ее при помощи демона cron несколько раз в сутки, например каждый час. Для этого, в кронтаб пользователя root необходимо добавить следующую строку:
Ключ -s направляет вывод команды демону syslog. Если на клиентских машинах есть пару лишних мегабайт оперативки, то можно запустить демон ntpd, как и на сервере со следующим конфигом:
Думаю, в данном конфиге все понятно: источник времени (server) — локальный ntpd-сервер, доступ всем запретить, разрешить только локальному ntpd-серверу.
Так же, на клиентах необходимо правильно указать в каком формате хранить время и выбрать правильный часовой пояс, в соответствии с теорией выше.
Для настройки NTP клиента Windows, необходимо выполнить в консоли следующие команды:
Заключение
Ну вроде все! Объем статьи получился громадным. Даже сам не ожидал. Подведу маленький итог изложенному. В данной статье нам, надеюсь, стало понятно что есть и как работает NTP-сервер. Научились настраивать сервер и клиентов на UNIX и Windows машинах. В нескольких словах, структура синхронизации времени в локальной сети следующая: Имеется 1,2 или более серверов точного времени в локальной сети, они синхронизируют свое время с внешними источниками в глобальной сети. Настройки сервера и клиентов основаны на файлах /etc/ntp.conf (основной конфигурационный файл демона ntpd), /etc/localtime (файл текущего часового пояса), а так же /etc/sysconfig/ntp (для RH) и /etc/default/ntp (для Deb) — файлы параметров запуска демона. Для локального ntp-сервера в конфигурационном файле указываются внешние сервера для получения времени и разрешается доступ для этих серверов параметром restrict, а так же для компьютеров локальной сети, для клиентов указывается источник времени — локальные сервера в локальной сети, а так же запрещается доступ для всех, кроме источника времени в локальной сети. Все. Всем спасибо за внимание! Буду рад комментариям!
Что могу посоветовать почитать дополнительно:
- тут ( архив статьи ) описано, как подключить GPS к серверу для организации своего сервера точного времени уровня Stratum1.
- тут описано, как настроить авторизацию на ntp-сервере.
Upd 2012.02.14: добавил настройку netfilter для NTP