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
, 30303
und ) 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:30301
30301:30301/udp
telnet <VM-BOOTNODE-IP> 30301
telnet: Unable to connect to remote host: Connection refused
sudo netstat -tulpn | grep 30301
udp6 0 0 :::30301 :::* */bootnode
Wenn ich jedoch im Container ein Mapping erstelle sudo netstat -tulpn | grep 30301
antwortet 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 networkId
und GEN_NONCE
auf 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 .
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> 30301
stattdessen.