How to deploy Qitmeer intranet nodes

Qitmeer Network
4 min readDec 19, 2021

--

After Qitmeer 1.0 was launched, a major adjustment was made to the network access requirements to improve connectivity, requiring nodes to have a public IP, so the community may find that they can no longer run Qitmeer nodes directly on the intranet as before, mistakenly believing that Qitmeer only supports public nodes. In fact, this is a misinterpretation. Qitmeer introduces a whitelist mechanism that allows the development of intranet nodes to join the network, thus allowing bandwidth resources to be used efficiently.

Introduction to Whitelist Solution

The number of active nodes in Qitmeer is quite large, but a significant portion of them are intranet nodes. Since the intranet nodes do not open public ports, this means that intranet nodes are likely to request bandwidth from the nodes that own the public network and it is difficult for the public network nodes to obtain data from the intranet nodes. As a result, the public node’s bandwidth is not only shared with the public network but also with the intranet node, creating a bandwidth bottleneck and reducing the overall network connectivity. Therefore, Qitmeer’s new connectivity scheme aims to ensure fairness in bandwidth allocation, not to prevent access to intranet nodes and therefore designed a new scheme for intranet node access.

About Network Architecture

The whitelisting feature requires a public network server as a transit node. The advantage of this solution is that no matter how many intranet nodes there are, they will only take up the public network bandwidth resources of the intranet node owner. In this way, users with more intranet nodes can only upgrade the bandwidth of the corresponding public forwarding node without using Qitmeer’s public network bandwidth. In addition, to alleviate the problem of high bandwidth costs for the corresponding public forwarding nodes due to a large number of intranet nodes, Qitmeer opens up direct connections between nodes on the same LAN. Therefore, it is possible to have the public forwarding node whitelist to only one machine on the LAN and the other machines on the LAN simply synchronize data from that node. See the following diagram for the network architecture

Walkthrough

1. In the intranet

Run the node

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

We can see from the last log that the node started and listened to port P2P port 8130 and RPC port 8131 and then stopped updating, indicating that the qitmeer prevented the intranet nodes from synchronizing data and affecting the public network connectivity.

We find the following logs, extract the node peer ID and record, namely: 16Uiu2HAmFpchgZ11gg23wtvPVWQctpmEZezGUFzaqSVKzWLm39Xy, which is needed in the whitelist. We can see from the address 192.168.50.143, which is a LAN address.

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

2. In the public network

Add whitelist

Modify the qitmeer configuration file and add the PeerID of the intranet node to it

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

The content added is as follows

whitelist=16Uiu2HAmFpchgZ11gg23wtvPVWQctpmEZezGUFzaqSVKzWLm39Xy

Running Nodes

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

When we see a synchronization log similar to the following, it means that the public node was started successfully and the node started synchronizing data

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

We found the following log from the node’s run log

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

XXX.XXX.XXX/tcp/8130/p2p/16Uiu2HAmC8GeHuxSTMnkKXYEeyZKQDSsYZbqZEuJYrBjgLXRKrPZ is our public address, please record it, we need to use it next

3. Go back to the intranet
Modify the configuration file

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

Add the following to add the public network address to the list of connected nodes

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

Test the public node connectivity and see “/multistream/1.0.0” which means the connection is successful

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

Launch Node

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

From the logs, we can see that the intranet node has successfully connected to the public node,

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

Summary

The intranet whitelist mechanism is one of the important upgrades in Qitmeer 1.0, which rationally allocates the network’s bandwidth resources and effectively improves the overall network connectivity.

About Qitmeer

Qitmeer is the next-generation public chain based on BlockDAG which is dedicated to serving the ecosystem of Islamic Finance, ethical finance, and socially responsible investment, thereby enhancing financial inclusion and creating social impact.

In contrast to the competition model, BlockDAG’s collaboration model in the mining achieves a desirable balance of typical blockchain metrics among the security, openness, fairness, and scalability.

Qitmeer adopts a classic POW consensus and UTXO data model and designs a unique asset issuing mechanism which requires the reserve of native currency, which is in line with core ethical financial values.

Contact Us

Website / Qitmeer talk / GitHub / Twitter / Facebook / Telegram / Instagram / LinkedIn

--

--

Qitmeer Network
Qitmeer Network

Written by Qitmeer Network

Qitmeer Network is the next generation payment network infrastructure based on BlockDAG technology.

No responses yet