Network Time Protocol daemon (Русский)
Эта статья описывает, как установить и настроить NTPd (Network Time Protocol daemon), наиболее распространенный способ синхронизации часов в системе GNU/Linux с серверами в сети Интернет при помощи NTP. Если все настроено правильно, Ваш компьютер тоже может выступать в роли сервера синхронизации времени.
Contents
Установка
Пакет 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 имеет эту опцию).
Создайте группу 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 &
Альтернативы
Доступная альтернатива ntpd - это OpenNTPD, часть проекта OpenBSD (не поддерживается сообществом Linux).
См. также
- Время - дополнительная информация об аппаратных и системных часах в Linux.
- ВНИИФТРИ - список серверов NTP Государственного эталона времени и частоты (ГЭВЧ) Российской Федерации.