Service NTP
Présentation rapide du protocole NTP : fr/NTPProtocole
En bref
Si vous désirez mettre en place un client NTP pour que l'heure de votre machine soir correcte:
Installer le paquet ntpsec-ntpdate
- Indiquer un serveur ntp de votre choix (par exemple : ntp.free.fr) dans /etc/default/ntpsec-ntpdate
Relancer l'interface réseau concernée (ntpdate est lancé lors de l'activation d'une interface réseau) ou lancez ntpdate-debian
C'est tout.
Les paquets Debian
Le paquet ntpsec-doc
Installe une documentation complète (en HTML) sur les paquets ntp et ntpdate dans le répertoire /usr/share/doc/ntpsec-doc
Le paquet ntpsec
Installe le client ntpdate et les pages de manuel. ntpdate
synchronise brutalement l'horloge système (option -b). Il peut être utile lors de décalage trop important, le daemon ntpd refusant alors de se synchroniser. ntpdate est aussi utile pour les connexions intermittentes.
- ntpdate -B ajustement progressif
- ntpdate -b ajustement brutal
Le paquet ntp (version Potato)
Installe le client/serveur ntpd, le script de lancement, les scripts de rotation des logs, divers outils de contrôle et de debugage, et les pages de manuel.
Lors de l'installation un écran vous demande de saisir le nom des serveurs ntp sur lesquels vous voulez vous synchroniser. Toute la configuration est dans /etc/ntp.conf .
A la fin de l'installation, le daemon ntpd est lancé. On peut s'en apercevoir à l'aide de la commande
ps aux ||grep ntp
root 359 ... SL ... /usr/sbin/ntpd
Le "L" indique que le daemon est bloqué en RAM, il ne sera jamais swapé, n'oubliez pas que ntp doit synchroniser la machine à quelques milli-secondes prêts.
Le daemon ntpd synchronise la machine progressivement, sans perturber le système, il accélère ou ralentit l'horloge système. Cette synchronisation prends plus d'un quart d'heure.
Si le décalage est trop important, le daemon ntpd refusera de synchroniser l'horloge système, il sera alors nécessaire d'utiliser le client ntpdate.
Le paquet ntp (version Woody)
Installe divers outils de contrôle et de debugage, et leurs pages de manuel.
- /usr/bin/ntpq
- /usr/bin/ntpdc
- /usr/bin/ntptrace
- /usr/bin/ntpsweep
- /usr/sbin/ntp-wait
- /usr/sbin/ntptime
- /usr/sbin/tickadj
- /usr/sbin/ntp-genkeys
Le paquet ntp-simple (version Woody)
Installe le client/serveur ntpd sans les drivers pour les horloges radio. Installe aussi le script de lancement, les scripts de rotation des logs, et la page de manuel du daemon ntpd.
Le paquet ntp-refclock (version Woody)
Installe le client/serveur ntpd avec les drivers pour les horloges radio ou d'autres périphériques de synchronisation horaires. Installe aussi le script de lancement, des scripts de rotation des logs, et la page de manuel du daemon ntpd.
Configuration du daemon ntpd
- Fichier de configuration :
/etc/ntp.conf
# /etc/ntp.conf, configuration for ntpd
# ntpd will use syslog() if logfile is not defined # Fichier d'historique logfile /var/log/ntpd.log
# Fichier contenant la deviation moyenne driftfile /var/lib/ntp/ntp.drift
# Repertoire contenant les statistiques d'utilisation statsdir /var/log/ntpstats/
# Statistiques desirees 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
# Liste des serveurs NTP de référence
server ntp.via.ecp.fr server ntp.obspm.fr server ntp.univ-lyon1.fr
Pour l'utilisation du protocole NTP au sein d'un réseau local, l'utilisation de la directive "broadcast adresse_broadcast" pour le serveur permet de transmettre les paquets de synchronisation en broadcast. On utilisera la directive "broadcastclient" pour les clients. La précision est un peu plus faible en broadcast.
Pour les clients :
# /etc/ntp.conf, configuration for ntpd
# ntpd will use syslog() if logfile is not defined # Fichier d'historique logfile /var/log/ntpd.log
# Fichier contenant la deviation moyenne driftfile /var/lib/ntp/ntp.drift
# Repertoire contenant les statistiques d'utilisation statsdir /var/log/ntpstats/
# Statistiques desirees 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
# Liste des serveurs NTP de référence
server ntp.via.ecp.fr server ntp.obspm.fr server ntp.univ-lyon1.fr
Configuration du client ntpdate
- Fichier de configuration : /etc/init.d/ntpdate
Décommentez une ligne dans le fichier "/etc/init.d/ntpdate".
NTP et les pare-feux
Le protocole ntp utilise pour la synchronisation le port UDP/123.
Le daemon ntpd se connecte du port UDP/123 vers le ou les serveurs de références sur leurs ports UDP/123.
La règle suivante pour iptables permet au serveur NTP interne de se synchroniser à un serveur NTP de référence extérieur :
# Autoriser l'acces au serveur NTP numéro 1 (UDP 123)
iptables -A FORWARD -i $INTERNAL_INTERFACE -o $EXTERNAL_INTERFACE -p udp -s $SERVEUR_NTP_INTERNE --sport 123 -d $NTP_SERVEUR_REFERENCE_1 --dport 123 -m state --state NEW -j ACCEPT
Cette règle ne permet pas les connexions de l'utilitaire ntptrace vers l'extérieur. ntptrace se connecte d'un port UDP non privilégié (supérieur à 1024) vers le ou les serveurs de références sur leurs ports UDP/123.
Vérification et debugage
Le premier point à vérifier, est que le daemon ntpd fonctionne. Un simple "ps aux ||grep ntp" suffit, vous devez obtenir une ligne de la forme :
root 359 ... SL ... /usr/sbin/ntpd
Puis vous pouvez utiliser les utilitaires ntptrace et ntpdc du paquet ntp.
La synchronisation prend un peu de temps, il ne faut pas essayer ntpdc juste après avoir lancé ntpd.
L'utilitaire ntpdc permet d'obtenir une foultitude d'informations sur l'état du daemon ntpd.
Par défaut, ntpdc se connecte à la machine locale. La commande host de ntpdc permet de se connecter à une autre machine, par exemple un serveur, si le serveur l'autorise. La commande help de ntpdc est très utile.
Pour le debugage regardez aussi dans les logs. Ils indiquent les dérives et les corrections apportées, le syslog indique la perte de synchronisation en cas de coupure de la connexion Internet.
L'alternative chrony
Le paquet chrony présente une autre implémentation du même protocole.
On peut même mettre un démon chronyd et un démon ntpd (sur deux machines différentes) en peers l'un de l'autre sans problème (chronyd utilisant la version 3 du protocole NTP alors que ntpd peut utiliser les versions 3 et 4). Les différences se font sur la façon dont l'horloge RTC du pc est gérée et sur la prise en compte des connexions intermittentes. Pour la partie NTP elle même, les algorithmes implémentés sont ceux décrits de manière détaillée dans le RFC.
Pour le fichier de conf, celui proposé par le mainteneur du paquet est bien fait, il y a juste à préciser le(s) serveur(s) que l'on souhaite utiliser et une ou deux lignes à décommenter si on veut utiliser /dev/rtc.
Le pendant de ntpdc est chronyc. Il n'y a pas, sauf erreur, d'équivalents de ntpq et ntptrace. La documentation est au format info au lieu d'être en HTML et chrony prend en compte la gestion des connexions intermittentes ce qui le rend particulièrement adapté au cas des utilisateurs de ppp.
Voilà l'essentiel des différences impactant l'utilisateur du paquet. Si on regarde en détail,
- chrony n'est pas porté sur autant de plateformes que ntpd,
- il n'utilise probablement pas l'API PPS,
- sait-il utiliser un noyau gérant les nanosecondes ?
- il gère moins de références matérielles (comme sources de temps pour des serveurs de strate 1, cas très peu usuel)
mais tout ceci ne concerne pas la personne qui installe et configure le serveur et encore moins celui qui veut juste synchroniser une machine.
Astuces
Auto-synchronisation NTP
Un bon truc pour faire un serveur qui répond même si les supérieurs sont injoignables (utile si la connectivité est défaillante) :
# Synchronize on myself (127.127 = myself, 1 = local clock) server 127.127.1.0 # Stratum 10 (arbitrary) fudge 127.127.1.0 stratum 10
Pour en savoir plus...
Le site de référence https://www.ntp.org/
La liste des serveurs publiques primaires et secondaires: https://services.renater.fr/ntp/serveurs_francais
De la doc en français: https://services.renater.fr/ntp/index