Je suis Charlie

Autres trucs

Accueil

Seulement les RFC

Seulement les fiches de lecture

Ève

Quel est le plus rapide serveur DNS d'un groupe ?

Première rédaction de cet article le 13 février 2008


Mesurer les performances d'un service informatique est un art difficile mais néanmoins indispensable à l'administrateur système. Parmi ces services, le DNS présente la particularité que plusieurs serveurs répondent pour une zone donnée. De même, une machine connectée à l'Internet a souvent le choix entre plusieurs serveurs comme résolveurs. Dans un groupe, quel est le plus rapide de ces serveurs ? Un petit programme permet de répondre à cette question.

Supposons que je m'interroge sur le temps de réponse d'un service dont le nom figure dans la zone example.com. Le temps de réponse du DNS doit être pris en compte. Ou bien je me demande si je dois utiliser les résolveurs fournis par mon FAI, ou bien un BIND que j'ai installé sur ma machine, ou bien encore un service tiers comme OpenDNS, qui résoud gratuitement des noms de domaine en échange d'une manipulation des réponses pour insérer de la publicité. Quel résolveur est le plus rapide ?

On peut mesurer le temps de réponse d'un serveur avec echoping :

% echoping -n 3  -m dns c.nic.fr -t SOA fr 
Elapsed time: 0.118128 seconds
Elapsed time: 0.074891 seconds
Elapsed time: 0.047331 seconds
---
Minimum time: 0.047331 seconds (5409 bytes per sec.)
Maximum time: 0.118128 seconds (2167 bytes per sec.)
Average time: 0.080116 seconds (3195 bytes per sec.)
Standard deviation: 0.029137
Median time: 0.074891 seconds (3418 bytes per sec.)

Ou bien on peut utiliser dig qui affiche, tout à la fin, le temps écoulé :

% dig @c.nic.fr SOA fr.              
...
;; Query time: 55 msec

Mais pour comparer N serveurs, c'est un peu pénible. D'autant plus que dig, contrairement à echoping, ne permet pas de répéter un test, ce qui est indispensable lorsqu'on fait des mesures sur Internet, où les temps de réponse varient souvent considérablement.

Joe Abley a donc développé pour cela qtest, le programme décrit plus bas, programme que j'ai un peu amélioré. Ce programme prend comme argument une requête DNS par exemple MX elysee.fr. ou bien ANY www.example.com. et une liste de serveurs à tester. Il affiche les N serveurs les plus rapides (N vaut 1 par défaut mais on peut le changer avec l'option -n) ainsi que leur temps de réponse en milli-secondes. Par exemple :

% qtest "SOA fr." a.nic.fr c.nic.fr e.nic.fr
46 c.nic.fr/192.134.0.129

Ce test permettra de comparer les temps de réponse de ces trois serveurs de l'AFNIC (bien sûr, le résultat dépendra de l'endroit où on se trouve, d'autant plus que e.nic.fr est à la Réunion). Pour tester pour une zone donnée (ici, la racine), on peut utiliser la possibilité qu'à le shell d'exécuter une commande et d'utiliser son résultat comme variable, ici avec la syntaxe $(commande arguments...) :

% qtest "SOA ." $(dig +short NS .)
3 F.ROOT-SERVERS.NET./2001:500:2f::f

f.root-servers.net a répondu le premier, en trois milli-secondes. Pour voir davantage de serveurs :

%  qtest -n 5 "SOA ." $(dig +short NS .) 
3 F.ROOT-SERVERS.NET./2001:500:2f::f
3 M.ROOT-SERVERS.NET./2001:dc3::35
6 F.ROOT-SERVERS.NET./192.5.5.241
21 I.ROOT-SERVERS.NET./192.36.148.17
21 K.ROOT-SERVERS.NET./193.0.14.129

qtest est écrit en shell. Après analyse de ses arguments avec getopt, il boucle sur les serveurs de noms passés en argument. Pour chacun d'eux, il cherche l'ensemble des adresses IPv4 et IPv6 (les temps de réponse peuvent être très différents entre les deux protocoles), stocke chaque couple <nom de machine, adresse IP> dans une chaîne de caractères, la barre oblique servant de séparateur (le shell Unix n'a pas de structures de données perfectionnées). Pour chaque couple, qtest fait trois essais avec dig. Les calculs statistiques (moyenne, tri, hélas pas de médiane) sont faits avec awk.

Ici, on va comparer un résolveur local, ceux fournis par le FAI, et ceux de deux services commerciaux, OpenDNS et DNS Advantage de Neustar. Cette fois, on fait appel à des serveurs récursifs, ayant un cache des réponses précédemment obtenues, et le choix de la question est donc important. Si la réponse est dans le cache (ce qui est typiquement le cas si on demande l'adresse de www.google.com), tout ira bien plus vite ! Essayons d'abord avec un nom qui est probablement dans le cache. 172.19.1.1 est un résolveur local, ceux commençant par 62.4 sont les résolveurs de mon FAI, ceux commençant par 208.67.222 sont à OpenDNS et ceux commençant par 156.154 sont ceux de DNS advantage. qtest affiche toujours l'adresse IP après la barre oblique même lorsque, comme ici, c'est inutile puisque l'identité du serveur était déjà une adresse IP :

% qtest -n3 "A a.gtld-servers.net" 172.19.1.1 62.4.16.70 62.4.17.69 208.67.222.222 208.67.220.220 156.154.70.1 156.154.71.1  
3 172.19.1.1/172.19.1.1
49 62.4.17.69/62.4.17.69
61 208.67.222.222/208.67.222.222

On voit que les résolveurs les plus proches sont les plus rapides (un test avec un nom inexistant, donc pas dans le cache, donne le même résultat) contrairement aux prétentions des vendeurs d'OpenDNS ou de Neustar. Il ne faut jamais se fier à la publicité. Le test a été fait depuis une machine en Europe, où OpenDNS et DNS Advantage ont peu de serveurs. Est-ce mieux aux États-Unis ? Non (ici, les serveurs du fournisseur d'hébergement sont ceux commençant par 208.75 et 208.78 :

0 127.0.0.1/127.0.0.1
0 208.78.97.155/208.78.97.155
1 208.75.87.250/208.75.87.250
23 156.154.70.1/156.154.70.1
25 156.154.71.1/156.154.71.1
29 208.67.220.220/208.67.220.220
29 208.67.222.222/208.67.222.222

Bref, si on veut des temps de réponse rapides, rien ne vaut les serveurs de son FAI.

Vous pouvez récupérer le programme qtest. Plus riche, plus graphique et plus complexe, il y a l'excellent Namebench.

Version PDF de cette page (mais vous pouvez aussi imprimer depuis votre navigateur, il y a une feuille de style prévue pour cela)

Source XML de cette page (cette page est distribuée sous les termes de la licence GFDL)