пятница, 30 мая 2014 г.

Установка и настройка сервера времени ntp в Linux

  Сетевой протокол задания времени NTP (network time protocol; Network Time Protocol Version 3 Specification, Implementation and Analysis, David L. Mills, RFC-1305, March 1992) служит для осуществления синхронизации работы различных процессов в серверах и программах клиента. Он определяет архитектуру, алгоритмы, объекты и протоколы, используемые для указанных целей. NTP был впервые определен в документе RFC-958 [MIL85c], но с тех пор несколько раз переделан и усовершенствован (RFC-1119 [MIL89]). Протокол использует для транспортных целей UDP [POS80]. Целью протокола является обеспечение максимально возможной точности и надежности, несмотря на значительный разброс задержек при прохождении через большое число промежуточных маршрутизаторов.


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

  Точность, достижимая с помощью NTP, сильно зависит от точности локальных часов и характерных скрытых задержек. Алгоритм коррекции временной шкалы включает внесение задержек, коррекцию частоты часов и ряд механизмов, позволяющих достичь точности порядка нескольких миллисекунд, даже после длительных периодов, когда потеряна связь с синхронизирующими источниками.
Для наглядности предоставляю архитектуру  NTP

  •  Установим сервер времени:
CentOS: yum install ntp
Arch Linux: pacman -S ntp
Ubuntu, Debian: apt-get install ntp

  • Отредактируем файл конфигурации:
#vim /etc/ntp.conf
  • У меня листинг следующий:
logfile /var/log/ntp.log
driftfile /var/lib/ntp/drift

disable monitor

server 31.28.161.68 iburst
server 193.67.79.202 iburst
server 62.149.0.30 iburst

server 198.123.30.132 iburst


server 127.127.1.0
fudge 127.127.1.0 stratum 10

restrict default ignore
restrict 127.0.0.1
restrict 10.0.0.0 mask 255.0.0.0 nomodify notrap

  • теперь немного подробнее по каждому пункту:
___________________________________________
logfile /var/log/ntp.log
Путь куда ntp будет писать свой лог
___________________________________________
driftfile /var/lib/ntp/drift 
Путь к дрифт файлу
___________________________________________
disable monitor
Устранение уязвимости, позволяющей использовать сервер синхронизации времени для проведения DDoS-атак, путем многократного увеличения трафика
___________________________________________
server 31.28.161.68 iburst
Добавляем сервера с которых будет производится синхронизация 
Опция 'iburst' рекомендуется, с ее помощью посылается шквал пакетов, если не удается установить соединение с сервером с первого раза. Напротив, опцию 'burst' не используйте никогда без особого разрешения, так как Вы можете попасть в "черный список".
___________________________________________
server 127.127.1.0
fudge 127.127.1.0 stratum 10
Эти два пункты предназначены для работы сервера времени в случае потери связи с эталонными серверами. Параметром fudge мы назначаем стратум для локального сервера.
___________________________________________
restrict default ignore
Запрещаем всем использовать наш сервер времени
___________________________________________
restrict 127.0.0.1
Разрешаем использовать наш сервер для локалхоста.
___________________________________________
restrict 10.0.0.0 mask 255.0.0.0 nomodify notrap
Разрешаем использовать наш сервер для сети 10.*.
nomodify notrap - не позволять хосту/подсети менять любые настройки NTPD нашего сервера.
___________________________________________

  • Сохраняемся, выходим, наш сервер настроен, осталось перезапустить демон.
CentOS: service ntpd restart
Arch Linux: systemctl restart ntpd
Ubuntu, Debian: service ntp restart
OpenSUSE: service ntp restart

  • Ждем минут 5-10, в зависимости от вашей железки и смотрим
#ntpq -pn

     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
+10.18.1.13      10.44.0.15       3 u    2  128  377    7.306   13.106  11.948
*10.18.0.53      198.123.30.132   2 u   62  128  377    7.156   10.279   4.308
+10.18.0.52      79.53.154.33     3 u   61  128  377    7.469    1.791   4.898
 127.127.1.0     .LOCL.          10 l   56   64  377    0.000    0.000   0.001

  • А означает наша таблица следующее:

remote - имена удаленных ntp серверов;
refid - сервер, с которым производит синхронизацию удаленный сервер ntp (то есть ntp-сервер для remote);
st - стратум (вес) удаленного сервера. Чем меньше значение - тем точнее время на этом сервере;
t - тип пира (u = unicast, m = multicast);
when - указывает на то, как давно была произведена синхронизация с сервером;
poll - частота в секундах, с которой NTP демон синхронизируется с пиром;
reach - состояние доступности сервера. Это значение стабилизируется на уровне 377 если последних 8 попыток синхронизации с удаленным сервером были успешны;
delay - задержка ответа от сервера;
offset - разница в миллисекундах между системным временем и временем удаленного сервера; значение с минусом - отставание, с плюсом - наши часики спешат;
jitter - смещение времени на удаленном сервере.

Просьба также обратить внимание на спецсимволы в поле перед remote:
"*" - указывает на сервер, с которым последний раз была произведена синхронизация;
"+" - сервер возможно использовать в качестве сервера точного времени
"-" - не рекомендуется для использования.
  • Посмотреть статус нашего сервера можно с помощью:
root@oto:(~)ntpstat
synchronised to NTP server (10.44.0.16) at stratum 3
time correct to within 1170 ms
polling server every 64 s



  • Иногда при синхронизации Windows клиента на стороне сервера можем наблюдать вот такое сообщение:

tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
18:09:16.326827 IP (tos 0x0, ttl 125, id 26677, offset 0, flags [none], proto UDP (17), length 76)
    10.5.104.11.ntp > oto.ua.mti.ntp: [udp sum ok] NTPv3, length 48
symmetric active, Leap indicator: clock unsynchronized (192), Stratum 0 (unspecified), poll 10s, precision -6
Root Delay: 0.000000, Root dispersion: 1.015625, Reference-ID: (unspec)
 Reference Timestamp:  0.000000000
 Originator Timestamp: 0.000000000
 Receive Timestamp:    0.000000000
 Transmit Timestamp:   3961667129.750000000 (2025/07/16 18:05:29)
   Originator - Receive Timestamp:  0.000000000

   Originator - Transmit Timestamp: 3961667129.750000000 (2025/07/16 18:05:29)


Это нам говорит о том что виндовс не верит нашему времени, слишком большое розхождение во времени клиента и сервера.

Максимальная положительная и отрицательная коррекция времени (разница между внутренними часами и источником синхронизации) в секундах, при превышении которой синхронизация не происходит. Рекомендую значение 0xFFFFFFFF, при котором коррекция сможет производиться всегда.
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config] "MaxPosPhaseCorrection"=dword:FFFFFFFF "MaxNegPhaseCorrection"=dword:FFFFFFFF

Комментариев нет:

Отправить комментарий

Установка последнего стабильного ядра в RHEL-7, SL-7 or CentOS-7

В этом кратком руководстве, мы покажем вам, как  модернизировать ядро своего CentOS 7 до последней стабильной версии. Я собираюсь использов...