четверг, 25 октября 2012 г.

Настройка ntpd, ntp-client

На днях вновь потребовалось настроить ntp и, как обычно, выяснилось, что за давностью лет предыдущей настройки все забыто нафик. Поэтому пишем себе заметочку на будущее, дабы в следующий раз не искать. Ну и моим читателям глядишь пригодится.

Немного теории про NTP, для общего развития, можно почитать тут

Установка
Платформой для установки нам послужит, как обычно, Gentoo. Служба ntp - net-misc/ntp.
Первым делом обновляем дерево портеджей:
# emerge --sync
Устанавливаем ntp, тут нам особые параметры не требуются(по крайней мере пока), поэтому ставим с юзами по умолчанию:
# emerge net-misc/ntp
Настройка сервера.

Определимся у кого будем брать время. Я предлагаю использовать сервера точного времени ФГУП «Всероссийский научно-исследовательский институт физико-технических и радиотехнических измерений» , Stratum 1 как никак.
ntp1.vniiftri.ru
ntp2.vniiftri.ru
ntp4.vniiftri.ru
Параметры запуска демона ntpd определяются в файле /etc/conf.d/ntpd
# /etc/conf.d/ntpd

# Options to pass to the ntpd process
# Most people should leave this line alone ...
# however, if you know what you're doing, feel free to tweak
NTPD_OPTS="-g -c /etc/ntp.conf"
Здесь -g -ключ разрешающий переход на большой скачек времени, -с -файл конфигурации службы ntp, чтобы указать pid-файл отличный от используемого по умолчанию можно использовать ключ -p, например:
NTPD_OPTS="-p /var/run/ntpd.pid -g -c /etc/ntp.conf"
Настройка службы ntp по умолчанию производится в файле /etc/ntp.conf, если указали в предыдущем пункте другой, то правим тот который указали
# /etc/ntp.conf
# Наш локальный сервер
server 192.168.0.1
# Серверы в сети
server 195.2.64.6
server ntp1.vniiftri.ru
server ntp2.vniiftri.ru
server ntp4.vniiftri.ru

#Пути к служебным файлам
driftfile /var/lib/ntp/ntp.drift
logfile /var/log/ntpd.log

# Разрешения на доступ к нашему серверу
restrict default ignore # По умолчанию доступ запрещен
restrict localhost # Локально можно все
restrict 192.168.0.0 mask 255.255.255.0 nomodify nopeer notrap # По внутренней сети можно только читать время

# Разрешаем синхронизироваться с внешними серверами, иначе синхронизация не пойдет.
restrict 127.0.0.1
restrict 192.168.0.1
restrict 195.2.64.6
restrict ntp1.vniiftri.ru
restrict ntp2.vniiftri.ru
restrict ntp4.vniiftri.ru

# Эта запись позволяет присвоить самому себе Stratum 3, чтобы сервер доверял сам себе
server 127.127.1.1
fudge 127.127.1.1 stratum 3
Запускаем ntpd
# /etc/init.d/ntpd start
Добавляем ntpd в автозагрузку
# rc-update add ntpd default
 Теперь нужно обождать минут 10 - 20, поскольку синхронизация происходит не сразу, а через некоторое время.

Проверяем на сервере
 # ntpq -p
Если в ответ получаем нечто похожее:

     remote           refid              st t when  poll   reach   delay    offset     jitter
==============================================================================
 192.168.0.1      .INIT.          16 u    -    1024    0      0.000    0.000   0.000
-ntp1.zenon.net  195.2.64.5   2   u  596  1024  377    2.261   -0.104   0.680
*ntp1.vniiftri.r     .PPS.           1   u  909  1024  377    4.266   -0.603   0.353
+ntp2.vniiftri.r     .PPS.           1   u  562  1024  377    3.914   -0.453   0.457
+ntp4.vniiftri.r     .PPS.           1   u  554  1024  377    4.487   -0.664   0.249
 LOCAL(1)        .LOCL.       3    l 229m   64     0      0.000    0.000   0.000
значит все нормально, синхронизация пошла. Поподробнее рассмотрим обозначения в полученной таблице.
Поля таблицы:
remote - имена удаленных ntp серверов
refid - сервер, с которым производит синхронизацию удаленный сервер ntp
st - стратум (уровень) удаленного сервера. 1 - самый высокий, 16 - рядовая машина/клиент.
t - тип пира (u = unicast, m = multicast, l = local)
when - указывает на то, как давно была произведена синхронизация с сервером
poll - частота в секундах, с которой NTP демон синхронизируется с пиром
reach - состояние доступности сервера, это значение стабилизируется на уровне 377 если последних 8 попыток синхронизации с удаленным сервером были успешны
delay - задержка (в миллисекундах) ответа от сервера
offset - разница в миллисекундах между системным временем и временем удаленного сервера; значение с минусом - отставание, с плюсом - убегание
jitter - смещение времени на удаленном сервере
Значки в строках таблицы:
* - пир, с которым была выполнена синхронизация последний раз
+ - пригодный для обновления сервер
- - непригодный для обновления сервер
х - сервер не отвечает

Проверяем на клиенте:
# ntpdate 192.168.0.1
 Если синхронизация прошла успешно, получим ответ следующего вида:
25 Oct 17:28:04 ntpdate[18335]: adjust time server 192.168.0.1 offset -0.016567 sec
Однако, возможно получить следующее сообщение:
25 Oct 17:29:14 ntpdate[18335]: no server suitable for synchronization found
Чтобы понять что за ерунда выполняем:
# ntpdate -d 192.168.0.1
Смотрим ответ:
192.168.0.1: Server dropped: strata too high
server 192.168.0.1, port 123
stratum 16, precision -8, leap 11, trust 000
Это означает, что уровень доверия очень мал (stratum=16, самый низкий уровень), то есть сервер сам себе не доверяет, чтобы отдавать время. Необходимо либо подождать, либо изменить список серверов, с которыми он синхронизируется. Поскольку в конфиге у нас прописано, что сервер наш stratum 3, то такое сообщение мы вряд ли увидим.

Настраиваем клиентов.

LINUX
Клиенты у меня тоже Gentoo, в основном, конфигурация клиента прописывается в файле /etc/conf.d/ntp-client. Тут не мудрим, оставляем все как есть, только указываем наш сервер в параметрах синхронизации:
# /etc/conf.d/ntp-client

# Command to run to set the clock initially
# Most people should just leave this line alone ...
# however, if you know what you're doing, and you
# want to use ntpd to set the clock, change this to 'ntpd'
NTPCLIENT_CMD="ntpdate"

# Options to pass to the above command
# This default setting should work fine but you should
# change the default 'pool.ntp.org' to something closer
# to your machine. See http://www.pool.ntp.org/ or
# try running `netselect -s 3 pool.ntp.org`.
NTPCLIENT_OPTS="-s -b -u 192.168.0.1"
Добавляем в автозагрузку:
# rc-update add ntp-client default
Следует иметь в виду, что служба ntp-client синхронизирует время только один раз, при запуске системы, поэтому для машин работающих длительное время без перезапуска делаем следующее:
Создаем в папке /etc/cron.hourly исполняемый файл со следующим содержимым
#!/bin/sh
NTPCLIENT_OPTS="-s -b -u 192.168.0.1"

ntpdate $NTPCLIENT_OPTS >> /dev/null 2>&1
Все, теперь наша машина будет синхронизироваться с ntp ежечасно.

WINDOWS 2003 Server
Все телодвижения выполняем в командной строке.
Указываем какой ntp сервер использовать для синхронизации:
#w32tm /config /syncfromflags:manual /manualpeerlist:192.168.0.1
#w32tm /config /update
Далее, в командной строке указываем приоритетный NTP сервер, перезапускаем службу точного времени и принудительно синхронизируем время:
#net time /setsntp:192.168.0.1
#net stop w32time && net start w32time
#w32tm /resync
В результате должны получить:
Команда синхронизации отправлена на local computer...
Команда выполнена успешно.
Через некоторое время можно проверить журнал событий системы. Если все настроено и отработало верно, то в журнале будет информационное сообщение от источника W32Time с кодом (ID) 37 и текстом "NTP-клиент поставщика времени получает правильные данные о времени от 192.168.0.1", а затем с кодом 35 и текстом "Служба времени выполняет синхронизацию системного времени с источником времени 192.168.0.1".

UPD
WINDOWS 2012 Server

Тут все аналогично Windows 2003 Server, но делаем все в Windows PowerShell запущенной от имени администратора.
Указываем какой ntp сервер использовать для синхронизации:
PS C:\> w32tm /config /syncfromflags:manual /manualpeerlist:192.168.0.1 /syncfromflags:MANUAL
PS C:\> w32tm /config /update
Далее, в командной строке перезапускаем службу точного времени и принудительно синхронизируем время:
PS C:\> Service-Stop w32time
PS C:\> Service-Start w32time
PS C:\> w32tm /resync
В результате должны получить:
Отправка команды синхронизации на локальный компьютер
Команда выполнена успешно.
Проверяем:
PS C:\> w32tm /query /status
На выходе должны получить нечто подобное:
Индикатор помех: 0(предупреждений нет)
Страта: 3 (вторичная ссылка - синхронизирована с помощью (S)NTP)
Точность: -6 (15.625ms за такт времени)
Задержка корня: 0.0356903s
Дисперсия корня: 7.8069513s
Идентификатор опорного времени: 0xC0A86301 (IP-адрес источника: 192.168.0.1)
Время последней успешной синхронизации: 22.03.2016 16:21:25
Источник: 192.168.0.1
Интервал опроса: 6 (64s)
Посмотреть текущую конфигурацию можно так:
PS C:\> w32tm /query /configuration
Через некоторое время можно проверить журнал событий системы. Если все настроено и отработало верно, то в журнале будет информационное сообщение от источника W32Time с кодом (ID) 37 и текстом "NTP-клиент поставщика времени получает правильные данные о времени от 192.168.0.1", а затем с кодом 35 и текстом "Служба времени выполняет синхронизацию системного времени с источником времени 192.168.0.1".


1 комментарий: