4h4-auto.ru

4х4 Авто
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Установка NTP на Ubuntu

Установка NTP на Ubuntu 18.04

Если вы когда-нибудь задавались вопросом о том, как работает автоматический переход на зимнее/летнее время либо задумывались, как компьютер берет из интернета информацию о точном времени, настраивая внутренние часы, то сегодняшняя статья — для вас. А еще для тех, кому необходимо настроить синхронизацию часов на сервере, работающем под управлением операционной системы Ubuntu 18.04, и на компьютере-клиенте, где установлен аналогичный дистрибутив Linux.

Речь пойдет об NTP — протоколе сетевого времени. Именно он повсеместно применяется для решения таких задач. После прочтения статьи вы сможете:

  • Установить NTP-сервер и настроить его для работы на серверной версии Ubuntu 18.04.
  • Установить клиентское приложение NTP на машине-клиенте с Ubuntu 18.04, а также убедиться в том, что синхронизация с сервером происходит так, как положено.

Установка NTP-сервера на Ubuntu 18.04

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

Шаг 1: Обновление списка репозиториев

Сначала рассмотрим как установить NTP сервер Ubuntu 18.04. Но установку любого ПО в Ubuntu предваряет выполнение следующей команды:

sudo apt update -y

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

Шаг 2: Установка NTP-сервера

Когда компьютер закончит выполнение предыдущей команды, самое время дать ему следующее задание. Оно заключается в установке протокола NTP на Ubuntu 18.04 c длительным сроком поддержки. Команда выглядит так:

sudo apt install ntp

После ее получения система проверит, доступны ли ей установочные файлы и сообщит о том, какой объем памяти будет занимать программа. На экране появится запрос на инсталляцию, который нужно подтвердить, нажав клавиши Y и ENTER, либо отклонить нажатием N и Enter (в том случае, если вы решили отложить все это дело на потом).

После завершения не помешает убедиться в том, что установка прошла успешно. Сделать это можно, спросив систему, какая именно версия NTP доступна на компьютере в данный момент:

Шаг 3: Настройка пулов NTP-сервера

Работа NTP-сервера по умолчанию строится на четырех «родных» пулах для Ubuntu. Их адреса прописаны в файле конфигурации /etc/ntp.conf . Нет прямой необходимости что-либо здесь менять, однако, есть смысл заменить пулы на те, которые расположены ближе к физическому месту нахождения сервера.

Воспользовавшись ссылкой https://support.ntp.org/bin/view/Servers/NTPPoolServers, вы можете подобрать наиболее предпочтительные для вас пулы. Мы же воспользуемся еврпейскими пулами NTP.

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

sudo vim /etc/ntp.conf

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

sudo vim /etc/ntp.conf

server 0.europe.pool.ntp.org
server 1.europe.pool.ntp.org
server 2.europe.pool.ntp.org
server 3.europe.pool.ntp.org

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

sudo systemctl restart ntp
sudo systemctl status ntp

Если брандмауэр UWF активен, компьютеры-клиенты не смогут получать информацию с нашего сервера. Чтобы предоставить им доступ, нужно разрешить ему работу со службой NTP, выполнив одну из указанных команд:

sudo ufw allow ntp
sudo ufw allow 123 / udp

С новыми настройками брандмауэр заработает только после перезагрузки:

sudo ufw reload

Проверить, все ли сделано правильно, можно с помощью такой команды:

sudo ufw status

Если на вашем экране появилось то же самое, что вы видите на скриншоте, значит, установка и настройка NTP-сервера оказалась успешной. Теперь можно перейти к аналогичным действиям на машине-клиенте.

Установка и настройка NTP-клиента в Ubuntu 18.04

В этом разделе будет описан способ установки NTP-клиента на Ubuntu 18.04, который выполняет роль клиента и должен синхронизировать время Ubuntu с нашим сервером, настроенным ранее.

Шаг 1: Обновление репозиториев

Начало ничем не отличается — следует выполнить команду для обновления списка репозиториев и файлов.

sudo apt update -y

После завершения можно приступать к следующему шагу.

Шаг 2: Установка Ntpdate

Ntpdate — это утилита, которая позволяет синхронизировать время компьютера (локальное) с серверным (глобальным). При этом используются ресурсы NTP. Для инсталляции программы в систему предназначена команда

sudo apt install ntpdate

Чтобы машина-клиент воспринимала NTP-сервер по его названию, нужно отредактировать файл /etc/hosts, внеся в него IP-адрес NTP-сервера и соответствующее имя хоста. Работа с файлом осуществляется при помощи текстового редактора:

sudo vim /etc/hosts

IP-адрес и имя хоста должны выглядеть следующим образом:

Шаг 3: Проверка синхронизации времени

Такую проверку выполняют в ручном режиме с помощью команды

sudo ntpdate имя_хоста_ntp_сервера

Поскольку в предыдущем шаге мы присвоили хосту имя, то в нашем случае эта команда будет выглядеть немного иначе:

sudo ntpdate bionic

В ответ система отобразит временной сдвиг.

Для синхронизации времени между клиентом и сервером NTP понадобится отключить службу timesynchd на компьютере-клиенте. Для этого используют следующую команду:

sudo timedatectl set-ntp off

Шаг 4: Установка NTP-клиента

Следующий этап — установка NTP-клиента. Выполняют её командой:

sudo apt install ntp

Как и в случае с сервером, система запросит разрешения на продолжение установки. Чтобы согласиться, нужно нажать букву Y клавиатуре и ENTER.

Шаг 5: Настройка NTP-клиента

Теперь наша цель — использовать настроенный ранее NTP-сервер в качестве NTP-сервера для клиентской машины. Чтобы это стало возможным не обойтись без редактирования файла /etc/ntp.conf.

Читайте так же:
Регулировка сцепления от гула

sudo vim /etc/ntp.conf

Когда файл откроется, нужно пролистать его в конец и сделать там небольшую приписку, указав bionic как имя хоста для NTP-сервера:

server bionic prefer iburst

После этого обязательно сохраняем изменения и закрываем файл. Для активации новых настроек следует перезапустить службу NTP:

sudo systemctl restart ntp

Шаг 6: Проверка синхронизации времени

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

Вывод может быть таким:

Выводы

На этом — все. Установка NTP Ubuntu 18.04 была завершена успешно. Мы настроили как серверную часть, так и клиентскую для синхронизации с NTP-сервером. Свои вопросы и пожелания пишите в комментариях.

Нет похожих записей

Оцените статью:

Об авторе

Автор: James Kiarie

Больше восьми лет назад мною было принято решение объявить бойкот оконной монополии и установить на свой компьютер Ubuntu. С тех пор это моя основная ОС. Иногда в порядке эксперимента «подселяю» к ней собратьев из семьи Linux. Увлекаюсь фотографией и горным туризмом. В свободное от работы время пишу статьи для losst.ru.

9 комментариев

В России не будет же перевода времени.

это пока да. но потом придёт какой-нибуть дрянелькин и решит что управлять страной не по плечу и займётся тем что никому не нужно и будет управлять не только временим а геометрию часовых поясов перекраивать. а за ним придёт какой нибуть грёбпутин и решит что всё дерьмо надо как-то разгребать и начнёт так жэ с того что мало кому нужно, выправлять время. но это так об истории а вопрос далее.
спасибо автору за статью! да достаточно хороша, но немножко не полная. действительно сайт посвещён только операцыонке линуксов, но по скольку эта статья касается серверных задач, надо жэ предполагать что сети состоят не только из одних линуксов. но хотябы в скользь упомянуть и про другие настройки остальных операцыонок. к примеру для виндовозников подобный сервер в сети не совсем полезен. к примеру в командной строке виндовозни команда net time \host к подобному серваку на линуксе обратиться можэт и дажэ достаточно хорошо с ним синхронизируется. но вот стандартная служба с этим линуксовым сервером времени работать не будет. по скольку эта самая виндовозная служба работает с серверами времени через http. вопрос? как на линуксе организовать http сервер времени для синхронизацыи всех машин под любой операцыонкой?
всем всего хорошего!

Обратите внимание за запись в /etc/ntp.conf

# If you want to provide time to your local subnet, change the next line.
# (Again, the address is an example only.)
#broadcast 192.168.123.255

Но для виндов лучше в настройках обновления времени через по Интернет указать локальный сервер NTP. Или в DNS локальной сети узлу time.windows.com, который перегружен и часто недоступен, сопоставить IP сервера NTP.

Вторым вариантом м.б. все запросы по udp по порту 123 от потребителей локальной сети заворачивать на порт 123 компьютера, на котором установлен сервер NTP.

Здравствуте ! Занимательно! Но у вас при вводе sudo vim /etc/ntp.conf. работает не vim , а nano.

в целом неплохо, но для новичков
nano — фу, vim — рулит

Может ошибка в статье? У меня на sudo systemctl restart ntp отвечает Failed to restart ntp.service: Unit ntp.service not found, и с start/enable то же самое. Попробовал заменить ntp на ntpd по аналогии с sshd, и запустилось.

Всё-таки непонятно, если у меня не какой-то сервер, а просто домашний компьютер с Xubuntu 1804 ?
И я хочу ,чтобы в нём часики шли поточнее, какие команды мне набрать и что подредактировать?

Меню -> Системные -> Дата и время -> В строке «Конфигурация» выбрать «Синхронизировать с серверами Интернет».

На Xubuntu 1604 именно так я и поступал. Заходил в Настройки, выбирал : «Синхронизировать с серверами Интернет», на что система сообщала ,что необходимо установить поддержку протокола NTP и тут же предлагала решение, автоматически устанавливались какие-то пакеты и всё работало.
А в Xubuntu 1804 это уже так не работает. На мои действия я получаю ответ:
«Поддержка протокола NTP не установлена.Установите и активируйте. »
Что я должен установить и что активировать?

Туннель во времени. Выводим данные с компьютера через Network Time Protocol

Пару месяцев назад я гулял по загнивающей Германии, где по каждому удобному и не очень поводу строят туннель. И тут мне пришла идея: а не сделать ли свой туннель? В качестве протокола я выбрал NTP — его использование не требует специальных привилегий, системы защиты не видят в нем никаких проблем, ведь там по определению быть ничего не может, кроме текущего времени, а его формат простой как палка, что позволяет нам использовать его без необходимости закапываться в документацию.

Этот трюк могут использовать и вирусописатели — для вывода данных из зараженных систем, причем незаметно для стандартных средств защиты.

WARNING

Создание и распространение вредоносных программ карается по статье 273 УК РФ. Ни автор, ни редакция «Хакера» не несут ответственности ни за какой вред, принесенный использованием материалов этой статьи.

Что такое NTP

NTP (Network Time Protocol) — протокол, который работает поверх UDP и используется для синхронизации локальных часов с часами на сервере точного времени. При работе в интернете точность синхронизации составляет до 10 мс, а в локальных сетях — до 0,2 мс. При этом NTP нечувствителен к задержкам канала.

Читайте так же:
Регулировка гур хантер руками

Актуальная версия протокола (по данным Википедии) — 4, но мы будем использовать версию 3, которой для наших целей предостаточно.

Для максимальной точности служба обновления времени постоянно должна работать в фоновом режиме, регулярно отправляя запросы на сервер точного времени, то есть генерируя довольно много трафика. Это нам на руку, так как из-за этой особенности IDS давно не обращают внимания на трафик NTP.

За синхронизацию в Windows отвечает служба W32Time, а в Linux — демон ntpd или chronyd. Также существует более простая реализация этого протокола, известная как SNTP (Simple Network Time Protocol) — простой протокол сетевого времени. Применяют его во встраиваемых системах и устройствах, которые не требуют высокой точности, как, например, системы умного дома.

Структура пакета NTP

Структура пакета NTP описана в RFC 958 (v1), 1119 (v2), 1305 (v3) и 5905 (v4). Нас интересует версия 3, как довольно распространенная и простая, хотя ты свободно можешь пользоваться версией 4, она почти не отличается.

Для прожженных программистов на C есть псевдокод:

Теперь немного о назначении этих полей.

  • Leap indicator (LI), 2 бита — число, предупреждающее о секунде координации. Может быть от 0 до 3, где 0 — нет коррекции, 1 — последняя минута дня содержит 61 с, 2 — последняя минута дня содержит 59 с, 3 — неисправность сервера. При значении 3 полученным данным доверять не следует. Вместо этого нужно обратиться к другому серверу. Наш псевдосервер будет всегда возвращать 0.
  • Version number (VN), 2 бита — номер версии протокола NTP (1–4). Мы поставим туда 3.
  • Mode — режим работы отправителя пакета. Значение от 0 до 7, где 3 — клиент, а 4 — сервер.
  • Stratum — сколько посредников между клиентом и эталонными часами (включая сам NTP-сервер). 1 — сервер берет данные непосредственно с атомных (или других точных) часов, то есть между клиентом и часами только один посредник (сам сервер); 2 — сервер берет данные с сервера со значением Stratum 1 и так далее.
  • Poll — целое число, задающее интервал в секундах между последовательными обращениями. Клиент может указать здесь интервал, с которым он хочет отправлять запросы на сервер, а сервер — интервал, с которым он разрешает, чтобы его опрашивали.
  • Precision (точность) — число, которое сообщает точность локальных системных часов. Значение равно двоичному логарифму секунд.
  • Root delay (задержка сервера) — время, за которое показания эталонных часов доходят до сервера NTP. Задается как число секунд с фиксированной запятой.
  • Root dispersion — разброс показаний сервера.
  • RefID (идентификатор источника) — ID часов. Если поле Stratum равно единице, то RefID — имя атомных часов (четыре символа ASCII). Если текущий сервер NTP использует показания другого сервера, то в RefID записан IP-адрес этого сервера.
  • Reference — последние показания часов сервера.
  • Originate — время, когда пакет был отправлен, по версии сервера.
  • Receive — время получения запроса сервером.
  • Transmit — время отправки ответа сервера клиенту, которое заполняет клиент.

В целом процесс крайне прост и понятен, если изучить картинку. Клиент посылает запрос на сервер, запоминая, когда этот запрос был отправлен. Сервер принимает пакет, запоминает и записывает в пакет время приема, заполняет время отправки и отвечает клиенту. Клиент запоминает, когда он получил ответ, и получает нечто вроде RTT (Round-Trip Time, в простонародье — пинг) до сервера. Дальше он определяет, сколько времени понадобилось пакету, чтобы дойти от сервера обратно ему (время между запросом и ответом клиента минус время обработки пакета на сервере, деленное на два).

Чтобы получить текущее время, нужно прибавить полученную задержку канала к времени отправки ответа сервером. Вот только UDP на то и UDP, что задержки могут быть случайные и непредсказуемые, так что замеры повторяются по многу раз в день, вычисляется средняя ошибка, и локальные часы корректируются.

Ограничения на трафик по порту UDP-123

Системы обнаружения вторжений не такие глупые, какими могут показаться, так что просто пустить трафик, например, OpenVPN по 123-му порту UDP мы не сможем, по крайней мере без риска спалиться. Соответствие RFC все же проверяется. Это можно посмотреть на примере Wireshark.

Один из NTP-пакетов, пойманных Wireshark

Один из NTP-пакетов, пойманных Wireshark

Придется нам заставить наши пакеты соответствовать RFC. Проще всего это сделать, назначая некоторые поля по своему усмотрению. Мы можем внедрить свои данные в поля Transmit и Originate . Последнее не вполне соответствует RFC, но так глубоко проверки обычно не добираются.

Концепт

Идея проста: мы составляем собственный «заряженный» пакет NTP и пытаемся синхронизировать время со своим сервером. Чтобы не привлекать лишнего внимания к своей передаче, на каждый запрос должен отправляться внешне валидный ответ, в котором могут быть инструкции для клиента (читай: бота).

Чтобы всякие там системы предотвращения утечек (DLP) не мешали нам, можно, например, поксорить наши данные со статическим ключом. Естественно, в рамках PoC я не буду этого делать, но в качестве простейшего способа сокрытия данных должно сработать.

Для передачи данных с клиента на сервер подходят поля Poll , Originate и Transmit . Из них Poll пригоден ограниченно, но мы на этом останавливаться не будем. Если ты задумаешь учесть его ограничение, то имей в виду, что использовать в этом поле можно только младшие три бита (как я понял из документации). Без учета этого мы можем использовать 17 байт из 48 (35% всего объема пакета) на отправку данных, что уже неплохо.

Читайте так же:
Регулировка автоматики насосной станции джилекс

А что на прием? Сервер заполняет поля Precision , Root delay , Root dispersion , Reference , RefID , Receive и, ограниченно, Poll . На ответ сервера в этом поле распространяются такие же ограничения, как на клиента. Итого имеем 29 (28 без Poll ) байт из 48 (60% пакета). Полезный объем пакета — 46 из 48 байт (96%). Оставшиеся два байта — флаги и заголовки, которые мы менять не можем без вреда для скрытности.

Реализация

Писать код и дебажить наше творение мы будем в Visual Studio. Я использую версию 2019 Community, благо она бесплатная, а скачать ее можно с сайта Microsoft.

Сервер

Как только IDE установлена, включена темная тема и любимый плей-лист, можно приступать. Для начала создадим новый проект типа «консольное приложение» (мы ведь не прячемся от юзера) с названием NtpTun_SERVER .

Создание проекта

Создание проекта

Теперь нам нужна структура, описывающая пакет. Обратившись к спецификации NTP, напишем простой класс. В нем также должны быть методы упаковки пакета в массив байтов, пригодный для передачи настоящему серверу и для распаковки пришедшего ответа из массива байтов обратно в пакет.

Весь код, используемый в статье, есть в моем репозитории на GitHub. Он намеренно подпорчен и для промышленного использования не годится, но для демонстрации работы вполне сойдет.

Объявляем структуру пакета. Не смотри на странные суффиксы в названиях функций, так задумано

Объявляем структуру пакета. Не смотри на странные суффиксы в названиях функций, так задумано

Уже из этого кода видно, что мы будем притворяться сервером Stratum 3. Если бы мы были Stratum 1, то нужно было бы в поле RefID указывать ID атомных часов, которых у нас нет. А список серверов первого уровня общеизвестен, и, если IP нашего псевдосервера не окажется в таких публичных списках, обман быстро будет раскрыт.

Stratum 2 не следует использовать, потому что тогда RefID должен был бы содержать IP сервера первого уровня, список которых опять же известен. А вот третий уровень позволяет указывать в RefID IP сервера второго уровня, полного списка которых нет. То есть мы сможем в RefID передавать еще четыре байта произвольных данных.

Код методов упаковки и распаковки на скриншот не поместился, к тому же нам надо разобрать его отдельно. Вот он:

Тут никаких сложностей: принимаем массив байтов и при помощи BitConverter получаем оттуда данные.

Продолжение доступно только участникам

Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

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

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

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

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

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

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

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

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

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

  • сс – 19 или 20 ( cc – от «век» – century);
  • yy – год (98, если 1998, или 67, если 2067);
  • MM – месяц;
  • dd – число месяца;
  • hh – час;
  • mm – минуты;
  • ss – секунды.

без параметров выводит текущую дату и время, в формате, определяемом параметрами локализации (locale).

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

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

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

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

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

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

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

Очевидно, что вторая подвижка времени оказалась существенно меньше, чем первая: вначале часы были «возвращены» к правильному времени, а затем лишь слегка синхронизированы, причем в первом случае использовалась явная установка времени (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). Кроме этого, сервер времени не должен быть сильно нагруженным ресурсоемкими задачами компьютером: он не сможет обеспечить быстрый ответ и корректную обработку запроса.

Система точного времени NTP

NTP Time Servers.jpg

NTP использует алгоритм Марзулло (предложен Кейтом Марзулло (Keith Marzullo) из Университета Калифорнии, Сан-Диего), включая такую особенность, как учёт времени передачи. В версии 4 способен достигать точности 10 мс (1/100 с) при работе через Интернет, и до 0.2 мс (1/5000 с) и лучше внутри локальных сетей.

NTP использует иерархическую систему «часовых уровней»: уровень 1 синхронизован с высокоточными часами, например, с системой GPS, ГЛОНАСС (Единая Государственная шкала времени РФ) или атомным эталоном времени; уровень 2 синхронизируется с одной из машин уровня 1, и так далее.

Время представляется в системе NTP 64-битным числом (8 байт), состоящим из 32-битного счётчика секунд и 32-битного счётчика долей секунды, позволяя передавать время в диапазоне 2 32 секунд, с теоретической точностью 2 -32 секунды. Поскольку шкала времени в NTP повторяется каждые 2 32 секунды (136 лет), получатель должен хотя бы примерно знать текущее время (с точностью 50 лет).

Наиболее широкое применение протокол NTP находит для реализации серверов точного времени. Для достижения максимальной точности предпочтительна постоянная работа программного обеспечения NTP в режиме системной службы (демона).

Более простая реализация этого алгоритма известна как SNTP — простой синхронизирующий сетевой протокол. Используется во встраиваемых системах и устройствах, не требующих высокой точности, а также в пользовательских программах точного времени.

Для использования конечными пользователями рекомендуется использовать сервера Stratum 2, поскольку они имеют связь с несколькими серверами Stratum 1 и будут отдавать точное время в случае отсутствия связи до одного из них. Если же необходимо выбрать сервера для использования на маршрутизаторе, отдающем точное время внутрь локальной сети или же в интернет, рекомендуется использование не менее 3х (но не более 7и) авторитетных Stratum 1 серверов [2] .

Использование конечными пользователями серверов Stratum 1 строго не рекомендуется: By convention, Stratum 1 time servers should only be used by Stratum 2 servers, and by applications requiring extremely precise time measurements, such as scientific applications. [3]

Использование случайных серверов из пула pool.ntp.org не рекомендуется не для персонального использования [4] [5] . Так же не следует настраивать использование LOCAL clock [6] кроме редких случаев, когда нет постояного подключения к сети, а синхронизация времени все же необходима.

Список надежных и публичных серверов Stratum 1

Attention.pngВНИМАНИЕ!
Не настраивайте на данные адреса софт пользовательских машин! Эти сервера предназначены только для нижестоящих серверов Stratum 2.

Россия

  • ВНИИФТРИ [7] , Атомные часы [8][9]
    • 62.117.76.142 (ntp1.vniiftri.ru)
    • 62.117.76.141 (ntp2.vniiftri.ru)
    • 62.117.76.138 (ntp3.vniiftri.ru)
    • 62.117.76.140 (ntp4.vniiftri.ru)
    • 192.43.244.18 (time.nist.gov) National Institute of Standards and Technology [16] , Атомные часы [17]
    • 198.123.30.132 (ntp.nasa.gov) National Aeronautics and Space Administration [18] , GPS-источник

    Япония

    • 133.243.238.163 (ntp.nict.jp) National Institute of Information and Communications Technology [19] , Атомные часы [20]

    Рабочая конфигурация сервера NTP на маршрутизаторе Cisco

    Логинимся на Cisco. Смотрим текущее состояние времени:

    Если время отличается от правильного на значительную величину (более 3-4 минут), то подгоняем его вручную:

    Задаем часовую зону и время перехода на летнее время.

    В нашем случае указываем эти параметры для часовой зоны Москва (UTC +4, без перехода)

    Если циска уже была сконфигурирована на переход на летнее время, отключаем его следующей командой:

    и меняем часовой пояс на +4:

    Указываем адреса ntp-серверов (список Stratum 1), относительно которых наша Cisco будет клиентом:

    В нашем примере используются 5 надежных адресов.

    Далее смотрим конфигурацию маршрутизатора на предмет имени внутреннего сетевого интерфейса:

    Пример выдержки из конфигурационного файла:

    Указываем, на каком интерфейсе будет располагаться наш ntp-сервер:

    Attention.pngВНИМАНИЕ!
    Нельзя указывать в качестве ntp source сабинтерфейсы, работать не будет. В документации Cisco часто можно встретить рекомендации использовать Loopback-интерфейс.

    Записываем конфигурацию в память:

    Наш конфигурационный файл

    Проверка текущего состояния

    Настройка клиентских машин и устройств

    Отмена перехода на летнее/зимнее время на территории РФ

    • Для того, чтобы системы Windows не переходили на летнее/зимнее время необходимо установить заплатку: http://support.microsoft.com/kb/2570791
    • В SuSE Linux, возможно, необходимо будет обновить пакет timezone до версии 2011n или выше.

    Linux

    Как посмотреть стратум удаленного сервера:

    Проверка работоспособности конфигурации NTP:

    Windows 2003

    Вся настрока выполняется из командной строки. Последовательность действий следующая:

    В ответ должны получить следующее:

    Через некоторое время проверяем журнал событий системы. Если все настроено верно, то в журнале будет информационное сообщение от источника W32Time с кодом (ID) 35 и текстом Служба времени выполняет синхронизацию системного времени с источником времени имя_ntp_сервера

    Если возникли какие-то проблемы, то в журнал будет записана ошибка с кодом (ID) 29 от источника W32Time и текстом NTP-клиент поставщика времени настроен на получение времени из одного или нескольких источников, однако ни один из этих источников недоступен. Попытки подключения к источнику не будут выполняться в течение ХХ мин. NTP-клиент не имеет источника правильного времени. В таком случае, убедитесь, что файрвол не блокирует соединения с NTP-сервером по протоколу UDP порт 123. Проверьте, что имя NTP-сервера указано верно. Для этого в командной строке выполните

    В ответ будет выведено имя сервера NTP.

    Для определения величины расхождения локального времени и времени любого компьютера в сети, используйте команду

    На экран будет выводиться информация о дельте локального времени и времени на имя_компьютера до прерывания работы при помощи Ctrl+C.

    Если Ваша сеть с доменами, то клиенты будут автоматически синхронизировать свои часы с контроллером домена. Если Вы не используете в сети доменов, то настраивать клиентов придётся вручную.

    Windows 2008

    Подмена адреса time.windows.com локальным NTP на DNS-сервере

    В крупных, постоянно меняющихся и развивающихся сетях установка адреса локального ntp-сервера на всех машинах, не подключенных к Active Directory, может представлять определенную проблему. В данном случае можно воспользоваться возможностями DNS-сервера BIND и подменить выдаваемый по запросу «time.windows.com» ip-адрес на принадлежащий локальному серверу NTP [21] .

    На DNS сервере (на примере SLES 10) создадим интересующую нас зону следующего содержания:

    /var/lib/named/master/time.windows.com

    где 192.0.2.30 — ip-адрес локального ntp-сервера

    В конфигурационный файл /etc/named.conf добавляем строки:

    где acls — используемые в локальной сети ACL’и

    Если все правильно, то в логе /var/log/messages появится подобная строчка:

    Проверяем результат на клиентской машине, предварительно сбросив кэш dns (How do I Flush DNS?):

    голоса
    Рейтинг статьи
Ссылка на основную публикацию
Adblock
detector