пятница, 15 декабря 2023 г.

Исправление в Linux Mint 21 (Ubuntu 22.04) – systemd timesync не понимает серверы NTP от DHCP

В различных материалах, посвящённых синхронизации времени через systemd, можно найти утверждение, что если сервер DHCP выдаёт адрес сервера NTP, то время будет синхронизироваться именно по этому источнику, так как имеет приоритет над настройками в строках NTP= и FallbackNTP= конфигурационного файла /etc/systemd/timesyncd.conf  Это было отмечено как примечание в публикации "Переключение синхронизации времени в Linux Mint xfce на systemd" и это же утверждает русскоязычный источник interface31.ru 

К сожалению, лично у меня реальное состояние дел опровергло данное утверждение. Несмотря на то что сервер DHCP выдавал 2 адреса серверов NTP, синхронизация времени велась либо от серверов NTP в настройках файла  timesyncd.conf, либо от сервера ntp.ubuntu.com, когда данный файл был приведен в "исходное" состояние, которое он имеет после установки системы:

[Time]
#NTP=
#FallbackNTP=ntp.ubuntu.com
#RootDistanceMaxSec=5
#PollIntervalMinSec=32
#PollIntervalMaxSec=2048

Имеется два варианта "заставить" компьютер синхронизировать своё время от серверов NTP, адреса которых предоставляет сервер DHCP:

1) перевести синхронизацию времени с systemd на ntp (подробности);

2) использовать корректирующий скрипт. 

Корректирующий скрипт был найден на этом ресурсе.

Под правами root создаётся файл 10-update-timesyncd

sudo xed /etc/NetworkManager/dispatcher.d/10-update-timesyncd

с содержанием:

#! /usr/bin/bash
[ -n "$CONNECTION_UUID" ] || exit
INTERFACE=$1
ACTION=$2
case $ACTION in
    up | dhcp4-change | dhcp6-change)
        [ -n "$DHCP4_NTP_SERVERS" ] || exit
        mkdir -p /etc/systemd/timesyncd.conf.d/
        cat<<EOF > /etc/systemd/timesyncd.conf.d/$CONNECTION_UUID.conf
[Time]
NTP=$DHCP4_NTP_SERVERS
RootDistanceMaxSec=15
EOF
        systemctl restart systemd-timesyncd
       ;;
    down)
        rm -f /etc/systemd/timesyncd.conf.d/$CONNECTION_UUID.conf
        systemctl restart systemd-timesyncd
        ;;
esac

и установленным правом на выполнение (как программы).

После создания указанного файла в целях чистоты эксперимента перезагрузите систему.

При проведении проверки мой DHCP сервер (в локальной сети) предоставлял серверы NTP 194.158.196.171 и 194.158.196.172  При запросе состояния синхронизации времени  timedatectl timesync-status  был получен ответ:


Информацию о серверах NTP от DHCP systemd-timesync берёт из созданного файла /etc/systemd/timesyncd.conf.d/$CONNECTION_UUID.conf  
В моём случае это был файл  61ba6df5-3c5b-3075-8e05-993158de5fb4.conf с содержанием:

[Time]
NTP=194.158.196.171 194.158.196.172
RootDistanceMaxSec=15

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

Если у вас имеется свой локальный сервер NTP, то можно либо настроить перенаправление на него всех запросов по udp порт 123 (пример для MikroTik), либо в DNS создать псевдонимы для нужных серверов NTP. Если в DNS создать псевдоним для ntp.ubuntu.com, то даже при всех закомментированных строках файла timesyncd.conf своё время компьютер будет синхронизировать с локальным сервером NTP. Пример:

      Server: 192.168.224.81 (ntp.ubuntu.com)
Poll interval: 17min 4s (min: 32s; max 34min 8s)
         Leap: normal
      Version: 4
      Stratum: 3
    Reference: 1F82C802
    Precision: 123us (-13)
Root distance: 24.932ms (max: 5s)
       Offset: -13.038ms
        Delay: 412us
       Jitter: 5.028ms
 Packet count: 5
    Frequency: -45,227ppm

Комментариев нет:

Отправить комментарий