Geth v1.13.14 多节点私链搭建:Windows 下 2 节点互通与 RPC 端口 8545/8546 配置

Geth v1.13.14 多节点私链搭建:Windows 下 2 节点互通与 RPC 端口 8545/8546 配置

在区块链开发与测试中,搭建私有链是验证智能合约、测试交易流程的理想环境。本文将详细介绍如何在 Windows 系统上基于 Geth v1.13.14 版本,从零构建一个双节点互联的以太坊私有链网络,并配置 8545/8546 端口的 RPC 服务。

1. 环境准备与基础配置

1.1 Geth 客户端安装

首先需要从以太坊官方下载页面获取 Windows 版 Geth 客户端:

# 下载地址(请替换为实际版本) https://geth.ethereum.org/downloads/

安装时需注意:

  • 修改默认安装路径(如D:\Geth
  • 勾选DEVELOPMENT TOOLS组件(包含 puppeth 工具)
  • 将安装目录添加到系统环境变量 PATH 中

验证安装是否成功:

geth version

提示:若出现 "puppeth 不是命令" 错误,说明 DEVELOPMENT TOOLS 未正确安装。

1.2 创世区块配置

创建两个节点目录结构:

D:\private_chain ├── node1 │ ├── data │ └── password.txt └── node2 ├── data └── password.txt

使用 puppeth 生成创世配置:

cd D:\private_chain\node1 puppeth

交互流程示例:

  1. 输入网络名称(不含空格):myprivnet
  2. 选择配置新创世块 → Clique (PoA) 共识
  3. 设置出块间隔:5秒
  4. 添加预分配账户(可选)
  5. 指定 ChainID:12345(需记录)
  6. 保存为genesis.json

2. 双节点部署实战

2.1 节点初始化

分别在两个节点目录执行初始化:

# 节点1 geth --datadir ./data --networkid 12345 init genesis.json # 节点2 geth --datadir ./data --networkid 12345 init genesis.json

创建账户并设置密码文件:

geth --datadir ./data account new # 将密码存入 password.txt(无后缀)

2.2 启动脚本配置

节点1启动脚本(start_node1.bat)

geth --allow-insecure-unlock --unlock 0 --password ./password.txt \ --networkid 12345 --datadir "./data" \ --http --http.api "admin,debug,web3,eth,txpool,personal,ethash,miner,net" \ --http.corsdomain "*" --http.port 8545 --http.addr "0.0.0.0" \ --port 30303 --ipcpath \\.\pipe\geth1.ipc --nodiscover console

节点2启动脚本(start_node2.bat)

geth --allow-insecure-unlock --unlock 0 --password ./password.txt \ --networkid 12345 --datadir "./data" \ --http --http.api "admin,debug,web3,eth,txpool,personal,ethash,miner,net" \ --http.corsdomain "*" --http.port 8546 --http.addr "0.0.0.0" \ --port 30304 --ipcpath \\.\pipe\geth2.ipc --nodiscover console

关键参数对比:

参数节点1节点2
http.port85458546
port3030330304
ipcpathgeth1.ipcgeth2.ipc

3. 节点互联与验证

3.1 获取节点连接信息

在节点2控制台执行:

admin.nodeInfo.enode

输出示例:

"enode://a3b...d7f@[::]:30304?discport=0"

注意:需将[::]替换为实际本地IP(如 192.168.1.100)

3.2 添加对等节点

在节点1控制台执行:

admin.addPeer("enode://a3b...d7f@192.168.1.100:30304")

验证连接状态:

// 查看已连接节点数 net.peerCount // 查看详细节点信息 admin.peers

3.3 区块同步测试

  1. 在节点1启动挖矿:
miner.start(1)
  1. 在节点2观察区块同步:
eth.blockNumber
  1. 停止挖矿:
miner.stop()

4. RPC 接口安全配置

4.1 端口访问控制

建议通过防火墙限制 RPC 端口访问:

# 允许本地访问8545 New-NetFirewallRule -DisplayName "Geth Node1 RPC" -Direction Inbound -LocalPort 8545 -Protocol TCP -Action Allow # 限制特定IP访问8546 New-NetFirewallRule -DisplayName "Geth Node2 RPC" -Direction Inbound -LocalPort 8546 -Protocol TCP -RemoteAddress 192.168.1.50 -Action Allow

4.2 API 权限管理

敏感接口建议单独配置:

--http.api "eth,net,web3" # 生产环境限制 --http.api "admin,debug,personal" # 开发测试使用

4.3 跨域访问控制

根据实际需求调整:

--http.corsdomain "https://yourdomain.com" # 替代通配符*

5. 常见问题排查

5.1 节点无法互联

检查要点:

  1. 确认networkid一致
  2. 验证防火墙是否放行 TCP/UDP 端口
  3. 检查创世区块哈希是否相同:
eth.getBlock(0).hash

5.2 RPC 接口无响应

诊断步骤:

  1. 确认服务已启动:
netstat -ano | findstr 8545
  1. 测试基础接口:
curl -X POST --data '{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":1}' http://localhost:8545

5.3 账户锁定问题

解决方案:

  1. 临时解锁账户:
personal.unlockAccount(eth.accounts[0], "password", 300)
  1. 或在启动参数添加:
--allow-insecure-unlock --unlock "0" --password ./password.txt

通过以上步骤,您已成功搭建具备完整功能的双节点以太坊私有链网络。这种环境特别适合进行智能合约的并行测试、交易流程验证以及共识机制实验。实际开发中,可根据需要扩展更多节点或调整挖矿参数。