Как соединить двух одноранговых узлов на разных машинах в частной сети?

Сразу скажу, что я немного новичок в сетях и Ethereum в целом, но после просмотра некоторых руководств я решил, что хотел бы создать частную сеть/блокчейн для собственного использования и смарт-контрактов. Но хотя я могу подключить 2 одноранговых узла на одной машине, мне трудно подключить 2 одноранговых узла на разных машинах.

МЕТОД 1. Ниже приведен один из способов, которым я пробовал это (который работает для 2 одноранговых узлов на одной машине; в одном учебнике, который я видел, отсутствовали последние 3 флага, но я все равно решил их включить)

geth --datadir /path/to/genesis --networkid 111 --maxpeers 2 --rpc --rpccorsdomain "*" --nodiscover --ipcdisable --rpcport 30001 --port 8081 console //компьютер 1

geth --datadir /other/path/to/genesis --networkid 111 --maxpeers 2 --rpc --rpccorsdomain "*" --nodiscover --ipcdisable --rpcport 30002 --port 8082 console //машина 2

Затем на машине 1 получите admin.nodeInfo.enode (то есть "enode://d677...b4c5@[::]:8081?discport=0") и введите на машине 2 admin.addPeer("enode: //d677...b4c5@my.ip.address?discport=0).

Это возвращает true, но admin.peers остается пустым.

МЕТОД 2: Другой способ — сделать то же самое для машины 1, но вместо этого на машине 2 введите:

geth --datadir /other/path/to/genesis --networkid 111 --maxpeers 2 --rpc --rpccorsdomain "*" --nodiscover --ipcdisable --rpcport 30002 --port 8082 --bootnodes enode:// d677...b4c5@my.ip.address?discport=0 консоль

Затем выполните тот же процесс admin.addPeer. Однако бывают такие же результаты.

Я действительно разрываюсь, в чем здесь проблема. Блоки генезиса одинаковы (хэши одинаковы), и я пробовал различные типы флагов после инициализации на обеих машинах. Я предполагаю, что мои часы не синхронизированы на обеих машинах (хотя я не уверен, как это сделать, кроме как sudo timedatectl set-ntp on), или что я ввожу неправильный IP-адрес (хотя я я пробовал почти все из них), так что, может быть, было бы неплохо какое-то направление в этих областях.

Я также пробовал использовать --verbosity 6, и возвращаемая ошибка: «обнаружение отключено» и «наберите tcp my.ip.address: 8081: getsockopt: соединение отклонено». Что странно, так как у меня не было проблем с этим, используя те же машины, но когда я сделал то же самое без --nodiscover, это все равно не сработало: ошибки были: 'dial tcp my.ip.addresss:8081: тайм-аут ввода/вывода ' и 'начальные узлы diskv4 не найдены' и 'ошибка разрешения узла'.

Мне очень жаль, если это действительно многословно, но просто я действительно не уверен, в чем настоящая проблема, и я просто повторял многие из этих изменений, в которых я уверен. Что еще хуже, я думаю, что Ethereum и geth постоянно обновляются, поэтому я не уверен, что информация, которую я вижу на этом сайте и в других местах, актуальна или точна. Я был бы очень, очень признателен за помощь здесь, потому что я действительно отчаянно нуждаюсь в помощи и разъяснениях.

Находятся ли машины в одной локальной сети? Можно ли пропинговать между ними? Вы проверяли, не блокирует ли ваш брандмауэр входящие соединения на используемых портах?
Привет, Исмаэль, обе машины находятся в одной локальной сети (системные настройки -> сеть -> проводная связь возвращают одно и то же; whatismyipaddress.com почти одинаковы, разница только в 1), и, насколько мне известно, нет брандмауэров (статус sudo ufw возвращает неактивен для обоих). Однако я не уверен, что вы подразумеваете под пингом между ними, извините, я довольно невежествен в сети.

Ответы (2)

1) Просто подтвердите, одинаковы ли оба происхождения... (используйте eth.getBlock(0)на обоих узлах)

2) Попробуйте использовать admin.addPeer("enode....@IP другого узла:Порт") в своей консоли.

Вы можете проверить порт, используяadmin.nodeInfo

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

3) Проверка пиров с помощьюnet.peerCount

Для подключения пиров на двух разных машинах у меня сработал следующий подход:

1) Как указано во многих ответах, убедитесь, что файл генезиса точно такой же на обоих узлах. Вы должны получить одинаковые значения сложности, генезиса, головы и сети при admin.nodeInfo.protocols.ethзапуске на соответствующих узлах.

2) Перейдите к настройкам брандмауэра (на машине Win: Панель управления> Система и безопасность> Брандмауэр Windows> Дополнительные настройки) и отключите все правила, связанные с geth, в опции «Правила для входящих подключений».

3) При запуске экземпляра geth используйте порт 30303 только на обеих машинах. У меня не сработало, когда я пробовал с другими номерами портов. Возможно, это связано с тем, что когда я просматривал исходящие правила в настройках брандмауэра, я обнаружил, что 30303 указан как разрешенный порт для TCP/UDP против geth. Не стесняйтесь проверить то же самое на своих машинах и соответствующим образом изменить номер порта.

4) Используйте admin.addPeer({enode})для добавления пиров. Подробности {enode} можно взять из другого ответа.