Включение ntp сервера. Пример настройки локального NTP сервера для работы с устройствами NetPing


Синхронизация времени является важной задачей, хотя не многие задумывались об этом. Ну что плохого в убежавшем на сервере времени? А знаете ли вы, что многие проблемы с часами влияют на протоколы, связанные с криптографией? По этой причине в Active Directory разница в часах более 5 минут будет приводить к проблемам аутентификации Kerberos.

Часовые уровни. Strata.

Чтобы понять устройство NTP следует знать про концепцию strata или stratum . Авторитетные источники времени, такие как спутники GPS, цезиевые атомные часы, радио волны WWVB - всё это stratum 0 . Они авторитетны на том основании, что у них есть некоторый способ поддержания высокоточного хронометража. Можно, конечно, воспользоваться обычными кварцевыми часами, но зная, что за месяц с ними легко потерять 15 секунд, то лучше их не использовать в качестве мерила времени. Stratum 0 это когда секунда не потеряется за 300 000 лет!

Компьютеры, которые напрямую (не по сети!) берут время у stratum 0 - это stratum 1 . Так как всегда есть задержки из-за передачи сигнала и затраты на установку времени, то компьютеры stratum 1 не так точны как stratum 0 , но в реальной жизни различие достигает пару микросекунд (1 мкс = 10 -6 с), что вполне допустимое отклонение.

Следующий уровень компьютеров, берущих время по сети у stratum 1 - это... барабанная дробь... интрига... stratum 2 ! Опять таки из-за различных задержек (сетевые точно), stratum 2 чуток отстаёт от stratum 1 и уж точно от stratum 0 . На практике это разница от нескольких микросекунд (1 мкс = 10 -6 с) до нескольких миллисекунд (1 мс = 10 -3 с). Многие хотят синхронизироваться со слоем не дальше stratum 2 .

Как понятно из схемы, stratum 4 берёт время у вышестоящего stratum 3 . stratum 5 у stratum 4 и так далее. stratum 16 считается самым нижним слоем и время там считается несинхронизированным .

Чтобы синхронизировать время с помощью протокола NTP, следует сначала вручную выставить ваше время. Недопустима разница между вашим точным временем и показаниями ваших часов более 1000 секунд. Если используемый вами сервер времени врёт более 1000 миллисекунд (1 секунда), то он будет исключён из списка и будут использоваться другие вместо него. Данный механизм позволяет отсеивать плохие источники времени.

Клиент времени.

В файле /etc/ntp.conf для клиента важны строки Server. Их может быть несколько - до 10 штук!

Сколько добавлять? Следует иметь в виду:

  • Если у вас только один сервер (одна строка server), то если данный сервер начнёт врать, то вы будете слепо следовать за ним. Если его время убежит на 5 секунд и вы убежите в след за ним.
  • Если добавлено 2 сервера (2 строки server), то NTP пометит их обоих как false tickers . Если один из них будет врать, то NTP не может понять кто врёт, так как нет кворума.
  • Если добавлено 3 и более сервера времени, то можно вычислить одного вруна false tickers . Если серверов времени 5 или 6, то можно найти 2 вруна false tickers . Если серверов 7 или 8, то 3 false tickers . Если серверов 9 и 10, то 4 false tickers .

Проект NTP Pool.

Есть такой проект NTP Pool по адресу которого pool.ntp.org/zone/ru/ можно найти рекомендованные для русских пользователей сервера времени.

server 0.ru.pool.ntp.org
server 1.ru.pool.ntp.org
server 2.ru.pool.ntp.org
server 3.ru.pool.ntp.org

Такие операционные системы, как Debian и Ubuntu, предлагают пользователям свои сервера времени.

server 0.debian.pool.ntp.org
server 1.debian.pool.ntp.org
server 2.debian.pool.ntp.org
server 3.debian.pool.ntp.org

server 0.ubuntu.pool.ntp.org
server 1.ubuntu.pool.ntp.org
server 2.ubuntu.pool.ntp.org
server 3.ubuntu.pool.ntp.org

Если вызвать на вашем Linux компьютере, который использует NTP, команду ntpq -pn

Remote refid st t when poll reach delay offset jitter ============================================================================== +93.180.6.3 77.37.134.150 2 u 62 1024 377 53.658 -0.877 1.174 +85.21.78.23 193.190.230.65 2 u 1027 1024 377 54.651 0.167 1.531 *62.173.138.130 89.109.251.24 2 u 940 1024 377 52.796 -0.143 1.001 +91.206.16.3 194.190.168.1 2 u 258 1024 377 93.882 -0.680 2.196 -91.189.94.4 193.79.237.14 2 u 596 1024 377 100.219 1.562 1.482

О чём говорят названия столбцов:

  • remote - удалённые сервера, с которыми вы синхронизируете время.
  • refid - вышестоящий stratum для данного сервера.
  • st - уровень stratum. От 0 (нам недоступно) до 16 (нам не желательно). Идеально - 2.
  • t - тип соединения. "u " - unicast или manycast, "b " - broadcast или multicast, "l " local reference clock, "s " - симметричный узел, "A " - manycast сервер, "B " - broadcast server, "M " - multicast сервер.
  • when - время, когда последний раз сервер ответил нам. Параметр отображает число в секундах, но может в минутах, если число с m или в часах, если h .
  • poll - частота опроса. Минимум 16 секунд, максимум 32 часа. Число должно быть 2 n . Обычно в данном параметре наблюдается или 64 секунды или 1024.
  • reach - 8 бит октета, показывающий статус общения с удалённым сервером времени: успешный или сбойный. Если биты установлены - то успешно, иначе - сбой. Значение 377 - бинарно это 0000 0000 1111 1111.
  • delay - значение в миллисекундах показывает время между отправкой и получения ответа (round trip time - RTT).
  • offset - смещение в миллисекундах между вами и серверами времени. Может быть положительным и отрицательным числом.
  • jitter - абсолютное значение в миллисекундах с указанием среднеквадратичного отклонения вашего смещения.

Перед IP адресом NTP сервера есть символ - это tally code . Виды tally code :

  • " " - отброшен как недопустимый. Например, нет связи с ним или он в оффлайн, он слишком высокого ранга и не обслуживает таких как вы.
  • "x" - отброшен алгоритмом "пересечения" (intersection algorithm). Алгоритм пересечения подготавливает список кандидатов партнеров, могущих стать источниками синхронизации и вычисляет доверительный интервал для каждого из них.
  • "." - отброшен из-за переполнения таблицы.
  • "-" - отброшен алгоритмом кластеризации (cluster algorithm). Алгоритм кластеризации сортирует список кандидатов по кодам слоя и расстояния синхронизации.
  • "+" - сервер включён алгоритмом "комбинирования" (combine algorithm). Этот сервер - отличный кандидат если текущий сервер времени начнёт отказывать вам.
  • "#" - сервер является отличным альтернативным сервером времени. Сервер с # можно увидеть только если у вас более 10 записей server в /etc/ntp.conf
  • "*" - текущий сервер времени. Его показания используются для синхронизации ваших часов.
  • "o" - сервер Pulse per second (PPS). Обычно это означает, что данный сервер времени использует источники времени типа GPS спутников и другие сигналы точного времени. Если рисуется о , то другие типы tally code уже отображаться не будут.

В поле refid могут быть следующие значения:

  • IP адрес - адрес удалённого сервера времени.
  • .ACST.- NTP manycast сервер.
  • .ACTS.- Automated Computer Time Service из American National Institute of Standards and Technology.
  • .AUTH.- ошибка аутентификации.
  • .AUTO.- ошибка в последовательностях Autokey.
  • .BCST.- NTP broadcast сервер.
  • .CHU.- Shortwave radio receiver от станции CHU в Ottawa, Ontario, Canada.
  • .CRYPT.- ошибка протокола Autokey.
  • .DCFx.- LF radio receiver от станции DCF77 в Mainflingen, Germany.
  • .DENY.- В доступе отказано.
  • .GAL.- European Galileo satellite receiver.
  • .GOES.- American Geostationary Operational Environmental Satellite receiver.
  • .GPS.- American Global Positioning System receiver.
  • .HBG.- LF radio receiver от станции HBG в Prangins, Switzerland.
  • .INIT.- Peer association initialized.
  • .IRIG.- Inter Range Instrumentation Group time code.
  • .JJY.- LF radio receiver от станции JJY в Mount Otakadoya, рядом с Fukushima или Mount Hagane на острове Kyushu, Japan.
  • .LFx.- Обычный LF radio receiver.
  • .LOCL.- локальные часы хоста.
  • .LORC.- LF radio receiver от Long Range Navigation (LORAN-C).
  • .MCST.- NTP multicast сервер.
  • .MSF.- Anthorn Radio Station рядом с Anthorn, Cumbria.
  • .NIST.- American National Institute of Standards and Technology.
  • .PPS.- часы Pulse per second.
  • .PTB.- Physikalisch-Technische Bundesanstalt от Brunswick и Berlin, Germany.
  • .RATE.- превышен порог опроса NTP.
  • .STEP.- изменение шага NTP. Смещение offset менее 1000 миллисекунд, но более 125 миллисекунд.
  • .TDF.- LF radio receiver от станции TéléDiffusion de France в Allouis, France.
  • .TIME.- NTP association timeout.
  • .USNO.- United States Naval Observatory.
  • .WWV.- HF radio receiver от станции WWV в Fort Collins, Colorado, United States.
  • .WWVB.- LF radio receiver от станции WWVB в Fort Collins, Colorado, United States.
  • .WWVH.- HF radio receiver от станции WWVH в Kekaha, на острове Kauai на Hawaii, United States.

Во-первых, избавьтесь от мысли как бы получить время от stratum 1 , дескать они ближе всех к точному времени. Они то ближе к точнейшему времени на планете, только сами они перегружены и у них высокие задержки RTT для обычных серверов. Лучше найти нормальный stratum 2 и не переживать по этому поводу. Не забывайте, что речь идёт о микросекундах и миллисекундах, что в обычной жизни - вполне достаточно.

Во-вторых, помните, что подключение к ближайшему серверу времени не всегда идеальный вариант. Важнее не территориальная близость, а уровень stratum. Проект NTP Pool публикует список серверов только уровня stratum 1 и stratum 2 и лучше взять до 10 серверов времени из данного списка, что будет просто замечательно.

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

Для крупных контор, лучшим вариантом будет поднятие своего сервера времени для рабочих компьютеров. Данный сервер будет получать точное время от серверов времени в Интернете и предоставлять его локальным компьютерам. На серверах Debian и Ubuntu достаточно раскомментировать строку

Restrict 192.168.0.0 mask 255.255.0.0 nomodify notrap

в конфигурационном файле демона ntpd - /etc/ntp.conf

Пользователи из сети 192.168/16 будут иметь возможность брать с вашего сервера показания точнейших часов. Для внутренних серверов на базе Linux, которые не являются серверами времени и занимаются своими задачами, вместо запуска демона ntpd в клиентском режиме - вполне достаточно указать в файле /etc/cron.daily/syncntpd. Рекомендуется прочесть различия между ntpdate и ntp и решить для себя вопрос.
#!/bin/sh
/usr/sbin/ntpdate IP.адрес.вашего.сервера > /dev/null 2>&1
exit 0

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

В-четвёртых, NTP никак не связан, в какой стране и какие часовые пояса используются и как происходит переход на летнее и зимнее время и делается ли в данной стране такой переход. Это обязанность лежит на операционной системе, которую вам нужно обновлять, если в стране происходят изменения в часовых делах. В системах Debian и Ubuntu за это отвечает пакет tzdata, который должен быть актуальным.

В-пятых, лучше не поднимать свой NTP сервер на высоконагруженной системе.

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

Протокол 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

  • теперь немного подробнее по каждому пункту:

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 , proto UDP (17), length 76)
10.5.104.11.ntp > oto.ua.mti.ntp: 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, при котором коррекция сможет производиться всегда.

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

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

Ubuntu использует ntpdate и ntpd.

ntpdate

Ubuntu стандартно устанавливается с ntpdate и будет запускать его при каждой загрузке один раз для установки времени по NTP серверу Ubuntu.

Ntpdate -s ntp.ubuntu.com

ntpd

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

Установка

Для установки ntpd из терминала введите:

Sudo apt-get install ntp

Настройка

Отредактируйте /etc/ntp.conf для добавления/удаления серверов. По умолчанию эти сервера такие:

# Use servers from the NTP Pool Project. Approved by Ubuntu Technical Board # on 2011-02-08 (LP: #104525). See http://www.pool.ntp.org/join.html for # more information. server 0.ubuntu.pool.ntp.org server 1.ubuntu.pool.ntp.org server 2.ubuntu.pool.ntp.org server 3.ubuntu.pool.ntp.org

После изменений конфигурационного файла вам надо перезапустить ntpd:

Sudo service ntp restart

Просмотр статуса

Используйте ntpq для просмотра дополнительной информации:

# sudo ntpq -p remote refid st t when poll reach delay offset jitter ============================================================================== +stratum2-2.NTP. 129.70.130.70 2 u 5 64 377 68.461 -44.274 110.334 +ntp2.m-online.n 212.18.1.106 2 u 5 64 377 54.629 -27.318 78.882 *145.253.66.170 .DCFa. 1 u 10 64 377 83.607 -30.159 68.343 +stratum2-3.NTP. 129.70.130.70 2 u 5 64 357 68.795 -68.168 104.612 +europium.canoni 193.79.237.14 2 u 63 64 337 81.534 -67.968 92.792

Введение.

Система Linux, как и большинство других современных операционных систем, фактически имеет двое часов. Первые часы - аппаратные, иногда называемые Real Time Clock, сокращенно (RTC), или часы BIOS, обычно они связаны с колеблющимся кварцевым кристаллом, имеющим точность хода до нескольких секунд в день. Точность зависит от различных колебаний, например, окружающей температуры. Вторые часы - внутренние программные часы, которые идут непрерывно, в том числе и при перерывах в работе системы. Они подвержены отклонениям, связанным с большой системной нагрузкой и задержкой прерываний. Однако система обычно считывает показания аппаратных часов при загрузке и потом использует системные часы. Команда date, устанавливает не аппаратные, а системные часы.

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

Микросхема часов реального времени (ЧРВ), используемая на материнских платах, не особенно точна и обычно отстает, или забегает вперед на определенное время каждый день.

Можно синхронизировать аппаратные часы с системными при помощи команды hwclock с опцией -w или —systohc и синхронизировать системные часы с аппаратными при помощи команды hwclock с опцией -s или –hctosys.

Настройка.

Для начала в файле /etc/ntp.conf добавляем строчку:

Время будет синхронизироваться с указанного сервера. Если первый недоступен берутся следующие по списку. Первым прописал локальный сервер NTP.

Следующий момент, устанавливает локальное или всемирное время будет использоваться.

#cat /etc//etc/sysconfig/clock

У нас не то:

Правим ZONE – на "Europe/Moscow"

Получаем:

UTC=true системные часы не используют универсальное представление времени

ARC=true Используется нормальная эпоха UNIX.

Временная зона под Linux устанавливается через символическую ссылку, из /etc/localtime на файл из директории /usr/lib/zoneinfo(или /usr/share/zoneinfo), чем указывается в какой временной зоне вы находитесь.

Рисунок. Содержимое /usr/share/zoneinfo

Выполняем команды.

rm -rf /etc/localtime

ln -s /usr/share/zoneinfo/Europe/Moscow /etc/localtime

Все работает!

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

Данная команда показывает, к каким серверам производиться подключение.

Дополнение:

Установка аппаратных часов

Для установки аппаратных часов, установите сначало системное время а потом уже аппаратное используя программу «/sbin/clock -w» (или«/sbin/clock -wu» в случае использования всемирного времени).Чтобы узнать аппаратное время запустите clock без параметров. Если аппаратные часы установлены в локальное время а вы хотите увидеть всемирное наберите «/sbin/clock –u»

Установка системных часов

Для установки системных часов в Линуксе, используется программа date. Для примера установка текущего времени (системного!) и даты на 31 июля, 23:16,наберите «date 07312316» (обратите внимание что время дано в 24-часовой записи) Если вы хотите изменить год то набиретие «date 073123161998». Для установки секунд набирите «date 07312316.30» или «date 073123161998.30». Чтобы узнать системное время запустите date без аргументов.

Используемые источники.