HPUNIX Сайт о ОС и не только!

Сервер точного времени своими руками (на базе беса ntpd)

13 апреля 2009 - unix
Сервер четкого времени своими руками (на базе беса ntpd)

Неплохого дня, гости и постоянные читатели  блога. Умеренно перехожу от основ к более углубленному исследованию Linux. На данный момент желаю рассмотреть работу протокола ntp, а так же настройку сервера времени на Linux (ntp server).

Итак, начнем с теории.

Протокол NTP

#image.jpgNetwork Time Protocol (NTP) — сетевой протокол для синхронизации внутренних часов компьютера с внедрением сетей с переменной латентностью (читай "шириной"/качеством канала).

Сервер четкого времени своими руками (на базе беса ntpd)

NTP употребляет для своей работы протокол UDP и порт 123.

Текущая версия протокола — NTP 4. NTP употребляет иерархическую систему «часовых уровней» (их так же называют Stratum). Уровень Нуль (или Stratum 0) - это, обычно, устройства представляющие из себя атомные часы (молекулярные, квантовые), GPS часы или радиочасы.

Данные устройства обычно не публикуются во всемирную сеть, а подключаются напрямую к серверам времени уровня Один средством протокола RS-232 (на иллюстрации обозначены желтыми стрелками). Уровень 1 синхронизирован с высокоточными часами уровня 0, обычно работают в качестве источников для серверов уровня 2. Уровень 2 синхронизируется с одной из машин уровня 1, а так же возможна синхронизация с серверами собственного уровня.

Уровень 3 работает аналогично второму. Обычно в сеть публикуются сервера уровней от второго и ниже. Протокол NTP поддерживает до Двести 50 6 уровней.

Так же хочется отметить, что сервера уровней Один и2, а временами и Три не всегда открыты для всеобщего доступа. Временами, чтобы синхронизироваться с ними, необходимо выслать запрос по почте - администраторам домена.

Для чего делается ограничение на доступ к серверам? С переходом на каждый уровень малость вырастает погрешность относительно первичного сервера, но зато растет общее число серверов и, как надо, миниатюризируется их загрузка.

Назначение сервера NTP в локальной сети

Для чего нам может понадобиться NTP server? Например, есть службы в операционных системах, которые могут зависеть от синхронизированного времени. Более видным примером таких служб является протокол аутентификации Kerberos.

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

Режимы работы NTP сервера/клиента

Клиент/сервер

Этот режим на сей день более часто употребляется в сети Интернет. Схема работы – обычная. Клиент посылает запрос, на который в течение некоторого времени сервер присылает ответ.

Настройка клиента делается с помощью директивы server в конфигурационном файле, где указывается DNS имя сервера времени.

Симметричный активный/пассивный режим

Этот режим употребляется в данном случае, если делается синхронизация времени меж множеством равноправных машин. Не считая того, что неважно какая машина синхронизируется с внешним источником, она также производит синхронизацию со своими соседями (peer), выступая для их в качестве клиента и сервера времени.

Поэтому даже если машина «потеряет» внешний источник, она все еще сможет получить точное время от собственных соседей. Соседи могут работать в 2-ух режимах – активном и пассивном.

Работая в активном режиме, машина сама передает свое время всем машинам-соседям, перечисленным в секции peers конфигурационного файла ntp.conf. Если же в этой секции соседи не указаны, то считается, что машина работает в пассивном режиме. Для того чтобы злодей не смог скомпрометировать другие машины, представившись в качестве активного источника, необходимо использовать аутентификацию.

Режим Broadcast

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

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

Режим Multicast

Данный режим во многом похож на broadcast. Отличие заключается в том, что для доставки пакетов употребляются multicast-адреса сетей класса D адресного места Ip-адресов. Для клиентов и серверов задается адрес multicast-группы, которую они употребляют для синхронизации времени.

Это делает возможным синхронизацию групп машин, расположенных в различных подсетях, при условии, что соединяющие их маршрутизаторы поддерживают протокол IGMP и настроены на передачу группового трафика.

Режим Manycast

Сервер четкого времени своими руками (на базе беса ntpd)

Этот режим является нововведением четвертой версии протокола NTP. Он подразумевает поиск клиентом среди собственных сетевых соседей manycast-серверов, получение от каждого из их образцов времени (с внедрением криптографии) и выбор на основании этих данных 3-х «лучших» manycast-серверов, с которыми клиент будет создавать синхронизацию. В случае выхода из строя 1-го из серверов клиент автоматом обновляет свой список.

Для передачи образцов времени клиенты и серверы, работающие в manycast-режиме, употребляют адреса multicast-групп (сети класса D). Клиенты и серверы, использующие один и тот же адрес, сформировывают одну ассоциацию. Количество ассоциаций определяется количеством используемых multicast-адресов. //'); //]]>

Время в Linux

Кратко расскажу, какое время существует в Linux и как его задать. В Linux, как и в другой ОС, существует Два времени.

1-ые - аппаратные, временами называемые Real Time Clock, сокращенно (RTC) (они же - часы BIOS) обычно они связаны с колеблющимся кварцевым кристаллом, имеющим точность хода до нескольких секунд в день. Точность зависит от различных колебаний, например, окружающей температуры.

2-ые часы — внутренние программные часы, которые идут непрерывно, в том числе и при перерывах в работе системы. Они подвержены отклонениям, связанным с большой системной нагрузкой и задержкой прерываний. Но система обычно считывает показания аппаратных часов при загрузке и позднее употребляет системные часы.

Дата и время операционной системы устанавливается при загрузке на основании значения аппаратных часов, а так же опций часового пояса. Функции часового пояса берутся из файла /etc/localtime. Данный файл - есть ссылка (но чаще - копия) 1-го из файлов в структуре каталога /usr/share/zoneinfo/.

Аппаратные часы Linux могут хранить время в формате UTC (аналог GMT), либо текущее территориальное время. Общая рекомендация в том, какое время устанавливать (?) следующая: если на компьютере установлено несколько ОС и одна из их - Windows, то необходимо использовать текущее время (т.к.

Windows берет время из BIOS/CMOS и считает его локальным). Если употребляются только  операционные системы UNIX семейства, то лучше хранить время в BIOS в UTC формате.

После загрузки операционной системы, часы операционной системы и BIOS полностью независимы. Ядро системы раз в Одиннадцать секунд синхронизирует системные часы с аппаратными.

Через некоторое время меж аппаратными и программными часами может быть разница в несколько секунд. Какие же часы содержат правильное время? Ни те, ни другие, пока мы не настроим синхронизацию времени.

Примечание:

Ядро Linux'а всегда хранит и вычисляет время, как число секунд прошедших с полночи 1-го января 1970 года, в независимости от того, установлены ваши часы на локальное или глобальное время. Преобразование в локальное время делается в процессе запроса.

Потому что количество секунд с 1-го января Одна тыща девятьсот 70 года глобального времени сохраняется как знаковое 32-битное целое (это справедливо для Linux/Intel систем), ваши часы окончат работать где-то в Две тыщи 30 восемь году. Linux не имеет трудности 2000-го года, но имеет делему Две тыщи 30 восемь года.

К счастью, к тому времени все linux'ы будут запущены на 64-х разрядных системах. 64-х битное целое будет содержать наши часы приблизительно до 292271-миллионного года.

NTP Server Linux

Введение

Существует масса реализаций для синхронизации времени для ОС Linux. Более известными являются Xntpd (NTP версия 3), ntpd (NTP версия 4), Crony и ClockSpeed. В нашем примере мы будем использовать ntp-сервер ntpd.

Сервер четкого времени своими руками (на базе беса ntpd)

Бес ntpd является сходу и сервером времени и клиентом, зависимо от опций конфигурационного файла /etc/ntpd.conf (временами /etc/ntp.conf), бес может и "принимать" время с уделенных серверов и "раздавать" другим хостам время.

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

Установка 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 — Четыре числа года, ss — секунды. При всем этом, значения CCYY.ss указывать не обязательно.

ntp-server:~# date 121720062010.30 Птн Дек Семнадцать 20:06:30 MSK 2010

Как видно, обозначенная команда установит текущие дату и время на 20 семь декабря 2010года, 20:06:30. Команда date без черт, выводить текущее системное время.

У данной команды есть куча черт, с которыми можно ознакомиться в man date.

Так же, необходимо правильно настроить аппаратные часы и часовой пояс. Как говорилось выше, часовой пояс настраивается копированием подходящего файла зоны из каталога /usr/share/zoneinfo/ в файл /etc/localtime:

ntp-server:~# cp /usr/share/zoneinfo/Europe/Moscow /etc/localtime

Аппаратные часы я настроил на UTC:

[ntp1@proxy ~]# cat /etc/sysconfig/clock | grep UTC # UTC=true indicates that the clock is set to UTC; UTC=true
ntp2-server:~# cat /etc/default/rcS | grep UTC UTC=yes

В первом примере указан конфигурационный файл, определяющий внедрение UTC для RH, 2-ой - для Deb-дистрибутивов.

Не считая установки опций на внедрение времени в формате UTC, необходимо задать аппаратное время. (практически всегда в этом нет необходимости, потому что данное системное время неизбежно синхронизируется с аппаратным, силами ядра). Но все же, если у вас есть желание это сделать...

Команда hwclock читает и устанавливает аппаратные часы на основании переданных ему черт. Доступные свойства описаны в странице управления команды. Вот несколько примеров использования hwclock:

ntp-server# hwclock                        # считывает время из аппаратных часов ntp-server# hwclock --systohc --utc        # устанавливает время аппаратных часов равным # UTC на основании системного времени ntp-server# hwclock --systohc              # устанавливает время аппаратных часов # равным местному на основании системного  времени ntp-server# hwclock --set --date "22 Mar Две тыщи два 13:17"  # устанавливает время аппаратных часов # равным обозначенной строке

Другим вариантом конфигурации времени в аппаратных часах - это доступ в BIOS при загрузке системы. Потому что время ОС независимо от аппаратных часов, любые конфигурации в BIOS будут учтены при следующей загрузке.

На данный момент, когда у нас все подготовлено и установлено, приступим к настройке.

Управление бесом ntpd

Управление бесом ntpd ничем не отличается от управления хоть какими другими демонами. Запуск или перезапуск службы ntpd:

#/etc/init.d/ntp start #/etc/init.d/ntp restart

Остановка:

#/etc/init.d/ntp stop

Или:

#/bin/kill `cat /var/run/ntpd.pid`

Бес имеет следующие свойства запуска:

-p  - PID-файл,
-g - разрешить переход на большой скачек времени
-c - конфиг файл
-q - принудительная ручная синхронизация

Настройка сервера ntpd

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

Сервер четкого времени своими руками (на базе беса ntpd)

Debian:

ntp-server:~# cat /etc/default/ntp NTPD_OPTS='-g'

RedHat:

[ntp2@proxy ~]# cat /etc/sysconfig/ntpd # Parameters for NTP daemon. # See ntpd(8) for more details. .... # Specifies additional parameters for ntpd. NTPD_ARGS="-g"

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

Итак, как я уже говорил, информация о конфигурации беса ntpd лежит в файле /etc/ntp.conf. Синтаксис файла стандартен, как и во многих других конфигах: пустые строки и строки, начинающиеся с знака "#" игнорируются. Вот обыденный пример:

ntp-server:~# cat /etc/ntp.conf server ntplocal.example.com prefer server timeserver.example.org server ntp2a.example.net
driftfile /var/db/ntp.drift

Параметр 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 Два (можно естественно stratum1, но придется убить время на поиски такого сервера) и из избранных stratum Два те, до которых маленькое "расстояние". Обычно такие сервера могут предоставляться вашим провайдером.

Количество выбираемых серверов лучше - более 2-х  3-х, чем больше тем лучше, но в разумных границах. Если Для вас лень выбирать лучшие сервера, то можно взять список открытых серверов второго уровня отсюда: http://support.ntp.org/bin/view/Servers/StratumTwoTimeServers.

Выбираем список эталонных NTP серверов

Идем по обозначенному адресу (http://support.ntp.org/bin/view/Servers/StratumTwoTimeServers) и подбираем список начальных серверов. Из данного списка выбираем удовлетворяющий нашим требованиям серверы, с помощью анализа вывода команды ntpdate. При выполнении команды, применяется следующий синтаксис:

ntpdate свойства серверы_через_пробел

Для того чтобы наш запрос не вносил конфигурации в систему, необходимо использовать параметр -q, который указывает на внедрение запроса без внесения конфигураций. Так же, может быть использовать ключ -d, указывающий, что команда будет выполняться в отладочном режиме, с выводом дополнительных сведений, без внесения реальных конфигураций (при данном ключе выводится куча другого мусора :), который нам в данный момент не нужен ). Другие свойства можно посмотреть в man Восемь ntpdate. Из обозначенной ссылки я выбрал все сервера Open Access, расположенные в Рф (RU) + тот, который предоставил провайдер и запустил команду, вышло примерно следующее:

ntp-server:~# ntpdate -q ntp2.ntp-servers.net ntp1.vniiftri.ru ntp2.vniiftri.ru ntp4.vniiftri.ru ntp0.ntp-servers.net ntp1.ntp-servers.net ntp3.vniiftri.ru ntp.corbina.net server 88.147.255.85, stratum 1, offset 0.006494, delay 0.09918 server 62.117.76.142, stratum 1, offset 0.002552, delay 0.06920 server 62.117.76.141, stratum 1, offset 0.003147, delay 0.06918 server 62.117.76.140, stratum 1, offset 0.004823, delay 0.07350 server 88.147.254.228, stratum 1, offset -0.002355, delay 0.12030 server 88.147.254.229, stratum 1, offset -0.000922, delay 0.10577 server 62.117.76.138, stratum 1, offset 0.005331, delay 0.07401 server 195.14.40.141, stratum 2, offset 0.002846, delay 0.07188 Тринадцать Jan 19:14:09 ntpdate[1946]: adjust time server 62.117.76.141 offset 0.003147 sec

В примере наши сервера удачно выдали уровень stratum1, что не может не развлекать (не считая сервера провайдера #image.jpg ), offset - это расхождение во времени с этим сервером в секундах, delay - задержка синхронизации в секундах.

Обычно, бОльшая точность выходит при использовании серверов, которые имеют низкую задержку передачи пакетов по сети. Для выявления этого, может быть воспользоваться утилитами ping и traceroute.

Соответственно, выбрав сначала те, у каких время ответа меньше, а из их - те, до которых меньше хопов. Я же, чтобы не терять время, воспользуюсь всем обозначенными серверами и впишу их в конфигурационный файл. Итого, зная все вышеперечисленное, обрисую свой получившийся файл /etc/ntp.conf:

ntp-server:~# cat /etc/ntp.conf # Сервера локальной сети (закомментированы, не употребляются - в сети один сервер) #server 192.168.0.2 #server 192.168.0.5
# интернет-сервера server  ntp2.ntp-servers.net server  ntp1.vniiftri.ru server  ntp2.vniiftri.ru server  ntp4.vniiftri.ru server  ntp0.ntp-servers.net server  ntp1.ntp-servers.net server  ntp3.vniiftri.ru server  ntp.corbina.net
# Файлы сервера driftfile       /var/lib/ntp/ntp.drift logfile /var/log/ntpstats
# ограничение доступа к серверу: # по умолчанию игнорируем все restrict        default ignore
# локалхост без черт - значит разрешено все. Свойства идут только на запреты. restrict        127.0.0.1
# далее описываются сервера с которыми мы синхронизируемся в локальной сети. # Разрешаем им все не считая трапов и запросов к нам restrict        192.168.0.2     noquery notrap restrict        192.168.0.5     noquery notrap
# для локалки так же разрешаем все, не считая трапов и модификаций restrict        192.168.0.1  mask 255.255.255.0 nomodify notrap nopeer
# разрешаем внешним источникам времени доступ: restrict  ntp2.ntp-servers.net restrict  ntp1.vniiftri.ru restrict  ntp2.vniiftri.ru restrict  ntp4.vniiftri.ru restrict  ntp0.ntp-servers.net restrict  ntp1.ntp-servers.net restrict  ntp3.vniiftri.ru restrict  ntp.corbina.net
# а этот хак, который выставляет уровень доверия серверу (strata) для себя равный Три # в 2-ух словах чем выше уровень-тем меньше число. Нуль - это атомные часы, # Один - это синхронизированные с ними, Два - с первым, и т.д.. server  127.127.1.1 fudge   127.127.1.1     stratum 3

Для более углубленного понимания и функции сервера, обрисую некоторые свойства конфигурации ntpd, о которых не упоминал::

    Сервер четкого времени своими руками (на базе беса ntpd)
  • enable/disable auth/monitor/pll/pps/stats - включить/выключить режим работы:
    • auth - с неупомянутыми соседями говорить только в режиме аутентификации;
    • monitor - разрешить мониторинг запросов;
    • pll - разрешить настраивать частоту местных часов по NTP;
    • stats - разрешить сбор статистики;
  • statistics loopstats - при каждой модификации локальных часов записывает строчку в файл loopstats;
  • statistics peerstats - каждое общение с соседом записывается в журнал, лежащий в файле peerstats;
  • statistics clockstats - каждое сообщение от драйвера локальных часов записывается в журнал, лежащий в файле clockstats;
  • statsdir {имя_каталого_со_статистикой} - задает имя каталога, в каком будут находится файлы со статистикой сервера;
  • filegen [file {filename}] [type {typename}] [flag {flagval}] [link|nolink] [enable|disable]- определяет способ генерации имен файлов, которые состоят из:
    • префикс - постоянная часть имени файла, задается либо при компиляции, либо особенными командами конфигурации;
    • имя файла - добавляется к префиксу без косой черты, две точки запрещены, может быть изменена ключем file;
    • суффикс - генерируется зависимо от typename;
  • restrict numeric-address [mask {numericc-mask}] [flag] - задает ограничение доступа: пакеты сортируются и маскам, берется исходный адрес и попеременно сравнивается, от последнего удачного сравнения берется флаг  [flag]доступа:
    • нет флагов - дать доступ;
    • ignore - игнорировать все пакеты;
    • noquery - игнорировать пакеты NTP 6 и Семь (запрос и модификация состояния);
    • nomodify - игнорировать пакеты NTP 6 и Семь (модификация состояния);
    • limited - обслуживать только ограниченное количество клиентов из данной сети;
    • nopeer - обслуживать хост, но не синхронизироваться с ним;
  • clientlimit limit - для флага limited определяет наибольшее количество обслуживаемых клиентов (по дефолту 3);

Итого, мы получили ntpd-server, который синхронизируется с внешним миром, позволяет получать время для клиентов из локальной сети 192.168.0.1  с маской 255.255.255.0, а так же может синхронизироваться с локальным сервером (если раскомментировать несколько строк). Нам осталось настроить клиентов и узнать, как смотреть за нашим сервером.
//'); //]]>

Наблюдение за сервером ntpd и за синхронизацией

Когда у вас все настроено. NTP будет держать время в синхронизированном состоянии. Этот процесс можно смотреть при помощи команды NTP Query (ntpq):

ntp-server:~# ntpq -p remote           refid      st t when poll reach   delay   offset  jitter ============================================================================== -n3.time1.d6.hsd .PPS.            Один u   30 четыре   Шестьдесят четыре  100 70 семь   70.162    2.375   8.618 +ntp1.vniiftri.r .PPS.

            Один u   30 три   Шестьдесят четыре 100 70 семь   43.479   -0.020  10.198 *ntp2.vniiftri.r .PPS.            Один u    6   Шестьдесят четыре 100 70 семь   43.616   -0.192   0.688 +ntp4.vniiftri.r .PPS.            Один u    Четыре   Шестьдесят четыре 100 70 семь   43.623    0.440   0.546 -n1.time1.d6.hsd .PPS.

            Один u   50 три   Шестьдесят четыре   70 семь   92.865  -11.358  38.346 -ns1.hsdn.org    .GPS.            Один u   40   Шестьдесят четыре 100 70 семь   78.057   -3.292  35.083 -ntp3.vniiftri.r .PPS.

            Один u   40 четыре   Шестьдесят четыре   70 семь   47.667    2.292   2.611 -scylla-l0.msk.c 192.43.244.18    Два u   Шестьдесят два   Шестьдесят четыре   70 семь   41.565   -1.564  28.914

Данная команда с ключом -p выводит на стандартный вывод список источников времени с их чертами (другие свойства команды в man ntpq). Значение каждой колонки следующее:

remote

Имя удаленного NTP-сервера. Если указать ключ -n, вы получите Ip-адреса серверов вместо имён.

refid

Указывает, откуда каждый сервер получает время в данный момент. Это может быть имя хоста или что-то вроде .GPS., указывающее на источник глобальной системы позиционирования (Global Positioning System).

st

Stratum (уровень) это число от Один до 16, указывающее на точность сервера. Единица означает наивысшую точность, Шестнадцать -- сервер недоступен. Ваш уровень будет равен уровню наименее точного удаленного сервера плюс 1.

poll

Интервал меж опросами (в секундах). Значение будет изменяться меж малой и большей частотой опросов. Поначалу интервал будет маленьким, чтобы синхронизация происходила быстро.

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

reach

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

delay

Количество времени (в секундах) подходящего для получения ответа на запрос "который час? ".

offset

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

Сервер четкого времени своими руками (на базе беса ntpd)

jitter

Дисперсия (Jitter) -- это мера статистических отклонений от значения смещения (поле offset) по нескольким удачным парам запрос-ответ. Меньшее значение дисперсии лучше, потому что позволяет точнее синхронизировать время.

Значение знаков перед именами серверов

x - липовый источник по способу скрещения;
. - исключён из списка кандидатов из-за большущего расстояния;
- - удалено из списка кандидатов способом кластеризации;
+ - входит в конечный список кандидатов;
# - избран для синхронизации, но есть 6 лучших кандидатов;
* - избран для синхронизации;
o - избран для синхронизации, но употребляется PPS;
пробел - очень большой уровень, цикл или тривиальная ошибка;

Служба ntpd "умная" и сама отсеивает источники времени очень выбивающиеся за рамки разумного. Через некоторое время после запуска ntpd выберет более достоверные источники данных и будет синхронизироваться с ними. Представленный нами список эталонных NTP серверов нередко пересматривается службой.

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

ntp-server:~# ntpdate -q localhost server 127.0.0.1, stratum 2, offset -0.000053, delay 0.02573 server ::1, stratum 2, offset -0.000048, delay 0.02571 Четырнадцать Jan 14:49:57 ntpdate[2231]: adjust time server ::1 offset -0.000048 sec

Из вывода команды видно, что наш сервер уже стал уровня stratum 2. Для награды данного уровня, необходимо некоторое время. Может быть, в 1-ые 10-15 минут уровень сервера будет выше.

О корректной работе сервера ntp можно так же судить по логам беса ntpd:

ntp-server:~# cat /var/log/ntpstats/ntp Тринадцать Jan 20:13:16 ntpd[1764]: Listening on interface #5 eth0, fe80::a00:27ff:fec1:8059#123 Enabled Тринадцать Jan 20:13:16 ntpd[1764]: Listening on interface #6 eth0, 192.168.0.8#123 Enabled Четырнадцать Jan 14:31:00 ntpd[2217]: synchronized to 62.117.76.142, stratum Один 14 Jan 14:31:10 ntpd[2217]: time reset +10.291312 s Четырнадцать Jan 14:31:10 ntpd[2217]: kernel time sync status change Один 14 Jan 14:34:31 ntpd[2217]: synchronized to 88.147.255.85, stratum Один 14 Jan 14:36:04 ntpd[2217]: synchronized to 62.117.76.141, stratum Один 14 Jan 15:04:36 ntpd[2217]: synchronized to 62.117.76.142, stratum Один 14 Jan 15:10:58 ntpd[2217]: synchronized to 62.117.76.140, stratum Один 14 Jan 15:17:54 ntpd[2217]: no servers reachable Четырнадцать Jan 15:31:49 ntpd[2217]: synchronized to 62.117.76.140, stratum Один 14 Jan 15:32:14 ntpd[2217]: time reset +13.139105 s

Настройка netfilter (iptables) для NTP сервера

Настроив работу сервера, отлично было бы его защитить. Мы знаем, что сервер работает на 123/udp порту, при всем этом запросы так же отправляются с порта 123/udp. Ознакомившись со статьей, что такое netfilter и правила iptables и ознакомившись с практическими примерами iptables, можно сделать правила фильтрации сетевого трафика:

ntp ~ # iptables-save # типовые правила iptables для DNS *filter :INPUT DROP [7511:662704] :FORWARD DROP [0:0] :OUTPUT DROP [0:0] -A INPUT -i lo -j ACCEPT -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A INPUT -m conntrack --ctstate INVALID -j DROP # разрешить доступ локальной сети к NTP серверу: -A INPUT -s 192.168.1.1/24 -d 192.168.1.1/32 -p udp -m udp --dport 100 20 три -m conntrack --ctstate NEW -j ACCEPT -A OUTPUT -o lo -j ACCEPT -A OUTPUT -p icmp -j ACCEPT -A OUTPUT -p udp -m udp --sport 32768:61000 -j ACCEPT -A OUTPUT -p tcp -m tcp --sport 32768:61000 -j ACCEPT -A OUTPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT # разрешить доступ NTP серверу совершать исходящие запросы -A OUTPUT -p udp -m udp --sport 100 20 три --dport 100 20 три -m conntrack --ctstate NEW -j ACCEPT COMMIT

Это типовой пример! Для задания правил iptables под Ваши задачи и конфигурацию сети, необходимо обдумывать принцип работы netfilter в Linux, почитав вышеуказанные статьи.

Настройка клиентских машин

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

0 * * * * /usr/sbin/ntpdate -s <Ip-адрес или FQDN-имя NTP-сервера локальной сети>

Ключ -s направляет вывод команды бесу syslog. Если на клиентских машинах есть пару лишних мб оперативки, то можно запустить бес ntpd, как и на сервере со следующим конфигом:

server <Ip-адрес или FQDN-имя NTP-сервера локальной сети> restrict default ignore restrict <Ip-адрес или FQDN-имя NTP-сервера локальной сети> noquery notrap restrict 127.0.0.1 nomodify notrap

Думаю, в данном конфиге все понятно: источник времени (server) - локальный ntpd-сервер, доступ всем запретить, разрешить только локальному ntpd-серверу.

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

Для функции NTP клиента Windows, необходимо выполнить в консоли следующие команды:

C:\>net time /setsntp:<Ip-адрес или FQDN-имя NTP-сервера локальной сети> The command completed successfully. C:\>net stop w32time The Windows Time service is stopping. The Windows Time service was stopped successfully.

C:\>net start w32time The Windows Time service is starting. The Windows Time service was started successfully. C:\>net time /querysntp The current SNTP value is: <Ip-адрес или FQDN-имя NTP-сервера локальной сети> The command completed successfully.

Заключение

Ну вроде все! Объем статьи вышел большим... Даже сам не ожидал.

Подведу маленькой итог изложенному. В данной статье нам, надеюсь, стало понятно что есть и как работает 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

Похожие статьи

  • Программные каналы и потоки Linux (UNIX), перенаправление потоков

    Неплохого времени, читатели моего блога!В данной статье желаю систематизировать свои зания по основным механизмам работы программных потоков и каналов в интерпретаторе и в общем в ОС Linux, а так ж...

  • Главные команды Linux

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

  • Сервер коллективной работы Zimbra

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

  • Сервер печати CUPS

    Неплохого времени, читатели моего блога и гости. На данный момент желаю сделать небольшую заметку о системе печати Linux, чтобы ввести в курс дела и приготовить вас к следующей статье о сервере печати SAMBA...

  • Обзор обыденных nix решений для организации почтового сервера

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

Теги: ос linux, ос
Рейтинг: +2 Голосов: 255 2247 просмотров
Комментарии (0)

Нет комментариев. Ваш будет первым!

Найти на сайте: параметры поиска

Windows 7

Среда Windows 7 на первых порах кажется весьма непривычной для многих.

Windows 8

Если резюмировать все выступления Microsoft на конференции Build 2013.

Windows XP

Если Windows не может корректно завершить работу, в большинстве случаев это

Windows Vista

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