Синхронизация времени по NTP Печать
Добавил(а) microsin   

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

Для синхронизации времени FreeBSD с другой системой служит программа ntpdate, обычно вызываемая планировщиком cron в заданные интервалы времени. Если вам нужно только синхронизировать ваши часы при загрузке машины, вы можете воспользоваться утилитой ntpdate(8). Кроме того, синхронизацию времени может делать демон ntpd. Программа ntpd(8) изменяет время постепенно, тогда как ntpdate(8) устанавливает время вне зависимости от того, насколько велика разница между текущим временем машины и точным временем. Дока man ntpdate говорит, что весь функционал ntpdate теперь реализован в демоне ntpd, и со временем ntpdate прекратит существование (перестанет поставляться в дистрибутиве), поэтому лучше сразу использовать ntpd. Демон ntpd может эмулировать поведение ntpdate, если указать опции -q и -g, при этом ntpd просто синхронизирует время и завершает работу.

Демон ntpd специально предназначен для установки и поддержания системного времени в синхронизме со стандартными серверами времени в Интернете. По умолчанию используется протокол NTP (порт 123 UDP) версии 4, но также поддерживается совместимость с версиями 3 (RFC-1305), а также 1 и 2 (RFC-1059 и RFC-1119). Демон ntpd периодически (с настроенным интервалом) обменивается сообщениями с одним или несколькими серверами NTP, доступными в Интернете (или в локальной сети). Если разница времени между локальным хостом и сервером NTP превышает 1000 секунд, то требуется вмешательсто оператора для ручной установки времени. При этом в лог пишется panic-сообщение, и демон прекращает работу. Опция -g отменяет такое поведение (время синхронизируется при любой разнице времени), однако если синхронизация была неуспешной (разница во времени превышает 1000 секунд), ntpd все равно прекращает работу. Для работы ntpd может использовать специальный файл для хранения параметров ухода часов, по умолчанию это /etc/ntp.drift. Конфигурация для ntpd по умолчанию хранится в файле /etc/ntp.conf.

Вариантов настройки синхронизации много, но я выбрал для себя простейший режим - запуск ntpd по крону с указанием опций -q и -g. Процесс по шагам.
1. Создаем файл /etc/ntp.conf.
# touch /etc/ntp.conf 

2. Находим и проверяем сервера времени. Я нашел сервера server ntp0.zenon.net, ns.arc.nasa.gov, tick.usno.navy.mil, time.nist.gov.
# nmap -sU -p123 ntp0.zenon.net
# nmap -sU -p123 -P0 ns.arc.nasa.gov
# nmap -sU -p123 tick.usno.navy.mil
# nmap -sU -p123 time.nist.gov
   Среди серверов лучше определить один, до которого кратчайший маршрут (с помощью утилиты traceroute), чтобы его потом указать в /etc/ntp.conf с опцией prefer. У меня такой сервер оказался ntp0.zenon.net.

3. Добавляем сервера в /etc/ntp.conf
server ntp0.zenon.net prefer
server ns.arc.nasa.gov
server tick.usno.navy.mil
server time.nist.gov

4. Теперь можно синхронизировать время простой командой ntpd -q -g. Здесь опция -q указывает ntpd закончить работу после синхронизации времени, а опция -g отключает проверку sanity-интервала в 1000 секунд. Этими опциями эмулируется поведение устаревающей программы ntpdate.

5. На Red Hat Linux команда ntpd -q -g заработала даже без создания и правки файла /etc/ntp.conf, поскольку после установки этот файл появился автоматически. На FreeBSD оказалось все не так гладко - время засинхронизировалось, но со смещением -3 часа. Как я понял, это из-за того, что неправильно настроен часовой пояс. После настройки часового пояса все заработало нормально.

6. Добавляем назначенное задание. Например, для FreeBSD нужно в файл /etc/crontab добавить строчку:
0        1       *       *       *       root    ntpd -q -g
Это будет запускать ntpd -q -g каждый день в 01.00


См. также
man ntpd       встроенная дока по ntpd
man ntpdate    встроенная дока по ntpdate
man timed      встроенная дока по timed  
more /etc/defaults/rc.conf | grep ntp    примеры конфигурирования
man ntp.conf   справка по конфигурационному файлу /etc/ntp.conf демона ntpd


Полезные ссылки:
http://www.opennet.ru/base/sys/ntp_sync.txt.html
http://igig.dp.ua/FreeBSD/ntpd.html        http://www.citforum.ru/operating_systems/freebsd/handbook/network-ntp.shtml