Table des matières

, , , , ,

timesyncd n'utilise pas les serveur NTP acquis via DHCP

Lorsque NetworkManager s'exécute sur l’hôte, la configuration du service systemd-timesyncd.service n'est pas mise à jour, ce dernier n'utilise pas les serveurs NTP acquis via DHCP par NetworkManager.

En effet NetworkManager par défaut ne communique pas directement avec systemd-timesyncd.service.

Cependant la fonctionnalité NetworkManager dispatcher peut être utilisée pour mettre à jour la configuration de l'unité systemd-timesynd.service. solution largement utilisée consiste à placer un script dans /etc/NetworkManager/dispatcher.d qui se charge de mettre en œuvre s se comportement pour systemd.

Environnement

lsb_release -a
 
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 20.04.3 LTS
Release:        20.04
Codename:       focal
systemd --version
 
systemd 245 (245.4-4ubuntu3.13)
+PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD +IDN2 -IDN +PCRE2 default-hierarchy=hybrid

nmcli est le CLI de NetworkManager:

# Affiche les détails de configuration de la connexion
# filtre les informations concernant les serveurs NTP
nmcli connection show SFR_4380 | grep ntp_servers
 
DHCP4.OPTION[7]:                        ntp_servers = 192.168.1.1
DHCP4.OPTION[17]:                       requested_ntp_servers = 1

La sortie obtenue indique bien que le serveur NTP est récupéré via DHCP. Si on affiche l'état de la synchronisation NTP:

timedatectl show-timesync --all
 
LinkNTPServers=
SystemNTPServers=
FallbackNTPServers=ntp.ubuntu.com
ServerName=ntp.ubuntu.com
ServerAddress=(null)
RootDistanceMaxUSec=5s
PollIntervalMinUSec=32s
PollIntervalMaxUSec=34min 8s
PollIntervalUSec=0
Frequency=0
 
 
timedatectl status
 
               Local time: dim. 2022-01-09 11:48:41 CET
           Universal time: dim. 2022-01-09 10:48:41 UTC
                 RTC time: dim. 2022-01-09 10:48:41    
                Time zone: Europe/Paris (CET, +0100)   
System clock synchronized: no                          
              NTP service: active                      
          RTC in local TZ: no

timesyncd n'utilise pas le serveur NTP retourné par DHCP, et malgré l'état actif du service NTP, l'horloge locale n'est pas synchronisée.

Passer le script exécutable:

chmod ug+x /etc/dhcp/dhclient-exit-hooks.d/timesyncd
 
# Forcer le renouvellement du bail DHCP
# Lister les connexions actives
nmcli connection show --active
 
# Redémarrer la connexion active souhaitée
nmcli connection down SFR_4380
nmcli connection up SFR_4380

Les commandes ci-dessous permettent de créer les répertoires si nécessaire:

for r in "/etc/systemd/timesyncd.conf.d" "/etc/NetworkManager/dispatcher.d";
do
  if [ ! -d $r ]; 
  then  
    # Le repertoire n'existe pas : creation"
    mkdir $r
  fi    
done

Créer le script /etc/NetworkManager/dispatcher.d/10-update-timesyncd

10-update-timesyncd
#!/usr/bin/env bash
 
[[ -z "$CONNECTION_UUID" ]] && exit 0
INTERFACE="$1"
ACTION="$2"
 
case $ACTION in
up | dhcp4-change | dhcp6-change)
	[[ -n "$DHCP4_NTP_SERVERS" ]] || exit
	mkdir /etc/systemd/timesyncd.conf.d
	cat <<-THE_END >"/etc/systemd/timesyncd.conf.d/${CONNECTION_UUID}.conf"
		[Time]
		NTP=$DHCP4_NTP_SERVERS
	THE_END
	systemctl restart systemd-timesyncd.service
	;;
down)
	rm -f "/etc/systemd/timesyncd.conf.d/${CONNECTION_UUID}.conf"
	systemctl stop systemd-timesyncd.service
	;;
esac

Rendre le script exécutable pour root seulement:

chmod ug+x /etc/NetworkManager/dispatcher.d/10-update-timesyncd

S'assurer que NetworkManager Dispatcher est activé:

systemctl is-enabled NetworkManager-dispatcher.service 

Après ces modifications, le serveur NTP de l'unité timesyncd.service est bien mis à jour par NetworkManager:

# Affiche le serveur NTP utilisé
timedatectl show-timesync --all
 
LinkNTPServers=
SystemNTPServers=192.168.33.254
FallbackNTPServers=ntp.ubuntu.com
ServerName=192.168.33.254
ServerAddress=192.168.33.254
RootDistanceMaxUSec=5s
PollIntervalMinUSec=32s
PollIntervalMaxUSec=34min 8s
PollIntervalUSec=1min 4s
NTPMessage={ Leap=0, Version=4, Mode=4, Stratum=3, Precision=-23, RootDelay=28.778ms, RootDispersion=36.071ms, Reference=5C4A08B, OriginateTimestamp=Sun 2022-01-09 17:27:27 CET, ReceiveTimestamp=Sun 2022-01-09 17:27:27 CET, TransmitTimestamp=Sun 2022-01-09 17:27:27 CET, DestinationTimestamp=Sun 2022-01-09 17:27:27 CET, Ignored=no PacketCount=2, Jitter=5.033ms }
Frequency=6818847
 
# Affiche le status du service systemd-timesyncd
timedatectl status 
               Local time: dim. 2022-01-09 17:27:53 CET
           Universal time: dim. 2022-01-09 16:27:53 UTC
                 RTC time: dim. 2022-01-09 16:27:53    
                Time zone: Europe/Paris (CET, +0100)   
System clock synchronized: yes                         
              NTP service: active                      
          RTC in local TZ: no

Le service indique bien que l'horloge du système local à été synchronisée au serveur de temps par les lignes System clock synchronized: yes et NTP service: active.

Références