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
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Make your changes
- Run tests (
make test) - Run linting (
make lint) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
License
This project is licensed under the GPL License - see the LICENSE file for details.
Acknowledgments
- Tahoe-LAFS - Distributed storage system
- Tinc VPN - Mesh VPN daemon
- Typer - CLI framework
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f21c0110f51ccc4718e9cada196b66a4f78b2b84afa375f1728157d52e774340
|
|
| MD5 |
306349ad3e05351b769d754b7dc5ff65
|
|
| BLAKE2b-256 |
2d98692b46be369c43efa30c50e0ea2f9ebfbf38c368ef08660882be0ddc04b4
|
Provenance
The following attestation bundles were made for redundanet-2.0.0.tar.gz:
Publisher:
release.yml on adefilippo83/redundanet
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
redundanet-2.0.0.tar.gz -
Subject digest:
f21c0110f51ccc4718e9cada196b66a4f78b2b84afa375f1728157d52e774340 - Sigstore transparency entry: 821005221
- Sigstore integration time:
-
Permalink:
adefilippo83/redundanet@e7c5a425c35ad6c1d243b9183ce36c1a6b1bac8a -
Branch / Tag:
refs/tags/v0.1-alpha1 - Owner: https://github.com/adefilippo83
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@e7c5a425c35ad6c1d243b9183ce36c1a6b1bac8a -
Trigger Event:
push
-
Statement type:
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0ecf863bd999def65a2b90a1acffdbf765ced28cdccfb96b9924fef8ae235551
|
|
| MD5 |
50bf0e8bef9d800fc20e7d353f7d2e35
|
|
| BLAKE2b-256 |
23cdb3b2c93c4b306d1ae65c87314229d6932ac604dae7fc57903cd1d5e7b048
|
Provenance
The following attestation bundles were made for redundanet-2.0.0-py3-none-any.whl:
Publisher:
release.yml on adefilippo83/redundanet
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
redundanet-2.0.0-py3-none-any.whl -
Subject digest:
0ecf863bd999def65a2b90a1acffdbf765ced28cdccfb96b9924fef8ae235551 - Sigstore transparency entry: 821005224
- Sigstore integration time:
-
Permalink:
adefilippo83/redundanet@e7c5a425c35ad6c1d243b9183ce36c1a6b1bac8a -
Branch / Tag:
refs/tags/v0.1-alpha1 - Owner: https://github.com/adefilippo83
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@e7c5a425c35ad6c1d243b9183ce36c1a6b1bac8a -
Trigger Event:
push
-
Statement type: