Peer Discovery no funciona en una red privada

Estoy ejecutando 3 nodos con el siguiente comando:

geth --verbosity 4 --autodag --nat any --genesis /opt/blockchain/genesis.json \
     --datadir /opt/blockchain/data --networkid 4828 --port 30303 --rpc \
     --rpcaddr 10.48.247.25 --rpcport 8545 --rpcapi db,eth,net,web3,admin \
     --rpccorsdomain '*' --fast --mine --ipcdisable

El genesis.json filees el mismo para cada nodo (los he comprobado para estar seguro).

Lo que sucede es que los nodos no pueden encontrarse solos, tengo que conectarlos manualmente admin.addPeer.

Para probarlo, he creado un bucle de intervalo en la consola para imprimir admin.peerscada 1 segundo:

var interval = setInterval(function(){console.log(admin.peers)}, 1000);

Si se conectan nodo 1a nodo 2( 1--2), siguen conectándose y desconectándose entre sí. Pero el nodo 3no puede conectarse a ninguno de ellos.

¿Por qué está pasando esto?

Respuestas (1)

Cada una de las instancias de geth deberá descubrir al menos otra instancia con una conexión al resto de su red privada.

Puede nominar una (o más) de sus instancias de geth como un nodo de arranque al que todas las demás instancias se conectan primero para encontrar otros pares en su red privada. Para especificar el nodo de arranque al que deben conectarse inicialmente las instancias que no son de nodo de arranque, use el siguiente parámetro de línea de comando (desde https://github.com/ethereum/go-ethereum/wiki/Connecting-to-the-network#connecting-to -la-red ):

geth --bootnodes "enode://pubkey1@ip1:port1 [enode://pubkey2@ip2:port2 [enode://pubkey3@ip3:port3]]"

Alternativamente, puede nominar uno (o más) de los nodos como un nodo estático al que otros pares siempre se conectarán (desde https://github.com/ethereum/go-ethereum/wiki/Connecting-to-the-network#static -nodes ) agregando el archivo /static-nodes.jsonpara cada instancia de geth con el siguiente contenido:

[
  "enode://f4642fa65af50cfdea8fa7414a5def7bb7991478b768e296f5e4a54e8b995de102e0ceae2e826f293c481b5325f89be6d207b003382e18a8ecba66fbaf6416c0@33.4.2.1:30303",
  "enode://pubkey@ip:port"
]

Recuerde eliminar la coma ',' si solo tiene una instancia de geth en su archivo static-nodes.json ( ¿alguien puede ayudar con la guía para ejecutar dos clientes de geth en la misma caja y en la misma red? ).

Entonces, básicamente, no hay forma de simplemente conectar un nodo a una red y comienza a hacer ping a otros nodos automáticamente para obtener el historial.
A diferencia de UDP, donde puede transmitir un ping (y no funciona a través de Internet), el protocolo TCP requiere algunas direcciones y puertos de inicio. Hay algunos ip: puertos codificados en el código fuente con los que todos los nodos Ethereum verifican en la red en vivo: los nodos de arranque.