UMGUM.COM 

Инсталляция NTPd ( Инсталляция сервера NTPd. )

23 марта 2010  (обновлено 2 ноября 2014)

OS: Debian Lenny/Squeeze/Wheezy/Jessie.

Приводим в соответствие с действительностью нашу временную зону GMT. Это действительно важно для дальнейшей работы. Проверяем правильность установленной GMT:

# date

Должно получится что-то вроде этого:

Sat Oct 24 18:39:13 ALMT 2009

Устанавливаем необходимые пакеты:

# aptitude install ntp ntpdate

Подбираем список эталонных NTP серверов.
Идём по адресу http://www.ntp.org/ и подбираем начальный список серверов.
Отбираем из списка удовлетворяющие нашим требованиям серверы с помощью анализа вывода следующей комманды (ключ -d указывает на использование отладочного режима без внесения реальных изменений, ключ -q указывает на использование запроса времени без его применения в системе):

# ntpdate -q 0.asia.pool.ntp.org 1.asia.pool.ntp.org 2.asia.pool.ntp.org 3.asia.pool.ntp.org 4.asia.pool.ntp.org


Получаем что-то вроде этого:

Error : Name or service not known
24 Oct 19:31:53 ntpdate[28139]: can't find host 4.asia.pool.ntp.org
server 202.134.1.10, stratum 2, offset 0.677492, delay 0.59177
server 92.61.176.135, stratum 2, offset 0.741315, delay 0.63548
server 140.109.1.4, stratum 2, offset 0.699329, delay 0.54922
server 61.153.197.226, stratum 2, offset 0.689142, delay 0.46191
server 158.108.212.157, stratum 2, offset 0.734005, delay 0.55374
server 158.108.212.158, stratum 2, offset 0.731420, delay 0.54985
server 158.108.212.156, stratum 2, offset 0.722033, delay 0.52885
24 Oct 19:32:01 ntpdate[28139]: step time server 115.139.9.150 offset 0.654564 sec

Выбираем NTP серверы второго уровня (stratum 2).

Создаем, если он ещё не создан, конфигурационный файл службы ntpd (предварительно поискать, вдруг в текущей реализации сервера файл перенесён в другое место):

# cd /etc
# touch ntp.conf

Создаем, если они ещё не созданы, файл логов и файл для хранения смещения системного времени (предварительно поискать, вдруг в текущей реализации сервера файлы перенесены в другое место):

# cd /var/log
# touch ntp.log
# cd /var/lib/ntp
# touch ntp.drift

Приводим конфигурационный файл ntp.conf службы ntpd к следующему виду (рекомендуется в конфигурационном файле использовать не доменные имена, а IP; есть масса невнятных стонов о некорректной работе ntpd при разрешении доменных имён):

# IP эталонных NTP серверов
server 10.10.2.22 iburst burst prefer # имя другого нашего NTP сервера, значение которого будет приоритетно при прочих равных условиях
server server1.ip iburst burst
server server2.ip iburst burst
...
server serverX.ip iburst burst

# ACL
# restrict default ignore # запрещаем отвечать кому бы то ни было (запасное правило на всякий случай)
restrict default nomodify noquery notrap ntpport nopeer # разрешаем от всех запросы к нашему серверу но не принимаем никаких указаний на изменение состояния
restrict 127.0.0.1 # разрешаем принимать и отправлять запросы любого вида с localhost
restrict 10.10.2.22 # разрешаем принимать и отправлять запросы любого вида с другого нашего сервера точного времени

# Настройки приложения
driftfile /var/lib/ntp/ntp.drift # уточнить месторасположение для текущей версии приложения
logfile /var/log/ntp.log

Сразу договоримся, что служба NTPd будет заниматься только своим делом - корректировкой и раздачей времени, а не регламентированием доступа. Разрешения на доступ к этому серверу будем определять где угодно, но не силами самого сервера.

Если текущее системное время нашего NTP сервера не сильно отличается от фактического, то можно сразу запускать службу ntpd, иначе желательно обновить показания локальных часов с помощью утилиты ntpdate:

# ntpdate -b server0.name server1.name server2.name

Запуск или перезапуск службы ntpd элементарен:

# /etc/init.d/ntp start
# /etc/init.d/ntp restart

Для теста можно запустить иначе, но служба не будет управляма с помощью стандартного скрипта:

# /usr/sbin/ntpd &

Проверяем факт запуска ntpd:

# ps wax | grep ntpd | grep -v grep

Получаем что-то вроде этого:

2195 /usr/sbin/ntpd -p /var/run/ntpd.pid

Остановка:

# /etc/init.d/ntp stop

Или следующим образом:

# /bin/kill `cat /var/run/ntpd.pid`

Если мы запускали службу ntpd не с помощью стандартного управляющего скрипта, то придеться искать процесс службы и останавливать его вручную.

Смотрим состояние ntpd:

# /usr/bin/ntpdc -s -n

Получаем примерно такое:

     remote           local      st poll reach  delay   offset    disp
-----------------------------------------------------------------------
.79.124.0.10     10.0.2.21        2  128  373 0.26662 -0.043952 0.07156
120.88.47.10    10.0.2.21        2  128  376 0.45685  0.016082 0.07793
*38.117.195.101  10.0.2.21        2  128  357 0.25211 -0.047911 0.11281
.209.167.68.100  10.0.2.21        2  128  277 0.23950 -0.037958 0.11118

Знаки перед именами серверов означают:
пробел - слишком большой уровень, цикл или явная ошибка;
x - фальшивый источник по алгоритму пересечения;
. - исключён из списка кандидатов из-за большого расстояния;
- - удалено из списка кандидатов алгоритмом кластеризации;
+ - входит в конечный список кандидатов;
# - выбран для синхронизации, но есть 6 лучших кандидатов;
* - выбран для синхронизации;
o - выбран для синхронизации, но используется PPS.

Наиболее интересное нам поле: "offset". Это разница между показателями локальных часов компьютера и эталонных NTP серверов. Чем меньше этот показатель, тем точнее идут наши часы. Служба ntpd "умная" и сама отсеивает источники времени слишком выбивающиеся за рамки разумного; через некоторое время после запуска ntpd выберет наиболее достоверные источники данных и будет синхронизироваться с ними. Представленный нами список эталонных NTP серверов регулярно пересматривается службой.

Следующая команда покажет нам полный список используемых эталонных NTP серверов:

# /usr/bin/ntpdc -c list

Получим что-то вроде этого:

client    ns.airbites.bg
client    120-88-47-10.infra.hnsdc.com
client    ns1.your-site.com
client    zeus.yocum.org

Смотрим обобщённую статистику ntpd:

# /usr/bin/ntpdc -c sysinfo -n

Получаем примерно такое:

system peer:          79.124.0.10
system peer mode:     client
leap indicator:       00
stratum:              3
precision:            -20
root distance:        0.33919 s
root dispersion:      0.18980 s
reference ID:         [79.124.0.10]
reference time:       ce8dab92.4e33abaf  Sat, Oct 24 2009 22:36:34.305
jitter:               0.068192 s
stability:            0.000 ppm
broadcastdelay:       0.003998 s
authdelay:            0.000000 s

Ждем, когда служба выйдет в состояние стабильного полёта и получит уровень (stratum) от 2 до 4. Как только это состоялось, мы получаем работающий NTP сервер в сети. Ранее, чем за пятнадцать-двадцать минут этого не произойдет, так что - самое время пойти заваривать кофе.

Так или иначе, но в процессе штатной инсталляции ntpd создаётся конфигурация автоматического запуска службы ntpd; при удачном расположении Луны нам не придётся заботиться о создании скриптов запуска службы.

Возможно, будет полезным втиснуть в работу службы скрипт ежесуточной приостановки службы ntpd и запуска ntpdate для компенсации возможных погрешностей в работе службы, вызванной теми или иными причинами.

Для этого следует разместить в таблице заданий cron по адресу "/etc/crontab" указание на запуск скрипта (каждые сутки, в первую минуту семи часов утра):

1 7 * * * root /etc/custom/ntpscript.sh

Исполняемый скрипт должен иметь следующее содержимое:

#!/bin/sh
/etc/init.d/ntp stop
sleep 5
/usr/sbin/ntpdate ru.pool.ntp.org
sleep 5
/etc/init.d/ntp start

На тот случай, если у нас нет возможности синхронизироваться с внешними NTP серверами или есть свой собственный эталон времени, подключённый к NTP серверу, можно в конфигурационный файл ntp.conf вставить строки, объявляющие локальные часы компьютера своего рода эталонным NTP сервером с повышенным уровнем (stratum):

server 127.127.1.0 # условный, для приложения, адрес NTP сервера, ассоциированного с локальным таймером компьютера
fudge 127.127.1.0 stratum 1 # принудительно объявляем локальные часы компьютера эталонным NTP сервером уровня (statum) 1


Заметки и комментарии к публикации:


Оставьте свой комментарий ( выразите мнение относительно публикации, поделитесь дополнительными сведениями или укажите на ошибку )