Возникла необходимость синхронизировать время на машинах в локальной сети. Для этого желательно настроить свой собственный NTP сервер. Тем более, что во FreeBSD сделать это совсем просто. Начнем с файла конфигурации сервера /etc/ntp.conf
server ntp.psn.ru prefer server time2.one4vision.de server ntp.ucsd.edu server time.nist.gov
driftfile /var/db/ntp.drift
restrict 192.168.2.0 mask 255.255.255.0 nomodify notrap
Создадим файл /var/db/ntp.drift
touch /var/db/ntp.drift
В файлик /etc/rc.conf добавим строки которые позволят при старте системы запустить наш NTP сервер.
ntpd_enable="YES" ntpd_flags="-c /etc/ntp.conf -l /var/log/ntpd.log -p /var/run/ntpd.pid"
На этом собственно говоря все. Самое главное после запуска сервера (/etc/rc.d/ntpd start) не торопиться. Именно не торопиться! Если сразу после старта сервера попробовать синхронизировать время с нашим сервером, то скорее всего ничего не получится. По крайней мере у меня было так. Нужно немного подождать, хотя бы минут 15-20.
Теперь, немного о том, как посмотреть что делает наш сервер. Делается это командой ntpq
[root@gw ~]# ntpq -np remote refid st t when poll reach delay offset jitter ============================================================================== -77.78.110.71 195.113.144.201 2 u 449 1024 377 273.777 19.438 86.737 +91.121.45.45 145.238.203.14 2 u 180 1024 377 234.006 1.136 6.294 *84.2.42.31 172.20.1.162 2 u 206 1024 377 224.046 -2.157 14.703 +83.229.210.18 195.216.64.208 3 u 448 1024 377 168.998 -11.696 1.752 +82.219.4.30 195.66.241.10 2 u 638 1024 377 238.655 -5.773 28.231
Теперь, о значениях колонок:
Символ в начале строки:
remote Имя удаленного NTP-сервера. Если указать ключ -n, вы получите IP-адреса серверов вместо имён.
refid Указывает, откуда каждый сервер получает время в данный момент. Это может быть имя хоста или что-то вроде .GPS., указывающее на источник глобальной системы позиционирования (Global Positioning System).
st Stratum (уровень) это число от 1 до 16, указывающее на точность сервера. Единица означает максимальную точность, 16 – сервер недоступен. Ваш уровень будет равен уровню наименее точного удаленного сервера плюс 1.
poll Интервал между опросами (в секундах). Значение будет изменяться между минимальной и максимальной частотой опросов. В начале интервал будет маленьким, чтобы синхронизация происходила быстро. После того как часы синхронизируются, интервал начинает увеличиваться, чтобы уменьшить трафик и нагрузку на популярные сервера времени.
reach Восьмеричное представление массива из 8 бит, отражающего результаты последних восьми попыток соединения с сервером. Бит выставлен, если удаленный сервер ответил.
delay Количество времени (в секундах) необходимого для получения ответа на запрос «который час? ».
offset Наиболее важное поле. Разница между временем локального и удаленного серверов. В ходе синхронизации это значение должно понижаться, указывая на то, что часы локальной машины идут все точнее.
jitter Дисперсия (Jitter) – это мера статистических отклонений от значения смещения (поле offset) по нескольким успешным парам запрос-ответ. Меньшее значение дисперсии предпочтительнее, поскольку позволяет точнее синхронизировать время.