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

Эта страница нуждается в сопроводителе

Статья не гарантирует актуальность информации. Помогите русскоязычному сообществу поддержкой подобных страниц. См. Команда переводчиков ArchWiki

Информация в этой статье или разделе устарела

Причина: rc.d references. Needs update, see Systemd (Русский). (Обсудить)

Эта статья описывает, как установить и настроить 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: `man ntp.conf`. Это ответит на многие Ваши вопросы. Также можно посмотреть `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.
- ВНИИФТРИ - список серверов NTP Государственного эталона времени и частоты (ГЭВЧ) Российской Федерации.

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

- http://www.ntp.org/
- http://support.ntp.org/
- http://www.pool.ntp.org/
- http://www.eecis.udel.edu/~mills/ntp/html/index.html

Categories:

- Networking (Русский)
- Daemons and system services (Русский)
- Русский