Cellframe Node: Launch Instructions

Cellframe Platform
Published in
6 min readMar 3, 2020


Cellframe Node on Gitlab: https://gitlab.demlabs.net/cellframe/cellframe-node

This is the direct link to this article on Gitlab: https://gitlab.demlabs.net/cellframe/cellframe-node/blob/master/README.md

Special page in our Wiki documentation (will be translated ASAP): https://wiki.cellframe.net/index.php/Node_usage

Build it from sources:


To complete the build, you must have following prerequisites preinstalled (packages are named as in Debian GNU/Linux 10 “buster,” please find the corresponding packages for your distribution kit):

  • libjson-c-dev
  • libsqlite3-dev
  • libmemcached-dev
  • libev-dev
  • libmagic-dev
  • libcurl4-openssl-dev | libcurl4-nss-dev | libcurl4-gnutls-dev (deprecated modules, will be removed soon)
  • libldb-dev
  • libtalloc-dev
  • libtevent-dev

Prepare the system

Run the command to install it with build tools:

sudo apt-get install build-essential cmake cpack dpkg-dev libjson-c-dev libsqlite3-dev libmemcached-dev libev-dev libmagic-dev libcurl4-gnutls-dev libldb-dev libtalloc-dev libtevent-dev

Get all the sources

Run this command to fetch sources from Gitlab and then build it:

git clone https://gitlab.demlabs.net/cellframe/cellframe-node.git
cd cellframe-node
git submodule init
git submodule update

Build the sources

Get into the directory with cellframe-node and run following commands:

mkdir build
cd build
cmake ../
make -j 8

This will compose everything in build/subdirectory.

Install the package

Prepare it for installation (Debian/Ubuntu)

To prepare the node for installation, you need to produce a package. Or –runsudo make install from the build directory, then get config template from dist/share/configs and produce proper one in any way/opt/cellframe-node/etc. Anyway, we suggest you create the package with a command cpack from the build directory.

Install from the local package

If you downloaded or built from the sources a Debian package like cellframe-node_2.11-4-buster_amd64.deb you need to install it by means of running dpkg command. Example:

dpkg -i -plow  ./cellframe-node_2.11-4-buster_amd64.deb

Install from DemLabs official public repository

  • Create file /etc/apt/sources.list.d/demlabs.list with one line below for Debian 10:
deb https://debian.pub.demlabs.net/ buster main
  • Command for Ubuntu 18 (Bionic):
deb https://debian.pub.demlabs.net/ bionic main universe
  • Then download the public signature and install it:
wget https://debian.pub.demlabs.net/debian.pub.demlabs.net.gpg
apt-key add demlabskey.asc
  • Then update your apt cache and install the package:
apt-get update
apt-get install cellframe-node

During installation, it will ask the questions which are listed below.

Debian package questions

Note, that all of this can be changed afterward in configs.

  • Auto online. If true, the node goes online after the start and then tries to keep this state automatically.
  • Debug mode. If true it – would produce more log output in files. Suggested to set true true until the testing period
  • Debug stream headers. Dump stream headers in logs, set true only if you want to get more debug information about stream packages passing through. Suggested false for almost everybody
  • Accept connections. Enable/disable listening to the state of the network address. Set false if you don’t want to accept network connections to your node.
  • Server address. Network addresses used for listening. Set if you want to listen to all network interfaces on your computer.
  • Server port (optional, usually not required). Server port is 8079 by default, but sometimes it is better to set it to 80 or 443 to masquerade a service as a web service.
  • Kelvin-testnet: Enable network Set totrue if you want to connect your node with kelvin-testnet
  • Kelvin-testnet: Node type (role) Select node type (or node role) from the suggested list with short descriptions. By default suggested selecting full

How to configure VPN service node

Node basic configuration

Open /opt/cellframe-node/etc/cellframe-node.conf with command sudo nano /opt/cellframe-node/etc/cellframe-node.conf and find next section:

# VPN stream channel processing module
# Turn to true if you want to share VPN service from you node
# List of loca security access groups. Built in: expats,admins,services,nobody,everybody

Turn enabled parameter to true and that will enable VPN service on your node. The next lines, such asnetwork_address and network_mask you don't need to touch. Note, that the default configuration reserves network addresses for 254 connections at one time, and if you have more — you need to change network mask to smth like and network address to that will provide gives you 4095 local addresses. This is important – all the addresses are local and used only inside a virtual private network (VPN). OS should be configured for this address and mask – present DNS server, switched on IP4 forwarding and configured NAT. Examples of such configurations are below: Next line pricelist if commented out it shares service for free.

Configuration of a pricelist

Pricelist line has a list of values, split with : symbol. Let’s see the example kelvin-testnet:0.00001:KELT:3600:SEC:mywallet0:

  1. kelvin-testnet it is the name of the network chain where the token is issued
  2. 0.00001 price per units. Important: not for one unit but for all the units, in our example – for 1 hour.
  3. KELT token ticker which is used for payments
  4. 3600 units number that means a costs price 0.00001
  5. SEC unit type, could be SEC for seconds, DAY for days, MB for megabyte. IMPORTANT: if selected MB accounting, it would enable another billing logic — it will be based not on time, but passed amount of traffic
  6. mywallet wallet name for accommodation of payments. It should be created preliminary with cellframe-node-cli. It is used for signing conditioned transactions with receipts.

You could enter any values of prices.

DNS server installation

You need to install DNS server. It could be any other than Bind9, but for example, we will use this one

sudo apt-get install bind9

Switch on IPv4 forwarding

Open /etc/sysctl.conf with command sudo nano /etc/sysctl.conf and find line

# Uncomment the next line to enable packet forwarding for IPv4

It is at 27–28 line in config. Uncomment net.ipv4.ip_forward=1. After you've changed it and saved changes, implement it with:

sudo sysctl -p

The operation is complete. After the reboot it will be implemented automatically

Configuring firewall with NAT

The simplest way is to install arno-iptables-firewall is by running the next command:

sudo apt-get install arno-iptables-firewall

The following questions will be asked during the installation:

  • External network interfaces answer with your network interface that is used for internet access. Usually, its eth0or wifi0 but could be different, examine your network configuration first
  • Do you want to manage the firewall setup with debconf answer Yes
  • External network interfaces answer tun0 if you haven't configured any other VPN servers. If you had – find what the tunnel number is biggest and list all of them here with your tunnel name (tun<max number plus 1> )
  • Open external TCP-ports answer 8079 or whatever the port you used to configured the Cellframe node when it was installed
  • Open external UDP-ports: answer the same as in previous
  • Internal network interfaces answer tun0 if you haven't configured any other VPN servers. If they are – find what the tunnel number is biggest and list all of them here with your tunnel name (tun<max number plus 1> )
  • Internal subnets here should be network_address/network_mask from VPN service configuration, in our example
  • Should be restarted answer No because we need some more configs

Now, let’s increase config ask level and reconfigure the package with the next command:

sudo dpkg-reconfigure -plow arno-iptables-firewall

For answers where you’ll see the right answers just press enter to skip them. Then, the next questions should appear:

  • Is DHCP used on external interfaces? usually answer Yes, answer No only if you have static network configuration for external connections
  • Should the machine be pingable from the outside world? answer Yes because we use pings for network speed measurements
  • Do you want to enable NAT? answer Yes
  • Internal networks with access to external networks: here is your list of internal networks again, in our example
  • Should the firewall be (re)started now? now answer Yes and have everything ready for routing

How to run


If the node is installed in your system, you need to check if it runs properly.

sudo service cellframe-node status

And if it is doesn’t run properly — start it. Right after the reboot it should be executed automatically.

sudo service cellframe-node start

To stop it use the next command:

sudo service cellframe-node start

It is not a rocket science, isn’t it?!



Instruction to launch a Cellframe node.

Telegram group where you can ask your questions directly to CTO: https://t.me/cellframe