Настройки времени в Linux

В современных дистрибутивов с systemd служба синхронизации времени уже присутствует в дефолтной установке и реализуется через systemd-timesyncd. Эта служба призвана заменить ntpd, она интегрирована в systemd, поэтому для автоматической синхронизации времени рекомендуется использовать именно ее.

Проверим, как в вашем дистрибутиве настроена служба обновления времени, используя утилиту timedatectl, которая рекомендуется использовать вместо морально устаревшей tzdata:

Синхронизация времени уже включена и работает через timesyncd. Посмотрим ее настройки и статус:

# timedatectl timesync-status
       Server: 91.189.94.4 (ntp.ubuntu.com)
Poll interval: 34min 8s (min: 32s; max 34min 8s)
         Leap: normal
      Version: 4
      Stratum: 2
    Reference: 11FD6CFD
    Precision: 1us (-23)
Root distance: 51.085ms (max: 5s)
       Offset: -235us
        Delay: 7.893ms
       Jitter: 849us
 Packet count: 126
    Frequency: +3.193ppm

Мы видим что синхронизация времени через интернет уже настроена и работает. Время обновляется с сервера ntp.ubuntu.com. При желании вы можете изменить сервер времени в файле /etc/systemd/timesyncd.conf.

Команды тестировались для Ubuntu 20.04.1 LTS.

  1. Обновим список timezone на сервере:
    apt update && apt upgrade tzdata
  2. Вывести список европейских timezоne:
    timedatectl list-timezones | grep Europe
  3. Смена часового пояса:
    timedatectl set-timezone Europe/Kyiv

Проверим установился ли часовой пояс

timedatectl -a
           Local time: Sat 2022-05-28 17:34:57 EEST
           Universal time: Sat 2022-05-28 14:34:57 UTC
           RTC time: Sat 2022-05-28 14:34:58
           Time zone: Europe/Kiev (EEST, +0300)
System clock synchronized: yes
           NTP service: active
           RTC in local TZ: no

Настройка сервера времени NTP (ntpd)

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

Консольная утилита ntpdate для синхронизации времени

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[81851]: 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 порт.

Если вам нужно только синхронизировать ваши часы при загрузке машины, вы можете воспользоваться утилитой Консольная утилита ntpdate для синхронизации времени. Это может подойти для некоторых настольных машин, которые часто перезагружаются и только требуют изредка синхронизироваться, но на большинстве машин должен работать ntpd.

  • Windows - просто указать IP и DNS нашего сервера NTP
  • Ubuntu (любой дистрибутив Debian):
    # aptitude install ntp
    # ntpq -c peers
         remote           refid      st t when poll reach   delay   offset  jitter
    ==============================================================================
     europium.canoni 193.79.237.14    2 u   43   64    7   58.812  -697293  14.720

    Правим /etc/ntp.conf для того чтобы синхронизация производилась с нашим сервером.

    # cp /etc/ntp.conf /etc/ntp.conf.orig
    # nano /etc/ntp.conf
    driftfile /var/lib/ntp/ntp.drift
    
    statsdir /var/log/ntpstats/
    
    statistics loopstats peerstats clockstats
    filegen loopstats file loopstats type day enable
    filegen peerstats file peerstats type day enable
    filegen clockstats file clockstats type day enable
    
    # local NTP server
    server 10.26.95.254 prefer
    # Backup NTP server
    server ntp3.time.in.ua
    
    restrict default ignore
    
    restrict 127.0.0.1
    restrict ::1
    restrict 10.26.95.254
    # ntp3.time.in.ua = 80.91.187.10
    restrict 80.91.187.10
    
    # /etc/init.d/ntp restart
  • FreeBSD достаточно прописать в /etc/rc.conf
    ntpd_enable="YES" # Time(NTP) -server
    ntpdate_enable="YES"
    ntpdate_flags="-u x.x.x.254" # IP NTP server

    и запустить службу, предварительно настроив ./etc/ntp.conf(см. выше)

    > /etc/rc.d/ntpd start

periodic.conf status-ntpd

FreeBSD: 480.status-ntpd - выводит список известных NTP-серверу peer. Если стабильность работы NTP сервера важна - можно включить.

> ee /etc/periodic.conf
# 480.status-ntpd
daily_status_ntpd_enable="YES"                           # Check NTP status

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

Параметр -g позволит синхронизировать часы, даже если образовалась очень большая разница во времени.

PQ VPS сервера в 28+ странах.