|
Bog BOS: ntpd (xntpd) - сервер NTP4 (NTP3)
|
Последнее изменение текста: 20110713
Скопировано с www.bog.pp.ru: 2024.11.23
Bog BOS: ntpd (xntpd) - сервер NTP4 (NTP3)
Пакет NTP4 представляет собой реализацию сервера протокола NTP версии 4,
используемого для синхронизации времени.
Обеспечивается совместимость с версиями 3 и 2 (поддержка версии 1
удалена из-за проблем с безопасностью).
Доступен для бесплатного использования, включая исходные тексты.
Текущая (на 14 февраля 2005) стабильная версия - 4.2.0 от 2003/10/15.
В статье описывается его установка и настройка.
Требуется предварительное знакомство с
механизмами обработки времени в UNIX и протоколом
NTP (там же приводится список доступных NTP серверов).
Отличия версии 4 от версии 3:
- xntpd переименован в ntpd
- IPv6
- улучшенный алгоритм "дрессировки" системных часов, позволяющий увеличить
интервал опроса до суток
- вместо библиотеки DES, запрещенной к экспорту, используется openssl
(в поставку не включена, поэтому проблем с экспортом нет ;)
- возможно использование аутентификации с открытым ключом
(Autokey Version 2)
- возможна автоматическая конфигурация клиентов на основе Autokey и
IP multicast
- режимы быстрой настройки часов (burst, iburst)
- в протокол добавлено сообщение kiss-of-death, позволяющее серверу
"отвязаться" от клиента
Альтернативная реализация - chronyd.
Предварительно необходимо проделать дырки
в сетевом экране (UDP/123) для всех хостов, на которых работает
сервер NTP, получающий информацию снаружи
(ipchains, Cisco IOS).
Дырку в местном сетевом экране процедура /etc/rc.d/init.d/ntpd в RH
проделывает самостоятельно.
Пакет ntp входит в состав дистрибутива (xntp3-5.93 для RH 6.2,
ntp-4.0.99j для RH 7.0, ntp-4.1.0 для RH 7.2, ntp-4.1.1a для RH 8.0,
ntp-4.1.2 для RH 9.0, ntp-4.2.0 для FC3).
Пакет ntp3 (ntp) состоит из
- /etc/ntp.conf
- /etc/ntp/
- drift (поправка к частоте системных часов),
перенесён в /var/lib/ntp/drift
- keys (ключи аутентификации для удаленной настройки)
- step-tickers (сюда надо положить список серверов,
с которых будет браться точное время при запуске ntp сервера,
и не совпадающих с серверами в /etc/ntpd.conf)
- /etc/rc.d/init.d/xntpd [или ntpd] (для автоматического запуска и остановки
необходимо сделать линки в /etc/rc.d/rc{2,3}.d с {K,S}31xntpd
на ../init.d/xntpd), для первого раза запустить вручную
(chkconfig --level 2345 ntpd on; service ntpd start)
- /etc/sysconfig/ntpd (в новых версиях RH содержит ключи запуска ntpd -
"-U ntp" - используемые /etc/rc.d/init.d/ntpd)
- /usr/doc/xntp3-5.93/ (/usr/share/doc/ntp-4.1.0)
- /usr/bin/ntpstat (состояние местного сервера и ожидаемая ошибка)
- /usr/sbin/ (ntpdate, ntpq, ntptime, ntptrace, tickadj, xntpd/ntpd,
xntpdc/ntpdc)
- /usr/sbin/ (только для ntp4: ntp-genkeys, ntp-wait, ntptimeset)
Если DHCP сервер раздаёт адреса NTP серверов,
то на сервере NTP необходимо добавить в /etc/sysconfig/network строку PEERNTP=no,
иначе dhclient будет "улучшать" /etc/ntp.conf.
Установка новой версии из исходных текстов:
- взять и распаковать исходные тексты
- прочитать руководство по установке и файл INSTALL
- для работы с публичными ключами требуются пакеты openssl и openssl-devel
(libcrybto.a и .h)
- ./configure --with-openssl-libdir=/usr/local/ssl/lib --with-openssl-incdir=/usr/local/ssl/include/ --disable-all-clocks --disable-parse-clocks --enable-LOCAL-CLOCK
(драйверы аппаратных часов отключить, обновленный openssl в нестандартном
месте)
- make (не забудь добавить /usr/ccs/bin к PATH)
- make check
- make install
- /usr/local/bin/
- ntp-wait (?)
- ntpd (демон NTP)
- ntpdate (установка системных часов по информации от NTP сервера)
- ntptimeset (?)
- ntpdc (утилита для управления NTP сервером)
- ntpq (утилита для получения информации о сервере NTP)
- ntptrace (трассировка цепочки NTP серверов к источнику времени)
- ntptime (чтение переменных ядра; устанавливается только для ядер,
поддерживающих точное время)
- tickadj (установка переменных ядра)
- ntp-genkeys (генерация публичных и частных ключей; устанавливается
только, если аутентификация с помощью публичных ключей встроена
в сервер)
- make clean (или make distclean, чтобы освободить место)
- настройка /usr/local/etc/ntp.conf
- создание директории /usr/local/etc/ntp/ (в ней будут храниться файлы
drift, keys, step-tickers)
- заполнение /usr/local/etc/ntp/step-tickers
- создание или правка /etc/rc.d/init.d/ntpd
- запуск сервиса вручную для первого раза
Настройка /etc/ntp.conf (/usr/local/etc/ntp.conf)
в режиме клиента:
- server имя-сервера # несколько локальных серверов для надежности
- server 127.127.1.0 # если все они выйдут из строя
- fudge 127.127.1.0 stratum 10
- driftfile /etc/ntp/drift # /usr/local/etc/ntp/drift
- restrict default noquery
- restrict IP-блок mask маска-блока nomodify
- restrict 127.0.0.1
- # настройка сбора статистики по вкусу
Перед первым запуском xntpd лучше подстроить часы
вручную (ntpdate -B; дождаться завершения!).
В любом случае местное время не должно отличаться больше, чем на 1000 секунд
(CLOCK_WAYTOOBIG), время прохождения пакета и получение ответа
д.б. меньше 1 секунды, ошибка частоты д.б. меньше 390 ppm.
Для тех компьютеров, на которых точное (30мс) время не так
важно, можно не занимать память громадным xntpd/ntpd (2 MB),
а запускать каждый час следующую команду:
ntpdate -B имя-NTP-сервера1 имя-NTP-сервера2 ...
Установка ntpd 4.2 в RH 4.1 не удалась и ntpdate не работает. Вывернулся так:
- исправить /usr/include/sched.h (добавить подчёркивание перед _P)
- закоментировать структуры IP6 в /usr/include/linux/in.h
- развернуть .tar.gz и зайти внутрь
- ./configure --enable-DUMBCLOCK --enable-LOCAL-CLOCK --with-crypto --with-sntp
- в config.h заменить установки:
#undef ISC_PLATFORM_HAVEIPV6
#undef ISC_PLATFORM_NEEDIN6ADDRANY
#undef KERNEL_PLL
- make (компилируется не всё)
- make install (устанавливается не всё)
- добавить в rc.local (скрипт работоспособен только после перехода сервера в устоявшийся режим,
на сервере нельзя задавать noquery для данного клиента):
ntpq -c rv ntp.systud.msk.su | grep 'clock=' | awk '{if ( $3 == "Jan" ) m = "01"; else if ( $3 == "Feb" ) m = "02"; else if ( $3 == "Mar" ) m = "03"; else if ( $3 == "Apr" ) m = "04"; else if ( $3 == "May" ) m = "05"; else if ( $3 == "Jun" ) m = "06"; else if ( $3 == "Jul" ) m = "07"; else if ( $3 == "Aug" ) m = "08"; else if ( $3 == "Sep" ) m = "09"; else if ( $3 == "Oct" ) m = "10"; else if ( $3 == "Nov" ) m = "11"; else if ( $3 == "Dec" ) m = "12"; print m $4 substr($6,1,2) substr($6,4,2) $5 "." substr($6,7,2)}'
Предварительно необходимо проделать дырки
в сетевом экране (UDP/123) для всех хостов, на которых работает
сервер NTP, получающий информацию снаружи
(Cisco IOS).
- прочитать руководство по установке
- взять и распаковать исходные тексты
- ./configure --disable-all-clocks --enable-LOCAL-CLOCK
(драйверы аппаратных часов отключить)
- make (не забудь добавить /usr/ccs/bin к PATH)
- make check
- make install
- оторвать системные часы от батареечных (tickadj -s)
- скрипт для автоматического запуск (/etc/rc2.d/S99xntpd)
#!/bin/sh
if [ $1 = "start" ]; then
if [ -x /usr/local/bin/xntpd ]; then
echo "Starting NTP daemon, takes about 1 minute... "
# The following line is unnecessary if you turn off
# dosynctodr in /etc/system.
/usr/local/bin/tickadj -s
/usr/local/bin/ntpdate -v server1 server2
sleep 60
/usr/local/bin/xntpd
fi
else
if [ $1 = "stop" ]; then
pid=`/usr/bin/ps -e | /usr/bin/grep xntpd | /usr/bin/sed -e 's/^*//' -e 's/ .*//'`
if [ "${pid}" != "" ]; then
echo "Stopping Network Time Protocol daemon "
/usr/bin/kill ${pid}
fi
fi
fi
- запуск сервиса вручную для первого раза
Для тех компьютеров, на которых точное (30мс) время не так
важно, можно не занимать память громадным xntpd/ntpd (2 MB),
а запускать каждый час следующую команду:
ntpdate -B имя-NTP-сервера1 имя-NTP-сервера2 ...
- -a (разрешить аутентификацию (по умолчанию))
- -A (запретить аутентификацию)
- -b (использовать широковещательные запросы)
- -c имя-конфигурационного-файла (по умолчанию /etc/ntp.conf)
- -d (отладка; чем больше раз указать, тем выше уровень)
- -D уровень-отладки
- -f имя-файла-смещения (по умолчанию /var/lib/ntp/drift)
- -g (не завершать работу аварийно, если расхождение с аппаратными часами
более 1000 секунд)
- -k имя-файла-ключей (по умолчанию /etc/ntp/keys)
- -l имя-журнала (по умолчанию на syslog)
- -L (слушать на виртуальных IP?)
- -m (использовать групповые запросы - 224.0.1.1)
- -n (dont fork)
- -N приоритет
- -p pid-файл (задаётся в ntp.conf)
- -q (установить время и завершиться; аналогично ntpdate, но с настройкой
частоты часов)
- -r задержка-широковещательных-запросов
- -s директория-статистики
- -t номер-ключа (добавить ключ в список доверенных)
- -T chroot-директория (должна содержать все необходимые ntpd файлы)
- -U uid (после запуска сбрасывать привилегии до указанного uid)
- -v имя-переменной (добавить системную переменную)
- -V имя-переменной
- -x (только плавные изменения времени)
Проблема. Время от времени опорные NTP-сервера перестают нас обслуживать.
xntpd переводит их при этом в стратум-0 и синхронизуется черт знает с чем.
Необходим автоматический отлов этой ситуации.
|
Bog BOS: ntpd (xntpd) - сервер NTP4 (NTP3)
|
Copyright © 1996-2024 Sergey E. Bogomolov; www.bog.pp.ru