NTP - Network Time Protocol



Sources


Pourquoi ?

L'horloge d'un ordinateur tend a dériver, ce qui peut poser des problèmes pour certains services en reseau.
Une horloge mal synchronisée créer divers problèmes:
  • Problèmes sur des services en reseau
  • Complication de la lecture des fichiers de log
  • Téléscopage de scripts de maintenance
Pour les résoudre, ntp va synchroniser l'horologe du système avec differents serveurs, il choisit automatiquement le plus fiable et garde donc le système a l'heure avec une précision élevée.


Comment ?

Je présente en premier ma solution complète, puis les diverses explications et options.
Ntp est générallement installé de base, si ce n'est pas votre cas, téléchargez les sources, et un simple ./configure && make && make install suffit, sous debian, ca sera apt-get install ntp.

Tout d'abord, il faut savoir qu'ntp refuse de synchroniser un ordinateur qui a plus d'un certain seuil de différence, générallement 1h.
Donc on va mettre à l'heure la machine:
ntpdate time.euro.apple.com
ntpdate permet de mettre à jour ponctuellement l'ordinateur, par contre la commande est dépréciée ( elle va disparaitre, car trop de gens utilisaient ntpdate en cron pour garder leur ordis a jour créant des surcharges aux heures fixes sur les serveurs ntp, de plus ntpdate ne met a jour l'heure qu'une fois, donc l'heure est fausse entre temps )
Pour info, vous pouvez remplacer ntpdate par ntpd -q -g

Maintenant on va stocker l'heure "correcte" dans l'horloge de la machine:
hwclock --systohc
Voila, la machine est prête, configurons ntp:
# Horloge locale, sert en cas de perte des autres serveurs
server	127.127.1.0	# local clock
fudge	127.127.1.0 stratum 10	

# Choix minpoll et maxpoll
# Pour xntp3-5.93e Les valeurs de "poll" maximales sont:  4 (16 seconds) et 14 (4.5 heures) respectivement.
# Pour ntp-4.0.99f Les valeurs de "poll" maximales sont:  4 (16 seconds) et 17 (1.5 jours) respectivement.

# Liste des serveurs avec lesquels on va se synchroniser (iburst a ne mettre que si la machine recevra des requettes!)
server time.euro.apple.com       minpoll 6    maxpoll 17 iburst
server fr.pool.ntp.org           minpoll 6    maxpoll 17 iburst
server ntp.univ-lyon.fr          minpoll 6    maxpoll 17 iburst
server europ.pool.ntp.org	 minpoll 6    maxpoll 17 iburst

# Le driftfile est le fichier ou il stocke l'ecart de l'horloge hardware, permet un redemarrage rapide d'ntp
driftfile /etc/ntp/drift

# Restrictions (on liste les ips qui ont le droit de se connecter, et ensuite on rajoute les restrictions.
# Si aucune, cela veut dire que l'ip a le droit de tout faire!
restrict 127.0.0.1 # On se fait confiance ;)
restrict 192.168.10.0 mask 255.255.255.0 nomodify nopeer notrap noquery limited kod # Permet a mon lan de se synchroniser

# Authentification inutile
authenticate no

Maintenant Nous allons démarrer ntpd, le daemon ntp:
ntpd &
Voila, le serveur est en route et a se charger de garder la machine à l'heure.
Il est possible de vérifier le bon fonctionnement du tout:
ntpq -p
Cela renvoi quelquechose comme cela:
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 LOCAL(0)        .LOCL.          10 l   49   64  377    0.000    0.000   0.001
*time3.euro.appl 17.72.133.54     2 u  39m 137m  377  374.823  -22.916  47.713
+crush.bmconseil 91.121.138.209   3 u 1770 137m  177  256.883  -405.64 367.808
L'étoile à gauche du nom du serveur indique que c'est actuellement le serveur le plus fiable et qu'il serta la synchronisation.
Le + indique que c'est un serveur fiable, mais qu'il l'est moins, donc il ne sert pas a la synchro.
L'autre information importante est la colonne reach, elle commence a 0 et augmente octalement jusque 377, chaque augmentation correspond à un echange réussi avec le serveur.
When correspond à la date du prochain "poll", poll la durée du poll.
La colonne st correspond a la strate du serveur, plus le chiffre est faible, plus la precision est grande (on est toujours a strate+1 du serveur sur lequel on se synchronise). Les strates 0 et 1 ont des hardware clocks qui leur donnent l'heure, ce sont donc les references.


Décryptage

server : Serveur qui servira a la synchronisation, on peut lui passer les options iburst ( permet de demander plus souvent l'heure au demarrage du demon pour une synchronisation précise plus rapide, utile UNIQUEMENT si le daemon sert de serveur de temps à d'autres machines! Sinon cela rajoute de la charge inutilement aux serveurs qui a force deviennent moins précis! ) il y a ausi les options maxpoll et minpoll qui determinenent la frequence max et min des requettes, encore une fois, rien ne sert de demander le temps toute les 2 secondes, donc des valeurs elevees sont parfaites. Il semblerait qu'apple par exemple ai mis les valeurs a 12 pour minpoll et 17 pour maxpoll par defaut, minpoll est moins important que maxpoll, en effet si le serveur est bien synchronisé, il demandera tout seul moins souvent, par contre si le maxpoll est faible, vous forcez la requette alors qu'elle est inutile! autant la mettre a 17 par defaut ;)

restrict : Sert à définir les possibilitées d'une machine ou d'un reseau: par defaut il n'y en a aucunes, il faut préciser chaque restriction pour chacune des machines, pour la machine en local, il ne faut bien entendu pas en mettre. Les restrictions possibles sont nomodify nopeer notrap noquery limited kod, a mettre sur les machines qui se synchronisent, perso je ne met pas de restriction sur les serveurs sur lesquels je me synchronise. Les paranos peuvent rajouter un restrict default ignore pour banir tout le monde par defaut et ensuite authoriser un à un les clients. Pour plus d'infos, voir les liens en haut de la page.

driftfile : Fichier ou sera enregistré la dérive de l'horloge interne de la machine, doit être lsible par le daemon ... fudge : Reglage de l'horoge machine, les deux liges ( voir config ) ne sont pas a changer authenticate : Je n'aborde pas l'authentification du tout ici, car ntp peut gérer cela, mais franchement je n'en vois pas l'utilité Log : Logger n'est pas utile sauf en debug! Donc a n'activer qu'en cas de problème ;) Pour logger il faut specifier le chemin du fichier de log avec logfile, mais on peut aussi préciser le contenu du log avec logconfig. Les valeurs de logconfig que je connais sont: syncstatus / sysevents / all


Conclusion

Je n'ai pas abordé les peers, les multicast broadcast client, l'authentification et autre car cela ne sert pas dans le cadre de la synchro de sa machine, mais uniquement dans des cas avancés, et quand on a besoin de ces options, on les connait de toute facon :D
Si la machine est utilisée par d'autres comme serveur de temps (cas de ma passerelle) il peut être interessant de mettre quelques serveurs, si c'est juste our avoir une heure correcte, un seul suffit (un fiable j'entends comme celui d'apple par exemple).
Pour plus de renseignement sur le fonctionnement du ntp ou sur la configuration complète, vous trouverez votre bonheur dans les liens du début de page, bonne config!