Синхронизация времени с внешними серверами по NTP
NTP (Network Time Protocol) — это сетевой протокол для синхронизации системного времени компьютера через сетевое соединение. NTP-клиент запрашивает время у общедоступного NTP-сервера, а затем использует ответ сервера для корректировки локальных часов. Когда NTP-клиент синхронизирует свои часы, используется UDP-порт 123.
В VMware Tools, которые рекомендуется устанавливать на VM , есть механизм синхронизации времени с хостом гипервизора . Периодическая синхронизация VMware Tools (раз в минуту) по умолчанию отключена для VM Cloud.ru. Время синхронизируется с хостом только в следующих случаях:
- запуск VMware Tools, например, во время перезагрузки или включения VM;
- перевод VM из состояния «Suspended»;
- восстановление из снапшота .
Синхронизация времени, выполняемая VMware Tools, не конфликтует с синхронизацией с внешними серверами, которую вы самостоятельно настраиваете в гостевой ОС VM.
Задачи синхронизации
Протокол NTP позволяет синхронизировать запуск и окончание процессов в сети и обеспечивает точность до наносекунд. Синхронизация по времени обеспечивает:
- согласованную работу устройств и приложений, обрабатывающих данные в real-time;
- корректность процедур, связанных с совершением транзакций, работой c сертификатами, работой c электронной подписью;
- возможность расследовать внутренние инциденты и контролировать нарушения безопасности в компьютерной сети;
- согласованность информации о времени событий в операционной системе или приложениях, доступной в логах;
- возможность хранить точную информацию о времени, если есть такое требование.
Настройка синхронизации времени
Для работы протокола NTP требуется, чтобы был открыт порт 123/UDP. При использовании NAT порт открыт по умолчанию, но для исключения ошибок рекомендуем проверить, нет ли явных запретов на исходящие подключения по этому порту.
Настройка выполняется в гостевой ОС VM.
Служба времени W32Time синхронизирует время для всех компьютеров, управляемых доменными службами Active Directory. W32tm.exe входит в состав Windows Server 2003 и более поздних версий.
- Запустите cmd или PowerShell от имени администратора.
- Остановите службу W32Time.
w32tm /config /manualpeerlist:"ntp.sbercloud.ru" /syncfromflags:manual /update
w32tm /query /computer:HOSTNAME /configuration
reg query HKLM\SYSTEM\CurrentControlSet\Services\W32Time\Parameters
Systemd-timesyncd не работает одновременно с инструментами ntpd или chronyd . Если у вас установлены эти инструменты, воспользуйтесь ими или удалите их. Эти инструменты — разные реализации одной службы, которые не могут работать одновременно.
- Откройте файл конфигурации /etc/systemd/timesyncd.conf .
sudo nano /etc/systemd/timesyncd.conf
FallbackNTP=ntp.sbercloud.ru
sudo systemctl restart systemd-timesyncd.service
systemctl status systemd-timesyncd.service
ntpd не работает одновременно с инструментами systemd-timesyncd или chronyd . Если у вас установлены эти инструменты, воспользуйтесь ими или удалите их. Эти инструменты — разные реализации одной службы, которые не могут работать одновременно.
- Откройте файл конфигурации /etc/ntp.conf .
# Use servers from the NTP Pool Project. Approved by Ubuntu Technical Board # on 2011-02-08 (LP: #104525). See http://www.pool.ntp.org/join.html for # more information. # server 0.ubuntu.pool.ntp.org # server 1.ubuntu.pool.ntp.org # server 2.ubuntu.pool.ntp.org # server 3.ubuntu.pool.ntp.org server 0.ru.pool.ntp.org server 1.ru.pool.ntp.org server 2.ru.pool.ntp.org server 3.ru.pool.ntp.org
Если после настройки системное время не синхронизируется:
- Убедитесь, что правила Firewall разрешают исходящие подключения на порт 123 по протоколу UDP.
- Проверьте корректность настройки, которую вы выполнили выше.
- Убедитесь, что служба запущена.
NTP-серверы
Используйте NTP-сервер Cloud.ru ntp.sbercloud.ru .
NTP-сервер ntp.sbercloud.ru доступен только для клиентов Enterprise.
Также вы можете воспользоваться общедоступными серверами/пулами серверов, например ru.pool.ntp.org . При указании списка серверов можно указать как сам пул, так и отдельные сервера из него:
Как работает синхронизация времени в интернете
В прошлый раз мы рассказали, какие сложности могут ждать программистов, когда они пишут код для работы со временем. Сегодня перейдём на более сложный уровень: как компьютеры и другие устройства синхронизируют время между собой.
Зачем нужна синхронизация
От того, какое на компьютере установлено время, зависит многое:
- отображение спецпредложений и акций на сайтах;
- публикация и сортировка комментариев к статьям;
- совместная работа компьютеров в локальной сети — если время на компьютерах будет различаться, это может привести к сбоям;
- если одна база данных обслуживается с нескольких компьютеров, они должны чётко синхронизироваться во времени; иначе запрос одного компьютера может прилететь из будущего, а реальный запрос из будущего попасть в далекое прошлое;
- если вы используете телефон для двойной аутентификации, то с неправильным временем телефон будет выдавать неправильный код, и аутентификация не пройдёт;
- от времени зависят сертификаты безопасности: если ваше локальное время намного отличается от общемирового, то для вас все сертификаты безопасности будут недействительными, сайты не откроются.
В целом единственный случай, когда не нужна синхронизация, — когда компьютер работает независимо от сети, а результаты его вычислений не связаны со временем. В остальных случаях синхронизация полезна.
Как работает синхронизация
В общем виде синхронизация времени работает так:
- Устройство посылает запрос на сервер синхронизации и запоминает время, когда ушёл запрос. Запрос идёт по протоколу NTP, о нём ниже.
- Сервер получает запрос, и, если всё в порядке, — записывает, когда он его получил, и отправляет данные с точным временем на сервере.
- Устройство получает ответ от сервера и записывает, во сколько оно его получило.
- Зная время отправки и получения запроса и точное время на сервере, можно рассчитать глобальное время (но с какой-то точностью).
Это всё повторяется с какой-то периодичностью — раз в час, раз в день или с любым другим интервалом.
Что такое NTP
NTP — это сокращение от Network Time Protocol, что переводится как «протокол сетевого времени».
Протокол спроектирован так, чтобы заниматься только синхронизацией времени. Для этого используются пакеты объёмом всего 48 байт, причём 24 из них заполняет устройство, а 24 — сервер. Это значит, что для точности в 0,01 секунды достаточно один раз получить и передать 48 символов. Если размер пакета сделать слишком большим, то задержки при передаче будут больше и может пострадать точность синхронизации.
Для работы NTP нужен сервер точного времени, который ответит на наш запрос. Сервер всегда знает, какое сейчас время, и моментально реагирует на каждый запрос.
Какие бывают серверы синхронизации
В протоколе NTP есть несколько классов серверов точного времени, в зависимости от точности. Эти классы называются Stratum, а цифра после названия показывает уровень сервера по отношению к самому точному времени.
Stratum 1 — самые точные серверы, которые могут учитывать время с точностью в одну триллионную долю секунды. Они получают время напрямую от атомных часов либо от сервисов GRS или «Глонасс». Для запуска и обслуживания такого сервера нужно сложное оборудование, поэтому серверов первого уровня в мире мало. Большинство из них не отвечает на запросы от обычных пользователей и обслуживает только другие серверы уровнем пониже.
Stratum 2 — серверы точного времени второго уровня. Они получают данные от серверов первого уровня и работают с погрешностью примерно 0,001 секунды. Такие серверы уже могут отвечать на большинство запросов и обслуживать серверы поменьше.
Stratum 3 получают данные от серверов второго уровня, и тут уже точность может падать до 0,05 секунды. Дальше идут уровни 4, 5 и так далее, ограничений снизу нет.
Какая точность нужна для синхронизации
Если вам просто нужно «обычное» точное время с точностью до секунды (например, на телефоне или в часах), то подойдёт любой сервер синхронизации времени. Обычно это будут сервера Stratum 3, потому что их больше всего.
Если нужно что-то обрабатывать с точностью до 0,01 секунды, то нужно найти сервер второго уровня в своей стране и подключиться к нему (так будет точнее). Например, можно использовать серверы в Саратове.
Если же вам нужна точность 0,001 секунды или выше — договаривайтесь с владельцем сервера первого уровня или создавайте свой сервер.