27.10. Синхронизация часов через NTP

Текст предоставил Tom Hukins.

27.10.1. Обзор

С течением времени часы компьютера имеют тенденцию отставать. Network Time Protocol - Сетевой Протокол Времени (NTP) является одним из способов вести точное время.

Многие сервисы Интернет опираются или сильно зависят от точности часов компьютеров. К примеру, веб-сервер может получать запрос на посылку файла, который был недавно модифицирован. В локальной сети необходимо, чтобы часы компьютеров, совместно использующих файлы, были синхронизированы, чтобы время модификации файлов устанавливалось правильно. Такие службы, как cron(8), также зависят от правильности установки системных часов, поскольку запускают команды в определенное время.

FreeBSD поставляется с сервером NTP ntpd(8), который можно использовать для опроса других серверов NTP для установки часов на вашей машине или предоставления услуг точного времени.

27.10.2. Выбор подходящих серверов NTP

Для синхронизации ваших часов вам нужно найти для использования один или большее количество серверов NTP. Ваш сетевой администратор или провайдер могут иметь сервер NTP для этой цели—обратитесь к ним, так ли это в вашем случае. Существует онлайн список общедоступных серверов NTP, которым можно воспользоваться для поиска ближайшего к вам сервера NTP. Не забудьте выяснить политику выбранного вами сервера и спросить разрешения, если это требуется.

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

27.10.3. Настройка вашей машины

27.10.3.1. Базовая конфигурация

Если вам нужно только синхронизировать ваши часы при загрузке машины, вы можете воспользоваться утилитой ntpdate(8). Это может подойти для некоторых настольных машин, которые часто перезагружаются и только требуют изредка синхронизироваться, но на большинстве машин должен работать ntpd(8).

Использование ntpdate(8) при загрузке также хорошо для машин, на которых запущен даемон ntpd(8). Программа ntpd(8) изменяет время постепенно, тогда как ntpdate(8) устанавливает время вне зависимости от того, насколько велика разница между текущим временем машины и точным временем.

Для включения ntpdate(8) во время загрузки, добавьте строчку ntpdate_enable="YES" в файл /etc/rc.conf. Вам также потребуется указать все серверы, с которыми вы хотите синхронизироваться, и все параметры, которые передаются в ntpdate(8), в ntpdate_flags.

27.10.3.2. Общие настройки

NTP настраивается в файле /etc/ntp.conf, формат которого описан в ntp.conf(5). Вот простой пример:

server ntplocal.example.com prefer
server timeserver.example.org
server ntp2a.example.net

driftfile /var/db/ntp.drift

Параметр server задает, какие серверы будут использоваться, по одному в каждой строке. Если сервер задан с аргументом prefer, как ntplocal.example.com, то этому серверу отдается предпочтение перед остальными. Ответ от предпочтительного сервера будет отброшен, если он значительно отличается от ответов других серверов, в противном случае он будет использоваться безотносительно к другим ответам. Аргумент prefer обычно используется для серверов NTP, о которых известно, что они очень точны, такими, на которых используется специальное оборудование точного времени.

Параметр driftfile задает файл, который используется для хранения смещения частоты системных часов. Программа ntpd(8) использует его для автоматической компенсации естественного смещения часов, позволяя ему поддерживать достаточно правильную настройку, даже если он на некоторый период отключается от внешнего источника информации о времени.

Параметр driftfile задает, какой файл используется для сохранения информации о предыдущих ответах от серверов NTP, которые вы используете. Этот файл содержит внутреннюю информацию для NTP. Он не должен изменяться никакими другими процессами.

27.10.3.3. Управление доступом к вашему серверу

По умолчанию ваш сервер NTP будет доступен всем хостам в Интернет. Параметр restrict в файле /etc/ntp.conf позволяет вам контролировать, какие машины могут обращаться к вашему серверу.

Если вы хотите запретить всем машинам обращаться к вашему серверу NTP, добавьте следующую строку в файл /etc/ntp.conf:

restrict default ignore

Замечание: Эта строка конфигурации также предотвратит доступ вашего сервера к другим серверам, перечисленным в вашей локальной конфигурации. Если вам необходимо синхронизировать ваш сервер с внешним сервером NTP, вам необходимо будет изменить настройки относительно этого конкретного сервера. За более детальной информацией обратитесь к странице руководства ntp.conf(5).

Если вы хотите разрешить синхронизировать свои часы с вашим сервером только машинам в вашей сети, но запретить им настраивать сервер или быть равноправными участниками синхронизации времени, то вместо указанной добавьте строчку

restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap

где 192.168.1.0 является адресом IP вашей сети, а 255.255.255.0 её сетевой маской.

/etc/ntp.conf может содержать несколько директив restrict. Для получения подробной информации обратитесь к подразделу Access Control Support (Поддержка Управления Доступом) в ntp.conf(5).

27.10.4. Запуск сервера NTP

Для того, чтобы сервер NTP запускался при загрузке, добавьте строку ntpd_enable="YES" в файл /etc/rc.conf. Если вы хотите передать дополнительные опции в ntpd(8), то отредактируйте параметр ntpd_flags в файле /etc/rc.conf.

Для запуска сервера без перезагрузки вашей машины, выполните команду ntpd, не забыв задать дополнительные параметры из переменной ntpd_flags в файле /etc/rc.conf. К примеру:

# ntpd -p /var/run/ntpd.pid

27.10.5. Использование ntpd с временным подключением к Интернет

Для нормальной работы программе ntpd(8) не требуется постоянное подключение к Интернет. Однако если ваше временное подключение к Интернет настроено для дозвона по требованию, хорошо бы запретить трафику NTP вызывать дозвон или поддерживать соединение постоянно. Если вы используете пользовательский PPP, то можете воспользоваться директивами filter в файле /etc/ppp/ppp.conf. К примеру:

 set filter dial 0 deny udp src eq 123
 # Prevent NTP traffic from initiating dial out
 set filter dial 1 permit 0 0
 set filter alive 0 deny udp src eq 123
 # Prevent incoming NTP traffic from keeping the connection open
 set filter alive 1 deny udp dst eq 123
 # Prevent outgoing NTP traffic from keeping the connection open
 set filter alive 2 permit 0/0 0/0

Более подробную информацию можно найти в разделе PACKET FILTERING (ФИЛЬТРАЦИЯ ПАКЕТОВ) в ppp(8), а примеры в /usr/share/examples/ppp/.

Замечание: Некоторые провайдеры Интернет блокируют трафик по портам с маленькими номерами, что приводит к неработоспособности NTP, так как ответы никогда не достигают вашей машины.

27.10.6. Дополнительная литература

Документация по серверу NTP может быть найдена в каталоге /usr/share/doc/ntp/ в формате HTML.

Этот, и другие документы, могут быть скачаны с ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

По вопросам, связанным с FreeBSD, прочитайте документацию прежде чем писать в <questions@FreeBSD.org>.
По вопросам, связанным с этой документацией, пишите <doc@FreeBSD.org>.
По вопросам, связанным с русским переводом документации, пишите в рассылку <frdp@FreeBSD.org.ua>.
Информация по подписке на эту рассылку находится на сайте проекта перевода.