¿Cómo conecto dos pares en diferentes máquinas en una red privada?

Solo como introducción a esto, soy un poco nuevo en las redes y Ethereum en general, pero después de leer algunos tutoriales, decidí que me gustaría crear una red/cadena de bloques privada para mi propio uso y contratos inteligentes. Pero si bien puedo conectar 2 nodos pares en la misma máquina, tengo dificultades para conectar 2 nodos pares en diferentes máquinas.

MÉTODO 1: La siguiente es una forma en que probé esto (que funciona para 2 compañeros en la misma máquina; en un tutorial que vi faltaban las últimas 3 banderas, pero decidí incluirlas de todos modos)

geth --datadir /ruta/a/genesis --networkid 111 --maxpeers 2 --rpc --rpccorsdomain "*" --nodiscover --ipcdisable --rpcport 30001 --port 8081 consola //máquina 1

geth --datadir /diferente/ruta/a/génesis --networkid 111 --maxpeers 2 --rpc --rpccorsdomain "*" --nodiscover --ipcdisable --rpcport 30002 --port 8082 consola //máquina 2

Y luego en la máquina 1 obtenga admin.nodeInfo.enode (que es "enode://d677...b4c5@[::]:8081?discport=0") e ingrese en la máquina 2 admin.addPeer("enode: //d677...b4c5@mi.dirección.ip?discport=0).

Esto devuelve verdadero pero admin.peers permanece vacío.

MÉTODO 2: Otra forma es hacer lo mismo para la máquina 1, pero en cambio en la máquina 2 escriba:

geth --datadir /diferente/ruta/a/genesis --networkid 111 --maxpeers 2 --rpc --rpccorsdomain "*" --nodiscover --ipcdisable --rpcport 30002 --port 8082 --bootnodes enode:// d677...b4c5@my.ip.address?discport=0 consola

Y luego haga el mismo proceso admin.addPeer. Sin embargo, suceden los mismos resultados.

Estoy realmente dividido en cuanto a cuál es el problema aquí. Los bloques de génesis son los mismos (los hashes son los mismos), y probé varios tipos de indicadores después de inicializar en ambas máquinas. Supongo que mi corazonada es que mis relojes no están sincronizados en ambas máquinas (aunque no estoy seguro de cómo hacerlo aparte de sudo timedatectl set-ntp on), o que no estoy ingresando la dirección IP correcta (aunque no estoy seguro de cómo hacerlo). he probado casi todos), así que tal vez sería bueno alguna dirección en estas áreas.

Intenté tener --verbosity 6 también, y el error devuelto es 'el descubrimiento está deshabilitado' y 'dial tcp my.ip.address: 8081: getsockopt: conexión rechazada'. Lo cual es extraño ya que no tuve problemas para hacer esto usando las mismas máquinas, pero cuando hice lo mismo sin --nodiscover, todavía no funcionó: los errores fueron 'dial tcp my.ip.addresses: 8081: i/o timeout ' y 'no se encontraron nodos semilla discv4' y 'falló la resolución del nodo'.

Lo siento mucho si esto es muy extenso, pero es que no estoy seguro de cuál es el problema real y he estado repitiendo muchos de estos cambios de los que estoy seguro. Para empeorar las cosas, creo que Ethereum y geth se actualizan constantemente, por lo que no estoy seguro de si la información que veo en este sitio y en otros lugares es relevante o precisa. Realmente agradecería algo de ayuda aquí porque estoy realmente desesperado por alguna ayuda y aclaración.

¿Están las máquinas en la misma LAN? ¿Puedes hacer ping entre ellos? ¿Comprobó si tiene un firewall que bloquea las conexiones entrantes en los puertos utilizados?
Hola Ismael, ambas máquinas están en la misma LAN (configuración del sistema -> red -> cableado devuelven lo mismo; whatismyipaddress.com son casi iguales, solo difieren en 1) y que yo sepa, no hay firewalls (sudo ufw status devuelve inactivo para ambos). Sin embargo, no estoy seguro de lo que quiere decir con hacer ping entre ellos, lo siento, no tengo ni idea sobre la creación de redes.

Respuestas (2)

1) Solo confirme si ambos génesis son iguales... (úselo eth.getBlock(0)en ambos nodos)

2) Pruebe y use admin.addPeer("enode....@IP of the other node:Port") en su consola.

Puede verificar el puerto usandoadmin.nodeInfo

admin.addPeer("enode://93a29e6d51e58c8a313a295fc3b246b59cd2c8c4f9aa833ac351584882f7c23ac24f38ebc76213a23f8c84aeb8a2e7d46a504a3110775ad12f36b1fe1938cbad@YOUR_IP_2:30303")

3) Verifique a sus compañeros usandonet.peerCount

Para conectar compañeros en dos máquinas diferentes, el siguiente enfoque funcionó para mí:

1) Como se señala en muchas respuestas, asegúrese de que el archivo de génesis sea exactamente el mismo en ambos nodos. Debería obtener los mismos valores de dificultad, génesis, cabeza y red cuando admin.nodeInfo.protocols.ethse ejecuta en los nodos respectivos

2) Vaya a la configuración del firewall (en la máquina Win: Panel de control> Sistema y seguridad> Firewall de Windows> Configuración avanzada) y deshabilite todas las reglas relacionadas con geth en la opción Reglas de entrada

3) Al iniciar la instancia de geth, use el puerto 30303 solo en ambas máquinas. No funcionó para mí cuando probé con otros números de puerto. Puede deberse a que cuando miré las reglas de salida en la configuración del firewall, encontré 30303 como puerto permitido para TCP/UDP contra geth. No dude en verificar lo mismo en su (s) máquina (s) y modificar el número de puerto en consecuencia

4) Use admin.addPeer({enode})para agregar compañeros. Los detalles de {enode} se pueden tomar de la otra respuesta.