主要参考官网的文档:https://github.com/ipfs/go-ipfs/blob/master/docs/experimental-features.md#private-networks

注意事项

  1. 需要在各个节点有相同的私钥,私钥可以通过 https://github.com/Kubuxu/go-ipfs-swarm-key-gen 项目生成。
  2. 节点启动前,设置环境变量 LIBP2P_FORCE_PNET=1

步骤

这里假设

  1. ipfs 节点 IP 分别为 10.0.0.1 和 10.0.0.2,以下分别用 node1 和 node2 指代
  2. ipfs 各节点已经安装好了 go 语言环境和 ipfs 命令行应用

首先node1/node2都需要初始化私有仓库

ipfs init

生成私钥,以下指令均在 node1 执行:

go get github.com/Kubuxu/go-ipfs-swarm-key-gen/ipfs-swarm-key-gen
ipfs-swarm-key-gen > ~/.ipfs/swarm.key

私钥发送到 node2 上,

scp ~/.ipfs/swarm.key root@10.0.0.2:~/.ipfs/swarm.key

删除默认的 Bootstrap 的节点配置

ipfs bootstrap rm --all

添加内网的 ipfs 节点 10.0.0.2,注意如果不知道 node2 的 id ,可以通过 ipfs id 获取

ipfs bootstrap add /ip4/10.0.0.2/tcp/4001/ipfs/QmXpfNVt2YE6ofYnsc1GFpxK7hRQ8du7NsR9YXgGzWrqni

设置环境变量LIBP2P_FORCE_PNET为1。

export LIBP2P_FORCE_PNET=1

启动节点

ipfs daemon

对于 node2 节点,执行

ipfs bootstrap rm --all
ipfs daemon

check

在 node1 上执行,如果有如下的记录则测试网络正常

$ ipfs swarm peers
/ip4/10.0.0.2/tcp/4001/ipfs/QmXpfNVt2YE6ofYnsc1GFpxK7hRQ8du7NsR9YXgGzWrqni

test

在 node1 添加一个测试文件,然后在 node2 使用 ipfs cat命令是否能够成功获取文件内容。

ref