Товарищ 100kg пару лет назад написал статейку Ntpdate/Ntpd. Решил я немного обновить ее с учетом моего опыта.И так, есть FreeBSD 7.0 с которой идет уже устаревшая версия ntpd. Так что для начала поставим новую версию из портов. Но перед тем как приступить к установке, немного изменим дефолтные пути поиска бинарников (эту операцию необходимо проворачивать всегда, если планируется ставить софт из портов изначально присутствующий во FreeBSD - ntpd, ssl и т.д).
# cd /root # ee .cshrc
#set path = (/sbin /bin /usr/sbin /usr/bin /usr/games /usr/local/sbin /usr/local/bin /usr/X11R6/bin) set path = (/usr/local/sbin /usr/local/bin /usr/sbin /usr/bin /sbin /bin $HOME/bin)
Значение set path пишется в одну строку.Сохраняем, а затем делаем logout и снова login. Проверяем, вступили ли в силу изменения:
echo $path /usr/local/sbin /usr/local/bin /usr/sbin /usr/bin /sbin /bin /root/bin
Теперь обновляем порты и ставим ntpd:
# 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.65 2 u - 128 37 93.311 -1.769 0.844 +ns1.odessa.coms 198.123.30.132 2 u 65 64 17 55.824 -5.750 0.676 x212.111.205.110 62.149.0.30 2 u 91 256 7 1936.77 913.387 0.647 +shkvoren.tstu.e 147.231.19.43 2 u 1 64 37 93.840 -0.587 1.099
Тут остановимся по-подробнее.remote - имена удаленных ntp серверов (в нашем случае полученные из пулов 0/1/2/3.ua.pool.ntp.org)refid - сервер, с которым производит синхронизацию удаленный сервер ntpst - стратум (уровень) удаленного сервера. 1 - самый высокий, эти сервера для вычисления точного времени используют специальное дорогостоящее оборудование; 16 - рядовая машина/клиент.t - тип пира (u = unicast, m = multicast)when - указывает на то, как давно была произведена синхронизация с серверомpoll - частота в секундах, с которой NTP демон синхронизируется с пиромreach - состояние доступности сервера, это значение стабилизируется на уровне 377 если последних 8 попыток синхронизации с удаленным сервером были успешныdelay - он и в Африке delay - задержка (в миллисекундах) ответа от сервераoffset - разница в миллисекундах между системным временем и временем удаленного сервера; значение с минусом - отставание, с плюсом - наши часики спешатjitter - смещение времени на удаленном сервереТеперь немного о значках, следа от имени пира:"*" - пир, с которым последний раз у нас была выполнена синхронизация"+" - "хороший" (пригодный для обновления) сервер"-" - "плохой" (непригодный для обновления) сервер"х" - сервер не отвечаетУзнать, пригоден ли наш сервер для синхронизации, а также узнать некоторые его данные можно следующей командой:
# ntpdate -q localhost
В ответ должны получить что-то подобное:
Этот ответ означает, что наш сервер пригоден для синхронизации, его страта равна трем, смещение - 0.000003 а задержка при ответе равна 0.02573.Аналогичной командой можно узнать эти параметры на удаленном сервере:
#ntpdate -q ntp.time.in.ua
Ниже приведен пример ответа сервера, непригодного для синхронизации:
В /var/log/ntp.log должны быть сообщения аналогичные нижеприведенным:
Каждая запись соответствует успешной синхронизации с удаленным сервером. Если они отсутствуют, значит синхронизация не производиться.В случае, если после запуска ntpd он только 1 раз синхронизируется с удаленным сервером и дальнейшая синхронизация не наблюдается, лог выглядит так:
В 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.pdfNTPpt2.pdfNTPpt3.pdfАлес :)