Knotenerkennung: nicht erreichbarer Bootknoten im privaten verteilten Netzwerk

Ich versuche, ein privates verteiltes Netzwerk mit Docker-Containern auf virtuellen Maschinen zu erstellen, auf denen Ubuntu ausgeführt wird.

Wenn ich laufe:

bootnode --genkey $KEY_FILE --writeaddress
bootnode --nodekey $KEY_FILE --addr :30301 --nat extip:$MY_IP

entweder auf dem Docker-Container ( mit Ports 8454, 30303und ) oder außerhalb davon, wenn ich es ausführe , bekomme ich eine Antwort. Wenn ich den Bootnode NICHT auf einem Docker-Container erstelle antwortet er mit30301:3030130301:30301/udptelnet <VM-BOOTNODE-IP> 30301telnet: Unable to connect to remote host: Connection refusedsudo netstat -tulpn | grep 30301

udp6       0      0 :::30301          :::*                      */bootnode   

Wenn ich jedoch im Container ein Mapping erstelle sudo netstat -tulpn | grep 30301antwortet der Port mit

tcp6       0      0 :::30301          :::*          LISTEN      */docker-proxy 
udp6       0      0 :::30301          :::*                      */docker-proxy

In beiden Fällen erhalte ich mit Telnet den gleichen Fehler "Verbindung zum Remote-Host kann nicht hergestellt werden". Ich glaube, weil die Adresse des Bootknotens nicht erreichbar ist, können die anderen Knoten nicht entdeckt werden.

Nur um das klarzustellen: Ich verwende dieselbe Genesis-Datei mit einer bestimmten networkIdund GEN_NONCEauf allen VMs. Meine Knoten verwenden --nodiscover(Discovery Port = 0) und sie hören auf 30303. Die Verwendung von Verbose Level 9 auf dem Bootnode-Container zeigt kein Ping/Pong, wie hier vorgeschlagen .

Antworten (1)

Nun, anscheinend ist der Grund, warum die Verbindung abgelehnt wird, dass " 'Verbindung abgelehnt' für den Go-Bootknoten ok ist. [da i]t akzeptiert keine TCP-Verbindungen ", wie von fjl in der go-ethereum-Ausgabe 380 vorgeschlagen

Discovery verwendet UDP als Protokoll. Wenn Sie testen möchten, ob es richtig funktioniert, verwenden Sie netcat -u -z -v <PUB-IP> 30301stattdessen.