Введение
Во время установки Debian, сервер автоматически настраивает системное время на основе информации из bios. Инсталлятор предлагает вам выбрать только часовой пояс. При этом, если вы не правильно указали часовой пояс (timezone), его без проблем можно изменить после установки.
Так же ситуация, когда необходимо изменить время или часовой пояс, может возникнуть, если вы арендуете сервер за границей и вам разворачивают систему из готового образа. В таком случае timezone может быть указана не такая, как вы хотите. Надо будет изменить.
Зачем, собственно, следить за точным временем на сервере, кроме непосредственно удобства восприятия этого времени? Причин может быть много. Перечислю основные, которые пришли в голову.
Точное время на сервере необходимо для корректного логирования всех событий и последующего расследования инцидентов. Более того, одинаковое время должно быть на всех серверах, которые участвуют в работе информационной системы. Если это не так, то расследование инцидентов становится затруднительным.
В доменной середе Windows для корректной работы протокола аутентификации Kerberos требуется примерно одинаковое время на всех участниках домена
Если ваш сервер Debian является членом домена, важно, чтобы его время не сильно отличалось от времени контроллера домена. Его нужно обязательно синхронизировать с ним.
На сервере может располагаться какой-то сервис, который взаимодействует с пользователями
Например, новостной сайт, где в статьях указано точное время публикации. Если неправильно настроить часы или timezone, может возникнуть ситуация, когда для некоторых пользователей опубликованные материалы будут отображаться со временем из будущего.
Планировщик cron в своей работе использует системные часы. Если вы хотите предсказуемое поведение запланированных задач, время и часовой пояс должны быть настроены правильно.
Для избежания этих и других проблем, предлагаю приступить к настройке времени, даты и часового пояса на сервере под управлением системы Debian.
Тестирование
Проверить состояние получения эталонного времени можно командой:
ntpq -pn
Ее вывод будет представлен в виде таблицы:
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 -195.141.190.190 10.17.10.20 3 u 520 1024 377 60.802 2.831 0.071 -213.141.154.170 89.109.251.22 2 u 999 1024 377 27.349 0.745 0.296 *89.175.20.7 .GPS. 1 u 35m 1024 376 28.392 -0.606 0.137 -85.21.78.8 89.175.22.41 2 u 937 1024 377 27.077 -0.428 0.496 +194.190.168.1 .GPS. 1 u 861 1024 377 30.165 -0.225 12.432 +85.21.78.91 89.109.251.23 2 u 743 1024 377 27.434 -0.619 0.247
В таблице указываются следующие параметры:
remote — адрес сервера точного времени (в этой графе отображаются серверы из списка в конфигурационном файле); refid — вышестоящий сервер (тот, от которого сервер из предыдущей графы получает синхронизацию); st — уровень (stratum) сервера; t — тип пира (u- unicast, m- multicast); when — время последней синхронизации; poll — время в секундах, за которое демон NTP синхронизируется с пиром; reach — состояние доступности сервера; после восьми успешных попыток синхронизации значение этого параметра становится равным 377; delay — время задержки ответа от сервера; offset — разница времени между нашим сервером и сервером синхронизации; положительное значение этого параметра означает, что наши часы спешат, отрицательное — что отстают; jitter — смещение времени на удаленном сервере. Слева от адреса сервера могут быть указаны следующие символы: * сервер выбран для синхронизации; + сервер, пригодный для обновления (с которым можно синхронизироваться); — с сервером синхронизироваться не рекомендуется; х сервер недоступен.
Проверить, пригоден ли сервер из списка для синхронизации, можно при помощи утилиты ntpdate:
Устанавливаем ее
apt-get install ntpdate
и проверяем
ntpdate -q 127.0.0.1
server 127.0.0.1, stratum 2, offset -0.000000, delay 0.02563 4 Dec 12:30:58 ntpdate: adjust time server 127.0.0.1 offset -0.000000 sec
В данном случае вывода видно, что сервер пригоден для синхронизации, его уровень — 2, смещение — 0.000000 мс, задержка — 0.02563 мс.
Как проверить синхронизацию
После сохранения всех изменений в файле конфигурации NTP-сервер нужно перезагрузить:
$ service restart ntp
А затем выполнить команду:
$ ntpq -p
На выходе получится таблица, в которой указаны следующие параметры:
- remote – адрес сервера точного времени;
- refid – вышестоящий сервер;
- st – уровень (stratum) сервера;
- t – тип пира (u- unicast, m- multicast);
- when – время последней синхронизации;
- poll – время в секундах, за которое демон NTP синхронизируется с пиром;
- reach – состояние доступности сервера;
- delay – время задержки ответа от сервера;
- offset – временная разница между сервером и сервером синхронизации;
- jitter – смещение времени на удаленном сервере.
Слева от адреса сервера могут быть указаны еще и такие символы:
- * – сервер выбран для синхронизации;
- + – сервер, пригодный для синхронизации;
- – – с сервером синхронизироваться не стоит;
- х – сервер недоступен.
Чтобы проверить, насколько сервер подходит для синхронизации, нужно использовать команду ntpdate -q.
Устанавливаем NTP
apt-get install ntp
Все настройки производятся в одном единственном файле ntp.conf.
Добавляем данные в него.
mcedit /etc/ntp.conf
разрешим доступ к серверу времени только из нашей локальной сети
echo "#Разрешим доступ к серверу времени только из нашей локальной сети echo "restrict 192.168.0.0 mask 255.255.255.0 nomodify notrap nopeer ">> /etc/ntp.conf
Посмотрим конфигурационный файл ntp.conf
cat /etc/ntp.conf
если указанной ниже строки нет то добавляем ее или изменяем.
restrict default kod notrap nomodify nopeer noquery
* где:
restrict default — задает значение по умолчанию для всех рестриктов.kod — узлам, которые часто отправляют запросы сначала отправить поцелуй смерти (kiss of death), затем отключить от сервера.notrap — не принимать управляющие команды.nomodify — запрещает команды, которые могут вносить изменения состояния.nopeer — не синхронизироваться с хостом.noquery — не принимать запросы.restrict 192.168.0.0 mask 255.255.255.0 — разрешить синхронизацию для узлов в сети 192.168.0.0/24.
IP адреса 127.0.0.1 и ::1 позволяют обмен данные серверу с самим собой.
перезапускаем наш сервер NTP
service ntp restart
Для настройки автоматического запуска демона при загрузке системы, используйте специальную команду.
update-rc.d ntp defaults
Дополнительно
chronyc sources
Посмотреть текущее состояние синхронизации
chronyc tracking
CentOS 6 и ниже
За синхронизацию времени отвечает служба ntpd. Она работает одновременно как клиент, так и сервер. Настройки хранятся в файле /etc/ntp.conf . Чтобы добавить/изменить ntp-сервер для синхронизации, используем параметр server. Допускается указание нескольких серверов, служба сама выберет наиболее подходящий по доверию/доступности:
server 10.99.0.1 server 10.99.0.2 server your_ntp_server
После внесения изменения нужно перезапустить службу:
# service ntpd restart
Синхронизация может не работать по нескольких причинам.
Смотрим логи. По умолчанию ntp пишет в системный лог /var/log/messages:
# tail /var/log/messages May 25 16:40:13 URKHOV ntpd: sendto(10.99.0.1) (fd=-1): Bad file descriptor May 25 16:40:13 URKHOV ntpd: sendto(10.99.0.2) (fd=-1): Bad file descriptor May 25 16:41:16 URKHOV ntpd: sendto(10.99.0.2) (fd=-1): Bad file descriptor #
Эта ошибка возникает, если запущено несколько копий ntp и они конфликтуют между собой:
# ps aux |grep ntpd ntp 3498 0.0 0.0 23412 5048 ? SLs Apr21 2:36 ntpd -u ntp:ntp -p /var/run/ntpd.pid -g root 25343 0.0 0.0 24304 5940 ? SLs 16:38 0:00 ntpd root 25757 0.0 0.0 63268 824 pts/1 S+ 16:40 0:00 grep ntpd #
Убьем лишний процесс:
# kill -9 25343 #
Ошибка в логах исчезнет, но синхронизация по-прежнему не работает. Тут есть нюанс — служба ntp после перезапуска не пытается немедленно синхронизироваться. Ей требуется определенное время(10-15мин), чтобы проанализировать работу системного таймера и потом выполнить надстройку. Чтоб заставить службу вызвать немедленную синхронизацию, остановим службу и запустим демон с ключами, которые вызовут попытку немедленной синхронизации и выход:
# service ntpd stop # ntpd -q -g
Смотрим /var/log/messages и видим ошибку «no reply: clock not set»
Первая мысль — не проходят пакеты через фаерволл. Это можно проверить, запросив статус серверов у службы через утилиту ntpq , если udp-порт 123 открыт, значения reach, delay, offset не должны быть нулевыми:
# service ntpd start # ntpq -pn 127.0.0.1 remote refid st t when poll reach delay offset jitter ============================================================================== *mng2.t5.fi 10.99.0.1 2 u 995 1024 377 12.432 0.133 0.276 +ns2.posiona.net 10.99.0.2 2 u 837 1024 377 14.298 0.765 0.089 LOCAL(0) .LOCL. 1 l 32 64 377 0.000 0.000 0.001 #
«*» — означает сервер, с которым последний раз была синхронизация.
«+» — можно использовать для синхронизации.
«-‘ — не рекомендуется для использования
В нашем случае пакеты проходят. Попробуем другой способ ручной синхронизации через утилиту ntpdate, службу ntp предварительно нужно выключить:
# service ntpd stop # ntpdate 10.99.0.1 25 May 17:05:54 ntpdate: adjust time server 10.99.0.1 offset -0.000204 sec #
Время синхронизировалось. Дело в том, что утилита ntpdate использует иные механизмы синхронизации времени. Что касается службы, несмотря на то, что обратный ответ от внутренненго сервера приходит(мы это посмотрели через ntpq), служба отказывается принимать данные в качестве достоверного источника точного времени, хотя и явно об этом не сообщает. Это может быть связано с настройками удаленного ntp-сервера, политиками безопасности, если это win-сервер.
Попробуем указать в качестве источника внешний сервер в /etc/ntp.conf:
server 0.centos.pool.ntp.org
Запустим разовую проверку:
# ntpd -q -g
Как видим, с этим сервером служба оказалась сговорчивее.
7: Устранение неполадок (опционально)
OpenNTPd использует два бинарных файла: ntpd и ntpctl. Первый – это сам демон, который отвечает за сервис NTP. Второй отображает информацию о запущенном демоне.
Данный раздел научит вас устранять неполадки OpenNTPd с помощью ntpctl, nc и sockstat.
Состояние
Для взаимодействия с демоном OpenNTPd ntpctl использует локальный сокет, по умолчанию это /var/run/ntpd.sock.
Чтобы узнать состояние с помощью ntpctl, введите:
Команда вернёт примерно такую строку:
Чтобы просмотреть данные о peers, введите:
Сокеты
Вы можете просмотреть список открытых сокетов IPv4, IPv6 и UNIX. Чтобы получить список прослушиваемых сокетов NTP по протоколам IPv4 и IPv6, введите:
Если вы используете OpenNTPd для обслуживания времени по сети, столбец LOCAL ADDRESS покажет список ваших IP-адресов.
Подключение к интернету
Утилита nc устраняет неполадки NTP, а также других сетевых демонов и их сокетов (UNIX, TCP, UDP).
Чтобы узнать, доступен ли NTP по IPv4, введите:
Чтобы узнать, доступен ли NTP по IPv6, введите:
Утилита ntpdate
Утилита ntpdate предоставляет важные данные о сервере, на котором запущен NTP.
Примечание: Теперь функции ntpdate доступны в программе FreeBSD под названием ntpd.
Мануал
Утилиты OpenNTPd (ntpd, ntpd.conf и ntpctl) не входят в систему FreeBSD по умолчанию, потому и справку о них нельзя получить в MANPATH по умолчанию. Чтобы узнать больше о OpenNTPd, запустите мануал:
Установка, настройка и изменение часового пояса
Команды тестировались для Ubuntu 20.04.1 LTS.
-
Обновим список timezone на сервере:
apt update && apt upgrade tzdata
-
Вывести список европейских timezоne:
timedatectl list-timezones | grep Europe
-
Смена часового пояса:
timedatectl set-timezone EuropeKiev
Настройка сервера времени NTP (ntpd)
NTP (Network Time Protocol — протокол сетевого времени) — сетевой протокол для синхронизации внутренних часов компьютера с серверами точного времени. NTP, основан на алгоритме Марзулло, использует для своей работы протокол UDP и учитывает время передачи.
ntpd — (Network Time Protocol (NTP) daemon) для FreeBSD.
#включим ntpd при загрузке сервера > echo 'ntpd_enable="YES"' >> /etc/rc.conf > man ntpd ... FILES /etc/ntp.conf the default name of the configuration file /etc/ntp.drift the default name of the drift file /etc/ntp.keys the default name of the key file SEE ALSO ntp.conf(5), ntpdate(8), ntpdc(8), ntpq(8) ... > ee /etc/ntp.conf # #ntp.time.in.ua 62.149.0.30 server 62.149.0.30 prefer iburst #tick.usask.ca 128.233.3.100 server 128.233.3.100 iburst #ntp2.imvp.ru 62.117.76.141 server 62.117.76.141 iburst #ntp0.mao.kiev.ua 194.44.35.24 server 194.44.35.24 iburst # server 0.freebsd.pool.ntp.org iburst maxpoll 9 server 1.freebsd.pool.ntp.org iburst maxpoll 9 server 2.freebsd.pool.ntp.org iburst maxpoll 9 #опция prefer задает предпочитаемый сервер. #опция iburst позволяет ntpd ускорить начальный процесс синхронизации. # NTP drift file - хранит информацию об отклонениях времени driftfile /etc/ntp.drift # Log ntpd logfile /var/log/ntpd.log #default: deny for all restrict default ignore # allow for localhost restrict 127.0.0.1 # allow our network restrict 10.26.95.0 mask 255.255.255.0 nomodify notrap restrict 195.x.x.x mask 255.255.255.224 nomodify notrap restrict 194.x.x.x mask 255.255.255.248 nomodify notrap # сервера с которыми мы синхронизируемся # должны иметь возможность менять время нашего сервера restrict 62.149.0.30 noquery notrap restrict 128.233.3.100 noquery notrap restrict 62.117.76.141 noquery notrap restrict 194.44.35.24 noquery notrap restrict ntp2.time.in.ua noquery notrap
restrict не подходит к 0.ubuntu.pool.ntp.org, т.к. этот домен имеет несколько IP
# host 0.ubuntu.pool.ntp.org 0.ubuntu.pool.ntp.org has address 158.37.91.134 0.ubuntu.pool.ntp.org has address 85.10.240.253 0.ubuntu.pool.ntp.org has address 91.121.25.33 0.ubuntu.pool.ntp.org has address 123.108.225.6
Поэтому прописывать непосредственно 0.ubuntu.pool.ntp.org бесполезно так как он попадет по правило по умолчанию restrict default. Который в нашем случае все запрещает. Обойти это можно или прописав все IP данного пула в restrict или убрать restrict default ignore и использовать для защиты сервера времени фаервол.
Запускаем ntpd и командой sockstat смотрим процессы ntpd:
> /etc/rc.d/ntpd start > sockstat | grep -v udp6 | grep ntpd root ntpd 65762 3 dgram -> /var/run/logpriv root ntpd 65762 20 udp4 *:123 *:* root ntpd 65762 22 udp4 10.26.95.254:123 *:*
Утилитой ntpq можно проверить какие сервера доступны для синхронизации:
> ntpq -c peers remote refid st t when poll reach delay offset jitter ============================================================================== *ntp.time.in.ua .GPS. 1 u 50 64 37 7.457 -28.883 16.186 128.233.3.100 .STEP. 16 u - 64 0 0.000 0.000 0.000 +ntp2.imvp.ru .IMVP. 1 u 58 64 37 102.083 -28.363 16.256 +194.44.35.24 .PPS. 1 u 16 64 37 8.238 -32.665 16.859
Проверочный запрос к нашему серверу утилитой Консольная утилита ntpdate для синхронизации времени. -q указывает не изменять время; -d отладочный режим без изменения времени
> ntpdate -q localhost server 127.0.0.1, stratum 2, offset -0.000013, delay 0.02571 server ::1, stratum 2, offset -0.000016, delay 0.02574 10 Jan 01:14:48 ntpdate: adjust time server 127.0.0.1 offset -0.000013 sec
Трассировка NTP маршрута утилитой ntptrace
> ntptrace localhost: stratum 3, offset 0.001832, root distance 0.028646 mail.v.com.ua: stratum 2, offset 0.000255, root distance 0.008628 ntp.time.in.ua: stratum 1, offset 0.000001, root distance 0.000000, refid 'GPS'
Нужно разрешить в фаерволе 123 UDP порт.
FreeBSD: синхронизация времени с помощью NTP
Настройка производится на FreeBSD 8.2-RELEASE.
Начиная с версии FreeBSD 9.0 статья, в принципе, неактуальна, т.к. установить NTPd система предлагает ещё на стадии установки в меню BSDInstaller. Тем не менее – тут содержатся полезные примеры.
Корректировка времени производится с помощью Network Time Protocol – Сетевой Протокол Времени.
# cd /usr/ports/net/ntp # make install clean
Редактируем файл конфигурации NTPd – /etc/ntp.conf .
Главными тут являются строки, указывающие демону с какими серверами ему производить синхронизацию. По умолчанию используются:
server 0.freebsd.pool.ntp.org iburst maxpoll 9 server 1.freebsd.pool.ntp.org iburst maxpoll 9 server 2.freebsd.pool.ntp.org iburst maxpoll 9
Можно указать сервера вида:
server 0.CC.pool.ntp.org iburst maxpoll 9
Где вместо СС указывается аббревиатура вашей страны. Т.к. сервер, на котором производится настройка ntpd находится вна Украине,то будет выглядеть так:
server 0.ua.pool.ntp.org iburst maxpoll 9 prefer
В таком случае автоматически будут выбраны сервера из пула ntp.org, находящиеся в вашей стране. Можно использовать другие сервера, указав их вручную (см. конфиг в конце статьи).
Параметр prefer указывает что это предпочтительный сервер.
Список доступных для синхронизации серверов есть тут:
Найти сервер в вашем регионе можно тут:
Для проверки доступности синхронизации с выбранным сервером, введите:
# ntpdate -q ntp.dc.volia.com
Ответ должен быть такого вида:
# ntpdate -q ntp.dc.volia.com
server 82.144.220.9, stratum 2, offset -0.021772, delay 0.02603 15 Jan 23:40:18 ntpdate: adjust time server 82.144.220.9 offset -0.021772 sec
Добавьте возможность логгирования работы демона:
Раскомментируйте строки, ограничивающие использование вашего сервера:
restrict default ignore restrict 127.0.0.1
Если требуется разрешить синхронизацию машинам из сети:
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
Запустить демон можно командой:
# service ntpd start
# service ntpd restart
Теперь проверьте состояние работы указанных в конфигурации серверов:
# ntpq -p remote refid st t when poll reach delay offset jitter ============================================================================== *infocom.km.ua 192.53.103.108 2 u 46 64 377 5.663 -2.572 2.151 burka.carrier.k .INIT. 16 u – 64 0 0.000 0.000 0.000 pingvin.vc.ukrt .INIT. 16 u – 64 0 0.000 0.000 0.000
* отмечен сервер, с которым мы последний раз провели синхронизацию + с сервером возможна синхронизация – синхронизация невозможна х сервер недоступен
Теперь проверьте доступность вашего сервера:
# ntpdate -q localhost server 127.0.0.1, stratum 3, offset -0.000002, delay 0.02562 server ::1, stratum 3, offset -0.000000, delay 0.02562 16 Jan 01:33:23 ntpdate: adjust time server ::1 offset -0.000000 sec
Все хорошо, сервер работает и доступен.
Если вывод похож на такой:
# ntpdate -q localhost server 127.0.0.1, stratum 16, offset -0.000002, delay 0.02562 server ::1, stratum 16, offset -0.000002, delay 0.02562 16 Jan 01:28:31 ntpdate: no server suitable for synchronization found
значит что-то сделано неправильно – нет доступных для синхронизации серверов.
Что бы разрешить серверу производить запуск демона NTPd и произвести синхронизацию времени при старте системы – добавьте в файл /etc/rc.conf строки:
Полный пример рабочего файла /etc/ntp.conf :
server ntp.dc.volia.com iburst maxpoll 9 prefer server ntp.time.in.ua iburst maxpoll 9 server 0.freebsd.pool.ntp.org iburst maxpoll 9
logfile /var/log/ntp.log restrict default ignore restrict localhost
restrict ntp.dc.volia.com restrict ntp.time.in.ua restrict 0.freebsd.pool.ntp.org
В логе записи об успешных попытках синхронизации:
16 Jan 02:00:17 ntpd: synchronized to 62.149.0.30, stratum 1 16 Jan 02:01:17 ntpd: synchronized to 82.144.220.9, stratum 2
голоса
Рейтинг статьи
17.10.3. Настройка вашей машины
17.10.3.1. Базовая конфигурация
Если вам нужно только синхронизировать ваши часы при загрузке
машины, вы можете воспользоваться утилитой ntpdate(8). Это
может подойти для некоторых настольных машин, которые часто
перезагружаются и только требуют изредка синхронизироваться, но
на большинстве машин должен работать ntpd(8).
Использование ntpdate(8) при загрузке также хорошо для
машин, которые используют ntpd(8). ntpd(8) изменяет время
постепенно, когда как ntpdate(8) устанавливает время вне
зависисмости от того, насколько велика разница между текущим временем
машины и точным временем.
Для включения ntpdate(8) во время загрузки, добавьте строчку
ntpdate_enable="YES"
в файл
/etc/rc.conf. Вам также потребуется указать
все серверы, с которыми вы хотите синхронизироваться, и все
параметры, которые передаются в ntpdate(8), в
ntpdate_flags.
17.10.3.2. Общие настройки
NTP настраивается в файле /etc/ntp.conf,
формат которого описан в ntp.conf(5). Вот простой
пример:
server ntplocal.example.com prefer server timeserver.example.org server ntp2a.example.net driftfile /var/db/ntp.drift
Параметр server задает, какие серверы будут
использоваться, по одному в каждой строке. Если сервер задан с
аргументом prefer, как ntplocal.example.com, то этому серверу отдается
предпочтение перед остальными. Ответ от предпочтительного сервера
будет отброшен, если он значительно отличается от ответов других
серверов, в противном случае он будет использоваться безотносительно
к другим ответам. Аргумент prefer обычно
используется для серверов NTP, о которых известно, что они очень
точны, такими, на которых используется специальное оборудование
точного времени.
Параметр driftfile задает файл, который
используется для хранения смещения частоты системных часов.
ntpd(8) использует его для автоматической компенсации
естественного смещения часов, позволяя ему поддерживать достаточно
правильную настройку, даже если он на некоторый период отключается от
внешнего источника информации о времени.
Параметр driftfile задает, какой файл
используется для сохранения информации о предыдущих ответах от
серверов NTP, которые вы используете. Этот файл содержит внутреннюю
информацию для NTP. Он не должен изменяться никакими другими
процессами.
2: Изменение сервера времени (опционально)
Стандартный конфигурационный файл находится в /usr/local/etc/ntpd.conf. Откройте его в текстовом редакторе:
Поддерживаемый проектом GeoDNS, pool.ntp.org обычно возвращает IP-адреса вашей страны (или рядом). В большинстве случаев это подходит.
Также можно указать часовой пояс (например, br.pool.ntp.org, de.pool.ntp.org, orru.pool.ntp.org), чтобы подогнать или ограничить результаты согласно вашим требованиям.
Примечание: Чтобы узнать больше о NTP Pool Project, посетите сайт проекта.
В данном руководстве для примера используется NTP. Br, бразильский проект, показывающий правильное время на территории Бразилии.
Выберите сервер времени, как показано выше.
Примечание: Вместо pool.ntp.br укажите свой сервер.
3: Настройка ограничений
Пользовательские настройки клиента позволяют добавлять поддержку ограничений, чтобы ntpd мог запрашивать дату.
В руководстве ntpd.conf сказано: «Принятые NTP-пакеты с информацией о времени, которые не входят в диапазон, будут отброшены, а такие серверы NTP будут помечены как недействительные». Это предотвращает атаки «человек посередине», сохраняя при этом точность часов.
Добавьте ограничения в файл /usr/local/etc/ntpd.conf, чтобы установить доверенный диапазон. При этом используйте несколько надёжных, проверенных HTTPS сайтов. Чтобы раскомментировать строку, удалите символ #.
Получение текущих дня недели и времени от NTP-сервера
Следующий скетч даст вам полное представление о том, как получить текущие день недели и время с NTP-сервера.
Прежде чем вы отправитесь загружать скетч, вам нужно внести пару изменений, чтобы он у вас заработал.
- Чтобы ESP8266 мог установить соединение с существующей сетью WiFi, вам необходимо изменить следующие две переменные в соответствии с учетными данными вашей сети.
- Вам необходимо настроить смещение UTC для вашего часового пояса в секундах. Смотрите список часовых поясов относительно UTC. Вот несколько примеров для разных часовых поясов:
- для UTC -5.00: -5 * 60 * 60: -18000
- для UTC +1.00: 1 * 60 * 60: 3600
- для UTC +0.00: 0 * 60 * 60: 0
Как только вы закончите, загрузите скетч в ESP8266.
После загрузки скетча нажмите кнопку RST на вашей плате NodeMCU, и вы должны будете получать текущие день недели и время каждую секунду, как показано ниже.
Рисунок 4 – ESP8266 считывает день недели и время из ответа NTP-сервера и выводит их монитор последовательного порта
Настройка клиентских машин
Для синхронизации времени на UNIX-машинах локальной сети целесообразно использовать утилиту ntpdate, запуская ее при помощи демона cron несколько раз в сутки, например каждый час. Для этого, в необходимо добавить следующую строку:
0 * * * * /usr/sbin/ntpdate -s <IP-адрес или FQDN-имя NTP-сервера локальной сети>
Ключ -s направляет вывод команды демону syslog. Если на клиентских машинах есть пару лишних мегабайт оперативки, то можно запустить демон ntpd, как и на сервере со следующим конфигом:
server <IP-адрес или FQDN-имя NTP-сервера локальной сети> restrict default ignore restrict <IP-адрес или FQDN-имя NTP-сервера локальной сети> noquery notrap restrict 127.0.0.1 nomodify notrap
Думаю, в данном конфиге все понятно: источник времени (server) — локальный ntpd-сервер, доступ всем запретить, разрешить только локальному ntpd-серверу.
Так же, на клиентах необходимо правильно указать в каком формате хранить время и выбрать правильный часовой пояс, .
Для настройки NTP клиента Windows, необходимо выполнить в консоли следующие команды:
C:\>net time /setsntp:<IP-адрес или FQDN-имя NTP-сервера локальной сети> The command completed successfully. C:\>net stop w32time The Windows Time service is stopping. The Windows Time service was stopped successfully. C:\>net start w32time The Windows Time service is starting. The Windows Time service was started successfully. C:\>net time /querysntp The current SNTP value is: <IP-адрес или FQDN-имя NTP-сервера локальной сети> The command completed successfully.
Как устроен протокол NTP
Протокол NTP основан на иерархической структуре сервера точного времени, где выделены разные уровни. К нулевому уровню, на котором NTP-серверы не работают, относятся так называемые эталонные часы.
С ними синхронизируются NTP серверы уровня 1, являющиеся источниками для серверов уровня 2. Серверы второго уровня синхронизируются с серверами первого уровня, но еще могут синхронизироваться между собой. Точно так же функционируют серверы третьего уровня и ниже. В целом, поддерживается порядка 256 уровней.
Иерархическая структура NTP является отказоустойчивой и избыточной. Так, резервные серверы берут синхронизацию на себя, когда речь идет об отказах соединения с вышестоящими серверами. Для расчета точного времени NTP берет данные ото всех источников, синхронизируясь с несколькими серверами.
Время на сервере CentOS
Во время установки CentOS вам обязательно предлагается настроить текущее время, указать временную зону, в которой находится машина. По-умолчанию инсталлятор берет время из bios и предлагает его откорректировать. Кто-то во время установки не придал этому значение и не откорректировал часы, кто-то ошибся в выборе часового пояса. Так же популярна ситуация, когда сервер арендуется за границей, там уже предустановлена система и ее настройки времени и часового пояса не соответствуют необходимым. Все это можно исправить после установки, я подробно обо всем расскажу. Но начнем с самого простого.
Почему важно, чтобы в системе было правильное время? Причин может быть несколько:
- Для корректного логирования событий той или иной службы. Например, у вас в сети случился какой-то инцидент и вы его расследуете. Удобно, когда время на всех машинах сети одинаковое, это упрощает проверку и сопоставление различных действий.
- Могут возникнуть проблемы с работой в доменной среде windows, если у вас существенно различаются данные системных часов. Это актуально, если у вас файловый сервер centos интегрирован в доменную сеть windows. Пользователь в определенный момент не сможет получить доступ к файлам, если время сервера превысит допустимое отклонение от контроллера домена (более 5 минут). Это связано с особенностью работы протокола аутентификации Kerberos.
- На вашем сервере может располагаться web хостинг с сайтами, в которых указано время публикации материала. Если часы сервера не будут совпадать с временной зоной основной аудитории, то могут возникать курьезные моменты, когда посетители увидят статьи, опубликованные в будущем. Так же некорректно будет работать статистика, основанная на анализе логов apache или nginx.
- Вы используете планировщик cron в своей работе. Для корректной и предсказуемой работы запланированных событий дата и часовой пояс на сервере должны быть настроены правильно.
Чтобы избежать проблем в подобных ситуациях, займемся настройкой времени, даты и часового пояса. Кратко этот вопрос я разбирал в отдельном материале по базовой настройке centos после установки. Рекомендую с ним ознакомиться, там много полезного.