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
:
openntpd_flags="-sv"
После внесения изменений в файл /etc/rc.conf
следует перезапустить сервер OpenNTPD командой /usr/local/etc/rc.d/openntpd restart
.
Другим способом отладки сервера OpenNTPD является его запуск не в виде демона, как это принято по умолчанию, а в виде обычного приложения, выводящего все диагностические сообщения на консоль. Такой запуск сервера OpenNTPD может быть выполнен командой:
/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
:
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.
возможно синтаксическая ошибка.
listen-on 127.0.0.1
listen-on 192.168.0.1
нужно было исправлять на :
listen on 127.0.0.1
listen on 192.168.0.1
maximum_server# pkg_info | grep openntp
openntpd-4.6_1,2 OpenBSD's Network Time Protocol daemon
Спасибо. Ошибся. Исправил.
grep ntp /etc/syslog.conf
!ntpd
*.* /var/log/ntpd.log
Я уже давно вернулся к ntpd.
а локалхост обязательно прослушивать?
Не обязательно, но почему бы нет?
У меня jail-ов на хосту немеряно, потому во всех возможных случаях стараюсь отучать демонов от лок.хостов 🙂
Почему спросил, ибо возникли некоторые проблемы с «локальным» сендмайлом и кроном, и, возможно, с нек-ми протоколами, ибо ицмп идет, а коннекта к демону нет 🙁
Я на хост-машине ntpd запускаю, а в jail’ах нет, пока этого вроде хватает.