NTP
Network Time Protocol — протокол синхронизации часов компьютера с эталонными серверами точного времени через сеть.
Что такое NTP
NTP («нтп») расшифровывается как Network Time Protocol — сетевой протокол времени. Он синхронизирует часы компьютера с эталонными источниками, компенсируя задержку самой сети. NTP-сервер — узел, который раздаёт точное время: публичный (pool.ntp.org), сервер провайдера или ваш собственный.
Зачем это нужно: кварцевый генератор в компьютере врёт. Дрейф в секунду за сутки — норма, и за месяц набегает полминуты. Виртуальные машины уходят ещё быстрее — их часы плывут при миграции и при высокой нагрузке на гипервизор.
Ключевое отличие от простой установки времени: NTP не переводит часы рывком, а плавно подгоняет их скорость. Прыжок времени назад ломает всё, что считает интервалы, — от СУБД до планировщиков.
Стратумы
Источники образуют иерархию, а её уровень называется стратумом:
Stratum 0 атомные часы, GPS-приёмник — сами по сети не отвечают
↓
Stratum 1 сервер, подключённый к такому источнику напрямую
↓
Stratum 2 синхронизируется от stratum 1 ← сюда попадают публичные пулы
↓
Stratum 3 синхронизируется от stratum 2 ← ваш внутренний NTP-сервер
Чем выше номер, тем дальше от эталона и тем больше накопленная погрешность; на практике stratum 2–3 даёт точность в единицы миллисекунд. Протокол работает поверх UDP на порту 123. Клиент опрашивает несколько серверов сразу, отбрасывает выбросы и усредняет остальное — поэтому один сбойный сервер в списке не сдвинет ваши часы.
Практика: chrony
На современных дистрибутивах стандарт — chrony. Он быстрее сходится и заметно лучше ведёт себя на виртуальных машинах, чем классический ntpd.
# /etc/chrony/chrony.conf
pool ru.pool.ntp.org iburst # iburst — быстрая синхронизация при старте
makestep 1.0 3 # первые 3 раза можно прыгнуть, дальше плавно
rtcsync # писать время в аппаратные часы
$ chronyc tracking
Reference ID : C0248F97 (time.cloudflare.com)
Stratum : 3
System time : 0.000012843 seconds slow of NTP time
Frequency : 12.345 ppm fast
Root delay : 0.014891 seconds
$ chronyc sources
MS Name/IP address Stratum Poll Reach LastRx Last sample
^* time.cloudflare.com 3 6 377 41 -14us[ -18us] +/- 11ms
^+ ntp1.stratum2.ru 2 6 377 38 +102us[ +102us] +/- 19ms
Как читать вывод: ^* — сервер, по которому идёт синхронизация, ^+ — годный резерв, ^? — недоступен. Reach 377 (восьмеричное, все биты) означает, что последние восемь опросов прошли успешно. System time — текущее расхождение: десятки миллисекунд норма, секунды — проблема. Общее состояние показывает timedatectl строкой System clock synchronized: yes.
Что ломается от рассинхрона
Это не абстрактная аккуратность — расхождение часов бьёт по вполне конкретным вещам:
- TLS и сертификаты. Ушедшие часы делают валидный сертификат «ещё не действительным» или «просроченным». Загадочные ошибки TLS на свежей ВМ — первым делом проверьте время.
- Аутентификация. JWT с полями
expиnbf, 2FA с одноразовыми кодами, Kerberos (там допуск обычно 5 минут) — всё завязано на время. - Логи и расследования. Собрать картину инцидента из логов десяти серверов с разным временем невозможно.
- Распределённые системы. Реплики БД, Kafka, распределённые блокировки полагаются на метки времени.
- Сертификаты Let's Encrypt и подписанные запросы к API просто перестают проходить.
В своей инфраструктуре
Разумная схема для парка серверов: два-три внутренних NTP-сервера синхронизируются с публичными пулами, остальные машины смотрят только на них. Так вы не зависите от доступа наружу, снижаете разброс внутри сети и получаете единое время даже при обрыве интернета.
Что учесть:
- UDP/123 должен быть открыт исходящим — иначе синхронизации не будет, а сообщение об этом увидит только тот, кто заглянет в
chronyc sources. - Открытый наружу NTP-сервер используют как усилитель DDoS: ответ больше запроса, а адрес источника в UDP подделывается. Слушать надо только внутреннюю сеть.
- Мониторьте расхождение. Метрика рассинхронизации должна быть в алертах наравне с местом на диске.
- Часовой пояс на серверах — UTC. Локальное время оставьте интерфейсам; переход на летнее время и разные пояса в логах кластера не нужны никому.
Связанные термины
- TCP и UDP — NTP работает поверх UDP
- Сетевые порты — порт 123
- DHCP — умеет раздавать адреса NTP-серверов опцией 42
- TLS — первым страдает от неверного времени
- Уведомления и алерты — куда должен приходить рассинхрон
- Виртуальная машина — где часы уплывают чаще всего
Готовы запустить GPU-задачу?
Запустить GPU-сервер