lalahop

Utiliser NTP (Network Time Protocol) sur OpenWRT

Table des matières

Un article rapide sur comment utiliser le protocole NTP sur OpenWRT.

Pourquoi ?

Cette question en cache plusieurs :

Pourquoi synchroniser son routeur avec un serveur de temps ?

Comme pour le reste des équipements : si vous hébergez un serveur, cela peut-être utile pour constater l'heure d'une connexion (notamment en cas de problème). Vous pouvez aussi avoir des traces plus fiables d'une compromission du système grâce à cette synchronisation.

Mon routeur est déjà à jour, pourquoi utiliser NTP ?

En effet, OpenWRT utilise le vénérable rdate qui est inclus dans Busybox. Ce logiciel utilise le vénérable Time Protocol. Mais rdate change l'heure de manière abrupte, ce qui n'est pas forcement une bonne idée notamment en ce qui concerne les sessions. Dans notre cas, nous pouvons citer les sessions suivantes qui seront perdues dans le cas d'un changement brutal de l'heure : luci, SSH, le drop pendant x temps de iptables, les connexions actives et j'en passe. De plus, NTP est plus précis que TP.

Deux modes possibles

En effet, vous pouvez choisir d'être seulement un client NTP ou d'être un client et un serveur NTP. Dans le second cas, vous utiliserez ntpd (aussi disponible sous OpenWRT). Dans le premier cas, vous utiliserez, de préférence ntpclient. Même s'il y a moyen de bloquer l'accès à votre démon ntpd, il vaut mieux avoir un programme qui fait que ce que l'on attend de lui (pour des raisons maintes fois évoquées dans ce blog) et donc utiliser ntpclient si l'on souhaite n'avoir qu'un client.

ÉDIT du 24/08/2011 à 16h30 : Si vous voulez comprendre les motivations qui peuvent vous amener à installer un serveur NTP plutôt qu'un client et/ou si vous voulez installer un serveur NTP, reportez-vous à ce billet : Installer un serveur NTP sur OpenWRT.

Fin de l'édit

Dans la suite de ce billet, je souhaite avoir uniquement un client et j'installe donc ntpclient.

Let's go !

D'abord on installe le client NTP

[opkg update]
opkg install ntpclient

Ensuite on le configure

Le logiciel est déjà configuré mais je souhaite utiliser des serveurs NTP plus reconnus que ceux d'OpenWRT.

uci set ntpclient.@ntpserver[0].hostname=ntp-p1.obspm.fr
uci set ntpclient.@ntpserver[1].hostname=0.fr.pool.ntp.org
uci set ntpclient.@ntpserver[2].hostname=2.fr.pool.ntp.org
uci delete ntpclient.@ntpserver[3]

J'indique que le premier serveur à interroger est celui de l'observatoire de Paris (strate 1), que le deuxième et le troisième serveur à interroger sont ceux du pool ntp.org. Enfin, je supprime le quatrième serveur proposé par OpenWRT. Je pense que 3 serveurs sont déjà de trop alors un quatrième ...

Le reste des paramètres conviennent très bien :
ntpclient.@ntpclient[0].interval=600 -> on check la synchronisation toutes les 10 minutes. Comme on n'est pas sur un serveur en production, on peut même réduire cette valeur si on le souhaite.

Pour les options du drift, on ne touche à rien. Voir à quoi sert le driftfile.

Ensuite, on désactive rdate

La manière la plus propre de le faire serait de compiler busybox sans le support de rdate. Je vous laisse chercher plus de détails sur notre ami Google.

Moi, je choisis une méthode plus brutale et plus sale :

find / -name "*rdate*" -exec rm -f {} \;
uci delete system.@rdate[0]

Dans un premier temps, je recherche tous les fichiers qui contiennent rdate dans leur nom et je les supprime. 4 fichiers sont trouvés dont 2 uniques : l’exécutable et son script de lancement (/etc/hotplug.d/iface/40-rdate). Les deux autres fichiers sont des copies dans /rom, le système en lecture seule donc la suppression va échouer.

Ensuite, je supprime les informations de configuration de rdate.

Vous pouvez rebooter votre routeur, en changeant l'heure auparavant, juste pour voir :

date -s 201106082300
reboot

Au reboot, vous pouvez constater que l'heure est correcte (commande date sans paramètres) et que le démon tourne (commande ps | grep ntpclient).

Toutes les 10 minutes, l'horloge de votre routeur sera synchronisée.

Enjoy 😛