Glossaire / Nœuds et logiciels
DNS seed
- Qu'est-ce qu'un DNS seed ?
- Un DNS seed est un nom de domaine qui répond avec les adresses IP de nœuds Bitcoin joignables, donnant à un nœud fraîchement installé de quoi établir sa première connexion.
Bitcoin n'a pas de serveur d'annuaire, le nouveau logiciel doit donc trouver le réseau en posant la question. Bitcoin Core embarque une courte liste figée de noms d'hôtes de seed, les résout une fois, ouvre huit connexions sortantes sur le port 8333, puis n'en a plus aucun usage. Tout ce qui suit cette première poignée de main est appris auprès des pairs eux-mêmes.
Comment cela fonctionne
Derrière chaque nom d'hôte de seed se trouve un crawler plutôt qu'un fichier statique.
L'opérateur fait tourner un logiciel qui parcourt le réseau pair-à-pair, tente de se connecter à chaque adresse dont il entend parler et note celles qui ont répondu récemment. Le nom d'hôte résout alors vers des enregistrements A et AAAA tirés de ce vivier, quelques dizaines d'adresses par requête, avec une durée de vie courte pour que les réponses continuent de tourner. Certains seeds prennent aussi en charge le filtrage par bits de service, si bien qu'un nœud qui a besoin de pairs proposant les filtres de blocs compacts peut demander un sous-domaine qui ne renvoie que ceux-là.
Les noms d'hôtes figurent dans le code source de Bitcoin Core, dans kernel/chainparams.cpp, avec une liste distincte pour chaque réseau. La liste du mainnet est maintenue par des personnes nommées : seed.bitcoin.sipa.be est exploité par Pieter Wuille, dnsseed.bluematt.me par Matt Corallo, seed.btc.petertodd.net par Peter Todd. Garder la liste courte et attribuable est délibéré, car un opérateur de seed choisit qui vous rencontrez.
Au premier lancement, le nœud résout ces noms, remplit son gestionnaire d'adresses et ouvre huit connexions sortantes en relais complet plus deux connexions de relais de blocs uniquement, qui ne transportent aucune rumeur de transaction et sont plus difficiles à repérer pour un observateur. Ensuite, il collecte des adresses par les messages getaddr et addr et les met en cache dans peers.dat, de sorte que les redémarrages ultérieurs sautent entièrement la résolution. Si tous les seeds sont injoignables, Core se rabat sur une liste d'adresses de nœuds fixes compilées dans le binaire, et vous pouvez contourner tout le mécanisme avec dnsseed=0 plus une entrée seednode ou addnode pointant vers un pair auquel vous faites déjà confiance.
Où cela se voit
La seule fois où la plupart des gens remarquent un DNS seed, c'est dans les premières lignes du journal de débogage d'un nœud.
Lancez bitcoind sur une machine sans peers.dat et le journal indique qu'il charge les adresses depuis les DNS seeds, puis le nombre de connexions monte à partir de zéro. Vous pouvez faire la même résolution vous-même depuis un terminal avec dig, qui renvoie le même ensemble tournant d'adresses IP que votre nœud obtiendrait.
Il existe un coût pour la vie privée qu'il vaut la peine de connaître. La résolution est une requête DNS ordinaire non chiffrée, donc votre résolveur et votre fournisseur d'accès peuvent voir qu'un nœud bitcoin démarre sur votre connexion, même si la requête ne révèle rien sur votre portefeuille ni sur votre solde. Si cela vous gêne, faites tourner le nœud via Tor ou définissez dnsseed=0 et fournissez vous-même votre premier pair.
La question de la confiance est plus étroite qu'elle n'en a l'air. Un seed hostile ne peut pas fabriquer un bloc ni une transaction, car votre nœud valide tout ce qu'il reçoit selon sa propre copie des règles. Ce qu'il pourrait faire, c'est ne renvoyer que des adresses qu'il contrôle, vous isolant du réseau honnête, et c'est pourquoi Core interroge plusieurs seeds, répartit ses connexions sur différentes plages d'adresses réseau et conserve ces liens de relais de blocs uniquement comme un second avis discret.
DNS seed vs phrase de récupération
Un DNS seed est un nom d'hôte public pour trouver des pairs ; une phrase de récupération est la suite secrète de 12 ou 24 mots qui contrôle vos bitcoins. Ils partagent un mot et rien d'autre. Rien dans un DNS seed n'est confidentiel, rien n'y touche votre portefeuille, et aucune étape légitime de configuration ne vous demandera jamais de saisir vos mots de récupération dans un écran de configuration réseau.