一起部署Qitmeer内网节点

一起部署Qitmeer内网节点

Qitmeer 1.0 上线后,为了提高连通性,在网络准入条件上作出了重大调整,要求节点必须有公网IP。所以社区朋友会发现已经无法像之前那样在内网直接运行Qitmeer节点了,误以为Qitmeer只支持公网节点了。事实上这是一种误读,Qitmeer引入白名单机制可以让制定内网节点加入网络,从而让带宽资源能有效的利用。

白名单方案介绍

Qitmeer的活跃节点的数量不少,但是相当一部分是内网节点。由于内网节点并没有开放公共端口,所以内网节点更多地是单方面地向拥有公网节点索取带宽,而公网节点很难向内网节点获取数据。造成公网节点的带宽不仅要给公网分享还要向内网节点分享,形成带宽的瓶颈,降低了网络总体的连通性。所以Qitmeer新的连通方案目的是确保带宽分配的公平性,而非为了阻止内网节点的接入,因此设计了新的内网节点接入的方案。

网络架构

白名单功能需要有一台公网服务器作为中转节点。这种的方案好处就是,不管有多少内网节点,都只会占用内网节点所有者的公网带宽资源。这样内网节点多的用户就只能升级对应公网转发节点的带宽,而不会占用Qitmeer的公共网络带宽。此外,为了减轻内网节点多有可能造成对应公网转发节点带宽成本高的问题,Qitmeer开放了同一个局域网的节点彼此直连。因此,可以让公网转发节点只开放局域网的一台机器的白名单,局域网的其他机器则只需要从该节点同步数据即可。网络架构参见下图

演练

本次演练需要切换公网转发节点和内网节点,请留意操作环境

1. 在内网中

运行节点
fiona@local ~/github.com/qitmeer/qitmeer (master) $ git pull
Already up to date.
fiona@local ~/github.com/qitmeer/qitmeer (master) $ make
Done building.
  qitmeer version 0.10.6+dev-de2bbfa (Go version go1.17.3))
Run "./build/bin/qitmeer" to launch.
fiona@local ~/github.com/qitmeer/qitmeer (master) $ ./build/bin/qitmeer

...
 [INFO ] Node started p2p server:multiAddr=/ip4/192.168.50.143/tcp/8130/p2p/16Uiu2HAmFpchgZ11gg23wtvPVWQctpmEZezGUFzaqSVKzWLm39Xy module=P2P
  [INFO ] Starting Rebroadcast                module=P2P


          .__  __
     _____|__|/  |_  _____   ____   ___________    Qitmeer 0.10.6+dev-de2bbfa
    / ____/  \   __\/     \_/ __ \_/ __ \_  __ \   Port: 8130
   < <_|  |  ||  | |  Y Y  \  ___/\  ___/|  | \/   PID : 2981583
    \__   |__||__| |__|_|  /\___  >\___  >__|      Network : mainnet
       |__|              \/     \/     \/          https://github.com/Qitmeer/qitmeer



  [INFO ] RPC server listening on addr:127.0.0.1:8131 module=RPC
...
  [INFO ] 16Uiu2HAmTdcrQ2S4MD6UxeR81Su8DQdt2eB7vLzJA7LrawNf93T2 direction:Outbound multiAddr:/ip4/203.86.236.19/tcp/28130/p2p/                                            16Uiu2HAmTdcrQ2S4MD6UxeR81Su8DQdt2eB7vLzJA7LrawNf93T2  (Relay) module=SYNC
  [INFO ] peer:16Uiu2HAmTdcrQ2S4MD6UxeR81Su8DQdt2eB7vLzJA7LrawNf93T2 Peer Disconnected,activePeers:4 module=SYNC

我们从最后的日志可以看到,节点启动后监听了端口P2P端口8130和RPC端口8131,然后就停止了更新,说明qitmeer阻止了内网节点同步数据,影响公网的连通性。

我们找到如下日志,提取出节点的peer ID并记录, 即:16Uiu2HAmFpchgZ11gg23wtvPVWQctpmEZezGUFzaqSVKzWLm39Xy,在白名单中需要用到。我们从地址192.168.50.143可以看出,这是一个局域网地址。

 [INFO ] Node started p2p server:multiAddr=/ip4/192.168.50.143/tcp/8130/p2p/16Uiu2HAmFpchgZ11gg23wtvPVWQctpmEZezGUFzaqSVKzWLm39Xy module=P2P

2. 在公网中

添加白名单

修改qitmeer的配置文件,并将内网节点的PeerID,添加进来

tony@public ~/github.com/qitmeer/qitmeer (master) $ vi ~/.qitmeerd/qitmeer.conf 

添加的内容如下

whitelist=16Uiu2HAmFpchgZ11gg23wtvPVWQctpmEZezGUFzaqSVKzWLm39Xy
运行节点
tony@public ~/github.com/qitmeer/qitmeer (master) $ git pull
Already up to date.
tony@public ~/github.com/qitmeer/qitmeer (master) $ make
Done building.
  qitmeer version 0.10.6+dev-de2bbfa (Go version go1.17.3))
Run "./build/bin/qitmeer" to launch.
tony@public ~/github.com/qitmeer/qitmeer (master) $ ./build/bin/qitmeer

当我们看到类似于如下的同步日志,说明公网节点启动成功,节点开始同步数据

[INFO ] Processed 551 blocks in the last 10s (551 transactions, order 551, 2021-09-29 15:09:20 +0000 UTC) module=blkmanager

我们从节点的运行日志中找到如下日志

 [INFO ] Node started p2p server:multiAddr=/ip4/XXX.XXX.XXX.XXX/tcp/8130/p2p/16Uiu2HAmC8GeHuxSTMnkKXYEeyZKQDSsYZbqZEuJYrBjgLXRKrPZ module=P2P

其中/ip4/XXX.XXX.XXX.XXX/tcp/8130/p2p/16Uiu2HAmC8GeHuxSTMnkKXYEeyZKQDSsYZbqZEuJYrBjgLXRKrPZ就是我们的公网地址,请记录下来, 接下来需要用到

3. 回到内网

修改配置文件

fiona@local ~/github.com/qitmeer/qitmeer (master) $ vi ~/.qitmeerd/qitmeer.conf 

添加如下内容,将公网地址添加到连接节点列表

addpeer=/ip4/XXX.XXX.XXX.XXX/tcp/8130/p2p/16Uiu2HAmC8GeHuxSTMnkKXYEeyZKQDSsYZbqZEuJYrBjgLXRKrPZ

测试公网节点连通性, 看到 “/multistream/1.0.0” 说明连接是成功的

fiona@local ~/github.com/qitmeer/qitmeer (master) $ telnet XXX.XXX.XXX.XXX 8130
Trying XXX.XXX.XXX.XXX...
Connected to XXX.XXX.XXX.XXX.
Escape character is '^]'.
/multistream/1.0.0

启动节点

 fiona@local ~/github.com/qitmeer/qitmeer (master) $ ./build/bin/qitmeer

从日志中, 我们可以看到内网节点已经成功连接上公网节点了,

 [INFO ] 16Uiu2HAmC8GeHuxSTMnkKXYEeyZKQDSsYZbqZEuJYrBjgLXRKrPZ direction:Outbound multiAddr:/ip4/XXX.XXX.XXX.XXX/tcp/8130/p2p/16Uiu2HAmC8GeHuxSTMnkKXYEeyZKQDSsYZbqZEuJYrBjgLXRKrPZ activePeers:14 Peer Connected module=SYNC

总结

内网白名单机制是Qitmeer1.0 正式版重要的升级之一,合理地分配了网络的带宽资源,有效地提高了网络整体的连通性。