Товарищ 100kg пару лет назад написал статейку Ntpdate/Ntpd. Решил я немного обновить ее с учетом моего опыта.
И так, есть FreeBSD 7.0 с которой идет уже устаревшая версия ntpd. Так что для начала поставим новую версию из портов. Но перед тем как приступить к установке, немного изменим дефолтные пути поиска бинарников (эту операцию необходимо проворачивать всегда, если планируется ставить софт из портов изначально присутствующий во FreeBSD - ntpd, ssl и т.д).
# cd /usr/ports/net/ntp
# make install clean
# rehash
Процесс обновления портов я опустил, если кого интересует, можно прочитать здесь Теперь создаем drift - файл в котором храниться информация о смещении времени локальной машины относительно серверов точного времени.
# touch /etc/ntp/drift
И наконец приступим к написанию главного конфигурационного файла ntpd - ntp.conf
# ee /etc/ntp.conf
#добавляем сервера, с которыми будет проводиться синхронизация
server 0.ua.pool.ntp.org iburst prefer
server 1.ua.pool.ntp.org iburst
server 2.ua.pool.ntp.org iburst
server 3.ua.pool.ntp.org iburst
#путь к дрифт файлу
driftfile /etc/ntp/drift
#лог
logfile /var/log/ntp.log
#разрешаем обновляться только локальной сети
restrict default ignore
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
Опция iburst позволяет ntpd ускорить начальный процесс синхронизации, prefer - отмечает предпочитаемый сервер.
Конфиг готов, теперь добавляем в rc.conf следующие строчки:
# ee /etc/rc.conf
ntpd_enable="YES"
ntpd_program="/usr/local/bin/ntpd"
И стартуем демон:
# /etc/rc.d/ntpd start
Ждем порядка 10 минут. Теперь можно проверить состояние синхронизации:
# ntpq -p
remote refid st t when poll reach delay offset jitter
====================================================================
*shtucer.tstu.ed 193.190.230.652 u - 1283793.311 -1.7690.844
+ns1.odessa.coms 198.123.30.1322 u 65641755.824 -5.7500.676
x212.111.205.11062.149.0.302 u 9125671936.77913.3870.647
+shkvoren.tstu.e 147.231.19.432 u 1643793.840 -0.5871.099
Тут остановимся по-подробнее. remote - имена удаленных ntp серверов (в нашем случае полученные из пулов 0/1/2/3.ua.pool.ntp.org) refid - сервер, с которым производит синхронизацию удаленный сервер ntp st - стратум (уровень) удаленного сервера. 1 - самый высокий, эти сервера для вычисления точного времени используют специальное дорогостоящее оборудование; 16 - рядовая машина/клиент. t - тип пира (u = unicast, m = multicast) when - указывает на то, как давно была произведена синхронизация с сервером poll - частота в секундах, с которой NTP демон синхронизируется с пиром reach - состояние доступности сервера, это значение стабилизируется на уровне 377 если последних 8 попыток синхронизации с удаленным сервером были успешны delay - он и в Африке delay - задержка (в миллисекундах) ответа от сервера offset - разница в миллисекундах между системным временем и временем удаленного сервера; значение с минусом - отставание, с плюсом - наши часики спешат jitter - смещение времени на удаленном сервере
Теперь немного о значках, следа от имени пира: "*" - пир, с которым последний раз у нас была выполнена синхронизация "+" - "хороший" (пригодный для обновления) сервер "-" - "плохой" (непригодный для обновления) сервер "х" - сервер не отвечает
Узнать, пригоден ли наш сервер для синхронизации, а также узнать некоторые его данные можно следующей командой:
# ntpdate -q localhost
В ответ должны получить что-то подобное:
Looking for host localhost and service ntp host found : localhost server 127.0.0.1, stratum 3, offset 0.000003, delay 0.02573 17 Nov 15:28:54 ntpdate[4918]: adjust time server 127.0.0.1 offset 0.000003 sec
Этот ответ означает, что наш сервер пригоден для синхронизации, его страта равна трем, смещение - 0.000003 а задержка при ответе равна 0.02573.
Аналогичной командой можно узнать эти параметры на удаленном сервере:
#ntpdate -q ntp.time.in.ua
Looking for host ntp.time.in.ua and service ntp host found : ntp.time.in.ua server 62.149.0.30, stratum 1, offset -0.000233, delay 0.04053 17 Nov 16:10:42 ntpdate[5177]: adjust time server 62.149.0.30 offset -0.000233 sec
Ниже приведен пример ответа сервера, непригодного для синхронизации:
server 132.123.123.123, stratum 16, offset 6.188638, delay 0.03827 17 Nov 16:17:36 ntpdate[1027]: no server suitable for synchronization found
В /var/log/ntp.log должны быть сообщения аналогичные нижеприведенным:
16 Nov 22:23:23 ntpd[27414]: synchronized to 193.34.155.4, stratum=2 17 Nov 01:51:11 ntpd[27414]: synchronized to 82.207.89.35, stratum=3 17 Nov 01:51:13 ntpd[27414]: synchronized to 193.34.155.4, stratum=2
Каждая запись соответствует успешной синхронизации с удаленным сервером. Если они отсутствуют, значит синхронизация не производиться.
В случае, если после запуска ntpd он только 1 раз синхронизируется с удаленным сервером и дальнейшая синхронизация не наблюдается, лог выглядит так:
17 Nov 15:47:17 ntpd[5059]: synchronized to 91.198.10.4, stratum=2 17 Nov 15:47:17 ntpd[5059]: kernel time sync disabled 0041 17 Nov 15:47:21 ntpd[5059]: kernel time sync enabled 0001
В ntp.conf стоит добавить опцию burst:
server 0.ua.pool.ntp.org iburst burst prefer
server 1.ua.pool.ntp.org iburst burst
server 2.ua.pool.ntp.org iburst burst
server 3.ua.pool.ntp.org iburst burst
driftfile /etc/ntp/drift
logfile /var/log/ntp.log
restrict default ignore
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
Опция burst, указывает ntpd посылать 5 (точно не помню количество) пакетов вместо одного для попытки синхронизации, что повышает шансы на успешную синхронизацию.
Все, теперь настраиваем клиентов на синхронизацию с нашим сервером (192.168.1.1). В случае с клиентом под FreeBSD (под Linux тоже должно работать) рисуем следующий конфиг:
# ee /etc/ntp.conf
server 192.168.1.1 iburst
driftfile /etc/ntp/drift
logfile /var/log/ntp.log
restrict default ignore
restrict 192.168.1.1
Более подробно о настройке, мониторинге и траблшутинге ntpd можно почитать в следующих pdf'ках от SUN: NTP.pdf NTPpt2.pdf NTPpt3.pdf