Network Time Protocol daemon (Русский)
Network Time Protocol daemon (Русский)
Network Time Protocol является одним из самых распространённых методов для синхронизации системных часов на GNU/Linux с серверами времени в интернете. Он разработан для смягчения последствий переменной задержки в сети и обычно может поддерживать время с точностью до десятков миллисекунд при синхронизации через интернет. Точность в локальных сетях даже лучше, до одной миллисекунды.
The NTP Project предоставляет эталонную реализацию протокола, которая называется просто NTP. Эта статья описывает, как установить и запустить демон NTP: как клиент, так и сервер.
Смотрите System time#Time synchronization для информации о других реализациях NTP.
Contents
Установка
Установите пакет ntp . По умолчанию ntpd работает в режиме клиента и не требует дополнительной настройки. Вы можете перейти к разделу #Использование, если вас устраивает стандартный файл конфигурации Arch. Для настройки сервера смотрите #Режим сервера NTP.
Настройка
Основной демон ntpd настраивается в файле /etc/ntp.conf . Смотрите ntp.conf(5) для дополнительной информации.
Подключение к серверам NTP
NTP-серверы выстроены в многоуровневую иерархию; уровни называются слоями (англ. strata). Устройства, которые считаются самостоятельными источниками времени, считаются первичными (stratum 0); серверы, непосредственно подключённые к stratum 0 устройствам, считаются источниками stratum 1; серверы, подключенные к stratum 1 серверам, считаются источниками stratum 2 и так далее.
Важно понимать, что слой сервера не может рассматриваться как показатель его точности или надёжности. Обычно для синхронизации пользовательских машин используются stratum 2 серверы. Если вы ещё не знаете, к каким серверам вы собираетесь подключиться, вам следует выбрать пул серверов, расположенный недалеко от вашего местоположения, из списка серверов на pool.ntp.org (альтернативная ссылка).
Начиная с ntp version 4.2.7.p465-2, Arch Linux использует свой собственный стандартный пул NTP-серверов, который предоставляет the NTP Pool Project (смотрите FS#41700). Измените его под свои нужды, например если вы хотите использовать сервера своей страны:
Опция ‘iburst’ рекомендуется, с ее помощью посылается шквал пакетов, если не удается установить соединение с сервером с первого раза. Напротив, опцию ‘burst’ не используйте никогда без особого разрешения, так как Вы можете попасть в «черный список».
Режим сервера NTP
При настройке своего NTP-сервера проверьте, что у вас включен orphan mode, чтобы в случае пропажи интернета он продолжил обслуживать сеть; включите orphan mode с помощью параметра tos (может настроить до stratum 15), чтобы он никогда не использовался, пока интернет доступен:
Затем определите правила, которые позволят клиентам подключиться к вашему сервису (localhost тоже считается клиентом) с помощью команды restrict; в файле уже должна быть примерно такая строка:
Она запрещает всем модифицировать что-либо и предотвращает запрос статуса вашего сервера: nomodify запрещает перенастройку ntpd (через ntpq или ntpdc), а noquery важен для предотвращения дампа статуса ntpd (тоже через ntpq или ntpdc).
Можете также добавить следующие опции:
Если вы хотите изменить что-то из этого, читайте полную документацию по опции «restrict» в ntp.conf(5) , подробные инструкции по ntp и #Использование.
Теперь нужно указать ntpd, какие подключения к Вашему серверу разрешены; если Вы не конфигурируете сервер NTP, следующей строки будет достаточно:
Если Вы желаете принудительно определить адреса по протоколу IPv6, напишите -6 перед IP-адресом или именем хоста (-4 принудительно устанавливает протокол IPv4), например:
Наконец, установите файл-буфер (в котором будет находиться погрешность часов системы) и журнал (лог):
Примерная конфигурация выглядит так:
Использование
По умолчанию пакет настроен на режим клиента и использует отдельные пользователя и группу для избавления от root-прав. При ручном запуске через консоль всегда указывайте опцию -u :
Опция -u используется в двух systemd-службах. Они также используют опцию -g , которая отключает порог (panic-gate). Таким образом они будут синхронизировать время даже если время на NTP-серверах очень сильно отличается от локального системного времени.
Both services are tied to the system’s resolver, and will start synchronizing when an active network connection is detected.
Запуск ntpd при загрузке системы
Включите службу ntpd.service . Смотрите также #Запуск в chroot.
Используйте ntpq для просмотра списка настроенных пиров и статуса синхронизации:
Задержка, смещение и джиттер должны быть отличны от нуля. Серверы, с которыми синхронизируется ntpd, отмечены звёздочкой. Может потребоваться несколько минут, прежде чем ntpd выберет сервер для синхронизации; попробуйте проверить через 17 минут (1024 секунды).
Синхронизация один раз при загрузке
В качестве альтернативы включите службу ntpdate.service для однократной синхронизации (опция -q ) в non-forking режиме (опция -n ) при загрузке системы вместо запуска постоянно работающего демона в фоне. Этот метод не рекомендуется на серверах и в целом на машинах, которые работают без перезагрузки более нескольких дней.
Если синхронизированное время нужно записать в аппаратные часы компьютера, создайте drop-in файл для этой службы:
Советы и рекомендации
Запуск ntpd при подключении сети
ntpd может быть запущен вашим менеджером сети, чтобы демон запускался только при появлении интернета.
Добавьте следующие строки в ваш профиль netctl:
ntpd можно включать/выключать вместе со стартом сетевого соединения с помощью диспетчерских скриптов. Пакет networkmanager-dispatcher-ntpd AUR устанавливает скрипты, настроенные на запуск и остановку ntpd.service одновременно с соединением.
Для Wicd создайте запускающий скрипт в каталоге postconnect и останавливающий скрипт в каталоге predisconnect . Не забудьте сделать их исполняемыми:
KDE может использовать NTP (ntp должен быть установлен) путём нажатия правой кнопкой мыши по часам и выбору синхронизации даты/времени. Однако при этлм демон ntp должен быть отключен. [2]
Использование ntpd с GPS
Многие статьи предлагают настраивать ntpd на получение времени из GPS через общую память, однако как минимум с версии 4.2.8 появился гораздо более хороший метод. Он подключается напрямую к gpsd, так что gpsd должен быть установлен.
Добавьте следующие строки в /etc/ntp.conf :
Для проверки сперва убедитесь, что gpsd работает:
Затем подождите несколько минут и запустите ntpq -p . Он должен показать, что ntpd общается с gpsd:
- Если reach равен 0, это означает, что ntpd не смог пообщаться с gpsd. Подождите несколько минут и попробуйте снова.
- GPS-устройство должно поддерживать PPS. Вы можете проверить своё устройство с помощью команды ppscheck /dev/gps0 .
Запуск в chroot
Создайте каталог /etc/systemd/system/ntpd.service.d/ (если его ещё нет) и drop-in файл customexec.conf в нём со следующим содержимым:
Затем измените /etc/ntp.conf , прописав пути относительно chroot. Измените:
Создайте необходимое chroot-окружение, чтобы getaddrinfo() работал:
и пропишите bind mount для упомянутых файлов:
Затем перезапустите демон ntpd . После перезапуска вы можете проверить, действительно ли он запустился в chroot, посмотрев, куда ведёт символьная ссылка /proc/
Должно ссылаться на /var/lib/ntp вместо / .
Скорее всего придётся немного подождать, чтобы проверить корректность настройки driftfile, так как ntpd пишет и читает не очень часто. Если вы ошиблись, демон отпечатает ошибку в журнале; если всё в порядке, он обновит метку времени. Если вы не наблюдаете ошибок в течение суток и время при этом обновляется, значит всё хорошо.
Ограничение прослушивающих сокетов
Вы можете ограничить сокеты, которые прослушивает ntpd, используя опцию interface:
Настройка NTP сервера Windows server 2016 в домене групповыми политиками
Мы рассмотрим как настроить NTP сервер в сети предприятия, где компьютеры пользователей получают точное время от DC с ролью эмулятора PDC (главный контроллер домена – Primary Domain Controller), в свою очередь DC синхронизирует свое время с внешним источником времени. В данном примере мы будем получать время с серверов pool.ntp.org.
Начиная с Windows 2000 все операционные системы Windows включают в себя службу времени W32Time. Эта служба предназначена для синхронизации времени в пределах организации и отвечает за работу как клиентской, так и серверной части, причем один и тот же компьютер может быть одновременно и клиентом и сервером NTP (Network Time Protocol). По умолчанию клиенты в домене синхронизируют время с помощью службы времени Windows (Windows Time), а не с помощью протокола NTP.
Настройка сервера времени под Hyper-V
Для тех у кого контролер домена виртуализирован и поднят на Hyper-V, прежде необходимо отключить Time Synchronization, иначе виртуальная машина будет синхронизирована с Hyper-V сервером.
В настройках виртуальной машины, в разделе Management -> Integration Services отключаем Time Synchronization
Создание GPO для контроллера домена с ролью эмулятора PDC (главный контроллер домена – Primary Domain Controller)
1 . Создание фильтра WMI
Нам необходимо настроить групповую политику для синхронизации NTP для контролера домена PDC, в связи с тем что роль PDC может перемещаться между контроллерами домена, нам необходимо применить политику к текущему владельцу роли PDC. Для этого мы создадим WMI фильтр, чтобы политика была применена для сервера с ролью PDC.
Для этого в консоли управления Group Policy Management Console (GPMC.msc), в разделе WMI Filters создадим новый WMI фильтр с именем PDC selected и запросом: Select * from Win32_ComputerSystem where DomainRole = 5
Добавляем новый WMI фильтр с именем PDC selected и запросом:
Select * from Win32_ComputerSystem where DomainRole = 5
2 . Создаем и редактируем новую GPO
2.1 Для контейнера Domain Controllers создаем групповую политику, в нашем случае это PDC Time Synchronization.
В пункте 2.1 ошибка. на картинке созданный фильтр не привязан к политике
2.2 Редактируем политику PDC Time Synchronization, разворачиваем Computer Configuration -> Policies -> Administrative Templates -> System -> Windows Time Service -> Time Providers и включаем следующие политики:
2.3 В настройках политики Enable Windows NTP Server, задаем:
NTP Download
Basic information on NTP can be found on our NTP info page as well as in our knowledge base articles.
The Meinberg NTP package provides a GUI setup program for Windows which installs the NTP service and associated executable programs that have been compiled from the original public NTP source code available at the NTP download page at ntp.org.
The GUI installer also contains the corresponding HTML based NTP documentation, as well as the libcrypto DLL from the OpenSSL project, which is required to create or check signatures of the NTP network packets, if the symmetric or public key authentication feature is used.
Unattended installation is also supported. Please see the NTP Installer README for help on how to use the installer.
- NTP package for current Windows versions (XP and later), with IPv6 support
- Outdated NTP package for Windows NT, Windows 2000, and newer, IPv4 only
- External Web Links
- NTP Cheat Sheet / Short Reference
- Linux driver for Meinberg plug-in radio clocks
For the Windows operating system there’s also an NTP Time Server Monitor program available which allows configuration of the local NTP service and graphical monitoring of the local and remote NTP servers.
If you have any questions or feedback, please contact ntp-support@meinberg.de.
NTP for current Windows versions (Windows XP and later), with IPv6 support
The current stable NTP version can be used with current 32 and 64 bit Windows versions (Windows XP and newer). Beside the standard IPv4 network protocol it also supports IPv6. Alternatively, there’s an older version available which can also be used on Windows 2000 or even Windows NT.
- When installing the service, the path to the executable program entered in the registry is placed in quotation marks, since a path that contains spaces represents a potential security hole. For more details see the article Securing the NTP Service Installation on Windows in our knowledge base.
Also the previous version ntp-4.2.8p15 of the setup program provided some minor security patches and some enhancements. See the NTP changelog for details.
It is explicitly recommended to upgrade earlier installations to this version.
ntp-4.2.8p15-v2-win32-setup.exe (4.29 MB)
24 February 2021
NTP package with IPv6 support for Windows XP and newer
Note: If the NTP service fails to start after installation on Windows XP or Windows 7, the Visual Studio Redistributable package my be missing, althogh it should be available by default on all current Windows installations. The 32 bit (x86) version of the redistributable is required even on 64 bit Windows systems. The package is available from the Microsoft download page:
NTP Error Message during start of NTP Service
Start installer of the Visual Studio Redistibutable package:
Visual Studio Setup is complete.
NTP for Windows NT, Windows 2000, and newer, IPv4 only, without current security patches
This version of the NTP package is outdated but is still provided since it can also be used on Windows 2000 or even Windows NT. It supports IPv4 only, but not IPv6. For current Windows installations the current stable NTP version should be used which also contains current security patches.
- NTP 4.2.4p8 fixes a critical security problem. If you are running an older version please update as soon as possible.
- This version of the installer supports PATH variables up to 8k in size, please note that older versions only support a maximum of 1024 bytes for the contents of the PATH variable and will most probably overwrite the variable if it is longer. This will cause problems with your Windows installation and should be avoided.
ntp-4.2.4p8@lennon-o-lpv-win32-setup.exe (2.8 MB)
26 October 2010
Old and stable NTP-package Windows NT/2000 (IPv4 only)
How to verify integrity of the downloaded file
Screenshots NTP Installer (Windows)
Here are some screenshot of the NTP installation (click to enlarge):
Step 1:
Step 1: Select the local program folder.
Schritt 2:
Step 2: Select the components to be installed.
Step 3a (without initial configuration file):
for experienced users — the configuration file must be setup manually.
Step 3b: (initial configuration with external time server):
specification of up to 9 external NTP servers.
Step 3c (initial configuration with Meinberg Time Service):
Set up your own NTP server with built-in Meinberg reference clock (e.g. GPS180PEX).
Step 4:
Select the service settings (recommended «Use System Account»).
Настройка NTP на сервере
В операционных системах существует немало служб, нормальное функционирование которых зависит от точности хода системных часов. Если на сервере не установлено точное время, это может стать причиной различных проблем.
Например, в локальной сети требуется, чтобы часы машин, совместно использующих файлы, были синхронизированы — иначе невозможно будет правильно устанавливать время модификации файлов. Это, в свою очередь может стать причиной конфликта версий или перезаписи важных данных.
Если на сервере не установлено точное время, возникнут проблемы с заданиями Cron — неясно, когда они будут запускаться. Будет очень трудно анализировать журналы системных событий для диагостики причин сбоев и неисправностей…
Продолжать можно долго…
Чтобы избежать всех описанных проблем, необходимо настроить синхронизацию системных часов. В Linux для этого используется протокол NTP (Network Time Protocol). В этой статье мы подробно расскажем о том, как на сервере осуществить установку и настройку NTP. Начнем с небольшого теоретического введения.
Как работает протокол NTP
В основе протокола NTP лежит иерархическая структура серверов точного времени, в которой выделяются различные уровни (англ. strata). К уровню 0 относятся эталонные часы (атомные часы или часы GPS). На нулевом уровне NTP-серверы не работают.
С эталонными часами синхронизируются NTP-серверы первого уровня, которые являются источниками для серверов уровня 2. Серверы уровня 2 синхронизируются с серверами уровня 1, но могут также синхронизироваться и между собой. Аналогичным образом работают серверы уровня 3 и ниже. Всего поддерживается до 256 уровней.
Иерархическая структура протокола NTP характеризуется отказоустойчивостью и избыточностью. В случае отказов соединения с вышестоящими серверами резервные серверы берут процесс синхронизации на себя. За счет избыточности обеспечивается постоянная доступность NTP-серверов. Синхронизируясь с несколькими серверами, NTP использует данные всех источников, чтобы рассчитать наиболее точное время.
Установка и настройка NTP-сервера
Самым известным и распространенным программным средством для синхронизации времени является демон ntpd. В зависимости от настроек, указанных в конфигурационном файле (об этом еще пойдет речь ниже), он может выступать как в качестве сервера, так и в качестве клиента (т.е может как принимать время с удаленных хостов, так и раздавать его другим хостам). Ниже мы подробно расскажем о том, как осуществляется установка и настройка этого демона в OC Ubuntu.
Установка NTP-сервера
Программа NTP входит в состав дистрибутивов большинства современных Linux-систем и устанавливается при помощи стандартного менеджера пакетов:
Настройка NTP-сервера
По завершении установки откроем в текстовом редакторе файл /etc/ntp.conf. В нем хранятся все настройки программы. Рассмотрим их более подробно.
Параметры логирования
Первая строка конфигурационного файла выглядит так:
В ней указывается файл для хранения информации о частоте смещения времени. В этом файле хранится значение, получаемое в результате предшествующих корректировок времени. Если внешние NTP-серверы по той или иной причине становятся недоступными, значение будет взятого из него.
Далее указывается файл, в который будут сохраняться логи синхронизации:
Список серверов для синхронизации
В конфигурационном файле указывается список NTP-серверов, с которыми будет осуществляться синхронизация. По умолчанию он выглядит так:
Каждая строка означает группу серверов, которые будут cообщать нашему серверу корректное время. Повысить точность синхронизации можно с помощью опции iburst (она указывает, что на сервер для синхронизации нужно посылать не один, а несколько пакетов):
Можно также указать предпочитаемый сервер при помощи опции prefer:
NTP-серверы разбросаны по всему миру (вот, например, список доступных публичных NTP-серверов ). Чтобы обеспечить более точную установку системных часов, рекомендуется синхронизироваться только с ntp-серверами того региона, в котором географически расположен наш сервер. Для этого в конфигурационном файле /etc/ntp.conf нужно указать в адресах серверов региональный поддомен для pool.ntp.org:
- Азия — asia.pool.ntp.org;
- Европа — europe.pool.ntp org;
- Африка — africa.pool.ntp.org;
- Северная Америка — north-america.pool.ntp.org;
- Южная Америка — south-america.pool.ntp.org;
- Океания — oceania.pool.ntp.org.
Можно также указывать поддомены для отдельных стран (подробнее см. здесь ). Имеется свой поддомен и для России — ru.pool.ntp.org
Резервный сервер точного времени
NTP-сервер, по какой-либо причине отключенный от Интернета, может передавать для синхронизации данные своих системных часов. Для этого в конфигурационный файл нужно добавить следующую строку:
Ограничения
В последнее время участились случаи использования NTP-серверов для усиления трафика в DDoS-атаках (подробнее об этом см., например, здесь ).
1. Чтобы наш сервер не стал жертвой злоупотреблений, нелишним будет установить ограничения на доступ для внешних клиентов. По умолчанию в файлe /etc/ntp.conf установлены следующие ограничения:
Параметры nomodify, notrap, nopeer и noquery запрещают сторонним клиентам изменять что-либо на сервере. Параметр kod (эта аббревиатура означает kiss of death — «поцелуй смерти») обеспечивает дополнительную защиту: клиент, отправляющий слишком частые запросы, сначала получит так называемый kod-пакет (предупреждение об отказе в обслуживании), а затем будет отключен от сервера.
2. Чтобы с NTP-сервером могли синхронизироваться машины из локальной сети, добавим в конфигурационный файл следующую строку:
3. Для локального хоста можно установить доступ к NTP-серверу без ограничений:
Проверка синхронизации
После этого, как все необходимые изменения внесены в конфигурационный файл и сохранены, перезапустим NTP-сервер:
Затем выполним следующую команду:
Ее вывод будет представлен в виде таблицы:
В таблице указываются следующие параметры:
- remote — адрес сервера точного времени (в этой графе отображаются серверы из списка в конфигурационном файле);
- refid — вышестоящий сервер (тот, от которого сервер из предыдушей графы получает синхронизацию);
- st — уровень (stratum) сервера;
- t — тип пира (u- unicast, m- multicast);
- when — время последней синхронизации;
- poll — время в секундах, за которое демон NTP синхронизируется с пиром;
- reach — состояние доступности сервера; после восьми успешных попыток синхронизации значение этого параметра становится равным 377;
- delay — время задержки ответа от сервера;
- offset — разница времени между нашим сервером и сервером синхронизации; положительное значение этого параметра означает, что наши часы спешат, отрицательное — что отстают;
- jitter — смещение времени на удаленном сервере.
Слева от адреса сервера могут быть указаны следующие символы:
- * сервер выбран для синхронизации;
- + сервер, пригодный для обновления (с которым можно синхронизироваться);
- — с сервером синхронизироваться не рекомендуется;
- х сервер недоступен.
Проверить, пригоден ли сервер из списка для синхронизации, можно при помощи команды:
Из приведенного вывода видно, что сервер пригоден для синхронизации, его уровень — 2, смещение — 0,127936 мс, задержка — 0.026 мс.
О том, как проходила синхронизация (успешно или с ошибками) можно также узнать из логов:
Установка локальной даты и времени
С помощью команды ntpdate можно установить на сервере локальную дату и время, отправив соответствующий запрос к NTP-серверу:
Синхронизация времени на серверах
Перед настройкой NTP рекомендуется установить текущую системную дату на значение, максимально приближенное к реальному времени. Для этого можно воспользоваться утилитой для ручной синхронизации времени – ntpdate.
Команда date без параметров выводит текущее системное время.
Установка и настройка NTP
- Установка NTP происходит при первичной установке пакета ecss-node, в ходе которого будет задано несколько вопросов:
- Спрашивается, хотите ли включить tos orphan режим? — режим для кластера, сам регулирует кто с кем синхро низируется (да/нет).
- Точность времени кластера по Startum
- Спрашиваются внешние сервера — типа ntp.ubuntu.com. Они указываются для нод, которые должны регулировать время и синхронизировать с внешним источником (указываются адреса через пробел).
- Предлагается использовать настройки синхронизации с локальных серверов.
- Спрашиваются локальные хосты, с которыми должна происходить синхронизация (указываются адреса через пробел).
- Указываются сети, которые могут иметь доступ до ноды, чтобы другие ноды могли синхронизироваться (указываются сети вида адрес_сети|маска_сети через пробел).
- Спрашивается какой точность по Startum выставить серверу ntp на данной машине.
- Ручная настройка сервиса
В случае если требуется переконфигурировать текущие настройки NTP, то следует отредактировать файл /etc/ecss/ecss-ntp.conf.
Для этого необходимо привести файл /etc/ecss/ecss-ntp.conf к следующему виду:
Пример 1. В примере используется схема с резервированием. Система ECSS-10 развернута на двух серверах, которые синхронизируются между собой и NTP-сервером.
В режиме Orphan сервера в кластере синхронизируются друг от друга, сами договариваются кто из них мастер и следят, чтобы в рамках кластера часы шли синхронно.
Если появляется мастер сервер NTP со стратумом меньше заданного для кластера, то кластер автоматически перенастраивается на синхронизацию от него.
Таким образом, выполняется постоянное наличие единственной точки синхронизации времени.
Все зависимые устройства должны синхронизироваться от серверов кластера.
Пример 2. В примере используется схема без резервирования. Orphan mode не используется.
Для применения обновленной конфигурации нужно перезапустить сервис NTP:
Для просмотра информации о состоянии синхронизации используется команда ntpq –p. Если использовать дополнительный ключ –n, вместо имени сервера будет указан IP-адрес:
Пример 1. Схема с резервированием.
Пример 2. Схема без резервирования.
- remote – имя удаленного NTP-сервера;
- refid – IP-адрес сервера, с которым производит синхронизацию удаленный сервер NTP;
- st – stratum (уровень), число от 1 до 16, указывающее точность сервера;
- t — тип удаленного сервера:
- u — unicast,
- l — local,
- m — multicast,
- b — broadcst;
Символ (*) возле IP-адреса сервера указывает на то, что сервер является активным и система синхронизирована с данным сервером.
После старта сервиса может потребоваться около 10 минут для установления синхронизации времени с базовым NTP-сервером.