Глава 23 Синхронизация времени через сеть, настройка временной зоны
Глава 23 Синхронизация времени через сеть, настройка временной зоны
Для комфортной работы с компьютером иногда может не хватать такой малости, как нормально настроенное системное время. Плохо, когда приходится ежедневно его подправлять или вручную производить переход на летнее/зимнее время.
Особенно это неприятно, когда компьютеров несколько десятков, и время у всех должно быть синхронизировано. Для синхронизации системного времени создателями Интернета был предусмотрен специальный сервис – сетевой протокол времени (Network time protocol, NTP).
Сетевой протокол времени
Сетевой протокол времени предназначен для синхронизации клиента или сервера точного времени с другим сервером точного времени или эталонным источником времени (радио, атомные часы и тому подобные устройства). Для локальной сети NTP способен обеспечить точность до миллисекунды, а для распределенной сети (в частности Интернета) достижима точность синхронизации порядка нескольких десятков миллисекунд. Последний стандарт этого протокола предусматривает криптографическую защиту передаваемых данных, одновременное подключение к нескольким серверам точного времени для достижения более точной синхронизации времени и повышения отказоустойчивости системы и многое другое.
Структура сети серверов точного времени многоуровневая. Главные серверы точного времени, напрямую подключенные к источнику эталонного времени, образуют первый уровень, серверы точного времени, присоединенные непосредственно к главным серверам, образуют второй уровень, и т. д.
В качестве сетевого протокола используется протокол UDP, порт 123. Для увеличения надежности и точности получаемых данных применяется фильтрация, селекция и комбинация пакетов на принципах максимальной вероятности, а также несколько резервных серверов и путей передачи.
Для передачи и хранения времени используется беззнаковое 64-битовое число с фиксированной точкой, которое хранит число секунд в формате UTC. Старшие 32 бита – число секунд, младшие 32 бита – дробная часть секунд. Достижимая точность – 232 пикосекунды. О означает неопределенное время.
Классы обслуживания
Служба точного времени имеет несколько классов обслуживания клиентов:
• multicast – предназначен для использования в быстрой локальной сети со множеством клиентов, где отсутствует необходимость в высокой точности. Принцип действия – один или более NTP-серверов рассылают широковещательное сообщение, клиенты определяют время, предполагая, что задержка составляет несколько миллисекунд. Сервер не принимает ответных NTP-сообщений;
• procedure-call – предназначен для получения высокоточного времени. NTP-клиент посылает запрос на сервер точного времени, который обрабатывает запрос и немедленно посылает ответ. Сервер не синхронизируется с клиентом;
• symmetric – предназначен для использования серверами точного времени. Представляет собой динамически реконфигурируемую иерархию серверов точного времени. Каждый сервер точного времени синхронизирует своих соседей и синхронизируется своими соседями в соответствии с правилами выбора соседей. Активный режим используется серверами точного времени низшего уровня с заранее определенными адресами соседей, пассивный режим используется серверами точного времени, близкими к первому уровню, и взаимодействующими с соседями с заранее неизвестными адресами.
Обеспечение достоверности данных
Алгоритм функционирования сервера точного времени подразумевает несколько способов для обеспечения достоверности данных.
• Если в течение восьми последовательных интервалов опроса от соседнего сервера точного времени не было сообщений, то этот сервер считается недостижимым.
• Осуществляется проверка времени:
– если время передачи совпадает с временем предыдущего сообщения – дублированный пакет;
– если время отправки сообщения не совпадает с временем, содержащимся в пакете, сервер считает, что он получил фальшивый пакет.
• Имеется алгоритм защиты от очень старых сообщений.
• Аутентификатор состоит из ключа и шифрованной контрольной суммы, которая создается с использованием алгоритма шифрования DES.
Формат NTP-пакета
Пакет NTP включает следующие поля:
• LI (leap indicator) – в конце суток должна быть вставлена секунда для синхронизации атомных и астрономических часов;
• VN – номер версии протокола;
• mode – режим работы сервера точного времени;
• stratum – уровень сервера;
• precision – точность часов сервера;
• poll interval – интервал запросов. Используется наименьший интервал из своего сервера и сервера, отвечающего на запросы;
• synchronization distance – полный цикл обмена сообщениями до первичного источника;
• synchronization dispersion – дисперсия задержек синхронизации;
• reference clock identifier – тип источника времени;
• reference timestamp – время последнего изменения источника времени;
• originate timestamp – время соседа, когда было отправлено последнее NTP-сообщение;
• receive timestamp – местное время получения последнего NTP-сообщения;
• transmit timestamp – местное время отправки текущего сообщения;
• authenticator (96 bit) – ключ и шифрованная контрольная сумма сообщения.
Рекомендуемая конфигурация
Рекомендуемая конфигурация подразумевает наличие трех местных серверов точного времени, соединенных между собой, каждый из которых подключен к двум различным внешним серверам. Клиенты службы точного времени подключаются к каждому местному серверу точного времени.
Стандарты
Используемые для протокола NTP стандарты приведены в табл. 23.1.
Таблица 23.1. Стандарты протокола NTP
Сервер xntpd
Для UNIX-платформы, в том числе и Linux, существует сервер точного времени, носящий название xntpd. Этот сервер полностью реализует стандарт RFC 1305 и имеет расширенные возможности, которые планируется включить в следующую версию стандарта. Входит в стандартную поставку большинства дистрибутивов Linux. Установка тривиальна. Файл конфигурации – /etc/ntp.conf.
Конфигурация сервера
Поскольку варианты конфигурирования сервера зависят от класса обслуживания, сервер имеет достаточно много настроек, которые в основном содержатся в конфигурационном файле /etc/ntp.conf.
Класс symmetric
Этот класс предназначен для конфигурирования сервера точного времени в режиме symmetric.
peer address [key key ] [version version ] [prefer] [minpoll minpoll ] [maxpoll maxpoll ]
Здесь:
• address – адрес симметричного сервера;
• key – 32-битный ключ для поля аутентификации (по умолчанию отсутствует);
• prefer – предпочитать данный сервер при прочих равных условиях;
• minpoll – минимальный интервал запросов (секунды, 2 в степени minpoll в диапазоне от 4 (16 с) до 14 (16 384 с), по умолчанию 6 (64 с));
• maxpoll – максимальный интервал запросов (секунды, 2 в степени maxpoll, по умолчанию 10—1024 с).
Класс procedure-callЭтот класс предназначен для конфигурирования сервера точного времени в режиме procedure-call.
• server address [key key ] [version version ] [prefer] [mode mode ]
• address – адрес сервера;
• key – 32-битный ключ для поля аутентификации (по умолчанию отсутствует);
• mode – режим.
Класс multicastПредназначен для настройки multicast-режима. Обычно используется в локальных сетях.
• broadcast address [key key ] [version version ] [ttl ttl]
– address – адрес симметричного сервера;
– key – 32-битный ключ для поля аутентификации (по умолчанию отсутствует);
– version – версия протокола;
– ttl – время жизни пакета.
• broadcast client [ address] address – адрес клиента, получающего информацию.
• broadcastdeiay секунд – позволяет самостоятельно указать задержку в распространении пакета.
Общие параметрыЗдесь описываются общие параметры настройки сервера xntpd/:
• driftfile driftfile – определяет файл, в котором хранится и извлекается при запуске сдвиг частоты местных часов;
• enable/disable auth/moni tor/pll/pps/stats — включить/выключить режим работы:
– auth — с неупомянутыми соседями общаться только в режиме аутентификации;
– monitor — разрешить мониторинг запросов;
– pll — разрешать настраивать частоту местных часов по NTP;
– stats — разрешить сбор статистики;
• statistics loopstats — при каждой модификации локальных часов записывает строчку в файл loopstats;
Формат файла loopstats:
– номер модифицированного дня по юлианскому календарю;
– секунды с полуночи (UTC);
– смещение в секундах;
– смещение частоты в миллионных долях;
– временная константа алгоритма дисциплинирования часов;
• statistics peerstats – каждое общение с соседом записывается в журнал, хранящийся в файле peerstats;
Формат файла peerstats:
– номер модифицированного дня по юлианскому календарю;
– секунды с полуночи (UTC);
– IP-адрес соседа;
– статус соседа, шестнадцатеричное число;
– смещение, с;
– задержка, с;
– дисперсия, с;
• statistics ciockstats – каждое сообщение от драйвера локальных часов записывается в журнал, хранящийся в файле ciockstats;
• statsdir имя-каталога-со-статистикой – задает имя каталога, в котором будут находиться файлы со статистикой сервера;
• filegen [file filename] [type typename] [flag flagval] [link | nolink] [enable | disable] – определяет алгоритм генерации имен файлов.
Имена файлов состоят из следующих элеметов:
– префикс – постоянная часть имени файла, задается либо при компиляции, либо специальными командами конфигурации;
– имя файла – добавляется к префиксу без косой черты, две точки запрещены, может быть изменена ключом file;
– суффикс – генерируется в зависимости от typename:
· none – обычный файл;
· pid – при каждом запуске xntpd создается новый файл (к префиксу и имени файла добавляются точка и номер процесса);
· day – каждый день создается новый файл (к префиксу и имени файла добавляются. yyyymmdd);
· week – каждую неделю создается новый файл (к префиксу и имени файла добавляются. yyyywww);
· month – каждый месяц создается новый файл (к префиксу и имени файла добавляются. yyyymm);
· year – каждый год создается новый файл (к префиксу и имени файла добавляются уууу);
· age – новый файл создается каждые 24 часа (к префиксу и имени файла добавляются а и 8-значное количество секунд на момент создания файла от момента запуска xntpd);
· link/noiink – по умолчанию создается жесткая ссылка от файла без суффикса к текущему элементу набора (это позволяет обратиться к текущему файлу из набора используя постоянное имя);
· enable/disable – разрешают/запрещают запись в соответствующий набор файлов;
• restrict numeric-address [mask numeric-mask ] [flag] … – задает ограничение доступа: пакеты сортируются по адресам и маскам, берется исходный адрес и последовательно сравнивается, от последнего удачного сравнения берется флаг доступа:
– нет флагов – дать доступ;
– ignore – игнорировать все пакеты;
– no query – игнорировать пакеты NTP 6 и 7 (запрос и модификация состояния);
– nomodify – игнорировать пакеты NTP 6 и 7 (модификация состояния);
– not rap – отказать в обеспечении mode 6 trap сервиса (удаленная журнализация событий);
– lowpriotrap – обслуживать ловушки, но прекращать обслуживание, если более приоритетный клиент потребует этого;
– no serve – обслуживать только запросы mode 6 и 7;
– nopeer – обслуживать хост, но не синхронизироваться с ним;
– not rust – не рассматривать как источник синхронизации;
– limited – обслуживать только ограниченное количество клиентов из данной сети;
– ntpport /non-ntpport – модификатор алгоритма сравнения адресов (сравнение успешно если исходный порт равен/неравен 123), алгоритм сортировки ставит эту строку в конец списка.
• clientiimit limit – для флага limited определяет максимальное количество обслуживаемых клиентов (по умолчанию 3);
• clientperiod секунд – сколько секунд считать клиента активным и учитывать при определении количества обслуживаемых клиентов;
• trap host-address [port port-number] [interface interface-address] – задать хост и порт, которые будут вести журнал;
• setvar variable – установка дополнительных переменных;
• logfile имя-файла – использовать файл имя-файла для ведения журнала вместо syslog;
• logconfig keyword – управление количеством сообщений, сбрасываемых в журнал. Ключевое слово может быть предварено символами равно (установка маски), минус (удаление класса сообщений), плюс (добавление); ключевое слово образуется слиянием класса сообщений (clock, peer, sys, sync) и класса событий (info, event, statistics, status); В качестве суффикса или префикса может использоваться слово all.
Обеспечение безопасности сервера
Если сервер точного времени не предназначен для широкой общественности, а используется только внутренней локальной сетью, желательно закрыть 123 порт для доступа извне, чтобы избежать возможной атаки типа denial of service (отказ в обслуживании), поскольку это грозит неправильным функционированием сервера. Также, если возможно, необходимо использовать шифрование.
Вот список правил для организации брандмауэра, закрывающего доступ к вашему серверу снаружи (см. гл. 29):ipchains -A input -р udp -j ACCEPT -s 10.0.0.0/8 -d 0.0.0.0/0 123
ipchains -A input -p udp -j ACCEPT -s some.trusted.host -d 0.0.0.0/0 123
ipchains -A input -p udp -j DENY -s 0.0.0.0/0 -d 0.0.0.0/0 123
Программы и утилиты, относящиеся к службе точного времени
ntpdate
Эта утилита позволяет установить время на компьютере, используя список NTP-серверов.
Используемые ключи:
• -B – только плавный сдвиг, даже если смещение больше 128 мс;
• -b – всегда использовать settimeofday;
• -d – отладка;
• -р число – число запросов к каждому серверу (от 1 до 8, по умолчанию 4);
• -q – только запрос времени;
• -s – использовать syslog вместо stdout;
• -t timeout – время ожидания ответа (по умолчанию 1 с);
• -u – использовать непривилегированный порт.
ntpq
Утилита для получения состояния NTP-сервера и его изменения (использует NTP mode 6).
ntptrace
Утилита для поиска серверов первого уровня. Используемые ключи:
• -r число – количество запросов (по умолчанию 5);
• -t секунд – время ожидания ответа (по умолчанию 2).
xntpd
Собственно демон точного времени. Используемые параметры при запуске:xntpd [-aAbdm] [-с config-file ] [-f drift-file ] [-k key-file ]
[-l log-file ] [-p pid-file ] [-r broadcast-delay ] [-s stats-dir ]
[-t key ] [-v variable ] [-V variable ]Здесь:
• -a – разрешить аутентификацию;
• -A – запретить аутентификацию;
• -b – широковещательные сообщения;
• -c config-file – конфигурационный файл (по умолчанию /etc/ntp.conf);
• -d – отладка;
• -f drift-file — файл, хранящий смещение часов (по умолчанию /etc/ntp.drift);
• -k key-file — файл ключей (по умолчанию /etc/ntp.keys);
• -l log-file — файл протокола (по умолчанию syslog).
xntpdc
Утилита для запроса состояния NTP-сервера и его изменения. Применяется только для xntpd-серверов. Использует NTP mode 7.
Публичные NTP-серверы
Список публичных серверов точного времени можно найти в Интернете. В любом случае вам придется этот список публичных серверов протестировать, чтобы определить задержки и качество соединения. Попробуйте сначала получить список серверов точного времени вашего провайдера (провайдеров). В списке литературы приведена ссылка на список серверов точного уровня первого и второго уровней, можно попробовать синхронизироваться от них.
Клиентские программы для синхронизации времени
Сам по себе сервер точного времени не нужен, если у пользователей нет возможности синхронизировать время. В настоящее время практически для всех операционных систем есть программы для получения времени с серверов NTP.
UNIX/Linux
Для этих операционных систем можно на компьютере установить сервер xntpd и настроить его для получения точного времени. У этого решения есть как достоинства, так и недостатки. Положительным моментом является то, что мы можем максимально точно синхронизировать время и построить отказоустойчивую конфигурацию. Отрицательный момент – достаточно сложное конфигурирование сервера и относительно большой объем занимаемой оперативной памяти компьютера.
Более простой вариант – воспользоваться утилитой ntpdate. Маленькая, простая в конфигурировании, позволяющая получить достаточно точное время – расхождение порядка 100 миллисекунд. Для синхронизации времени следует выполнить следующую команду:ntpdate -B ntp ntp2 ntp3
где ntp, ntp2, ntp3 – адреса серверов точного времени. Рекомендуется добавить эту строчку в таблицу заданий crontab (если у вас, конечно, постоянное подключение к Интернету).
Apple
Для компьютеров фирмы Apple есть клиент NTP, называющийся macntp.
Windows
Для операционной системы Windows существует несколько клиентов службы точного времени. В частности программа AboutTime, которую можно получить по адресу ftp.psn.ru/pub/abouttime_nomsie.zip. Или программа AnalogX Atomic TimeSync, получить которую можно по адресу www.analogx.com/contents/download/network/ats.htm
Настройка временной зоны
Обычно при установке операционной системы вы корректно выбираете свой часовой пояс. В качестве ориентира часового пояса в малых странах указывается столица государства, к примеру для Беларуси – Минск, для Украины – Киев. Для больших стран ориентируются на крупнейший город нужной часовой зоны.
Однако иногда можно ошибиться и выбрать зону неправильно или автоматически нажать ввод и получить временную зону, которую предлагает программа инсталляции дистрибутива по умолчанию. В результате – неправильное время.
Для корректной установки временной зоны необходимы всего два файла: /etc/localtime и /etc/sysconfig/clock. Первый файл отвечает за временную зону, а второй – за способ хранения и представления времени в системе. Рассмотрим поподробнее эти файлы.
/etc/localtime
Файл /etc/localtime представляет собой описание временной зоны, в которой определяется смещение часового пояса относительно Гринвича, даты перехода на летнее/зимнее время и некоторую дополнительную информацию. Формат файла – бинарный. Обычно разработчики дистрибутива поставляют файлы для всех временных зон в различных представлениях и форматах, из которых можно выбрать подходящую временную зону. В дистрибутиве Red Hat Linux 7.2 скомпилированные файлы временных зон находятся в каталоге /usr/share/zoneinfo/. Найдя подходящий для вашей временной зоны файл, скопируйте его в каталог /etc и переименуйте в localtime. В том невероятном случае, если вам не подходит файл временной зоны – сделайте его самостоятельно. Для этого необходимо создать текстовый файл, содержащий описание вашей временной зоны и скомпилировать его утилитой zic. Ниже приведен пример текстового файла, описывающего временную зону с переключением на летнее/зимнее время для Украины:Rule dst 1982 maximum – Apr lastSun 2:00 1 «EET DST»
Rule dst 1982 maximum – Oct lastSun 2:00 0 "EET DST"
Zone EET 2:00 dst %sПодробное описание утилиты zic смотрите в соответствующей справочной странице man.
Данный текст является ознакомительным фрагментом.