Сервер точного времени на базе OpenNTPD FreeBSD


NTP-сервер ntpd, который входит в состав FreeBSD, в момент запуска привязывается ко всем сетевым интерфейсам, присутствующим в системе. В большинстве случаев такое поведение вполне оправдано, однако, существуют ситуации, требующие его изменения. При этом возникает неразрешимая проблема - опции ntpd не позволяют привязать NTP-сервер только к необходимым IP-адресам. Именно это обстоятельство стало причиной моего знакомства с NTP-сервером OpenNTPD, которому и посвящена данная статья.
Введение

NTP-сервер OpenNTPD является частью OpenBSD, однако, он может быть установлен из коллекции портов FreeBSD. OpenNTPD намного проще ntpd, тем не менее он прекрасно справляется как с синхронизацией системных часов, так и с раздачей точного времени по протоколам NTP и SNTP, при этом OpenNTPD имеет очень полезную в некоторых случаях особенность - его можно "вешать" только на необходимые сетевые интерфейсы. Я рекомендую Вам обратить внимание на OpenNTPD, который может стать полезной альтернативой NTP-сервера по умолчанию.
Исходные данные

Действия, описанные в этой статье, выполнялись в среде операционной системы FreeBSD 8.0. Сервер OpenNTPD устанавливался из предварительно обновленной коллекции портов. Если Вы сталкиваетесь с задачей синхронизации времени впервые, настоятельно рекомендую прочитать написанную ранее статью FreeBSD: Сервер точного времени на базе ntpd, в противном случае у Вас не должно возникнуть ни каких затруднений.
Установка и настройка сервера OpenNTPD

Cервер OpenNTPD следует установить из портов:

cd /usr/ports/net/openntpd
make install clean

По умолчанию конфигурация сервера OpenNTPD хранится в файле /usr/local/etc/ntpd.conf. Мой файл конфигурации имеет следующий вид:

listen on 127.0.0.1
listen on 192.168.0.1
server ntp1.kangran.su
server ntp21.imvp.ru
server ticktock.net.ru
server ntp.psn.ru
server ntp2.kangran.su
server ntp.letinet.ru

Строки listen on ... содержат список IP-адресов, которые "слушает" наш сервер, строки server ... - список публичных NTP-серверов, с которыми синхронизируется наш сервер (сервер ОpenNTPD "умеет" синхронизироваться как с отдельными NTP-серверами, так и с пулами NTP-серверов, список которых должен определяться строками servers ..., например, servers pool.ntp.org). Вот, собственно, и вся конфигурация.

Для того, чтобы сервер OpenNTPD запускался при запуске операционной системы и сразу же делал грубую начальную корректировку времени, нужно добавить в файл /etc/rc.conf следующие строки (без второй строки будет выполняться плавная начальная корректировка времени):

openntpd_enable="YES"
openntpd_flags="-s"


На этом настройка сервера OpenNTPD завершается. Можно запустить сервер командой /usr/local/etc/rc.d/openntpd start, а затем запросить его состояние командой /usr/local/etc/rc.d/openntpd status. Если последняя команда выдаст сообщение openntpd is running as pid ..., все нормально, если же – openntpd is not running, Вам следует найти и устранить ошибки в файлах конфигурации. После этого необходимо подождать не менее получаса и выполнить команду ntpdate -q localhost. Если Вы внимательно следовали инструкциям, она выдаст сообщение о том, что NTP-сервер имеет stratum 3 и может использоваться для синхронизации времени:server 127.0.0.1, stratum 3, offset -0.000001, delay 0.02565
13 Apr 12:00:00 ntpdate[93386]: adjust time server 127.0.0.1 offset -0.000001 sec

Анализ состояния сервера OpenNTPD

Для того, чтобы диагностические сообщения об изменении системного времени и выполнении операций синхронизации с публичными NTP-серверами и/или пулами публичных NTP-серверов выводились в файл /var/log/debug.log, следует изменить строку openntpd_flags в файле /etc/rc.conf:1 openntpd_flags="-sv"


После внесения изменений в файл /etc/rc.conf следует перезапустить сервер OpenNTPD командой /usr/local/etc/rc.d/openntpd restart.

Другим способом отладки сервера OpenNTPD является его запуск не в виде демона, как это принято по умолчанию, а в виде обычного приложения, выводящего все диагностические сообщения на консоль. Такой запуск сервера OpenNTPD может быть выполнен командой:1 /usr/local/sbin/ntpd -dv


Как в первом, так и во втором случаях признаком корректной работы сервера OpenNTPD могут служить примерно такие сообщения:Apr 13 15:01:46 ... ntpd[6684]: reply from 193.41.86.177: offset 0.007338 delay 0.014602, next query 9s
Apr 13 15:01:46 ... ntpd[6684]: reply from 89.111.168.177: offset 0.009182 delay 0.014520, next query 7s
...
Apr 13 15:03:03 ... ntpd[6684]: reply from 89.111.168.177: offset 0.008260 delay 0.013687, next query 31s
Apr 13 15:03:03 ... ntpd[6683]: adjusting local clock by 0.006359s


Для того, чтобы сервер OpenNTPD "сбросил" информацию о своем состоянии в файл /var/log/messages, необходимо послать ему сигнал SIGINFO:1 killall -SIGINFO ntpd


В случае корректной работы сервера OpenNTPD в файле /var/log/messages появится примерно такое сообщение:Apr 13 15:33:43 ... ntpd[93356]: 6 out of 6 peers valid


Если что-то не так, например, "умер" один из выбранных публичных NTP-серверов, сообщение будет выглядеть так:Apr 13 17:03:43 ... ntpd[93356]: 5 out of 6 peers valid
Apr 13 17:03:43 ... ntpd[93356]: bad peer ntp.letinet.ru (95.140.94.2)

Заключение

Я надеюсь, что приведенной информации будет более чем достаточно для корректной настройки и последующей отладки NTP-сервера OpenNTPD на компьютере с операционной системой FreeBSD.

http://www.sergeysl.ru/freebsd-openntpd/

Обновлено: 12.03.2015