Participer au projet NTP

Publié le 4 juin 2016

Ce qu’est NTP

Il est très important pour un ordinateur personnel, un serveur ou bien des équipements réseaux que l’horloge soit correctement configurée. Si on n’y prend pas garde il se trouve qu’assez rapidement votre horloge va avancer ou bien être retardée. Il devient donc difficile de pouvoir se fier à celle-ci.

Il existe un protocole appelé NTP, pour Network Time Protocol, qui permet de synchroniser son horloge vers des serveurs de références. Il existe des documents disponibles sur Internet qui expliquent tout en détail le protocole NTP : https://tools.ietf.org/html/rfc1305 (c’est un RFC ça peut être un peu indigeste hein)

Nous souhaitons expliquer ici peu notre démarche par rapport à NTP et au projet.

Chaque serveur participant à NTP se voit attribuer un numéro de strate. Un numéro de strate définit la fiabilité et la confiance que nous pouvons avoir en une horloge à travers le protocole NTP. Ainsi, la strate de niveau 1 est celle en qui on peut avoir le *plus confiance, la strate de niveau 16 étant la moins fiable. La plupart des serveurs NTP sont de strate 3 voire 4.

Dans la suite nous allons voir comment :

  • installer son propre serveur NTP
  • contrôler que celui-ci fait bien son travail
  • rejoindre la communauté pool.ntp.org

Posséder un serveur de temps

Sur un système de type Debian ou Ubuntu nous procédons à l’installation du daemon ntp par la commande apt-get install ntp. Ceci va installer le binaire ntp ainsi que le fichier de configuration /etc/ntp.conf

Voici un exemple de fichier de configuraion :

# /etc/ntp.conf, configuration for ntpd; see ntp.conf(5) for help

driftfile /var/lib/ntp/ntp.drift


# Enable this if you want statistics to be logged.
#statsdir /var/log/ntpstats/

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

# Specify one or more NTP servers.

# Use servers from the NTP Pool Project. Approved by Ubuntu Technical Board
# on 2011-02-08 (LP: #104525). See http://www.pool.ntp.org/join.html for
# more information.
server fr.pool.ntp.org

# Access control configuration; see /usr/share/doc/ntp-doc/html/accopt.html for
# details.  The web page <http://support.ntp.org/bin/view/Support/AccessRestrictions>
# might also be helpful.
#
# Note that "restrict" applies to both servers and clients, so a configuration
# that might be intended to block requests from certain clients could also end
# up blocking replies from your own upstream servers.

# By default, exchange time with everybody, but don't allow configuration.
restrict -4 default kod notrap nomodify nopeer noquery
restrict -6 default kod notrap nomodify nopeer noquery

# Local users may interrogate the ntp server more closely.
restrict 127.0.0.1
restrict ::1

# Clients from this (example!) subnet have unlimited access, but only if
# cryptographically authenticated.
#restrict 192.168.123.0 mask 255.255.255.0 notrust


# If you want to provide time to your local subnet, change the next line.
# (Again, the address is an example only.)
#broadcast 192.168.123.255

# If you want to listen to time broadcasts on your local subnet, de-comment the
# next lines.  Please do this only if you trust everybody on the network!
#disable auth
#broadcastclient

Globalement, avec ce fichier de configuration vous pouvez redémarrer votre service et votre horloge va se synchroniser.

Redémarrage du service :

service ntp restart

Il est à noter que si votre horloge a un retard trop important il faut peut-être stopper le service ntp (service ntp stop) et procéder avec la commande ntpdate (par exemple ntpdate fr.pool.ntp.org), puis à nouveau relancer le service (service ntp restart).

Vous pouvez contrôler ce que NTP fait, pour cela taper la commande ntpq.

La commande précédente est shell interactif, ainsi vous pouvez taper peers et cela affichera ainsi le ou les serveurs avec lesquels vous êtes actuellement synchronisés.

La commande rv dans ntpq permet d’obtenir des informations sur votre instance NTP telle que le numéro de version, le système d’exploitation, le processeur, votre strate, etc.

Exemple :

ntpq> rv
associd=0 status=0615 leap_none, sync_ntp, 1 event, clock_sync,
version="ntpd 4.2.6p5@1.2349-o Thu Feb 11 18:30:40 UTC 2016 (1)",
processor="x86_64", system="Linux/3.13.0-86-generic", leap=00, stratum=3,
precision=-23, rootdelay=36.310, rootdisp=78.598, refid=193.52.136.2,
reftime=dafcfd4d.4defb5d9  Sat, Jun  4 2016  9:10:05.304,
clock=dafd00ec.517b58ac  Sat, Jun  4 2016  9:25:32.318, peer=62624,
tc=10, mintc=3, offset=-0.602, frequency=-9.778, sys_jitter=0.429,
clk_jitter=0.259, clk_wander=0.044
ntpq>

Mettre à disposition un serveur de temps

Ce n’est pas le plus compliqué. En effet, il faut s’assurer que votre daemon NTP écoute bien sur le réseau et que port 123 sur le protocole UDP est bien ouvert.

Assurez-vous que le programme écoute bien :

netstat -luanp | grep ntp

Vous pouvez aussi utiliser la commande netcat pour vérifier que le port 123 en UDP est bien ouvert :

nc -v -z -u serveur 123

Vous pouvez aussi vérifier votre firewall par la même occasion.

pool.ntp.org : ce que c’est

Le projet pool.ntp.org est un grand cluster virtuel de serveurs de temps fournissant des informations fiables et facile à utiliser.

Ce projet fournit un service pour des millions de cients.

Le site officiel est le suivant : http://www.pool.ntp.org/fr/

Pour rejoindre le projet pool.ntp.org voici comment faire :

Avant de rejoindre le projet il faut donc configurer son daemon NTP correctement en lisant les recommandations exprimées ici : http://www.pool.ntp.org/join/configuration.html

Il faut donc s’inscrire sur la page du projet en remplissant le formulaire suivant : https://manage.ntppool.org/manage

Une fois que votre serveur est inscrit vous pourrez alors accéder à une page de gestion de votre service NTP. Par exemple voici mes serveurs (IPv4 et IPv6) :

Mon fichier de configuration

hindy@orion:~$ cat /etc/ntp.conf
# /etc/ntp.conf, configuration for ntpd; see ntp.conf(5) for help

driftfile /var/lib/ntp/ntp.drift


# Enable this if you want statistics to be logged.
#statsdir /var/log/ntpstats/

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

# Specify one or more NTP servers.

# Use servers from the NTP Pool Project. Approved by Ubuntu Technical Board
# on 2011-02-08 (LP: #104525). See http://www.pool.ntp.org/join.html for
# more information.
server itsuki.fkraiem.org
server ntp0.borg-collective.org.uk
server chronos.univ-montp3.fr
server ntp.duckcorp.org
server ntp0.hochstaetter.de

# Access control configuration; see /usr/share/doc/ntp-doc/html/accopt.html for
# details.  The web page <http://support.ntp.org/bin/view/Support/AccessRestrictions>
# might also be helpful.
#
# Note that "restrict" applies to both servers and clients, so a configuration
# that might be intended to block requests from certain clients could also end
# up blocking replies from your own upstream servers.

# By default, exchange time with everybody, but don't allow configuration.
restrict -4 default kod notrap nomodify nopeer noquery
restrict -6 default kod notrap nomodify nopeer noquery

# Local users may interrogate the ntp server more closely.
restrict 127.0.0.1
restrict ::1

# Clients from this (example!) subnet have unlimited access, but only if
# cryptographically authenticated.
#restrict 192.168.123.0 mask 255.255.255.0 notrust


# If you want to provide time to your local subnet, change the next line.
# (Again, the address is an example only.)
#broadcast 192.168.123.255

# If you want to listen to time broadcasts on your local subnet, de-comment the
# next lines.  Please do this only if you trust everybody on the network!
#disable auth
#broadcastclient
hindy@orion:~$

Consommation de la bande passsante

Quand je me suis inscris, j’ai pensé que la bande passante qui allait être consommée serait très importante. Non, je vous rassure ce n’est pas le cas. Pour rappel mon serveur est auto-hébergé et derrière une ADSL classique.

J’ai donc mis en place un cacti afin d’avoir une idée de la consommation de la bande passante. Il faut compter 15 Kbits en upload comme en download, autant dire que c’est vraiment peu !

Conclusion

Nous avons vu que la configuration est simple et vous avez maintenant ainsi la possibilité de briller en société en évoquant que votre serveur NTP fait parti d uprojet pool.org.

Je tiens à remercier Manu qui a rejoint le projet quelques jours / semaines avant moi et qui m’a donné l’envie d’y participer !