Hinzufügen von Knoten in einem privaten Netzwerk von Docker-Containern, die in verschiedenen VMs gehostet werden

Ich versuche, ein nicht lokales privates Netzwerk mit Go-Ethereum zu erstellen, das auf Docker-Containern ausgeführt wird, die auf verschiedenen virtuellen Maschinen gehostet werden. Es fällt mir schwer, die Knoten dazu zu bringen, sich gegenseitig zu erkennen. Ich frage mich, was die beste Strategie ist, um Peers hinzuzufügen, jetzt wo bootnode nicht richtig funktioniert ( Open Issue #3703 ). Ich habe viele Aspekte des Vertigobr-Projekts verfolgt .

Da ich weiß, dass --nodiscoverdies aktiviert sein sollte, um eine Verbindung mit Knoten außerhalb des privaten Netzwerks zu vermeiden, sind dies meine Fragen:

  1. Ist --nat extip:<VM_EXT_IP>die bequemste natKonfiguration?
  2. Besitzt nur ein Knoten (ein Hauptknoten) die static-nodes.jsonDatei und verbindet er sich automatisch mit den Knoten in der Datei?
  3. Laut "Connecting to the network" in der Ethereum-Dokumentation admin.addPeer("enodeURL")werden Knoten nur vorübergehend hinzugefügt. Bedeutet das, dass ich meine Liste von Knoten in einer Datenbank verfolgen muss, zum Beispiel die neu generieren muss, static-nodes.jsonwenn ein neuer Knoten erstellt wird, und meinen "Haupt"-Knoten neu starten muss, um diese Datei neu zu laden? Gibt es einen einfacheren Weg?

Antworten (1)

Bereiten Sie Ihre nodekeyfür jeden Knoten im Voraus vor. Es ist nur eine 512-Bit-Zufallszahl. Speichern Sie sie dann irgendwo ab, zusammen mit den daraus abgeleiteten öffentlichen ECDSA-Schlüsseln.

Die öffentlichen Schlüssel sind die Komponenten, die enodeSie zum Herstellen von Verbindungen mit der --bootnodeBefehlsoption sowie der admin.addPeer()Funktion in der Konsole benötigen.

Das Erstellen des enodeist so einfach wie zum Beispiel das Erhalten von öffentlichen Schlüsseln, IPs und Ports

enode://844c9c9e926a96e67fae7124bf6fcb6ecf37d121e2d3031db4b7d7bdd1388d9fc33c96c70535c65fcf34d8a4258fd40a9a7e2c24ac92bb152bd0261464b845d1@192.168.1.1:9915

Hier ist ein ( nicht sicherer , da nicht verwendeter /dev/random) Einzeiler, um Ihren zu erhaltennodekey

perl -e '@c=("a".."f",0..9);$p.=$c[rand(scalar @c)] for 1..64; print "$p\n"'

Und hier ist ein schnelles Dienstprogramm zur goVerwendung der gethBibliothek, um Ihren öffentlichen Schlüssel zu erhalten

https://gist.github.com/hermanjunge/8d0998f1fb2fd87870b57c63fe1f46c8

Hallo Hermann, danke für deine schnelle Antwort! Ich denke, die Schlüsseldatei ist nur für die Knoten gedacht, die als Bootnodes gedacht sind, und ich könnte nur einige haben, auf die von allen anderen Knoten in der Blockchain verwiesen wird. Nun, ich konnte Ihren Code ausführen und bekomme zwei Schlüssel: 246592eacb950b1a61805dddbd1faa92161befa98d04de52b45f78a8b4f6c0dbund 311feee911639c757c305e07675793eb2d5cb3c6011764ad50d1e9c9b5a07ff9e6f4a594f3938552314434be45560a8a3e36850224c288fd8c8a6201103df05cder lange ist der öffentliche Schlüssel der Enode, richtig? ist der kurze der nodekey (ECDSA-Schlüssel)?
Ja @betty, also indem du deinen Node mit dem Flag startest, stellst --nodekeyhex 246592eacb950b1a61805dddbd1faa92161befa98d04de52b45f78a8b4f6‌ du sicher, dass du immer den gleichen enodeWert hast.
Danke :) Ich habe es auch geschafft, den Bootnode-Code mit auszuführen go get github.com/ethereum/go-ethereum/cmd/bootnodeund dann auszuführen, go run main.go --genkey "/some/dir/bootnode.key"wo main.gosich die Haupt-Go-Datei des heruntergeladenen Bootnode-Ordners befindet.