DCS – A Distributed Cloud Storage Network

Created by Richard Zins

DCS is an open source distributed cloud storage solution for users who don’t want to depend on large corporations to keep their data safe and secure. The Master Node stores information about how much storage each Node has available and nothing else. This means that this central service should not be a point of interest for attackers. All communications are bidirectional using a custom protocol that implements requests and responses between all entities. Clients store each data file that they want to upload on individual Nodes across the network. This allows the user’s data to be distributed all over the world. Also all communications are encrypted over TLS so the user’s data is safe from attackers monitoring their network traffic. Most importantly since this project is open source development is community driven, and it can be easily forked/adapted to meet that communities specific needs.

Architecture
Intuitive CLI
Custom Protocol

Architecture

The architecture of this project consist of a Master Node, Node, and a Client. The Master Node stores information about all the other Nodes on the network. All the other Nodes store the end users’ data. While the Client interacts with both the Master Node and Node entities in order to find and transmit that user’s data.

Custom Protocol

A custom plain text network protocol was implemented to make managing states between the different entities easier. A typical example sequence might be a Node adds itself to the Master Nodes list of available Nodes; the Client requests a Node with enough available storage to store its file from the Master Node; the Client then requests to store its file on the Node the Master Node returned; once the file is stored on the Node the Client can retrieve it and/or remove the file from that Node.

Intuitive CLI

Given what the user can do on the network is limited a simple command line interface made more sense for this project than a GUI. From the CLI the user can store a file on the network; retrieve a file from the network; remove a file from the network; get publicly available information on the host of the Nodes that store their files; and review all the commands with the help function.