Go to file
Leo Antunes 5e01de00c1 first working PoC 2019-03-26 23:32:36 +01:00
.gitignore first working PoC 2019-03-26 23:32:36 +01:00
LICENSE Initial commit 2019-03-26 23:30:33 +01:00
README.md first working PoC 2019-03-26 23:32:36 +01:00
cluster.go first working PoC 2019-03-26 23:32:36 +01:00
config.go first working PoC 2019-03-26 23:32:36 +01:00
go.mod first working PoC 2019-03-26 23:32:36 +01:00
go.sum first working PoC 2019-03-26 23:32:36 +01:00
main.go first working PoC 2019-03-26 23:32:36 +01:00
wireguard.go first working PoC 2019-03-26 23:32:36 +01:00

README.md

wesher

Mesh overlay network manager, using wireguard.

⚠ WARNING: since mesh membership is controlled by a mesh-wide pre-shared key, this effectively downgrades some of the security benefits from wireguard. See "security considerations" below for more info.

Quickstart

Before starting, make sure wireguard is installed on all nodes.

Install wesher on all nodes with:

$ go get github.com/costela/wesher

On the first node (assuming $GOPATH/bin is in the $PATH):

# wesher

Running the command above on a terminal will currently output a generated cluster key, like:

new cluster key generated: XXXXX

Then, on any further node:

# wesher --clusterkey XXXXX --joinaddrs x.x.x.x

Where XXXXX is the base64 encoded 32 bit key printed by the step above and x.x.x.x is the hostname or IP of any of the nodes already joined to the mesh cluster.

Note: wireguard, and therefore wesher, need root access.

Overview

Configuration options

Security considerations

The decision of whom to allow in the mesh is made by memberlist and is secured by a cluster-wide pre-shared key. Compromise of this key will allow an attacker to:

  • access services exposed on the overlay network
  • impersonate and/or disrupt traffic to/from other nodes It will not, however, allow the attacker access to decrypt the traffic between other nodes.

This pre-shared key is currently static, set up during cluster bootstrapping, but will - in a future version - be rotated.

Current known limitations

Overlay IP collisions

Since the assignment of IPs on the overlay network is currently decided by the individual node and implemented as a naive hashing of the hostname, there can be no guarantee two hosts will not generate the same overlay IPs. This limitation may be worked around in a future version.