Skip to main content

Distributed encrypted storage on a mesh VPN network

Project description

RedundaNet - Distributed Encrypted Storage Network

RedundaNet is a distributed, encrypted storage system built on a secure mesh VPN network. It enables users to contribute storage resources to a collective grid while maintaining privacy through end-to-end encryption.

Features

  • Decentralized Architecture: No central authority or single point of failure
  • End-to-End Encryption: Data is encrypted before leaving the user's device using Tahoe-LAFS
  • GPG-Based Authentication: Secure node identity verification
  • Private Networking: Secure Tinc mesh VPN isolates the storage network from the public internet
  • Erasure Coding: Data is split and distributed across multiple nodes (3-of-10 scheme by default)
  • Resource Sharing: Users contribute resources and benefit from the collective capacity
  • Containerized Deployment: Easy setup with Docker Compose
  • Python-Based CLI: Modern CLI with Typer for easy management

Architecture

graph TD
    subgraph "User Node"
        A[redundanet CLI] --> B[Tahoe Client]
        B --> C[Tinc VPN]
    end

    subgraph "Storage Node 1"
        D[Tinc VPN] --> E[Tahoe Storage]
        E --> F[Local Storage]
    end

    subgraph "Storage Node 2"
        G[Tinc VPN] --> H[Tahoe Storage]
        H --> I[Local Storage]
    end

    subgraph "Introducer Node"
        J[Tinc VPN] --> K[Tahoe Introducer]
    end

    C -->|Encrypted VPN| D
    C -->|Encrypted VPN| G
    C -->|Encrypted VPN| J

    K -.->|Introduction Services| B
    K -.->|Introduction Services| E
    K -.->|Introduction Services| H

Quick Start

Prerequisites

  • Python 3.11+
  • Docker and Docker Compose
  • GPG (for key management)

Installation

Using pip (recommended)

pip install redundanet

Using Poetry (for development)

git clone https://github.com/adefilippo83/project-earthgrid.git
cd project-earthgrid
poetry install

Initialize a Node

# Interactive setup
redundanet init

# Or with options
redundanet init --node-name my-node --vpn-ip 10.100.0.10

Start Services with Docker

# Start as a storage node
docker compose -f docker/docker-compose.yml --profile storage up -d

# Start as a client only
docker compose -f docker/docker-compose.yml --profile client up -d

# Start as an introducer (network coordinator)
docker compose -f docker/docker-compose.yml --profile introducer up -d

Check Status

redundanet status

CLI Commands

redundanet --help

Commands:
  init        Initialize a new node
  status      Show node and network status
  sync        Sync manifest from repository
  validate    Validate manifest file

  node        Node management commands
    list      List all nodes in the network
    info      Show detailed node information
    add       Add a new node to manifest
    remove    Remove a node from manifest

  network     Network management
    join      Join an existing network
    leave     Leave the network
    peers     Show connected peers
    vpn       VPN management (start/stop/status)

  storage     Storage management
    status    Show storage status
    mount     Mount Tahoe filesystem
    unmount   Unmount filesystem
    upload    Upload a file
    download  Download a file

Configuration

RedundaNet uses a YAML manifest file to define network configuration:

network:
  name: my-network
  version: "1.0.0"
  domain: redundanet.local
  vpn_network: 10.100.0.0/16

tahoe:
  shares_needed: 3
  shares_happy: 7
  shares_total: 10
  introducer_furl: pb://...

nodes:
  - name: node1
    internal_ip: 192.168.1.10
    vpn_ip: 10.100.0.1
    public_ip: 1.2.3.4
    gpg_key_id: ABCD1234
    roles: [introducer, storage]
    storage_contribution: 500GB

Development

Setup Development Environment

# Clone repository
git clone https://github.com/adefilippo83/project-earthgrid.git
cd project-earthgrid

# Install dependencies
make install

# Run tests
make test

# Run linting
make lint

# Run type checking
make type-check

Project Structure

redundanet/
├── src/redundanet/          # Main Python package
│   ├── cli/                 # Typer CLI commands
│   ├── core/                # Core business logic
│   ├── vpn/                 # Tinc VPN management
│   ├── storage/             # Tahoe-LAFS integration
│   ├── auth/                # GPG authentication
│   ├── network/             # Network utilities
│   └── utils/               # Shared utilities
├── docker/                  # Docker configurations
├── tests/                   # Test suite
├── docs/                    # Documentation
└── manifests/               # Example manifests

Documentation

Contributing

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Make your changes
  4. Run tests (make test)
  5. Run linting (make lint)
  6. Commit your changes (git commit -m 'Add amazing feature')
  7. Push to the branch (git push origin feature/amazing-feature)
  8. Open a Pull Request

License

This project is licensed under the GPL License - see the LICENSE file for details.

Acknowledgments

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

redundanet-2.0.0.tar.gz (51.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

redundanet-2.0.0-py3-none-any.whl (64.6 kB view details)

Uploaded Python 3

File details

Details for the file redundanet-2.0.0.tar.gz.

File metadata

  • Download URL: redundanet-2.0.0.tar.gz
  • Upload date:
  • Size: 51.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for redundanet-2.0.0.tar.gz
Algorithm Hash digest
SHA256 f21c0110f51ccc4718e9cada196b66a4f78b2b84afa375f1728157d52e774340
MD5 306349ad3e05351b769d754b7dc5ff65
BLAKE2b-256 2d98692b46be369c43efa30c50e0ea2f9ebfbf38c368ef08660882be0ddc04b4

See more details on using hashes here.

Provenance

The following attestation bundles were made for redundanet-2.0.0.tar.gz:

Publisher: release.yml on adefilippo83/redundanet

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file redundanet-2.0.0-py3-none-any.whl.

File metadata

  • Download URL: redundanet-2.0.0-py3-none-any.whl
  • Upload date:
  • Size: 64.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for redundanet-2.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 0ecf863bd999def65a2b90a1acffdbf765ced28cdccfb96b9924fef8ae235551
MD5 50bf0e8bef9d800fc20e7d353f7d2e35
BLAKE2b-256 23cdb3b2c93c4b306d1ae65c87314229d6932ac604dae7fc57903cd1d5e7b048

See more details on using hashes here.

Provenance

The following attestation bundles were made for redundanet-2.0.0-py3-none-any.whl:

Publisher: release.yml on adefilippo83/redundanet

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page