All Projects → seashell → Drago

seashell / Drago

Licence: apache-2.0
A flexible configuration manager for Wireguard networks

Programming Languages

go
31211 projects - #10 most used programming language
golang
3204 projects

Projects that are alternatives of or similar to Drago

Awareness
The new architecture of co-computation for data processing and machine learning.
Stars: ✭ 11 (-94.61%)
Mutual labels:  cloud, iot, networking
Rest980
REST interface to control your iRobot Roomba 980 via local server on your lan.
Stars: ✭ 186 (-8.82%)
Mutual labels:  api, cloud, iot
Zenoh
zenoh unifies data in motion, data in-use, data at rest and computations. It carefully blends traditional pub/sub with geo-distributed storages, queries and computations, while retaining a level of time and space efficiency that is well beyond any of the mainstream stacks.
Stars: ✭ 182 (-10.78%)
Mutual labels:  iot, networking, edge-computing
Wesher
wireguard overlay mesh network manager
Stars: ✭ 461 (+125.98%)
Mutual labels:  networking, vpn, mesh-networks
Networking
⚡️ Elegantly connect to a REST JSON Api. URLSession + Combine + Decodable + Generics = <3
Stars: ✭ 499 (+144.61%)
Mutual labels:  api, rest-api, networking
V8 Archive
Directus Database API — Wraps Custom SQL Databases with a REST/GraphQL API
Stars: ✭ 486 (+138.24%)
Mutual labels:  api, rest-api, iot
Yomo
🦖 Streaming-Serverless Framework for Low-latency Edge Computing applications, running atop QUIC protocol, engaging 5G technology.
Stars: ✭ 279 (+36.76%)
Mutual labels:  iot, networking, edge-computing
Dorita980
Unofficial iRobot Roomba and Braava (i7/i7+, 980, 960, 900, e5, 690, 675, m6, etc) node.js library (SDK) to control your robot
Stars: ✭ 523 (+156.37%)
Mutual labels:  api, cloud, iot
Drive
☁️ A distributed cloud based lazy drive to files integrated with Dropbox, Google Drive.
Stars: ✭ 36 (-82.35%)
Mutual labels:  api, rest-api, cloud
Apicheck
The DevSecOps toolset for REST APIs
Stars: ✭ 184 (-9.8%)
Mutual labels:  api, rest-api
Awesome Shodan Queries
🔍 A collection of interesting, funny, and depressing search queries to plug into shodan.io 👩‍💻
Stars: ✭ 2,758 (+1251.96%)
Mutual labels:  cloud, iot
Autoserver
Create a full-featured REST/GraphQL API from a configuration file
Stars: ✭ 188 (-7.84%)
Mutual labels:  api, rest-api
Lumen Microservice
Lumen on Docker - Skeleton project with Nginx, MySQL & PHP 7 | Aws ECS, Google Kubernates, Azure Container Engine
Stars: ✭ 183 (-10.29%)
Mutual labels:  api, rest-api
Deviceplane
Open source device management for embedded systems and edge computing
Stars: ✭ 917 (+349.51%)
Mutual labels:  iot, edge-computing
Wirtbot
Easily and securely extend your network into the cloud with a WirtBot
Stars: ✭ 181 (-11.27%)
Mutual labels:  cloud, vpn
Api
API that uncovers the technologies used on websites and generates thumbnail from screenshot of website
Stars: ✭ 189 (-7.35%)
Mutual labels:  api, rest-api
Graphql2rest
GraphQL to REST converter: automatically generate a RESTful API from your existing GraphQL API
Stars: ✭ 181 (-11.27%)
Mutual labels:  api, rest-api
Blynk Server
Blynk is an Internet of Things Platform aimed to simplify building mobile and web applications for the Internet of Things. Easily connect 400+ hardware models like Arduino, ESP8266, ESP32, Raspberry Pi and similar MCUs and drag-n-drop IOT mobile apps for iOS and Android in 5 minutes
Stars: ✭ 8 (-96.08%)
Mutual labels:  rest-api, iot
Aws Lambda Fastify
Insipired by aws-serverless-express to work with Fastify with inject functionality.
Stars: ✭ 190 (-6.86%)
Mutual labels:  api, cloud
Jikan Rest
The REST API for Jikan
Stars: ✭ 200 (-1.96%)
Mutual labels:  api, rest-api



Drago

A flexible configuration manager for WireGuard networks

Go report: A+ GitHub Gitter

Drago is a flexible configuration manager for WireGuard networks which is designed to make it simple to configure network overlays spanning heterogeneous hosts distributed across different clouds and physical locations.

Features

  • Single-binary, lightweight
  • Encrypted node-to-node communication
  • Support for multiple storage backends
  • Dynamic network configuration
  • Support for wireguard-go
  • Automatic key rotation
  • Extensible via REST API
  • Slick management dashboard
  • Automatic IP assignment

Status & Roadmap

We are preparing a new release, which includes significant refactoring, and a bunch of new functionalities targeting production environments. More specifically, we are focusing on:

  • Replacing Postgres with Etcd as the primary storage backend. Etcd will be embedded in the Drago server, hence allowing operation in cluster mode;
  • Implementing an ACL system for fine-grained access control heavily inspired on that provided by Hashicorp Nomad;
  • Refactoring the client, more specifically the node registration and reconciliation mechanisms in order to make them more secure and robust;
  • We're working on supporting plugins (for IP leasing, meshing, discovery, anomaly detection, as well for integrating with other tools we're developing). The idea is to move all non-core functionality to a plugin. As it requires a bit more work, this is probably not going to be ready in the next version, though;
  • Improving the documentation;
  • Improving test coverage.

Any feedback from the community is much appreciated, and so are feature requests.

Use cases

  • Securely connect IoT devices
  • Build your own cloud with RaspberryPIs
  • Connect servers/services running on multiple cloud providers
  • Manage access to sensitive services deployed to private hosts
  • Expose development servers for debugging and demonstration purposes
  • Secure home automation, SSH access, etc
  • Establish secure VPNs for your company

Overview

WireGuard® is an extremely simple yet fast and modern VPN that utilizes state-of-the-art cryptography. It aims to be faster, simpler, leaner, and more useful than IPsec, while avoiding the massive headache. It intends to be considerably more performant than OpenVPN. WireGuard is designed as a general purpose VPN for running on embedded interfaces and super computers alike, fit for many different circumstances. Initially released for the Linux kernel, it is now cross-platform and widely deployable, being regarded as the most secure, easiest to use, and simplest VPN solution in the industry.

WireGuard presents several advantages over other VPN solutions, but it does not allow for the dynamic configuration of network parameters such as IP addresses and firewall rules.

Drago builds on top of WireGuard, allowing users to dynamically manage the configuration of their VPN networks, providing a unified control plane for overlays spanning from containers to virtual machines to IoT devices.

How it works

Drago follows a client-server paradigm, in which a centralized server provides multiple clients running alongside WireGuard with their desired state. The desired state is retrieved from the server in a periodic basis and applied to WireGuard running on each host. In other words, the Drago server works as a gateway for accessing network configurations safely stored in a database.



It exposes a comprehensive API through which these configurations can be retrieved and modified, implements authentication mechanisms to prevent unauthorized access, and serves a slick web UI to facilitate the process of managing and visualizing the state of the managed networks.

The Drago client, which runs on every host in the network, is responsible for directly interacting with the server through the API, and for retrieving the most up-to-date configurations. Through a simple reconciliation process, the Drago client then guarantees that the WireGuard configurations on each host match the desired state stored in the database. When running in client mode, Drago also takes care of automatically generating key pairs for WireGuard, and sharing the public key so that hosts can always connect to each other.

The only assumption made by Drago is that each host running the client is also running WireGuard, and that the host in which the configuration server is located is reachable through the network.

Drago does not enforce any specific network topology. Its sole responsibility is to distribute the desired configurations, and guarantee that they are correctly applied to WireGuard on every single registered host. This means that it is up to you to define how your hosts are connected to each other and how your network should look like.

Drago is meant to be simple, and provide a solid foundation for higher-level functionality. Need automatic IP assignment, dynamic firewall rules, or some kind of telemetry? You are free to implement on top of the already existing API.

Build

System requirements:

  • Golang 1.14+
  • Node 10.17.0+
  • yarn 1.12.3+
$ go generate
$ go build

Alternatively, you can build with make, for example:

$ make dev
...

To see help on building with make, run:

$ make help
...

Usage

drago --help
drago agent --config=<config_file>

Development

Server

Build the UI:

go generate

Start the Drago server with air:

ROOT_SECRET="<my-root-secret>" ./air.sh

Note that the env variable ROOT_SECRET contains the secret used by Drago to sign and check tokens.

UI

Once Drago server is up and running, start a dev server for the web UI:

cd ui
REACT_APP_REST_API_URL="localhost:8080/api/" yarn start

Both the backend server and the UI server have hot-reloading capabilities.

Build and run the Drago client:

sudo ./drago --config="./dist/client.yml"

Contributing

  • Fork it
  • Download your fork (git clone https://github.com/your_username/drago && cd drago)
  • Create your feature branch (git checkout -b my-new-feature)
  • Make changes and stage them (git add .)
  • Commit your changes (git commit -m 'Add some feature')
  • Push to the branch (git push origin my-new-feature)
  • Create new pull request

License

Drago is released under the Apache 2.0 license. See LICENSE.txt

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].