Private-Blockchain

節點發現:私有分佈式網路中無法訪問的bootnode

  • March 28, 2017

我正在嘗試在執行 ubuntu 的虛擬機上使用 Docker 容器創建一個私有分佈式網路。

當我執行時:

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

在 docker 容器上(暴露埠845430303和)或在它之外30301:3030130301: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 上使用相同的 genesisnetworkId文件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改用。

引用自:https://ethereum.stackexchange.com/questions/12515