webmeshproj / webmesh

A simple, distributed, zero-configuration WireGuard mesh solution
https://webmeshproj.github.io
Apache License 2.0
425 stars 16 forks source link

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:

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

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.