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

From ArchWiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Tango-preferences-desktop-locale.pngЭта статья или раздел нуждается в переводеTango-preferences-desktop-locale.png

Примечания: Перевод устарел. (обсуждение: Talk:Network Time Protocol daemon (Русский)#)

Эта статья описывает, как установить и настроить NTPd (Network Time Protocol daemon), наиболее распространенный способ синхронизации часов в системе GNU/Linux с серверами в сети Интернет при помощи NTP. Если все настроено правильно, Ваш компьютер тоже может выступать в роли сервера синхронизации времени.

Установка

Пакет ntp доступен в репозитории [extra]:

# pacman -S ntp

Настройка

Самая первая строка в вашем файле /etc/ntp.conf определяет серверы, с которыми планируется синхронизироваться. NTP использует иерархическую систему «часовых уровней». Уровень 1 синхронизован с высокоточными часами, например, с системой GPS, ГЛОНАСС (Единая Государственная шкала времени РФ) или атомным эталоном времени. Уровень 2 синхронизируется с одной из машин уровня 1, и так далее.

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

server 0.it.pool.ntp.org iburst
server 1.it.pool.ntp.org iburst
server 2.it.pool.ntp.org iburst
server 3.it.pool.ntp.org iburst

Опция 'iburst' рекомендуется, с ее помощью посылается шквал пакетов, если не удается установить соединение с сервером с первого раза. Напротив, опцию 'burst' не используйте никогда без особого разрешения, так как Вы можете попасть в "черный список".

При настройке своего NTP сервера, нужно добавить localhost в список серверов, так как в случае потери соединения с сетью Интернет, сервер продолжит синхрозировать время в сети. Для этого добавьте localhost как сервер десятого уровня при помощи команды fudge, чтобы синхронизация не происходила, пока соединение с Интернет доступно:

server 127.127.1.0
fudge  127.127.1.0 stratum 10

Затем, определите правила, по которым к Вашему серверу смогут подключаться клиенты (localhost - это тоже клиент) при помощи команды restrict. Также добавьте в файл конфигурации:

restrict default nomodify nopeer

Эти настройки не позволят пользователям изменять что-либо. Можете также добавить следующие опции:

restrict default kod nomodify notrap nopeer noquery

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

restrict 127.0.0.1

В противном случае, можно добавить больше клиентов:

restrict 1.2.3.4 nomodify
restrict 192.168.0.0 mask 255.255.255.0 nomodify notrap

Эти строки укажут ntpd, что адресам 1.2.3.4, а также всем адресам подсети 192.168.0.0/24 позволено синхронизировать время с Вашим сервером, но не позволено ничего изменять.

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

restrict -6 default nomodify nopeer
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.it.pool.ntp.org iburst
server 1.it.pool.ntp.org iburst
server 2.it.pool.ntp.org iburst
server 3.it.pool.ntp.org iburst

restrict default nomodify nopeer
restrict 127.0.0.1

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

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

В заключении, никогда не забывайте читать man: ntp.conf(5). Это ответит на многие Ваши вопросы. Также можно посмотреть man {ntpd|ntp_auth|ntp_mon|ntp_acc|ntp_clock|ntp_misc}).

Запуск демона

Запуск ntpd

Если Вы используете sysvinit:

# /etc/rc.d/ntpd start

Поместите ntpd в массив DAEMONS в файле /etc/rc.conf, чтобы он загружался при старте системы:

/etc/rc.conf
...

DAEMONS=(... ntpd ...)

Если Вы используете systemd:

systemctl start ntpd

Для загрузки при старте системы

systemctl enable ntpd

NetworkManager

ntpd можно включать/выключать вместе со стартом сетевого соединения с помощью networkmanager-dispatcher-ntpd:

# pacman -S networkmanager-dispatcher-ntpd

Использование не root-пользователем

Если программа скомпилирована с флагом --enable-linux-caps, ntpd может запустить не root-пользователь (стандартный пакет в Arch Linux имеет эту опцию).

Примечание: Перед тем, как выполнять следующие действия, убедитесь, что файл /var/lib/ntp/ntp.drift существует.

Создайте группу ntp и пользователя ntp:

# groupadd ntp
# useradd -r -d /var/lib/ntp -g ntp -s /bin/false ntp

Смените владельца директории ntp на пользователя ntp:

# chown -R ntp:ntp /var/lib/ntp

Отредактируйте /etc/conf.d/ntp-client.conf и измените

NTPD_ARGS="-g"

на

NTPD_ARGS="-g -u ntp:ntp"

Наконец, перезапустите демона:

# /etc/rc.d/ntpd restart

Синхронизация часов без запуска демона

Если Вы просто хотите синхронизировать часы без запуска демона ntpd, добавьте в файл /etc/rc.local следующее:

ntpd -qg &
Примечание:
  • Если Вы хотите использовать этот метод, убедитесь, что на момент обработки файла rc.local сетевое соединение уже установлено (например, Вам не следует запускать демон для подключения к сети Интернет в фоновом режиме (знак "@" перед демоном) в файле /etc/rc.conf)
  • Аппаратные часы автоматически подстраиваются по часам системы каждый раз, когда Вы выключаете компьютер, через команду в файле /etc/rc.shutdown
Важно:
  • Использование этого метода весьма не рекомендуется для серверов, да и для обычных компьютеров, которым приходится работать по 2-3 дня, так как время синхронизируется только один раз при старте системы.
  • Запуск "ntpd -qg" через событие планировщика задач cron вообще нужно избегать, если Вы не знаете, к чему приведет мгновенное изменение времени во время работы Ваших программ.

Альтернативы

Доступная альтернатива ntpd - это OpenNTPD, часть проекта OpenBSD (не поддерживается сообществом Linux).

См. также

  • Время - дополнительная информация об аппаратных и системных часах в Linux.
  • ВНИИФТРИ[устаревшая ссылка 2021-05-17] - список серверов NTP Государственного эталона времени и частоты (ГЭВЧ) Российской Федерации.

Внешние источники