ipfs-02 私网搭建

步骤

 0. 安装 LINUX环境

   https://dist.ipfs.io/#go-ipfs 

   

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

发布了211 篇原创文章 · 获赞 29 · 访问量 36万+

猜你喜欢

转载自blog.csdn.net/wuhualong1314/article/details/103681970