Private-Blockchain
節點發現:私有分佈式網路中無法訪問的bootnode
我正在嘗試在執行 ubuntu 的虛擬機上使用 Docker 容器創建一個私有分佈式網路。
當我執行時:
bootnode --genkey $KEY_FILE --writeaddress bootnode --nodekey $KEY_FILE --addr :30301 --nat extip:$MY_IP
在 docker 容器上(暴露埠
8454
、30303
和)或在它之外30301:30301
,30301:30301/udp
如果我執行,telnet <VM-BOOTNODE-IP> 30301
我會得到telnet: Unable to connect to remote host: Connection refused
響應。如果我不在 docker 容器上創建 bootnodesudo netstat -tulpn | grep 30301
響應udp6 0 0 :::30301 :::* */bootnode
但是,當我在容器映射中創建時,埠會
sudo netstat -tulpn | grep 30301
響應tcp6 0 0 :::30301 :::* LISTEN */docker-proxy udp6 0 0 :::30301 :::* */docker-proxy
無論哪種方式,我都會收到與 telnet 相同的“無法連接到遠端主機”錯誤。我相信是因為 bootnode 的地址不可達,所以其他節點無法被發現。
需要明確的是:我在特定的所有 VM 上使用相同的 genesis
networkId
文件GEN_NONCE
。我的節點正在使用--nodiscover
(discovery port = 0) 並且他們正在監聽30303
. 在 bootnode 容器上使用詳細級別 9 顯示沒有此處建議的 ping/pong 。
好吧,顯然連接被拒絕的原因是“ ‘連接被拒絕’對於 Go 引導節點是可以的。$$ as i $$t 不接受 TCP 連接”,正如 fjl 在 go-ethereum 問題 380 中所建議的那樣
Discovery 使用 UDP 作為協議。如果您想測試它是否正常工作,請
netcat -u -z -v <PUB-IP> 30301
改用。