{{tag>netadmin sysadmin troubleshooting dépannage ntp dhcp}}
====== 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
#!/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 =====
* https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=861769
* https://github.com/systemd/systemd/issues/2850
* https://wiki.archlinux.org/title/Systemd-timesyncd#Troubleshooting