Ich versuche, ein privates Netzwerk zu betreiben, und ich tue dies, indem ich einen Bootnode für alle meine Knoten bereitstelle. Hin und wieder merke ich auf meinen Nodes, dass ich Peers von außerhalb des Netzwerks erhalte. Bei näherer Betrachtung stelle admin.peers
ich fest, dass es sich um Handshakes mit öffentlichen Schwimmbädern handelt. Ich verstehe nicht, wie dies geschieht, da ich die Standard-Bootstrap-Knoten überschrieben habe, indem ich das --bootnode
Flag bereitgestellt habe, damit meine Knoten keine anderen Knoten außerhalb meines Netzwerks für den Handshake finden können?
Ich habe ein ähnliches Problem. Ich überschreibe den Bootnode nicht und verwende daher das --nodiscover
Flag nicht. Ich habe jedoch 2 Knoten, die dieselbe Genesis-Datei und Netzwerk-ID teilen und auf 2 verschiedenen virtuellen Maschinen ausgeführt werden, aber sie erkennen sich nicht als Peers. Der protocols
Knoten aus admin.nodeInfo
der Geth-Konsole ist auf beiden Knoten gleich:
protocols: {
eth: {
difficulty: X,
genesis: "0xX",
head: "0xX",
network: X
}
}
Obwohl sie sich gegenseitig nicht bestätigen, admin.peers
bekomme ich normalerweise je nachdem, wann ich laufe
> admin.peers
[]
aber manchmal erscheint ein neuer zufälliger Knoten:
[{
caps: ["eth/62", "eth/63", "par/1", "par/2"],
id: "X",
name: "Parity/v1.5.11-stable-f067f12-20170314/x86_64-linux-gnu/rustc1.15.1",
network: {
localAddress: "172.17.0.2:55516",
remoteAddress: "X"
},
protocols: {
eth: "handshake"
}
}]
Ich habe Knoten über zufällig ausgewählte Netzwerk-IDs laufen lassen, um einen zu finden, bei dem es keine unbekannten Peers gibt, aber egal wie groß die Zahl ist, es scheint immer einen zufälligen Knoten zu geben, der irgendwann erscheint und nicht immer mit der gleichen Konfiguration.
--bootnodes
Befehl verwenden. Ich verwende das no-discover
Flag nicht als meine Knoten, um die anderen Knoten im Netzwerk vom Bootnode aus zu erkennen? Meine sind auch alle Handshakes, die abgelehnt werden.--nodiscover
und die Erkennung sollte von Ihrem Bootnode vorgenommen werden. Das Hinzufügen des Flags soll Ihre Blockchain isolieren und privat machen. Stellen Sie sicher, dass Sie das Flag hinzufügen, wenn Sie einen Knoten starten, und dass jeder Knoten den Bootknoten entweder mit --bootnode
oder mit einer static-nodes.json
Datei auf den Knoten referenziert. Probieren Sie diese Konfiguration aus und prüfen Sie, ob Ihre Knoten erkannt werden. Lass mich wissen, ob es funktioniert hat--nodiscover
zuvor versucht, aber dadurch werden meine Knoten und mein Bootknoten nicht miteinander verbunden, obwohl ich explizit einen Bootknoten für die Verbindung definiere.--nodiscover
Flagge dafür nicht sehr nützlich. Versuchen Sie stattdessen, eine kleinere Netzwerk-ID zu verwenden, und sehen Sie sich diesen Beitrag an , um zu sehen, ob es hilft.Die Verwendung der Option --nodiscover beim Starten der Geth-Konsole verhindert Handshakes mit externen Knoten. Ich habe das ausprobiert und es funktioniert. Leider kann ich immer noch keinen Handshake zwischen den beiden Knoten meiner privaten Blockchain auf AWS herstellen.
Wenn Sie sich kürzlich mit dem Mainnet oder den Testnets verbunden haben, haben Bootnodes und Peers aus diesen Netzwerken Ihre IP-Adresse möglicherweise noch in ihren Datenbanken. Sie werden versuchen, automatisch eine Verbindung herzustellen. Eine Firewall sollte das verhindern. Das Ändern des Überwachungsports Ihres privaten Netzwerks kann hilfreich sein. Wenn einer Ihrer privaten Geth-Knoten gestartet wird, ohne dass ein privater Bootnode und eine Bootnode-Option und eine Nodiscover-Option ausgeführt werden, stellt der Knoten automatisch eine Verbindung zu den öffentlichen hartcodierten Bootnodes her und beginnt, Peers aus dem Mainnet und den Testnets auszuprobieren. Es speichert diese IP-Adressen in Ihrem Datenverzeichnis, teilt sie mit anderen privaten Knoten in Ihrem Netzwerk und versucht ständig, sich mit ihnen zu verbinden, selbst nach einem Neustart und anschließender Verwendung eines privaten Bootknotens. Sie müssen den Datadir-Knotenordner auf jedem Knoten löschen, um das Problem zu beheben. Die Nodiscover-Option ist jedoch am wichtigsten, oder Sie können Peers manuell hinzufügen, anstatt einen privaten Bootknoten zu verwenden. Ich habe auch die Datei params bootnode.go bearbeitet, bevor ich die Geth-Binärdatei kompiliert habe. Ändern Sie alle Bootnodes in dieser Datei in die Enode-Adresse Ihres privaten Bootnodes. Das hat das Problem für mich gelöst.
Richard Horrocks
John
Betty Sánchez
protocols: {eth: "handshake"}
Protokoll ist "Handshake" und sie dauern normalerweise nicht lange. Während tatsächliche Peers mehr Details enthaltenprotocols: { eth: { difficulty: X, genesis: "0xX", head: "0xX", network: X } }