Сетевой протокол задания времени 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- Установим сервер времени:
Arch Linux: pacman -S ntp
Ubuntu, Debian: apt-get install ntp
- Отредактируем файл конфигурации:
- У меня листинг следующий:
logfile /var/log/ntp.log
driftfile /var/lib/ntp/drift
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 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
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
___________________________________________
server 31.28.161.68 iburst
Устранение уязвимости, позволяющей использовать сервер синхронизации времени для проведения DDoS-атак, путем многократного увеличения трафика
server 31.28.161.68 iburst
Добавляем сервера с которых будет производится синхронизация
Опция 'iburst' рекомендуется, с ее помощью посылается шквал пакетов, если не удается установить соединение с сервером с первого раза. Напротив, опцию 'burst' не используйте никогда без особого разрешения, так как Вы можете попасть в "черный список".
server 127.127.1.0
fudge 127.127.1.0 stratum 10
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 нашего сервера.
- Сохраняемся, выходим, наш сервер настроен, осталось перезапустить демон.
Arch Linux: systemctl restart ntpd
Ubuntu, Debian: service ntp restart
Ubuntu, Debian: service ntp restart
OpenSUSE: service ntp restart
- Ждем минут 5-10, в зависимости от вашей железки и смотрим
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:
"*" - указывает на сервер, с которым последний раз была произведена синхронизация;
"+" - сервер возможно использовать в качестве сервера точного времени
"-" - не рекомендуется для использования.- Посмотреть статус нашего сервера можно с помощью:
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, при котором коррекция сможет производиться всегда.
Комментариев нет:
Отправить комментарий