<?xml version="1.0" encoding="utf-8"?>
<entry title="Tout le monde parle de Google DNS...">
<date>2009-12-04</date>
<update_date>2009-12-08</update_date>
<content>
<p>Alors, je vais en faire autant. Après Google Mail, Google Docs,
Google Talk,
Google Wave, <link
url="http://code.google.com/speed/public-dns/">Google DNS</link> est
la dernière vedette de la blogosphère, en attendant Google Power (pour
distribuer l'électricité) et Google Airlines (gratuit, évidemment,
pour battre les compagnies <foreign><wikipedia name="Compagnie aérienne à bas prix">low
cost</wikipedia></foreign>).</p>
<p><link url="http://code.google.com/speed/public-dns/">Google
DNS</link> est un <link local="resolveur-dns">résolveur</link> <wikipedia name="Domain Name
System">DNS</wikipedia> ouvert, accessible à tous gratuitement. On
peut l'utiliser à la place des résolveurs fournis par le service
informatique du réseau local, ou par le
<wikipedia name="Fournisseur d'accès à Internet">FAI</wikipedia>. Les instructions pour cela sont
disponibles chez Google (en gros, sur <wikipedia>Unix</wikipedia>, il
suffit d'éditer son <computer>/etc/resolv.conf</computer>).</p>
<p>L'adresse à
indiquer, <computer>8.8.8.8</computer>, sera certainement dans très
peu de temps une des plus connues de
l'<wikipedia>Internet</wikipedia>. C'était une idée marketing géniale
que d'utiliser une adresse simple à mémoriser (avec son alternative,
<computer>8.8.4.4</computer>, et ses équivalents <wikipedia>IPv6</wikipedia>, moins sexys, <computer>2001:4860:4860::8888</computer> et <computer>2001:4860:4860::8844</computer>) même s'il n'est pas sûr que faire de
l'<foreign><wikipedia>anycast</wikipedia></foreign> sur cette plage
normalement allouée à <wikipedia name="Level 3 Communications">Level 3</wikipedia> soit parfaitement
conforme aux règles de l'<wikipedia name="American Registry for Internet Numbers">ARIN</wikipedia>. Mais ne
chipotons pas.</p>
<p>Quel intérêt y a t-il à utiliser un <link local="resolveur-dns">résolveur</link> DNS distinct du
résolveur habituel qu'on trouve sur n'importe quel réseau ? La seule
raison valable, à mon avis, est le cas où ledit résolveur soit
inexistant ou très lent (cela arrive avec certains FAI).</p>
<p>Mais Google met en avant d'autres raisons. En résumant : vitesse,
sécurité et honnêteté. Commençons par la fin : contrairement à ses
trois concurrents plus anciens (dont le plus connu, en raison de leur
marketing agressif, est <link
local="opendns-non-merci">OpenDNS</link>), les résolveurs de Google ne
sont en effet pas des <link local="dns-menteur">menteurs</link>. Remarquons
qu'on est tombés très bas : ne pas mentir devient si rare que c'est
désormais cité comme argument commercial.
<code>
<![CDATA[
% dig @8.8.8.8 MX doesnotexist.fr
...
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 3712
]]>
</code>
On obtient bien le <computer>NXDOMAIN</computer> (<foreign>No Such
Domain</foreign>), le DNS fonctionne normalement.</p>
<p>Et la vitesse ? A priori, l'essentiel du temps de réponse étant dû
à la <wikipedia name="Lag (informatique)">latence</wikipedia> jusqu'au résolveur, Google DNS a
peu de chances d'être plus rapide. À l'heure actuelle, Google DNS n'a
apparemment pas d'instance en France et le serveur semble à
<wikipedia name="Francfort-sur-le-Main">Francfort</wikipedia>. Mais mesurons, ne devinons pas. En
utilisant <link local="le-plus-rapide-dns">qtest</link>, voyons, pour
une machine française, trois résolveurs de son réseau local, les deux
résolveurs d'OpenDNS et les deux de Google DNS :
<code>
% qtest -n3 "A a.gtld-servers.net"  127.0.0.1 192.134.7.248 192.134.4.162 208.67.222.222 208.67.220.220 8.8.8.8 8.8.4.4
0 127.0.0.1/127.0.0.1
0 192.134.4.162/192.134.4.162
0 192.134.7.248/192.134.7.248
</code>
Les résolveurs locaux gagnent nettement, comme prévu. Et si on compare
les trois services de résolveur extérieurs :
<code>
% qtest -n3 "A a.gtld-servers.net"  208.67.222.222 208.67.220.220 8.8.8.8 8.8.4.4 156.154.70.1 156.154.71.1
11 8.8.4.4/8.8.4.4
11 8.8.8.8/8.8.8.8
17 208.67.220.220/208.67.220.220
</code>
Google l'emporte sur OpenDNS, non seulement en honnêteté mais aussi en
vitesse. Il n'y a donc vraiment aucune raison pratique d'utiliser
OpenDNS. (Il y a d'autres mesures sérieuses, avec le même résultat,
par exemple <foreign><link
url="http://www.manu-j.com/blog/opendns-alternative-google-dns-rocks/403/">
Google DNS vs OpenDNS: Google Rocks for International
Users</link></foreign> ou <foreign><link
url="http://bark.no8.be/smokeping/smokeping.cgi?target=World.Resolver-DNS">Divers
Resolver DNS Services</link></foreign><!-- Cela dépend évidemment de
l'endroit : <foreign><link
url="http://ajclark.wordpress.com/2009/12/04/google-dns-vs-opendns-performance-comparison/">Google
DNS vs OpenDNS - performance comparison</link></foreign> -->. Un autre
outil de mesure, certes écrit par Google mais dont le source est
disponible, si vous n'avez pas confiance, est l'excellent <link
url="http://code.google.com/p/namebench/">Namebench</link>. Voyez
aussi <foreign><link url="http://www.grc.com/dns/benchmark.htm">Domain
Name Speed Benchmark</link></foreign> (ce dernier étant spécifique à
<wikipedia name="Microsoft Windows">Windows</wikipedia>).</p>
<p>Et la sécurité ? Google <link url="http://code.google.com/speed/public-dns/docs/security.html">promet</link> que ses résolveurs mettent en
&#x153;uvre toutes les bonnes pratiques actuelles, ce qui est la
moindre des choses. La seule stratégie qui aurait été différenciatrice
aurait été de faire la validation <wikipedia name="Domain Name System Security Extensions">DNSSEC</wikipedia> mais
Google DNS ne le fait pas. Par rapport aux résolveurs locaux utilisant
les <wikipedia name="Logiciel libre">logiciels libres</wikipedia> actuels, à jour, comme <wikipedia name="Unbound (DNS Server)" xml:lang="en">Unbound</wikipedia> ou
<wikipedia>BIND</wikipedia>, Google DNS n'a qu'un avantage,
l'utilisation de la variation de la <wikipedia name="Casse (typographie)">casse</wikipedia>, un
<foreign>hack</foreign> amusant mais marginal.
</p>
<p>Parlant de sécurité, notons un petit problème : il n'y a aucune
authentification entre le client sur son poste de travail et Google
DNS. Rien ne garantit qu'on parle bien aux machines de
Google. D'habitude, cette sécurisation du dernier kilomètre n'était
pas un problème car le résolveur DNS était proche : sur le même réseau
local ou en tout cas sur le même FAI. Avec Google DNS, cela cesse
d'être vrai et on pourrait imaginer de nombreux détournements
possibles, par attaque sur le système de routage. Ces attaques
pourraient être faites par un intermédiaire, ou bien par un FAI
malhonnête, peu soucieux de voir ses clients partir chez Google. Pour
s'en protéger, il existe plusieurs solutions techniques mais aucune ne
semble réaliste. Les
seules solutions DNS (j'exclus <wikipedia name="Internet Protocol Security">IPsec</wikipedia> et compagnie) possibles sont
<wikipedia xml:lang="en">TSIG</wikipedia> (<rfc num="8945" local="true"/>), qui repose sur
un secret partagé, et est donc inutilisable pour un service public comme
Google DNS, et SIG(0) (<rfc num="2931"/>), que personne n'a jamais déployé). Dans
les deux cas, je ne crois pas qu'aucun <foreign>stub resolver</foreign> existant (par
exemple la <wikipedia>GNU libc</wikipedia>) ne le gère, ce qui les
rend complètement irréalistes et explique pourquoi Google n'offre pas
ce service de sécurité.</p>
<p>Bref, il n'y a de raisons d'utiliser un service de résolveurs
externe que si le « sien » est dramatiquement défaillant. Mais, dans
ce cas, quelles sont les conséquences ? D'abord, il y a un problème
spécifique à Google : l'existence d'une offre très vaste couvrant à
peu près tout les services Internet. Si malhonnête que soit OpenDNS,
quoi qu'ils fassent des données recueillies sur les utilisateurs, le
fait qu'ils ne gèrent qu'un unique service limite les corréalations
qu'ils peuvent établir et donc le mal qu'ils peuvent faire.</p>
<p>Au contraire, Google, ayant une offre complète, peut établir des
relations, mettre en connexion des données, et représente donc un
danger potentiel plus important. Externaliser son courrier à
<wikipedia>Gmail</wikipedia> (ou son DNS à Google DNS), est une chose. Externaliser tous ses
services en est une autre. Cela revient à avoir la même entreprise qui
serait à la fois votre banque, votre médecin, votre épicier et votre garagiste...</p>
<p>Comment Google peut-il exploiter Google DNS, service gratuit ? Ici,
je spécule, je n'ai pas d'informations précises. Google peut gagner de
l'argent :
<enum>
<item>en 
exploitant l'information recueillie pour améliorer le moteur de
recherche,</item>
<item>en vendant cette information (les noms les plus populaires,
par exemple, une information qui intéressera les
<foreign><wikipedia name="Domaineur" xml:lang="fr">domainers</wikipedia></foreign>, surtout si la
réponse est <computer>NXDOMAIN</computer>, indiquant que le domaine
est libre),</item>
<item>en hébergeant, dans le futur (ce service n'existe pas
aujourd'hui), moyennant finances,
des serveurs faisant autorité, qui profiteront de la proximité du
résolveur pour de meilleures performances. Google, futur hébergeur de
<wikipedia name="Domaine de premier niveau">TLD</wikipedia> ?</item>
<item>Reconstituer la totalité d'un TLD, même lorsque celui-ci ne
publie pas cette information, en comptant les noms dans les requêtes
et les réponses obtenues.</item> 
<item>Ou, tout simplement, s'assurer que l'Internet fonctionne bien,
pour que les clients puissent aller voir les autres services de Google
(chez certains FAI, les résolveurs DNS marchent mal, ce qui gêne sans
doute Google dans son c&#x153;ur de métier).</item>
<!-- Autres raisons possibles : « avoir l'IP finale du client pour
     faire le load-balancing, et pas celle du resolver/ISP » Stephane
     Enten http://twitter.com/stephane_enten/status/6352599406 -->
</enum>
</p>
</content>
</entry>

