Privates Netzwerk-Handshaking mit externen Pools

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.peersich 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 --bootnodeFlag bereitgestellt habe, damit meine Knoten keine anderen Knoten außerhalb meines Netzwerks für den Handshake finden können?

Haben alle Ihre privaten Knoten die gleiche Netzwerk-ID und Genesis-Datei?
Ja, sie haben alle die gleiche Genese und verbinden sich alle mit dem gleichen Bootnode. Sie alle verbinden sich gut miteinander. Ich sehe jedoch manchmal, dass die Anzahl der Peers um 1 oder 2 mehr ansteigt als das Maximum, das ein Knoten haben sollte. Wenn ich 'admin.peers' inspiziere, sehe ich, dass ein Handshake mit einem Knoten stattfindet, der nicht in meinem Netzwerk ist.
Ich frage mich, ob das wirklich etwas Schlimmes ist ... Das 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 } }

Antworten (3)

Ich habe ein ähnliches Problem. Ich überschreibe den Bootnode nicht und verwende daher das --nodiscoverFlag 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 protocolsKnoten aus admin.nodeInfoder 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.peersbekomme 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.

Ich habe die gleiche Genesis-Datei auf allen meinen Knoten. Meine Knoten sind alle so konfiguriert, dass sie meinen Bootknoten mit dem --bootnodesBefehl verwenden. Ich verwende das no-discoverFlag nicht als meine Knoten, um die anderen Knoten im Netzwerk vom Bootnode aus zu erkennen? Meine sind auch alle Handshakes, die abgelehnt werden.
Da Sie einen Bootnode verwenden, können Sie ihn zusammen mit dem Bootnode verwenden, --nodiscoverund 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 --bootnodeoder mit einer static-nodes.jsonDatei 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
Ich habe es --nodiscoverzuvor versucht, aber dadurch werden meine Knoten und mein Bootknoten nicht miteinander verbunden, obwohl ich explizit einen Bootknoten für die Verbindung definiere.
ja, eigentlich ist die --nodiscoverFlagge 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.
Ich habe sowohl eine kleine (5 Ziffern) als auch eine große Netzwerk-ID (10 Ziffern) ausprobiert. Das Problem besteht leider immer noch.
Es stimmt, ich habe immer noch das gleiche Problem. Ich hatte Probleme mit der Knotenerkennung (Bootnode) und ich habe es nur mit einem regulären Knoten als Bootnode zum Laufen gebracht. Wie Sie jedoch erwähnt haben, sehe ich immer noch zufällige Handshakes und weiß nicht warum.

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.

Ja, das war meine Erfahrung mit --nodiscover
Bitte versuchen Sie eine andere Netzwerk-ID (z. B. einen 5-stelligen Wert) und sehen Sie dann, ob es erneut auftritt.
Ich habe eine 5-stellige Netzwerk-ID sowie eine längere ausprobiert. Das Problem besteht weiterhin.

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.