Системное администрирование ОС Solaris 10

Синхронизация времени в Solaris

Разбить на страницы
Показывать лекцию целиком

Время в сети очень важно, так как многие операции в сети должны грамотно синхронизироваться.

Например, очевидно, что при запуске резервного копирования через сеть время на сервере, где расположен ленточный накопитель, и время на сервере, откуда производится копирование, должно быть одинаковым – это особенно важно при автоматизации копирования на ленту, и еще важнее – при организации последовательного копирования на несколько лент, если объема одной недостаточно для завершения копирования.

Еще один пример важности синхронизации времени – возможные проблемы при сохранении на файловом сервере файлов с тех клиентских машин, чье время отличается от серверного. Из-за этого на клиентских системах может возникать ложное восприятие "свежести" или "несвежести" файлов, хранящихся на сервере. Согласитесь, неприятно сохранить файл и тут же убедиться, что он датирован вчерашинм днем. Приходится гадать, сохранен ли свежий файл в соседний каталог, или на сервере просто сбита дата, или дата неверна на клиентской машине.

Как узнать и установить системное время и дату

Для того, чтобы узнать, который час, в UNIX принято использовать команду date. Она сообщает и текущую системную дату, и время. Команда time предназначена для другой цели – она подсчитывает время, потраченное системой на выполнение команды. Попробуйте

time 'find / -name \* '

для проверки, как много времени процессора займет составление и вывод полного списка файлов системы.

С помощью команды date можно не только узнать текущее время, но и установить его. Устанавливать системное время может только root.

Программа date понимает разные форматы дат, когда вы требуете установить дату, наиболее стандартным является формат

date hhmm # hhmm – часы минуты

или

date ссyyMMddhhmm.ss

где

  • сс – 19 или 20 ( cc – от "век" – century);
  • yy – год (98, если 1998, или 67, если 2067);
  • MM – месяц;
  • dd – число месяца;
  • hh – час;
  • mm – минуты;
  • ss – секунды.
  • date
  • без параметров выводит текущую дату и время, в формате, определяемом параметрами локализации (locale).

    Как синхронизировать время

    В Solaris есть возможность установить сервер синхронизации времени, который будет отвечать на вопросы "который час?" от других машин. Клиент этого сервера – программа ntpdate. Она спрашивает время у сервера точного времени (также называемого сервером синхронизации времени) и директивно устанавливает время в своей системе. При маленьких отклонениях времени от эталонного она вызывает функцию "мягкого изменения" времени, когда время не устанавливается определенным одномоментно, а часы системы ежесекундно "подталкиваются" на долю секунды вперед или назад.

    Программу ntpdate можно использовать и без собственного эталонного сервера времени, поскольку существуют публичные серверы времени.

    Посмотрим, как работает ntpdate – программа установки системной даты и времени:

    date
    Сбт 29 Май 2004 19:10:20

    Установим заведомо неверное время:

    date 1912
    Сбт 29 Май 2004 19:12:00

    Теперь запустим ntpdate и сообщим ей для ориентировки адреса двух эталонных серверов времени (я взял их из списка на www.ntp.org):

    ntpdate tock.keso.fi ntp.psn.ru
    29 May 19:10:31 ntpdate[10630]: step time server 194.149.67.130
    offset -95.351227 sec

    Повторим для надежности:

    ntpdate tock.keso.fi ntp.psn.ru
    29 May 19:10:39 ntpdate[10631]: adjust time server 194.149.67.130
    offset -0.006045 sec

    Очевидно, что вторая подвижка времени оказалась существенно меньше, чем первая: вначале часы были "возвращены" к правильному времени, а затем лишь слегка синхронизированы, причем в первом случае использовалась явная установка времени (step time server), а во втором – мягкая "подвижка" (adjust time server).

    Программу ntpdate достаточно запускать только при старте системы, если только аппаратура компьютера исправна и таймер не требует постоянной коррекции.

    Кроме программы ntpdate существуют и другие средства, предназначенные для организации синхронизации времени в сети. Программа ntpdate – это "клиентская" программа. В локальной сети организации имеет смысл установить по крайней мере один (лучше – два, чтобы был запасной) сервер времени. Именно он будет опрашивать серверы слоя 2, а компьютеры локальной сети будут сверять свои часы по этому локальному серверу времени. В качестве такого сервера в Solaris используют демон xntpd.

    Настройка сервера синхронизации времени

    Алгоритм работы xntpd

    Для синхронизации времени в сети был разработан специальный протокол NTP (network time protocol), в настоящее время используется, в основном, версия 4 этого протокола, но серверы NTP обладают полной обратной совместимостью. Протокол предполагает существование нескольких "слоев" эталонных источников времени.

    Как известно, в мире есть так называемые эталонные источники времени – цезиевые часы и радиосигналы точного времени со спутников. Такие эталонные источники, говоря языком протокола NTP, входят в слой 0 ( stratum 0 ) и являются максимально точными из всех доступных эталонов времени.

    К серверам слоя 0 обращаются серверы слоя 1. Работающие на последних демоны xntpd (или ntpd – в других системах UNIX) распространяют точное время дальше, к серверам слоя 2 ( stratum 2 ). Именно к серверам слоя 2 обращаются обычные серверы точного времени из локальных сетей самых разных организаций.

    Другими словами, серверы времени xntpd в нашей локальной сети представляет собой сервер слоя 3: вся совокупность таких серверов в локальных сетях и образуют слой 3. Номер слоя фактически означает дистанцию (число промежуточных серверов времени) от данного компьютера до эталонного источника точного времени. Важно отметить, что серверы времени одного слоя не общаются между собой.

    Каждый NTP-сервер использует один или несколько источников точного времени, полностью полагаясь на них. Эти источники указываются в файле /etc/inet/ntp.conf. При старте xntpd отправляет им запрос, уточняя текущее время.

    Каждый из серверов времени, которым мы доверяем, опрашивается несколько раз для получения достоверной статистики задержки передачи пакета. Если указано несколько серверов, время с каждого из них запрашивается многократно. Как правило, 5 минут уходит на опрос каждого сервера для получения показаний времени, которые следует расценивать как достаточно точные.

    Запрос к серверу времени выполняется так:

  • клиент (например, наш xntpd ) указывает в отправляемом серверу пакете свое текущее системное время и отправляет этот пакет;
  • сервер времени получает пакет, вкладывает него время передачи пакета, вычисленное как разность между временем отправки и временем получения пакета сервером. Затем он вкладывает в этот же пакет свое текущее системное время и отправляет пакет обратно;
  • клиент получает пакет и запоминает свое локальное время получения пакета.
  • Теперь клиент имеет возможность рассчитать задержку передачи пакета как половину от "времени передачи туда и обратно минус время обработки пакета сервером".

    Если разница между эталонным и текущим системным временем не превышает 128 миллисекунд, то xntpd подстраивает частоту системных часов так, чтобы они догнали или затормозились до эталонного времени. Подстройка происходит довольно медленно и плавно.

    Если разница превышает 1000 секунд, xntpd полагает, что имеет место фатальный сбой времени на локальной машине, и завершается с предсмертным воплем, который запишется в /var/adm/messages.

    Если разница находится в пределах между 128 миллисекундами и 1000 секундами, то xntpd по умолчанию выставляет время сразу же, просто вызывая функцию settimeofday().

    Как видно, коррекция времени может быть постепенная и резкая. При резкой коррекции системное время изменяется быстрым скачком, одномоментно. Можно запретить такое изменение демону xntpd, указав при запуске ключ –x. Если часы спешат, особенно не рекомендуется изменять время резко, поскольку ряд приложений, зависимых от врмени (например, СУБД), могут в результате сохранить неверные данные. Впрочем, при постоянной работе сервера xntpd, как и при регулярном опросе такого сервера с помощью ntpdate, сильное расхождение времени нашего сервера и эталона исключено. Не следует использовать в качестве сервера времени компьютеры со сбоями аппаратуры или разряженной (неисправной) батарейкой CMOS (x86). Кроме этого, сервер времени не должен быть сильно нагруженным ресурсоемкими задачами компьютером: он не сможет обеспечить быстрый ответ и корректную обработку запроса.

    Для общения между собой серверы времени используют UDP порт 123.

    Выбор эталонного сервера времени

    Как мы уже знаем, чтобы обеспечить синхронизацию времени, в Интернете существуют "эталонные" серверы времени. Для получения показаний времени локальный сервер времени в своей сети следует настроить для обращений ко вторичным серверам (слой 2), так как нагрузка на главные серверы (слоя 1) очень велика. В России есть по крайней мере один устойчиво функционирующий эталонный сервер слоя 2: ntp.psn.ru (IP-адрес 194.149.67.130). Он расположен в Пущино; вот его регистрационные данные с сервера www.ntp.org:

    Location: Pushchino, Moscow region, Russia
    Geographic Coordinates: 54:50N, 37:37E
    Synchronization: NTP secondary (stratum 2), Alpha/Linux
    Service area: Russia
    Access policy: open access, please send a message to notify
    Contact: clockmaster@psn.ru

    Информация о других эталонных серверах времени и о режиме доступа к ним может быть получена по адресу http://www.ntp.org.

    Для того, чтобы пользоваться эталонным сервером времени, может требоваться регистрация или даже оплата этого сервиса. Однако, в Сети достаточно много таких серверов с публичным доступом, и хорошим тоном считается использовать такие серверы, отправив уведомительное письмо их администратору: просто для того, чтобы вежливо предупредить о том, что отныне еще один сервер времени будет получать информацию с их эталонного сервера.

    Запуск сервера времени

    Демон xntpd при старте читает файл /etc/inet/ntp.conf или принимает параметры из командной строки. Единственное, без чего он не может работать – адреса эталонных серверов и (или) режим работы.

    Если файл /etc/inet/ntp.conf не удается прочесть и с ключом –c не указан иной файл конфигурации, демон, если был заранее скомпилирован с поддержкой NetInfo, прислушивается к широковещательным сообщениям в сети и пытается сам найти себе эталон времени. Маловероятно, что в этом его ждет успех, если сервер времени находится за фильтром пакетов (межсетевым экраном, firewall'ом – это одно и то же).

    Программа ntpq позволяет получать информацию о текущей конфигурации прямо от сервера времени и изменять настройки xntpd "на ходу", без перезапуска сервера.

    В командной строке вызова xntpd доступны следующие ключи:

  • -a – включить аутентификацию (по умолчанию – выключена);
  • -A – выключить аутентификацию;
  • -b – синхронизироваться по широковещательным сообщениям NTP;
  • -c conffile – использовать указанный файл вместо /etc/inet/ntp.conf ;
  • -d – включить режим отладки;
  • -e authdelay – указать явно время в секундах, которое требуется данной системе для вычисления ключа;
  • -f driftfile – указать путь к файлу со значением сдвига часов;
  • -k keyfile – указывает файл с ключами для аутентификации в NTP;
  • -l logfile – указывает файл протокола; по умолчанию протоколирование ведется через syslog() ;
  • -m – синхронизировать часы по multicast сообщениям NTP на группу multicast-адресов 224.0.1.1; требует поддержки multicast в ядре;
  • -p pidfile – указывает файл, в который пишется PID процесса xntpd.
  • Файл конфигурации xntpd – ntp.conf

    В файле /etc/inet/ntp.conf команды располагаются по одной в строке, за ключевым словом команды могут идти аргументы. Строки, начинающиеся со знака решетки ( # ), являются комментариями. Пустые строки игнорируются. Аргументы отделяются от команды и друг от друга пробелами.

    Параметры настройки xntpd могут быть установлены в файле или из командной строки, ключи командной строки имеют преимущество перед установками в файле конфигурации.

    Аргументы могут быть именами компьютеров или IP-адресами, а также спецификацией времени (числом с плавающей точкой) и текстовой строкой.

    Рассмотрим пример конфигурации:

    server ntp.cpsc.ucalgary.ca prefer
    server ntp.my-provider.ru
    server louie.udel.edu
    driftfile /var/db/ntp.drift

    Параметр server указывает, какие эталонные серверы времени следует использовать, перечисляем по одному в каждой строке. Если один из серверов указан с модификатором prefer, как ntp.my-provider.ru в нашем примере, то ответу этого сервера отдается предпочтение перед остальными. Парметр server нельзя использовать в случае, если наш сервер определяет соседей, слушая широковещательные пакеты NTP.

    Ответ даже от предпочитаемого сервера будет отброшен, если он значительно отличается от ответов других серверов. В ином случае он будет использоваться вне зависимости от других ответов. Модификатор prefer применяется для тех серверов NTP, о которых известно, что они очень точны. Например, серверам из слоя 2 имеет смысл отдавать предпочтение перед серверами провайдера, филиала вашей фирмы или дружественной компании.

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

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

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

    Для ограничения группы компьютеров, имеющих право запрашивать время у xntpd, используется параметр restrict:

    restrict 192.168.1.0 mask 255.255.255.0 nomodify

    Такая установка разрешает обращаться к xntpd только компьютерам из сети 192.168.1.0 с маской сети 255.255.255.0, но запрещает им требовать от сервера NTP изменить его локальное время.

    Директив restrict в файле /etc/inet/ntp.conf может быть несколько.

    Демон xntpd также позволяет ввести аутентификацию для обращений к нему или настроить аутентификацию для обращения к тем эталонным серверам, которые ее требуют.

    Если ваша сеть невелика, а требования к точности времени умеренные (часы могут спешить или отставать на 30 миллисекунд и немного больше), то xntpd может показаться не лучшим выбором. Для синхронизации часов только при загрузке системы достаточно использовать программу ntpdate.

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

    1 */2 * * * root /usr/sbin/ntpdate -b –s адрес_NTP-сервера

    Проверка настроек сервера времени

    Для просмотра и изменения параметров xntpd используйте программу ntpq. В частности, для вывода информации об известных источниках точного времени запустите ее с ключом -p:

    ntpq -p
    remote refid st t when poll reach delay offset disp
    =================================================================
    ensb.cpsc.ucalg montpelier 2 u 26 64 1 189.36 2879.39 15875.0

    Если надо проследить цепочку, по которой точное время добирается до вашей сети, пригодится программа ntptrace:

    ntptrace ntp.cpsc.ucalgary.ca
    ensb.cpsc.ucalgary.ca: stratum 2, offset 2.867748, synch distance
    0.05968
    montpelier.ilan.caltech.edu: stratum 1, offset 2.863728, synch
    distance 0.00113, refid ''
    ntptrace localhost
    localhost: stratum 16, offset 0.000014, synch distance 1.00270

    Так как служба времени в Solaris контролируется с помощью SMF, можно использовать обычные для этого механизма команды для наблюдения и управления службой:

    svcprop -v svc:/network/ntp
    network/entities fmri svc:/network/service
    network/grouping astring require_any
    network/restart_on astring error
    network/type astring service
    general/entity_stability astring Unstable
    general/single_instance boolean true
    dependents/ntp_multi-user fmri svc:/milestone/multi-user
    start/exec astring /lib/svc/method/xntp
    start/timeout_seconds count 1800
    start/type astring method
    stop/exec astring :kill
    stop/timeout_seconds count 60
    stop/type astring method
    tm_common_name/C ustring Network\ Time\ Protocol\ \(NTP\)
    tm_man_xntpd/manpath astring :default
    tm_man_xntpd/section astring 1M
    tm_man_xntpd/title astring xntpd
    tm_man_ntpdate/manpath astring :default
    tm_man_ntpdate/section astring 1M
    tm_man_ntpdate/title astring ntpdate
    tm_man_ntpq/manpath astring :default
    tm_man_ntpq/section astring 1M
    tm_man_ntpq/title astring ntpq
    Страницы:

    Время в сети очень важно, так как многие операции в сети должны грамотно синхронизироваться.

    Например, очевидно, что при запуске резервного копирования через сеть время на сервере, где расположен ленточный накопитель, и время на сервере, откуда производится копирование, должно быть одинаковым – это особенно важно при автоматизации копирования на ленту, и еще важнее – при организации последовательного копирования на несколько лент, если объема одной недостаточно для завершения копирования.

    Еще один пример важности синхронизации времени – возможные проблемы при сохранении на файловом сервере файлов с тех клиентских машин, чье время отличается от серверного. Из-за этого на клиентских системах может возникать ложное восприятие "свежести" или "несвежести" файлов, хранящихся на сервере. Согласитесь, неприятно сохранить файл и тут же убедиться, что он датирован вчерашинм днем. Приходится гадать, сохранен ли свежий файл в соседний каталог, или на сервере просто сбита дата, или дата неверна на клиентской машине.

    Как узнать и установить системное время и дату

    Для того, чтобы узнать, который час, в UNIX принято использовать команду date. Она сообщает и текущую системную дату, и время. Команда time предназначена для другой цели – она подсчитывает время, потраченное системой на выполнение команды. Попробуйте

    time 'find / -name \* '

    для проверки, как много времени процессора займет составление и вывод полного списка файлов системы.

    С помощью команды date можно не только узнать текущее время, но и установить его. Устанавливать системное время может только root.

    Программа date понимает разные форматы дат, когда вы требуете установить дату, наиболее стандартным является формат

    date hhmm # hhmm – часы минуты

    или

    date ссyyMMddhhmm.ss

    где

  • сс – 19 или 20 ( cc – от "век" – century);
  • yy – год (98, если 1998, или 67, если 2067);
  • MM – месяц;
  • dd – число месяца;
  • hh – час;
  • mm – минуты;
  • ss – секунды.
  • date
  • без параметров выводит текущую дату и время, в формате, определяемом параметрами локализации (locale).

    Как синхронизировать время

    В Solaris есть возможность установить сервер синхронизации времени, который будет отвечать на вопросы "который час?" от других машин. Клиент этого сервера – программа ntpdate. Она спрашивает время у сервера точного времени (также называемого сервером синхронизации времени) и директивно устанавливает время в своей системе. При маленьких отклонениях времени от эталонного она вызывает функцию "мягкого изменения" времени, когда время не устанавливается определенным одномоментно, а часы системы ежесекундно "подталкиваются" на долю секунды вперед или назад.

    Программу ntpdate можно использовать и без собственного эталонного сервера времени, поскольку существуют публичные серверы времени.

    Посмотрим, как работает ntpdate – программа установки системной даты и времени:

    date
    Сбт 29 Май 2004 19:10:20

    Установим заведомо неверное время:

    date 1912
    Сбт 29 Май 2004 19:12:00

    Теперь запустим ntpdate и сообщим ей для ориентировки адреса двух эталонных серверов времени (я взял их из списка на www.ntp.org):

    ntpdate tock.keso.fi ntp.psn.ru
    29 May 19:10:31 ntpdate[10630]: step time server 194.149.67.130
    offset -95.351227 sec

    Повторим для надежности:

    ntpdate tock.keso.fi ntp.psn.ru
    29 May 19:10:39 ntpdate[10631]: adjust time server 194.149.67.130
    offset -0.006045 sec

    Очевидно, что вторая подвижка времени оказалась существенно меньше, чем первая: вначале часы были "возвращены" к правильному времени, а затем лишь слегка синхронизированы, причем в первом случае использовалась явная установка времени (step time server), а во втором – мягкая "подвижка" (adjust time server).

    Программу ntpdate достаточно запускать только при старте системы, если только аппаратура компьютера исправна и таймер не требует постоянной коррекции.

    Кроме программы ntpdate существуют и другие средства, предназначенные для организации синхронизации времени в сети. Программа ntpdate – это "клиентская" программа. В локальной сети организации имеет смысл установить по крайней мере один (лучше – два, чтобы был запасной) сервер времени. Именно он будет опрашивать серверы слоя 2, а компьютеры локальной сети будут сверять свои часы по этому локальному серверу времени. В качестве такого сервера в Solaris используют демон xntpd.

    Настройка сервера синхронизации времени

    Алгоритм работы xntpd

    Для синхронизации времени в сети был разработан специальный протокол NTP (network time protocol), в настоящее время используется, в основном, версия 4 этого протокола, но серверы NTP обладают полной обратной совместимостью. Протокол предполагает существование нескольких "слоев" эталонных источников времени.

    Как известно, в мире есть так называемые эталонные источники времени – цезиевые часы и радиосигналы точного времени со спутников. Такие эталонные источники, говоря языком протокола NTP, входят в слой 0 ( stratum 0 ) и являются максимально точными из всех доступных эталонов времени.

    К серверам слоя 0 обращаются серверы слоя 1. Работающие на последних демоны xntpd (или ntpd – в других системах UNIX) распространяют точное время дальше, к серверам слоя 2 ( stratum 2 ). Именно к серверам слоя 2 обращаются обычные серверы точного времени из локальных сетей самых разных организаций.

    Другими словами, серверы времени xntpd в нашей локальной сети представляет собой сервер слоя 3: вся совокупность таких серверов в локальных сетях и образуют слой 3. Номер слоя фактически означает дистанцию (число промежуточных серверов времени) от данного компьютера до эталонного источника точного времени. Важно отметить, что серверы времени одного слоя не общаются между собой.

    Каждый NTP-сервер использует один или несколько источников точного времени, полностью полагаясь на них. Эти источники указываются в файле /etc/inet/ntp.conf. При старте xntpd отправляет им запрос, уточняя текущее время.

    Каждый из серверов времени, которым мы доверяем, опрашивается несколько раз для получения достоверной статистики задержки передачи пакета. Если указано несколько серверов, время с каждого из них запрашивается многократно. Как правило, 5 минут уходит на опрос каждого сервера для получения показаний времени, которые следует расценивать как достаточно точные.

    Запрос к серверу времени выполняется так:

  • клиент (например, наш xntpd ) указывает в отправляемом серверу пакете свое текущее системное время и отправляет этот пакет;
  • сервер времени получает пакет, вкладывает него время передачи пакета, вычисленное как разность между временем отправки и временем получения пакета сервером. Затем он вкладывает в этот же пакет свое текущее системное время и отправляет пакет обратно;
  • клиент получает пакет и запоминает свое локальное время получения пакета.
  • Теперь клиент имеет возможность рассчитать задержку передачи пакета как половину от "времени передачи туда и обратно минус время обработки пакета сервером".

    Если разница между эталонным и текущим системным временем не превышает 128 миллисекунд, то xntpd подстраивает частоту системных часов так, чтобы они догнали или затормозились до эталонного времени. Подстройка происходит довольно медленно и плавно.

    Если разница превышает 1000 секунд, xntpd полагает, что имеет место фатальный сбой времени на локальной машине, и завершается с предсмертным воплем, который запишется в /var/adm/messages.

    Если разница находится в пределах между 128 миллисекундами и 1000 секундами, то xntpd по умолчанию выставляет время сразу же, просто вызывая функцию settimeofday().

    Как видно, коррекция времени может быть постепенная и резкая. При резкой коррекции системное время изменяется быстрым скачком, одномоментно. Можно запретить такое изменение демону xntpd, указав при запуске ключ –x. Если часы спешат, особенно не рекомендуется изменять время резко, поскольку ряд приложений, зависимых от врмени (например, СУБД), могут в результате сохранить неверные данные. Впрочем, при постоянной работе сервера xntpd, как и при регулярном опросе такого сервера с помощью ntpdate, сильное расхождение времени нашего сервера и эталона исключено. Не следует использовать в качестве сервера времени компьютеры со сбоями аппаратуры или разряженной (неисправной) батарейкой CMOS (x86). Кроме этого, сервер времени не должен быть сильно нагруженным ресурсоемкими задачами компьютером: он не сможет обеспечить быстрый ответ и корректную обработку запроса.

    Для общения между собой серверы времени используют UDP порт 123.

    Выбор эталонного сервера времени

    Как мы уже знаем, чтобы обеспечить синхронизацию времени, в Интернете существуют "эталонные" серверы времени. Для получения показаний времени локальный сервер времени в своей сети следует настроить для обращений ко вторичным серверам (слой 2), так как нагрузка на главные серверы (слоя 1) очень велика. В России есть по крайней мере один устойчиво функционирующий эталонный сервер слоя 2: ntp.psn.ru (IP-адрес 194.149.67.130). Он расположен в Пущино; вот его регистрационные данные с сервера www.ntp.org:

    Location: Pushchino, Moscow region, Russia
    Geographic Coordinates: 54:50N, 37:37E
    Synchronization: NTP secondary (stratum 2), Alpha/Linux
    Service area: Russia
    Access policy: open access, please send a message to notify
    Contact: clockmaster@psn.ru

    Информация о других эталонных серверах времени и о режиме доступа к ним может быть получена по адресу http://www.ntp.org.

    Для того, чтобы пользоваться эталонным сервером времени, может требоваться регистрация или даже оплата этого сервиса. Однако, в Сети достаточно много таких серверов с публичным доступом, и хорошим тоном считается использовать такие серверы, отправив уведомительное письмо их администратору: просто для того, чтобы вежливо предупредить о том, что отныне еще один сервер времени будет получать информацию с их эталонного сервера.

    Запуск сервера времени

    Демон xntpd при старте читает файл /etc/inet/ntp.conf или принимает параметры из командной строки. Единственное, без чего он не может работать – адреса эталонных серверов и (или) режим работы.

    Если файл /etc/inet/ntp.conf не удается прочесть и с ключом –c не указан иной файл конфигурации, демон, если был заранее скомпилирован с поддержкой NetInfo, прислушивается к широковещательным сообщениям в сети и пытается сам найти себе эталон времени. Маловероятно, что в этом его ждет успех, если сервер времени находится за фильтром пакетов (межсетевым экраном, firewall'ом – это одно и то же).

    Программа ntpq позволяет получать информацию о текущей конфигурации прямо от сервера времени и изменять настройки xntpd "на ходу", без перезапуска сервера.

    В командной строке вызова xntpd доступны следующие ключи:

  • -a – включить аутентификацию (по умолчанию – выключена);
  • -A – выключить аутентификацию;
  • -b – синхронизироваться по широковещательным сообщениям NTP;
  • -c conffile – использовать указанный файл вместо /etc/inet/ntp.conf ;
  • -d – включить режим отладки;
  • -e authdelay – указать явно время в секундах, которое требуется данной системе для вычисления ключа;
  • -f driftfile – указать путь к файлу со значением сдвига часов;
  • -k keyfile – указывает файл с ключами для аутентификации в NTP;
  • -l logfile – указывает файл протокола; по умолчанию протоколирование ведется через syslog() ;
  • -m – синхронизировать часы по multicast сообщениям NTP на группу multicast-адресов 224.0.1.1; требует поддержки multicast в ядре;
  • -p pidfile – указывает файл, в который пишется PID процесса xntpd.
  • Файл конфигурации xntpd – ntp.conf

    В файле /etc/inet/ntp.conf команды располагаются по одной в строке, за ключевым словом команды могут идти аргументы. Строки, начинающиеся со знака решетки ( # ), являются комментариями. Пустые строки игнорируются. Аргументы отделяются от команды и друг от друга пробелами.

    Параметры настройки xntpd могут быть установлены в файле или из командной строки, ключи командной строки имеют преимущество перед установками в файле конфигурации.

    Аргументы могут быть именами компьютеров или IP-адресами, а также спецификацией времени (числом с плавающей точкой) и текстовой строкой.

    Рассмотрим пример конфигурации:

    server ntp.cpsc.ucalgary.ca prefer
    server ntp.my-provider.ru
    server louie.udel.edu
    driftfile /var/db/ntp.drift

    Параметр server указывает, какие эталонные серверы времени следует использовать, перечисляем по одному в каждой строке. Если один из серверов указан с модификатором prefer, как ntp.my-provider.ru в нашем примере, то ответу этого сервера отдается предпочтение перед остальными. Парметр server нельзя использовать в случае, если наш сервер определяет соседей, слушая широковещательные пакеты NTP.

    Ответ даже от предпочитаемого сервера будет отброшен, если он значительно отличается от ответов других серверов. В ином случае он будет использоваться вне зависимости от других ответов. Модификатор prefer применяется для тех серверов NTP, о которых известно, что они очень точны. Например, серверам из слоя 2 имеет смысл отдавать предпочтение перед серверами провайдера, филиала вашей фирмы или дружественной компании.

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

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

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

    Для ограничения группы компьютеров, имеющих право запрашивать время у xntpd, используется параметр restrict:

    restrict 192.168.1.0 mask 255.255.255.0 nomodify

    Такая установка разрешает обращаться к xntpd только компьютерам из сети 192.168.1.0 с маской сети 255.255.255.0, но запрещает им требовать от сервера NTP изменить его локальное время.

    Директив restrict в файле /etc/inet/ntp.conf может быть несколько.

    Демон xntpd также позволяет ввести аутентификацию для обращений к нему или настроить аутентификацию для обращения к тем эталонным серверам, которые ее требуют.

    Если ваша сеть невелика, а требования к точности времени умеренные (часы могут спешить или отставать на 30 миллисекунд и немного больше), то xntpd может показаться не лучшим выбором. Для синхронизации часов только при загрузке системы достаточно использовать программу ntpdate.

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

    1 */2 * * * root /usr/sbin/ntpdate -b –s адрес_NTP-сервера

    Проверка настроек сервера времени

    Для просмотра и изменения параметров xntpd используйте программу ntpq. В частности, для вывода информации об известных источниках точного времени запустите ее с ключом -p:

    ntpq -p
    remote refid st t when poll reach delay offset disp
    =================================================================
    ensb.cpsc.ucalg montpelier 2 u 26 64 1 189.36 2879.39 15875.0

    Если надо проследить цепочку, по которой точное время добирается до вашей сети, пригодится программа ntptrace:

    ntptrace ntp.cpsc.ucalgary.ca
    ensb.cpsc.ucalgary.ca: stratum 2, offset 2.867748, synch distance
    0.05968
    montpelier.ilan.caltech.edu: stratum 1, offset 2.863728, synch
    distance 0.00113, refid ''
    ntptrace localhost
    localhost: stratum 16, offset 0.000014, synch distance 1.00270

    Так как служба времени в Solaris контролируется с помощью SMF, можно использовать обычные для этого механизма команды для наблюдения и управления службой:

    svcprop -v svc:/network/ntp
    network/entities fmri svc:/network/service
    network/grouping astring require_any
    network/restart_on astring error
    network/type astring service
    general/entity_stability astring Unstable
    general/single_instance boolean true
    dependents/ntp_multi-user fmri svc:/milestone/multi-user
    start/exec astring /lib/svc/method/xntp
    start/timeout_seconds count 1800
    start/type astring method
    stop/exec astring :kill
    stop/timeout_seconds count 60
    stop/type astring method
    tm_common_name/C ustring Network\ Time\ Protocol\ \(NTP\)
    tm_man_xntpd/manpath astring :default
    tm_man_xntpd/section astring 1M
    tm_man_xntpd/title astring xntpd
    tm_man_ntpdate/manpath astring :default
    tm_man_ntpdate/section astring 1M
    tm_man_ntpdate/title astring ntpdate
    tm_man_ntpq/manpath astring :default
    tm_man_ntpq/section astring 1M
    tm_man_ntpq/title astring ntpq
    Вернуться к учебному плану