步骤
0. 安装 LINUX环境
wget https://dist.ipfs.io/go-ipfs/v0.4.22/go-ipfs_v0.4.22_linux-amd64.tar.gz
tar -zxvf go-ipfs_v0.4.22_linux-amd64.tar.gz
cd go-ipfs
./install
1. 初始化ipfs
# ipfs init
2. 创建共享KEY
使用ipfs-swarm-key-gen创建私有网络共享的key, 私有网络的所有的节点都使用这个key, 不使用这个key的节点无法加入这个私有网络。 密钥默认要把他放在 ipfs 数据 目录下, 而且要单独保存好,以便给其他节点使用。
go get github.com/Kubuxu/go-ipfs-swarm-key-gen/ipfs-swarm-key-gen
ipfs-swarm-key-gen > ~/.ipfs/swarm.key
3. 移除默认的bootstrap节点
为了不连接全球的IPFS网络,你需要将默认的bootstrap的节点信息删除。
# ipfs bootstrap rm --all
removed /dnsaddr/bootstrap.libp2p.io/ipfs/QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN
removed /dnsaddr/bootstrap.libp2p.io/ipfs/QmQCU2EcMqAqQPR2i9bChDtGNJchTbq5TbXJJ16u19uLTa
removed /dnsaddr/bootstrap.libp2p.io/ipfs/QmbLHAnMoJPWSCR5Zhtx6BHJX9KiKNN6tpvbUcqanj75Nb
removed /dnsaddr/bootstrap.libp2p.io/ipfs/QmcZf59bWwK5XFi76CZX8cbJ4BhTzzA3gU1ZjYZcYW3dwt
removed /ip4/104.131.131.82/tcp/4001/ipfs/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ
removed /ip4/104.236.179.241/tcp/4001/ipfs/QmSoLPppuBtQSGwKDZT2M73ULpjvfd3aZ6ha4oFGL1KrGM
removed /ip4/104.236.76.40/tcp/4001/ipfs/QmSoLV4Bbm51jM9C4gDYZQ9Cy3U6aXMJDAbzgu2fzaDs64
removed /ip4/128.199.219.111/tcp/4001/ipfs/QmSoLSafTMBsPKadTEgaXctDQVcqN88CNLHXMkTNwMKPnu
removed /ip4/178.62.158.247/tcp/4001/ipfs/QmSoLer265NRgSp2LA3dPaeykiS1J6DifTC88f5uVQKNAd
removed /ip6/2400:6180:0:d0::151:6001/tcp/4001/ipfs/QmSoLSafTMBsPKadTEgaXctDQVcqN88CNLHXMkTNwMKPnu
removed /ip6/2604:a880:1:20::203:d001/tcp/4001/ipfs/QmSoLPppuBtQSGwKDZT2M73ULpjvfd3aZ6ha4oFGL1KrGM
removed /ip6/2604:a880:800:10::4a:5001/tcp/4001/ipfs/QmSoLV4Bbm51jM9C4gDYZQ9Cy3U6aXMJDAbzgu2fzaDs64
removed /ip6/2a03:b0c0:0:1010::23:1001/tcp/4001/ipfs/QmSoLer265NRgSp2LA3dPaeykiS1J6DifTC88f5uVQKNAd
4. 加入私有网络
如果是第一个节点, 这一步可以省略。
如果你已经知道了私有网络的一些节点,你可以把它们作为bootstrap节点。
ipfs bootstrap add <multiaddr> ; 我们 可以使用外网 149.129.75.xx
ipfs bootstrap add /ip4/149.129.75.xx/tcp/4001/ipfs/Qmb3NCrphSzPr5a5JBtZUcLwz9GBYSr9nntdMVYbSBJpmT
也可以手动连接
ipfs swarm connect /ip4/149.129.75.xx/tcp/4001/ipfs/Qmb3NCrphSzPr5a5JBtZUcLwz9GBYSr9nntdMVYbSBJpmT
注意: 最后一个hash 是 种子节点hash
5. 设置LIBP2P_FORCE_PNET
要特别小心,还需要将LIBP2P_FORCE_PNET环境变量设置为1以强制使用私有网络。如果未配置,守护程序将无法启动
export LIBP2P_FORCE_PNET=1
但是测试的时候此参数不配置好像也是可以的
6. 测试
ipfs daemon
后台运行 nohup ipfs daemon &
查看ID , 并且我们把这台当作 第一台 主 节点
# ipfs id
{
"ID": "Qmb3NCrphSzPr5a5JBtZUcLwz9GBYSr9nntdMVYbSBJpmT",
"PublicKey": "CAASpgIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrxynxOp8l57UsxWvE6Pq1utGLA9EG4yLLRmfjdrOtIJrM50F5FEPzPXzhfLx48EINpPXxGhqIcSA9/ccHEGMope6lFMV7Dxrn7SMdzHljvgkq3EPggVNAG1uNimoeMdO4r8G/5ewtYZYgS45jAtF5X7Aok6SmUHPjy6C1X+1dMmLpIrbd2iTnrFsgR4AXxx1TMpfs1ZGAP9UouZ+abgxXke3FFzmjM0wMW8iH4qKtE6viNcUwqxFnTmfNBFe+QVgVRHWeOw0LN9z2/p4oSvie7NJ/Fd3fJaxW72LvXkruLCZN8W6I030Lkulyb5xO5fG1O8lHdtkcADVjajUnIRaLAgMBAAE=",
"Addresses": [
"/ip4/127.0.0.1/tcp/4001/ipfs/Qmb3NCrphSzPr5a5JBtZUcLwz9GBYSr9nntdMVYbSBJpmT",
"/ip4/192.168.0.170/tcp/4001/ipfs/Qmb3NCrphSzPr5a5JBtZUcLwz9GBYSr9nntdMVYbSBJpmT",
"/ip4/172.17.0.1/tcp/4001/ipfs/Qmb3NCrphSzPr5a5JBtZUcLwz9GBYSr9nntdMVYbSBJpmT",
"/ip4/192.167.0.1/tcp/4001/ipfs/Qmb3NCrphSzPr5a5JBtZUcLwz9GBYSr9nntdMVYbSBJpmT"
],
"AgentVersion": "go-ipfs/0.4.22/",
"ProtocolVersion": "ipfs/0.1.0"
}
当前节点 : /ip4/192.168.0.170/tcp/4001/ipfs/Qmb3NCrphSzPr5a5JBtZUcLwz9GBYSr9nntdMVYbSBJpmT
# netstat -tnlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:5001 0.0.0.0:* LISTEN 31194/ipfs
tcp 0 0 127.0.0.1:8080 0.0.0.0:* LISTEN 31194/ipfs
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1324/sshd
tcp 0 0 0.0.0.0:4001 0.0.0.0:* LISTEN 31194/ipfs
tcp6 0 0 :::4001 :::* LISTEN 31194/ipfs
可以看到 节点在 4001 端口. 这里
7. 添加新的节点到网络
上面一台当作 第一个节点, 接下来创建的是对等节点
7.1 先安装好 go-ipfs
7.2 拷贝 swarm.key 到 当前电脑
scp ~/.ipfs/swarm.key [email protected]:/root/.ipfs/
7.3 移除原主网节点
参照 以上 步骤 3
7.4 加入私有网络
参照以上 步骤4
7.5 export LIBP2P_FORCE_PNET=1
7.6 启动
ipfs daemon
8. 测试
先修改下 第一个节点 支持外网访问
"API": "/ip4/0.0.0.0/tcp/5001",
"Gateway": "/ip4/0.0.0/tcp/8080",
# ipfs swarm peers
/ip4/149.129.75.xx /tcp/4001/ipfs/Qmb3NCrphSzPr5a5JBtZUcLwz9GBYSr9nntdMVYbSBJpmT
在第一个节点也可以看到连接的第二个节点;而且可以看到 是获取的外网IP;
# ipfs swarm peers
/ip4/47.75.121.XX/tcp/4001/ipfs/QmYU87svtpzwSKXb73kBQyz35mGTne7re8pHspPzcDSQNJ
以上 2台服务器都是 云服务器测试环境
我们在第一个节点上上传的数据 ,第二个节点也能查询。
# ipfs cat /ipfs/QmTp2hEo8eXRp6wg7jXv1BLCMh5a4F3B7buAUZNZUu772j
hello world!
至此,联盟链搭建成功了。
9. 测试内网节点 是否可以穿透
网络拓扑:
0.4.19 - 官方升级说明 :
自动地址转换与自动网络中继
Libp2p更新了两项新的功能——AutoRelay(自动网络中继)与AutoNAT(自动网络地址转换)
AutoRelay将会在侦测到go-ipfs网络节点位于NAT之后(且无法穿越NAT)时,自动选择一个公网中继节点进行中继链接。虽 然经由第三方节点进行网络中继并不是NAT穿越最有效的方法,但仍不失为一种后备策略。
如果需要激活AutoRelay,请在 Swarm.EnableAutoRelay
中设置相关参数。
AutoNAT是辅助AutoRelay运行的一种工具,您不需要对其进行额外的参数设置。
在配置上述服务的时候,您可能会注意到 EnableRelayHop
, EnableAutoNATService
,等指令,您无需启用他们:
EnableRelayHop
将允许其他节点以您的节点作为网络中继(默认关闭)
EnableAutoNATService
协助其他NAT之后的节点侦测中继节点(默认关闭)
9.1 下载好 ipfs.exe
9.2 加入 swarm,key
9.3 只需要再公网node 上设置 EnableAutoRelay=true 即可, NAT内部节点不需要做任何配置修改, 自动的穿透的。
在 种子节点查看 连接:
# ipfs swarm peers
/ip4/47.75.121.XX/tcp/4001/ipfs/QmQp7rVv8CCXhcSE4RLRbL5xVUn51foYobAWo7jg9LqxmD
/ip4/49.84.215.39/tcp/4001/ipfs/QmTqdFQmgij1L1XLLPLwbh5QrCR7L2dm6DsCxiqZMD6Fbi
49.84.215.39 本机外网地址
注意:
1. 当第一个节点断开,再次启动后, ipfs swarm peers不能连接到对方。
其他:
查看日志: ipfs log tail
查看路由:
# ipfs dht findpeer QmTqdFQmgij1L1XLLPLwbh5QrCR7L2dm6DsCxiqZMD6Fbi
/ip4/169.254.169.37/tcp/4001
/ip4/169.254.16.50/tcp/4001
/ip4/169.254.208.233/tcp/4001
/ip4/169.254.12.138/tcp/4001
/ip4/192.168.38.1/tcp/4001
/ip4/192.168.23.1/tcp/4001
/ip4/192.168.0.125/tcp/4001
/ip4/127.0.0.1/tcp/4001
ipfs js api: https://github.com/ipfs/js-ipfs-http-client
ipfs go api: https://github.com/ipfs/go-ipfs-api
ipfs webui: https://github.com/ipfs-shipyard/ipfs-webui
参考:
https://www.infoq.cn/article/ipfs/
https://github.com/ipfs/go-ipfs/blob/master/docs/experimental-features.md#private-networks
https://github.com/ahester57/ipfs-private-swarm 官方private-swarm 教程
https://zhuanlan.zhihu.com/p/35141862
https://github.com/ahester57/ipfs-private-swarm/blob/master/CONNECT.md