Wie verbinde ich zwei Peers auf verschiedenen Rechnern in einem privaten Netzwerk?

Nur um dies vorwegzunehmen, ich bin ein wenig neu in Netzwerken und Ethereum im Allgemeinen, aber nachdem ich einige Tutorials durchgesehen hatte, entschied ich, dass ich ein privates Netzwerk/Blockchain für meinen eigenen Gebrauch und Smart Contracts erstellen möchte. Aber während ich 2 Peer-Knoten auf derselben Maschine verbinden kann, habe ich Schwierigkeiten, 2 Peer-Knoten auf verschiedenen Maschinen zu verbinden.

METHODE 1: Das Folgende ist eine Möglichkeit, die ich ausprobiert habe (die für 2 Peers auf demselben Computer funktioniert; in einem Tutorial, das ich gesehen habe, fehlten die letzten 3 Flags, aber ich habe mich entschieden, sie trotzdem einzuschließen)

geth --datadir /path/to/genesis --networkid 111 --maxpeers 2 --rpc --rpccorsdomain "*" --nodiscover --ipcdisable --rpcport 30001 --port 8081 console //machine 1

geth --datadir /different/path/to/genesis --networkid 111 --maxpeers 2 --rpc --rpccorsdomain "*" --nodiscover --ipcdisable --rpcport 30002 --port 8082 console //machine 2

Und dann rufen Sie auf Maschine 1 admin.nodeInfo.enode ab (was "enode://d677...b4c5@[::]:8081?discport=0" ist) und geben Sie auf Maschine 2 admin.addPeer("enode: //d677...b4c5@my.ip.address?discport=0).

Dies gibt true zurück, aber admin.peers bleibt leer.

METHODE 2: Eine andere Möglichkeit besteht darin, dasselbe für Maschine 1 zu tun, aber stattdessen auf Maschine 2 Folgendes einzugeben:

geth --datadir /different/path/to/genesis --networkid 111 --maxpeers 2 --rpc --rpccorsdomain "*" --nodiscover --ipcdisable --rpcport 30002 --port 8082 --bootnodes enode:// d677...b4c5@my.ip.address?discport=0 Konsole

Führen Sie dann denselben admin.addPeer-Prozess durch. Es treten jedoch die gleichen Ergebnisse auf.

Ich bin wirklich hin- und hergerissen, was hier das Problem ist. Die Genesis-Blöcke sind gleich (Hashes sind gleich), und ich habe nach der Initialisierung auf beiden Maschinen verschiedene Arten von Flags ausprobiert. Ich vermute, meine Vermutung ist, dass meine Uhren auf beiden Computern nicht synchronisiert sind (obwohl ich mir nicht sicher bin, wie das geht, außer sudo timedatectl set-ntp on), oder dass ich nicht die richtige IP-Adresse eingebe (obwohl ich ' Ich habe fast alle ausprobiert), also wäre vielleicht eine Anleitung in diesen Bereichen nett.

Ich habe auch versucht, --verbosity 6 zu haben, und der zurückgegebene Fehler lautet "Discovery is disabled" und "dial tcp my.ip.address:8081: getsockopt: connection abgelehnt". Was seltsam ist, da ich kein Problem hatte, dies mit denselben Maschinen zu tun, aber als ich dasselbe ohne --nodiscover tat, funktionierte es immer noch nicht: Fehler waren 'dial tcp my.ip.addresss:8081: i/o timeout ' und 'keine Discv4-Seed-Knoten gefunden' und 'Knotenauflösung fehlgeschlagen'.

Es tut mir wirklich leid, wenn das wirklich langatmig ist, aber ich bin mir nur nicht sicher, was das eigentliche Problem ist, und ich habe viele dieser Änderungen, bei denen ich mir sicher bin, nur wiederholt. Um die Sache noch schlimmer zu machen, denke ich, dass Ethereum und Geth ständig aktualisiert werden, daher bin ich mir nicht sicher, ob die Informationen, die ich auf dieser Seite und anderswo sehe, relevant oder genau sind. Ich würde wirklich, wirklich etwas Hilfe hier schätzen, weil ich wirklich verzweifelt nach etwas Hilfe und Klärung bin.

Befinden sich die Maschinen im selben LAN? Kannst du zwischen ihnen pingen? Haben Sie überprüft, ob eine Firewall eingehende Verbindungen in den verwendeten Ports blockiert?
Hallo Ismael, beide Maschinen befinden sich im selben LAN (Systemeinstellungen -> Netzwerk -> Wired geben dasselbe zurück; whatismyipaddress.com sind fast gleich, unterscheiden sich nur um 1) und meines Wissens gibt es keine Firewalls (sudo ufw status return inaktiv für beide). Ich bin mir jedoch nicht sicher, was Sie meinen, wenn Sie zwischen ihnen pingen. Entschuldigung, ich bin ziemlich ahnungslos in Bezug auf Netzwerke.

Antworten (2)

1) Bestätigen Sie einfach, ob beide Genese gleich sind ... (Verwendung eth.getBlock(0)auf beiden Knoten)

2) Versuchen Sie, admin.addPeer("enode....@IP of the other node:Port") in Ihrer Konsole zu verwenden.

Sie können den Port mit überprüfenadmin.nodeInfo

admin.addPeer("enode://93a29e6d51e58c8a313a295fc3b246b59cd2c8c4f9aa833ac351584882f7c23ac24f38ebc76213a23f8c84aeb8a2e7d46a504a3110775ad12f36b1fe1938cbad@YOUR_IP_2:30303")

3) Überprüfen Sie die Peers mitnet.peerCount

Um Peers auf zwei verschiedenen Computern zu verbinden, hat der folgende Ansatz für mich funktioniert:

1) Stellen Sie, wie in vielen Antworten erwähnt, sicher, dass die Genesis-Datei auf beiden Knoten genau gleich ist. Sie sollten die gleichen Schwierigkeits-, Genesis-, Kopf- und Netzwerkwerte erhalten, wenn admin.nodeInfo.protocols.ethes auf den jeweiligen Knoten ausgeführt wird

2) Gehen Sie zu den Firewall-Einstellungen (auf einem Win-Rechner: Systemsteuerung>System und Sicherheit>Windows-Firewall>Erweiterte Einstellungen) und deaktivieren Sie alle Regeln im Zusammenhang mit geth in der Option Eingehende Regeln

3) Verwenden Sie beim Starten der Geth-Instanz nur Port 30303 auf beiden Maschinen. Hat bei mir nicht funktioniert, als ich es mit anderen Portnummern versucht habe. Könnte daran liegen, dass ich beim Betrachten der ausgehenden Regeln in den Firewall-Einstellungen 30303 als zulässigen Port für TCP/UDP gegen geth aufgeführt gefunden habe. Sie können dies auch auf Ihren Computern überprüfen und die Portnummer entsprechend ändern

4) admin.addPeer({enode})Zum Hinzufügen von Peers verwenden. Details zu {enode} können der anderen Antwort entnommen werden.