Glossar / Nodes und Software
DNS-Seed
- Was ist ein DNS-Seed?
- Ein DNS-Seed ist ein Domainname, der mit den IP-Adressen erreichbarer Bitcoin-Nodes antwortet und einem frisch installierten Node damit einen Ort für seine erste Verbindung gibt.
Bitcoin hat keinen Verzeichnisserver, also muss neue Software das Netzwerk durch Fragen finden. Bitcoin Core bringt eine kurze, fest im Code hinterlegte Liste von Seed-Hostnamen mit, löst sie einmal auf, öffnet acht ausgehende Verbindungen auf Port 8333 und hat danach keine weitere Verwendung mehr für sie. Alles nach diesem ersten Handshake wird von den Peers selbst gelernt.
So funktioniert es
Hinter jedem Seed-Hostnamen steht ein Crawler und keine statische Datei.
Der Betreiber lässt Software laufen, die das Peer-to-Peer-Netzwerk durchläuft, versucht, sich mit jeder Adresse zu verbinden, von der sie erfährt, und festhält, welche kürzlich geantwortet haben. Der Hostname wird dann zu A- und AAAA-Einträgen aufgelöst, die aus diesem Pool stammen, ein paar Dutzend Adressen pro Abfrage, mit einer kurzen Gültigkeitsdauer, damit die Antworten weiter rotieren. Manche Seeds unterstützen auch die Filterung nach Service-Bits, sodass ein Node, der Peers mit kompakten Blockfiltern braucht, eine Subdomain anfragen kann, die nur solche zurückgibt.
Die Hostnamen stehen im Quellcode von Bitcoin Core, in kernel/chainparams.cpp, mit einer eigenen Liste für jedes Netzwerk. Die Mainnet-Liste wird von namentlich genannten Personen gepflegt: seed.bitcoin.sipa.be wird von Pieter Wuille betrieben, dnsseed.bluematt.me von Matt Corallo, seed.btc.petertodd.net von Peter Todd. Die Liste kurz und zuordenbar zu halten, ist Absicht, denn ein Seed-Betreiber entscheidet, wen Sie treffen.
Beim ersten Start löst der Node diese Namen auf, füllt seinen Adressverwalter und öffnet acht ausgehende Verbindungen mit voller Weiterleitung sowie zwei Verbindungen nur zur Blockweiterleitung, die keine Transaktionen weitergeben und für einen Beobachter schwerer zu erkennen sind. Danach sammelt er Adressen über getaddr- und addr-Nachrichten und speichert sie in peers.dat zwischen, sodass spätere Neustarts die Abfrage ganz überspringen. Ist jeder Seed unerreichbar, greift Core auf eine Liste fester Node-Adressen zurück, die in die Binärdatei kompiliert ist, und Sie können den ganzen Mechanismus mit dnsseed=0 plus einem seednode- oder addnode-Eintrag umgehen, der auf einen Peer zeigt, dem Sie bereits vertrauen.
Wo Sie es sehen
Die einzige Gelegenheit, bei der die meisten Menschen einen DNS-Seed bemerken, sind die ersten Zeilen im Debug-Log eines Nodes.
Starten Sie bitcoind auf einem Rechner ohne peers.dat, und das Log hält fest, dass Adressen aus DNS-Seeds geladen werden; danach steigt die Zahl der Verbindungen von null. Dieselbe Abfrage können Sie selbst in einem Terminal mit dig durchführen, was denselben rotierenden Satz von IP-Adressen zurückgibt, den Ihr Node erhalten würde.
Es gibt einen Datenschutzpreis, den man kennen sollte. Die Abfrage ist eine gewöhnliche unverschlüsselte DNS-Abfrage, sodass Ihr Resolver und Ihr Internetanbieter sehen können, dass auf Ihrer Verbindung ein Bitcoin-Node startet, auch wenn die Abfrage nichts über Ihre Wallet oder Ihr Guthaben verrät. Wenn Sie das stört, betreiben Sie den Node über Tor oder setzen Sie dnsseed=0 und geben Sie selbst den ersten Peer an.
Die Vertrauensfrage ist enger, als sie aussieht. Ein feindseliger Seed kann keinen Block und keine Transaktion fälschen, weil Ihr Node alles, was er empfängt, gegen seine eigene Kopie der Regeln prüft. Was er tun könnte, ist, nur Adressen zurückzugeben, die er steuert, und Sie so vom ehrlichen Netzwerk zu isolieren; deshalb fragt Core mehrere Seeds ab, verteilt seine Verbindungen über verschiedene Netzwerkbereiche und behält diese Verbindungen nur zur Blockweiterleitung als stille zweite Meinung.
DNS-Seed vs. Seed-Phrase
Ein DNS-Seed ist ein öffentlicher Hostname zum Finden von Peers; eine Seed-Phrase sind die 12 oder 24 geheimen Wörter, die Ihre Bitcoin steuern. Sie teilen ein Wort und sonst nichts. Nichts an einem DNS-Seed ist vertraulich, nichts daran berührt Ihre Wallet, und kein legitimer Einrichtungsschritt wird Sie jemals auffordern, Ihre Wiederherstellungswörter in einen Bildschirm für die Netzwerkkonfiguration einzugeben.