Некорректное время на Ubuntu или Debian - проблемы с NTP синхронизацией времени. Базовая настройка сервера Debian после установки Указываем сетевые параметры

Я использую операционную систему Debian GNU/Linux на серверах для хостинга сайтов. Когда летом 2017 года вышла версия 9 Stretch, я обрадовался тому, что для нее в репозиториях «из коробки» был доступен PHP 7. Который, как известно, работает быстрее PHP 5.

В этой статье я покажу, что и с настройкой времени на Debian 9 так же стало лучше, не нужно ничего качать и устанавливать дополнительно, в частности демон ntp или утилиту ntpdate. Все отлично настраивается и работает на стандартном наборе ПО Debian 9 благодаря обновлённой версии systemd , в котором имеется отдельная служба, отвечающая за синхронизацию времени системы по протоколу NTP .

Как настроить время Debian 9

Для начала нужно определиться со своим часовым поясом и установить его, у меня это выглядит так:

# timedatectl set-timezone Europe/Volgograd

Затем нужно отредактировать файл /etc/systemd/timesyncd.conf , указав в нем серверы для синхронизации времени, например так:

# This file is part of systemd. # # systemd is free software; you can redistribute it and/or modify it # under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation; either version 2.1 of the License, or # (at your option) any later version. # # Entries in this file show the compile time defaults. # You can change settings by editing this file. # Defaults can be restored by simply deleting this file. # # See timesyncd.conf(5) for details. NTP=ru.pool.ntp.org FallbackNTP=pool.ntp.org

Здесь в опции NTP= указываются приоритетные серверы для синхронизации времени. Если при обращении к ним произойдет сбой, то будут использоваться серверы, указанные в FallbackNTP= .

После внесения изменений в файл конфигурации нужно перезапустить сервис синхронизации времени:

# systemctl restart systemd-timesyncd

Состояние настройки времени можно проверить следующей командой:

# timedatectl status

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

Local time: Tue 2018-12-18 16:36:33 +04 Universal time: Tue 2018-12-18 12:36:33 UTC RTC time: Tue 2018-12-18 12:36:33 Time zone: Europe/Volgograd (+04, +0400) Network time on: yes NTP synchronized: yes RTC in local TZ: no

здесь,
Local time - это местное время;
Universal time - время UTC (всемирное координированное время). Это отправная точка для отсчета всех часовых поясов;
RTC time - время в аппаратных часах сервера (компьютера);
Time Zone - ваш часовой пояс;
Network time on - указывает, включен ли ntp-клиент, входящий в состав systemd;
NTP synchronized - сообщает, синхронизировано ли время с ntp-сервером;
RTC in local TZ - показывает, какое время хранится в аппаратных часах: локальное или всемирное. При этом, yes означает локальное время, no - всемирное;

Информация для новичков

Меня иногда спрашивают, где вводить (выполнять) приводимые мною команды?

Все приведенные в данной статье команды нужно выполнять в консоли сервера от имени привилегированного пользователя (root). Знак # (октоторп, решетка, диез, хеш) как раз говорит об этом.

В качестве консольного клиента для удаленного подключения к серверам я использую программу

|

Точное хронометрирование – очень важный аспект корректной работы многих современных программ. Из-за неправильного времени на сервере могут возникнуть ошибки, и данные могут быть повреждены (например, при обновлении БД или логировании).

В Debian 9 синхронизация времени встроена и включена по умолчанию; за неё отвечает стандартный сервер ntpd, предоставляемый пакетом ntp. Данный мануал ознакомит вас с базовыми командами для управления временем, научит проверять состояние ntpd и устанавливать другие сервисы сетевого времени.

Требования

Для работы вам понадобится сервер Debian 9 и пользователь с доступом к sudo (мануал нужно выполнить в сессии этого пользователя). Все необходимые инструкции по настройке вы найдете .

Основные команды для управления временем

date – основная команда для определения времени на сервере. Любой пользователь может использовать её, чтобы узнать дату и время:

date
Tue Sep 4 17:51:49 UTC 2018

Обычно по умолчанию серверы используют часовой пояс UTC (Coordinated Universal Time) – это всемирное координированное время. UTC последовательно устанавливает время на серверах и минимизирует ошибки в случае если сервера инфраструктуры находятся в разных часовых поясах.

Чтобы изменить часовой пояс, используйте команду timedatectl.

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

timedatectl list-timezones

Перемещаться вниз по списку можно с помощью клавиши пробела, а вверх – с помощью b. Выберите часовой пояс, запишите его и нажмите q, чтобы закрыть список.

Теперь установите часовой пояс с помощью timedatectl set-timezone. Используйте следующую команду, указав в ней требуемый часовой пояс:

sudo timedatectl set-timezone America/New_York

Примечание: Вместо America/New_York укажите необходимый часовой пояс.

Убедитесь, что пояс изменился:

date
Tue Sep 4 13:52:57 EDT 2018

Аббревиатура часового пояса будет отражать новое значение.

Состояние ntpd

По умолчанию для синхронизации времени с пулом внешних серверов Debian 9 использует стандартный сервер ntpd. Проверить его состояние можно с помощью systemctl:

sudo systemctl status ntp
ntp.service - LSB: Start NTP daemon
Loaded: loaded (/etc/init.d/ntp; generated; vendor preset: enabled)
Active: active (running) since Tue 2018-09-04 15:07:03 EDT; 30min ago
Docs: man:systemd-sysv-generator(8)
Process: 876 ExecStart=/etc/init.d/ntp start (code=exited, status=0/SUCCESS)
Tasks: 2 (limit: 4915)
CGroup: /system.slice/ntp.service
└─904 /usr/sbin/ntpd -p /var/run/ntpd.pid -g -u 105:109
. . .

Строка active (running)указывает, что сервер работает правильно. Получить больше информации можно с помощью команды ntpq:

ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
0.debian.pool.n .POOL. 16 p - 64 0 0.000 0.000 0.000
1.debian.pool.n .POOL. 16 p - 64 0 0.000 0.000 0.000
2.debian.pool.n .POOL. 16 p - 64 0 0.000 0.000 0.000
3.debian.pool.n .POOL. 16 p - 64 0 0.000 0.000 0.000
-eterna.binary.n 204.9.54.119 2 u 240 256 377 35.392 0.142 0.211
-static-96-244-9 192.168.10.254 2 u 60 256 377 10.242 1.297 2.412
+minime.fdf.net 83.157.230.212 3 u 99 256 377 24.042 0.128 0.250
*t1.time.bf1.yah 98.139.133.62 2 u 31 256 377 11.112 0.621 0.186
+x.ns.gin.ntt.ne 249.224.99.213 2 u 108 256 377 1.290 -0.073 0.132
-ord1.m-d.net 142.66.101.13 2 u 473 512 377 19.930 -1.764 0.293

ntpq – это инструмент запросов ntpd. Флаг –p собирает информацию о серверах NTP, к которым подключен ntpd. Ваш вывод будет немного другим, но в нем будут стандартные серверы пула Debian и несколько других серверов. У ntpd может уйти несколько минут на установку соединения.

Переход с ntpd на systemd-timesyncd

Для замены ntpd можно использовать встроенный демон timesyncd systemd. timesyncd – простая альтернатива ntpd, интегрированная с systemd. Однако при переходе следует учитывать, что timesyncd не работает в качестве сервера времени и использует менее сложные методы синхронизации системного времени. Если вы используете сложные распределенные системы реального времени, лучше оставаться с ntpd.

Чтобы перейти на timesyncd, сначала удалите ntpd.

sudo apt purge ntp

Затем запустите timesyncd:

sudo systemctl start systemd-timesyncd

Проверьте его состояние:

sudo systemctl status systemd-timesyncd
systemd-timesyncd.service - Network Time Synchronization
Loaded: loaded (/lib/systemd/system/systemd-timesyncd.service; enabled; vendor preset: enabled)
Drop-In: /lib/systemd/system/systemd-timesyncd.service.d
└─disable-with-time-daemon.conf
Active: active (running) since Tue 2018-09-04 16:14:23 EDT; 1s ago
Docs: man:systemd-timesyncd.service(8)
Main PID: 3399 (systemd-timesyn)
Status: "Synchronized to time server 198.60.22.240:123 (0.debian.pool.ntp.org)."
Tasks: 2 (limit: 4915)
CGroup: /system.slice/systemd-timesyncd.service
└─3399 /lib/systemd/systemd-timesyncd

Чтобы получить сведения о текущем восприятии времени systemd, введите:

timedatectl
Local time: Tue 2018-09-04 16:15:34 EDT
Universal time: Tue 2018-09-04 20:15:34 UTC
RTC time: Tue 2018-09-04 20:15:33
Time zone: America/New_York (EDT, -0400)
Network time on: yes

NTP synchronized: yes
RTC in local TZ: no

Команда выведет местное время, универсальное время (которое может совпадать с местным, если вы не переключались с часового пояса UTC) и информацию о состоянии времени в сети. Network time on: yes означает, что сервис timesyncd включен, а NTP synchronized: yes указывает, что время было успешно синхронизировано.

Заключение

Теперь вы умеете управлять системным временем сервера Debian 9.

26 октября 2014 года был принят закон о смене часовых поясов в России. С данным законопроектам повсеместно возникали проблемы с синхронизацией местного времени по протоколу NTP.

Сегодня мы рассмотрим один из способов решения проблемы синхронизации системного времени на серверах и десктопных машинах Ubuntu\Debian. Решение о котором сегодня будет идти речь, самое логичное, верное и эффективное.

Все просто!

За часовые пояса в системе Ubuntu и Debian отвечает пакет tzdata. Для корректной работы NTP синхронизации и системного времени нужно обновить базу часовых поясов tzdata. Так же, мы рассмотрим установку и настройку NTP клиента для синхронизации системного времени с NTP серверами или кластерами на примере Ubuntu,Debian.

Обновление tzdata - исправляем системного время на Ubuntu или Debian

На сегодняшний день обновления для tzdata появились с стандартных репозиториях системы Ubuntu или Debian. Обновление базы часовых поясов tzdata не составляет, абсолютно, никаких сложностей.

Для обновления tzdata из репозиториев необходимо проделать следующую последовательность операций:

1. Обновляем дерево пакетов подключенных репозиториев.

Sudo apt-get update

2. Производим установку более новой версии tzdata.

Sudo apt-get install tzdata

3. Делаем конфигурацию tzdata и выбираем наш часовой пояс

Sudo dpkg-reconfigure tzdata

4. Перезагружаем систему для обновления системного времени стороннего программного обеспечения

Sudo reboot

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

Периодическая синхронизация и корректировка системного времени необходима для серверов и желательна для десктопных систем, т.к. аппаратные часы BIOS имеют значимую погрешность и с закономерной периодичностью "убегают" в большую или меньшую сторону.
Установка и настройка NTP клиента в Ubuntu или Debian можно считать тривиальной задачей, не вызывающая никаких сложностей и вопросов. Установка и настройка Клиента проходит в 3 этапа:

1. Установка NTP клиента:

Sudo apt-get install ntp

2. Настройка NTP клиента при помощи текстового редактора и файла конфигураций

# Проверьте и, при необходимости, замените в файле конфигураций список NTP # серверов для синхронизации. По умолчанию они такие: server 0.ubuntu.pool.ntp.org server 1.ubuntu.pool.ntp.org server 2.ubuntu.pool.ntp.org server 3.ubuntu.pool.ntp.org # Если вы не знаете какие сервера лучше использовать для синхронизации - # рекомендуем воспользоваться данным кластером серверов: http://www.pool.ntp.org/

3. Проверяем пул адресов для синхронизации, который выдает кластер или сервера синхронизации, указанные в файле конфигураций /etc/ntp.conf:

Если у вас будет вывод аналогичный этому - все впорядке, ntp синхронизация системного времени корректно работает:

Remote refid st t when poll reach delay offset jitter =========================================================== *webhost2.mitht. 193.67.79.202 2 u 52 64 17 16.412 -35.137 0.886 mail.sonur.ru .PPS. 1 u 48 64 17 79.297 -58.992 1.493 guard.qword.ru .INIT. 16 u - 64 0 0.000 0.000 0.000 ns.davydkovo.ne 130.173.91.58 2 u 45 64 17 23.343 -40.480 1.351 golem.canonical 192.93.2.20 2 u 45 64 17 66.089 -34.140 1.669

4. Перезапускаем систему для корректно работы ntp клиента и синхронизации времени при загрузке. В принципе, все корректно работает и после установки, но при использовании стороннего или специфического программного обеспечения, необходима перезагрузка, проще перезагрузить систему:

Sudo reboot

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

Вот мы и решили 2 основных вопроса, связанных с точным временем на вашем сервере или десктопной системе Ubuntu, Debian:

  • Первый вопрос корректировки связан со сменой часовых поясов на территории Россий, связанный с законодательством, вступившим в силу 26 октября 2014 года, и базой данных часовых поясов tzdata.
  • Второй вопрос корректировки точного системного времени связан с установкой и настройкой NTP клиента и NTP синхронизацией системного времени с более точными серверами или кластерами.

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

Во время первоначальной установки Debian мы конфигурируем часовой пояс с помощью пакета . В дальнейшем синхронизация времени и часового пояса можно выполнить командами:

$ su $ пароль $ dpkg-reconfigure tzdata

Стрелками выбираем Европа и нажимаем Enter .

Также выбираем часовой пояс.

В результат синхронизация получаем универсальное (время по Гринвичу ) и местное время .

Конфигурационный файл хранится в /etc/timezone . Открыть файл можно с помощью команды:

$ gedit /etc/timezone

Кроме того, соответствующий файл данных находится в каталоге /usr/share/zoneinfo и копируется в /etc/localtime , этот файл содержит правила, регулирующие дату летнего или зимнего времени для стран, которые его используют.

В компьютере два источника времени: на материнской плате аппаратные часы — "CMOS " и в ядре операционной системы, контролируемые серверами времени через сеть. На практике существует проблема, так как часы CMOS является не более чем счетчиком и не содержат никакой информации о часовом поясе.

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

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

Поскольку компьютеры регулярно запускаются и перезагружаются (для экономии электроэнергии), машины удобно синхронизировать с помощью NTP при загрузке. Для этого просто установите ntpdate пакет он позволяет быстро синхронизировать часы компьютера с серверами точного времени, подсоединёнными ко Всемирной Паутине. Установку ntpdate из репозитория произведем с помощью менеджера пакетов Synaptic или путем выполнения команд в терминале:

$ su $ пароль $ apt-get install ntpdate

Для рабочих станций вы можете изменить сервер NTP , используемый при необходимости путем модификации /etc/default/ntpdate файла.

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

Установка NTP

$ aptitude install ntp ntpdate

В конфигурации по умолчанию сервер будет синхронизировать с ресурсом pool.ntp.org и обеспечит время в ответ на запросы, поступающие из локальной сети. Вы можете настроить его путем редактирования/etc/ntp.conf файла.

В целях безопасности, для доступа к Вашему серверу извне, требуется добавить в файл /etc/ntp.conf следующие строки (данные строки уже могут присутствовать):

Disable monitor restrict default kod nomodify notrap nopeer noquery restrict -6 default kod nomodify notrap nopeer noquery restrict 127.0.0.1 restrict -6::1

disable monitor - отключение запросов monlist, которые возвращают список из последних 600 клиентов ntp. restrict default kod nomodify notrap nopeer noquery

restrict -6 default kod nomodify notrap nopeer noquery - отключение запросов статуса сервера.

Так же вы можете указать свои сервера для синхронизации времени, например, адреса NTP серверов Pоссии: https://www.ntp-servers.net/servers.html и отредактируйте файл /etc/ntp.conf, выполнив команду:

$ gedit /etc/ntp.conf

Разовая синхронизация времени

В качестве примера используется сервер ntp1.stratum1.ru :

$ ntpdate ntp1.stratum1.ru

До синхронизации

После синхронизации

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

Отредактируйте файл /etc/ntp.conf или создайте его, если такого файла нет.

$ server ntp1.stratum1.ru iburst

Запускаем ntp и добавляем его автозагрузку

$ /etc/init.d/ntp start $ update-rc.d ntp defaults