Giter Club home page Giter Club logo

webmesh's Introduction

Webmesh

Go Report Card Build and Tests Go Reference Sponsor

Webmesh is a simple, distributed, and zero-configuration WireGuard™ mesh solution for Linux, FreeBSD, macOS, and Windows. It allows for easily creating a mesh network between multiple hosts, and provides a simple API for managing the network. It is designed to be easy to use, and to work well with existing network infrastructure. For a more detailed introduction and extended documentation, please see the project website.

Webmesh is not a VPN, but rather a mesh network. It is designed to be used in conjunction with existing network infrastructure, and not as a replacement for it. It is also not a replacement for WireGuard™, but rather a way to manage a WireGuard™ mesh network. Connections are made into the network via direct links, over ICE (WebRTC) connections, or over LibP2P circuit relays. It differs from other WireGuard™ management solutions in that:

  • It is designed to be distributed and extensible, relying on no single controller or database.
  • The network is malleable and topology is governed by the user, not the controller.
  • A plugin API is provided for adding additional functionality, such as a distributed database for storing the mesh state or additional authentication mechanisms.
  • An application API is also provided for interacting with the mesh network, and is used by the CLI and GUI applications.

Getting Started

Install Webmesh

Detailed instructions can be found in the Getting Started guide on the project website. For examples of different topologies and the various features available, see the examples directory.

Developers

Integrating your project with Webmesh networks is easy. All APIs are written in protobuf in the API repository. Applications can integrate either via the webmeshd process or by embedding this package directly.

Libraries and other integrations are available for the following languages and environments:

More documentation on direct embedding will be provided later. For now, you can find examples in the examples/embedded directory. The godoc for the embed package is also a good place to start.

Building

The Makefile contains several targets for building the project. You can run make help to see all the available targets.

Roadmap

  • More storage provider implementations.
  • Potential SaaS offering for those who don't want to run their own controllers or have a simple off-site backup of the mesh state.

Most other functionality that is provided by other similar projects already exists in the kernel or in other projects. For example, NAT64 and DNS64 have several ways of being configured, but could still be seen as a potential common use-case. There is a question as to how many of those things should be "auto-configured" by a node and how much should be left up to the user.

Contributing

Contributions are welcome and encouraged. Please see the contributing docs for more information.

Community

Join me on Discord or in the webmesh channel on the Gophers Slack.

Special Thanks

The developers of rqlite for inspiration on managing a distributed database.

The incredible work done by the pion team for WebRTC in Go.

Legal

WireGuard is a registered trademark of Jason A. Donenfeld.

Support

Become a Github Sponsor.

webmesh's People

Contributors

tinyzimmer avatar therook avatar emmygozi avatar bbigras avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.