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交互流程示例:
- 输入网络名称(不含空格):
myprivnet - 选择配置新创世块 → Clique (PoA) 共识
- 设置出块间隔:5秒
- 添加预分配账户(可选)
- 指定 ChainID:12345(需记录)
- 保存为
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.port | 8545 | 8546 |
| port | 30303 | 30304 |
| ipcpath | geth1.ipc | geth2.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.peers3.3 区块同步测试
- 在节点1启动挖矿:
miner.start(1)- 在节点2观察区块同步:
eth.blockNumber- 停止挖矿:
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 Allow4.2 API 权限管理
敏感接口建议单独配置:
--http.api "eth,net,web3" # 生产环境限制 --http.api "admin,debug,personal" # 开发测试使用4.3 跨域访问控制
根据实际需求调整:
--http.corsdomain "https://yourdomain.com" # 替代通配符*5. 常见问题排查
5.1 节点无法互联
检查要点:
- 确认
networkid一致 - 验证防火墙是否放行 TCP/UDP 端口
- 检查创世区块哈希是否相同:
eth.getBlock(0).hash5.2 RPC 接口无响应
诊断步骤:
- 确认服务已启动:
netstat -ano | findstr 8545- 测试基础接口:
curl -X POST --data '{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":1}' http://localhost:85455.3 账户锁定问题
解决方案:
- 临时解锁账户:
personal.unlockAccount(eth.accounts[0], "password", 300)- 或在启动参数添加:
--allow-insecure-unlock --unlock "0" --password ./password.txt通过以上步骤,您已成功搭建具备完整功能的双节点以太坊私有链网络。这种环境特别适合进行智能合约的并行测试、交易流程验证以及共识机制实验。实际开发中,可根据需要扩展更多节点或调整挖矿参数。