Network Time Protocol daemon (Русский)

Network Time Protocol является одним из самых распространённых методов для синхронизации системных часов на GNU/Linux с серверами времени в интернете. Он разработан для смягчения последствий переменной задержки в сети и обычно может поддерживать время с точностью до десятков миллисекунд при синхронизации через интернет. Точность в локальных сетях даже лучше, до одной миллисекунды.

Состояние перевода: На этой странице представлен перевод статьи Network Time Protocol daemon. Дата последней синхронизации: 4 февраля 2022. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

The NTP Project предоставляет эталонную реализацию протокола, которая называется просто NTP. Эта статья описывает, как установить и запустить демон NTP: как клиент, так и сервер.

Смотрите Синхронизация времени для информации о других реализациях NTP.

Установка

Установите пакет 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 с помощью параметра (может настроить до stratum 15), чтобы он никогда не использовался, пока интернет доступен:

tos orphan 15

Затем определите правила, которые позволят клиентам подключиться к вашему сервису (localhost тоже считается клиентом) с помощью команды restrict; в файле уже должна быть примерно такая строка:

restrict default nomodify nopeer noquery

Она запрещает всем модифицировать что-либо и предотвращает запрос статуса вашего сервера: запрещает перенастройку ntpd (через ntpq или ntpdc), а важен для предотвращения дампа статуса ntpd (тоже через ntpq или ntpdc).

Можете также добавить следующие опции:

restrict default kod nomodify notrap nopeer noquery
Примечание: Это всё ещё позволит другим людям обращаться к вашему серверу времени. Добавьте noserve, если вы хотите запретить отдачу времени. Это также заблокирует синхронизацию времени, так как заблокирует все пакеты кроме запросов ntpq и ntpdc.

Если вы хотите изменить что-то из этого, читайте полную документацию по опции "restrict" в ntp.conf(5), подробные инструкции по ntp и #Использование.

Теперь нужно указать ntpd, какие подключения к Вашему серверу разрешены; если Вы не конфигурируете сервер NTP, следующей строки будет достаточно:

restrict 127.0.0.1

Если Вы желаете принудительно определить адреса по протоколу IPv6, напишите -6 перед IP-адресом или именем хоста (-4 принудительно устанавливает протокол IPv4), например:

restrict -6 default kod nomodify notrap nopeer noquery
restrict -6 ::1    # ::1 - это 127.0.0.1 в шестой версии протокола IP

Наконец, установите файл-буфер (в котором будет находиться погрешность часов системы) и журнал (лог):

driftfile /var/lib/ntp/ntp.drift
logfile /var/log/ntp.log

Примерная конфигурация выглядит так:

/etc/ntp.conf
server 0.ru.pool.ntp.org iburst
server 1.ru.pool.ntp.org iburst
server 2.ru.pool.ntp.org iburst
server 3.ru.pool.ntp.org iburst
tos orphan 15

restrict default kod nomodify notrap nopeer noquery
restrict -6 default kod nomodify notrap nopeer noquery

restrict 127.0.0.1
restrict -6 ::1  

driftfile /var/lib/ntp/ntp.drift
logfile /var/log/ntp.log

Использование

По умолчанию пакет настроен на режим клиента и использует отдельные пользователя и группу для избавления от root-прав. При ручном запуске через консоль всегда указывайте опцию :

# ntpd -u ntp:ntp

Опция используется в двух systemd-службах. Они также используют опцию , которая отключает порог (panic-gate). Таким образом они будут синхронизировать время даже если время на NTP-серверах очень сильно отличается от локального системного времени.

Both services are tied to the system's resolver, and will start synchronizing when an active network connection is detected.

Запуск ntpd при загрузке системы

Включите службу . Смотрите также #Запуск в chroot.

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

$ ntpq -p

Задержка, смещение и джиттер должны быть отличны от нуля. Серверы, с которыми синхронизируется ntpd, отмечены звёздочкой. Может потребоваться несколько минут, прежде чем ntpd выберет сервер для синхронизации; попробуйте проверить через 17 минут (1024 секунды).

Синхронизация один раз при загрузке

В качестве альтернативы включите службу для однократной синхронизации (опция ) в non-forking режиме (опция ) при загрузке системы вместо запуска постоянно работающего демона в фоне. Этот метод не рекомендуется на серверах и в целом на машинах, которые работают без перезагрузки более нескольких дней.

Если синхронизированное время нужно записать в аппаратные часы компьютера, создайте drop-in файл для этой службы:

/etc/systemd/system/ntpdate.service.d/hwclock.conf
[Service]
ExecStart=/usr/bin/hwclock -w

Советы и рекомендации

Запуск ntpd при подключении сети

ntpd может быть запущен вашим менеджером сети, чтобы демон запускался только при появлении интернета.

Netctl

Добавьте следующие строки в ваш профиль netctl:

ExecUpPost='/usr/bin/ntpd || true'
ExecDownPre='killall ntpd || true'
NetworkManager

ntpd можно включать/выключать вместе со стартом сетевого соединения с помощью диспетчерских скриптов. Пакет networkmanager-dispatcher-ntpdAUR устанавливает скрипты, настроенные на запуск и остановку ntpd.service одновременно с соединением.

KDE

KDE может использовать NTP (ntp должен быть установлен) путём нажатия правой кнопкой мыши по часам и выбору синхронизации даты/времени. Однако при этлм демон ntp должен быть отключен.

Использование ntpd с GPS

Многие статьи предлагают настраивать ntpd на получение времени из GPS через общую память, однако как минимум с версии 4.2.8 появился гораздо более хороший метод. Он подключается напрямую к gpsd, так что должен быть установлен.

Добавьте следующие строки в /etc/ntp.conf:

Для проверки сперва убедитесь, что gpsd работает:

 $ cgps -s

Затем подождите несколько минут и запустите . Он должен показать, что ntpd общается с gpsd:

Запуск в chroot

Создайте каталог (если его ещё нет) и drop-in файл customexec.conf в нём со следующим содержимым:

[Service]
ExecStart=
ExecStart=/usr/bin/ntpd -g -u ntp:ntp -i /var/lib/ntp

Затем измените /etc/ntp.conf, прописав пути относительно chroot. Измените:

driftfile       /var/lib/ntp/ntp.drift

на:

driftfile       /ntp.drift

Создайте необходимое chroot-окружение, чтобы getaddrinfo() работал:

# mkdir /var/lib/ntp/etc /var/lib/ntp/lib /var/lib/ntp/proc
# mkdir /var/lib/ntp/usr /var/lib/ntp/usr/lib
# touch /var/lib/ntp/etc/resolv.conf /var/lib/ntp/etc/services

и пропишите bind mount для упомянутых файлов:

# mount -a

Затем перезапустите демон . После перезапуска вы можете проверить, действительно ли он запустился в chroot, посмотрев, куда ведёт символьная ссылка /proc/{PID}/root:

# ps -C ntpd | awk '{print $1}' | sed 1d | while read -r PID; do ls -l /proc/$PID/root; done

Должно ссылаться на вместо .

Скорее всего придётся немного подождать, чтобы проверить корректность настройки driftfile, так как ntpd пишет и читает не очень часто. Если вы ошиблись, демон отпечатает ошибку в журнале; если всё в порядке, он обновит метку времени. Если вы не наблюдаете ошибок в течение суток и время при этом обновляется, значит всё хорошо.

Ограничение прослушивающих сокетов

Вы можете ограничить сокеты, которые прослушивает ntpd, используя опцию interface:

interface [listen | ignore | drop] [all | ipv4 | ipv6 | wildcard | name | address[/prefixlen]]

примерно так:

Смотрите также

gollark: Or, well, alpha.
gollark: It's in eternal beta.
gollark: ++help radio
gollark: ↑ not fake
gollark: Blame baidicoot.
This article is issued from Archlinux. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.