[2024-feb-29] Sad news: Eric Layton aka Nocturnal Slacker aka vtel57 passed away on Feb 26th, shortly after hospitalization. He was one of our Wiki's most prominent admins. He will be missed.

Welcome to the Slackware Documentation Project

Это старая версия документа!


Синхронизация сети с NTP

NTP (сетевой протокол времени) позволяет синхронизировать часы между компьютерами. В статье описывается:

  • настройка сервера NTP в Slackware Linux;
  • синхронизация клиентских ПК с локальным NTP сервером.

Введение

Когда несколько пользователей на разных ПК работают с общими файлами в сети, очень важно, чтобы все эти машины были синхронизированы. Это особенно важно при обмене файлами через NFS или при использовании для централизованной авторизации NIS. Результатом рассинхронизации часов станут различные странные ошибки, заставляющие подолгу искать их причины. Да только часы в клиентских машинах не очень точны.

Вот тут и пригодится NTP. Он позволяет подключённым к сети машинам подстраивать свои часы для отличной синхронности друг с другом. Публичные сервера времени в Интернете позволяют получать точное время. Затем возможно использовать NTP различными путями.

  • Команда ntpdate выполняет первичную коррекцию часов BIOS.
  • Одноразовой корректировки недостаточно для работающего 24/7 сервера, поскольку его часы будут постепенно отклоняться от точного времени. В этом случае нужно настроить демон ntpd (поставляется в пакете ntp). Этот демон периодически подключается к публичным серверам и постепенно поправляет время локальных часов.
  • В свою очередь, демон ntpd можно настроить в качестве сервера времени для клиентских машин в локальной сети.

Считается хорошей практикой использовать ntpdate для первичной коррекции и ntpd для последующей синхронизации.

Настройка фаервола

Сервис NTP использует порт UDP 123. Чтобы разрешить удалённым машинам подключаться к NTP серверу, откройте этот порт.

Синхронизация локального или публичного корневого сервера с сервером NTP в Интернете

Создайте пустой файл журнала:

# touch /var/log/ntp.log

Посетите www.pool.ntp.org для выбора списка серверов для вашего местоположения.

Настройте сервис NTP правкой файла /etc/ntp.conf. Если хотите, сделайте резервную копию этого файла и начните с нуля.

В примере ниже список из четырёх серверов, выбранных мною для моего местоположения (Франция):

# /etc/ntp.conf

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

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

server 127.127.1.0
fudge 127.127.1.0 stratum 10

restrict default nomodify nopeer notrap
restrict 127.0.0.1 mask 255.0.0.0

Небольшое описание отдельных параметров:

  • «fudge 127.127.1.10 stratum 10» — директива описывает аварийный сервер, который будет использоваться, если внешние источники вдруг станут недоступны. Когда это случится, NTP продолжит работать, опираясь на свой «внутренний» сервер.
  • NTP имеет свой арсенал правил для ограничения доступа к сервису, которые могут быть использованы независимо от фаервола. Директивы restrict в вышеуказанной конфигурации предотвращают изменение настройки серверов на удалённой машине (первая строка restrict) и настраивают доверие самому себе (вторая строка restrict).
  • Директива restrict без аргументов с последующим указанием имени хоста или адреса IP означает allow all — «разрешить всё».

Управление сервисом NTP

Перед запуском сервиса выполните первичную коррекцию системных часов:

# ntpdate pool.ntp.org
Команда ntpdate считается устаревшей, но она по-прежнему удобна для настройки времени. «Православный» способ — использовать команду ntpd -g — официальную замену ntpdate, но этот способ не сработает, если часы сбились на полчаса или больше.

Активация запуска сервиса NTP при загрузке машины:

# chmod +x /etc/rc.d/rc.ntpd

Управление сервисом NTP

# /etc/rc.d/rc.ntpd start|stop|restart|status

Теперь отобразим список серверов, к которым подключена машина:

# ntpq -p
remote           refid      st t when poll reach   delay   offset jitter
==============================================================================
*panopea.unstabl 213.251.128.249  2 u   30   64  377   56.136  -249.48 80.680
+88-190-17-126.r 145.238.203.14   2 u   29   64  377   77.571  -205.94 94.278
+62.210.255.117  192.93.2.20      2 u   29   64  377   77.097  -249.57 85.641
-ntp.univ-poitie 145.238.203.10   3 u   29   64  377   57.747  -191.58 107.002
LOCAL(0)        .LOCL.          10 l  164   64  374    0.000    0.000 0.001

Маленькая * звездочка в начале одной из строк выше означает, что машина успешно синхронизирована с этим сервером NTP.

Первая синхронизация может занимать до нескольких минут, а иногда и до получаса.

Синхронизация клиентских ПК с локальным сервером NTP

В локальной сети разумно синхронизировать с публичным сервером NTP только одну машину — сервер, а клиентские ПК синхронизировать уже с этим локальным сервером. Это сэкономит пропускную способность и немного разгрузит публичные серверы NTP.

Как и выше, выполним первичную корректировку системных часов:

# ntpdate pool.ntp.org

Создадим пустой файл журнала:

# touch /var/log/ntp.log

Теперь настроим NTP для синхронизации с локальным сервером. Замените адрес IP из примера (192.168.2.1) на правильный адрес сервера:

# /etc/ntp.conf

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

server 192.168.2.1

server 127.127.1.0
fudge 127.127.1.0 stratum 10

restrict default ignore
restrict 127.0.0.1 mask 255.0.0.0
restrict 192.168.2.1 mask 255.255.255.255
  • Три директивы restrict блокируют весь трафик NTP за исключением самого клиента и сервера.

Активируем и запустим сервис NTP:

# chmod +x /etc/rc.d/rc.ntpd
# /etc/rc.d/rc.ntpd start

Как и раньше, для проверки прохождения синхронизации воспользуемся командой ntpq -p:

# ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*192.168.2.1     81.19.16.225     3 u  916 1024  377    0.367    7.897   2.552
 LOCAL(0)        .LOCL.          10 l  10h   64    0    0.000    0.000   0.000
Повторюсь, нужно подождать несколько минут, прежде чем завершится первая синхронизация.

Синхронизация при загрузке системы

Если вместо использования демона всё, что нужно — однократная синхронизация при загрузке системы, можно добавить команду ntpd -qg & в конец файла /etc/rc.d/rc.local. Эта команда однократно синхронизирует время в фоновом режиме и завершится, для её выполнения атрибут исполнения на файле /etc/rc.d/rc.ntpd не требуется.

~# cat /etc/rc.d/rc.local
#!/bin/sh
#
# /etc/rc.d/rc.local:  Local system initialization script.
#
# Put any local startup commands in here.  Also, if you have
# anything that needs to be run at shutdown time you can
# make an /etc/rc.d/rc.local_shutdown script and put those
# commands in there.



ntpd -qg &

Источники

 ru:howtos:network_services:ntp ()
Этот перевод старее, чем оригинальная страница, и может быть неактуальным. Смотрите, что было изменено.
Перевод этой страницы?: