cunicu

module
v0.4.6 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 4, 2023 License: Apache-2.0

README ¶

cunīcu logo

GitHub build goreportcard Codecov License GitHub go.mod Go version Go Reference Contributor Covenant

🚧 cunīcu is currently still in an Alpha state and not usable yet

cunīcu is a user-space daemon managing WireGuard® interfaces to establish a mesh of peer-to-peer VPN connections in harsh network environments.

To achieve this, cunīcu utilizes a signaling layer to exchange peer information such as public encryption keys, hostname, advertised networks and reachability information to automate the configuration of the networking links. From a user perspective, cunīcu alleviates the need of manual configuration such as exchange of public keys, IP addresses, endpoints, etc.. Hence, it adopts the design goals of the WireGuard project, to be simple and easy to use.

Thanks to Interactive Connectivity Establishment (ICE), cunīcu is capable to establish direct connections between peers which are located behind NAT firewalls such as home routers. In situations where ICE fails, or direct UDP connectivity is not available, cunīcu falls back to using TURN relays to reroute traffic over an intermediate hop or encapsulate the WireGuard traffic via TURN-TCP.

It relies on the awesome pion/ice package for ICE as well as bundles the a Go user-space implementation of WireGuard in a single binary for systems in which WireGuard kernel support has not landed yet.

With these features, cunīcu can be used to quickly build multi-agent systems or connect field devices such as power grid monitoring infrastructure into a fully connected mesh. Within the ERIGrid 2.0 project, cunīcu is used to interconnect smart grid laboratories for geographically distributed simulation of energy systems.

Documentation

cunīcu's documentation can be found here: cunicu.li/docs.

Authors

License

cunīcu is licensed under the Apache 2.0 license.

  • SPDX-FileCopyrightText: 2023 Steffen Vogel post@steffenvogel.de
  • SPDX-License-Identifier: Apache-2.0

Funding acknowledgement

The project has been initiated by Steffen Vogel while working at the Institute for Automation of Complex Power Systems (ACS) of RWTH Aachen University.

European Flag The development of cunīcu has been supported by the ERIGrid 2.0 project of the H2020 Programme under Grant Agreement No. 870620

Trademark

WireGuard and the WireGuard logo are registered trademarks of Jason A. Donenfeld.

Directories ¶

Path Synopsis
cmd
cunicu
Package main implements the command line interface
Package main implements the command line interface
pkg
buildinfo
Package buildinfo provides access to build-time information such as the build date and version control details
Package buildinfo provides access to build-time information such as the build date and version control details
config
Package config defines, loads and parses project wide configuration settings from various sources
Package config defines, loads and parses project wide configuration settings from various sources
crypto
Package crypto implements basic crypto primitives used in the project
Package crypto implements basic crypto primitives used in the project
daemon
Package watcher keeps track and monitors for new, removed and modified WireGuard interfaces and peers.
Package watcher keeps track and monitors for new, removed and modified WireGuard interfaces and peers.
daemon/feature/autocfg
Package autocfg handles initial auto-configuration of new interfaces and peers
Package autocfg handles initial auto-configuration of new interfaces and peers
daemon/feature/epdisc
Package epdisc implements endpoint (EP) discovery using Interactive Connection Establishment (ICE).
Package epdisc implements endpoint (EP) discovery using Interactive Connection Establishment (ICE).
daemon/feature/hsync
Package hsync synchronizes /etc/hosts with pairs of peer hostname and their respective IP addresses
Package hsync synchronizes /etc/hosts with pairs of peer hostname and their respective IP addresses
daemon/feature/pdisc
Package pdisc implements peer discovery based on a shared community passphrase.
Package pdisc implements peer discovery based on a shared community passphrase.
daemon/feature/rtsync
Package rtsync synchronizes the kernel routing table with the AllowedIPs of each WireGuard peer
Package rtsync synchronizes the kernel routing table with the AllowedIPs of each WireGuard peer
device
Package device implements OS abstractions for managing WireGuard links
Package device implements OS abstractions for managing WireGuard links
ice
Package ice extends the pion/ice package with custom (un-)marshaling support
Package ice extends the pion/ice package with custom (un-)marshaling support
log
Package log implements adapters between logging types of various used packages
Package log implements adapters between logging types of various used packages
net
os
proto
Package proto contains auto-generated Go-code based of Protobuf descriptions
Package proto contains auto-generated Go-code based of Protobuf descriptions
rpc
Package rpc implements a gRPC client and server for management and monitoring of a cunicu daemon
Package rpc implements a gRPC client and server for management and monitoring of a cunicu daemon
selfupdate
Package selfupdate implements a cryptographically secured self-update mechanism which fetches binaries via GitHub's API.
Package selfupdate implements a cryptographically secured self-update mechanism which fetches binaries via GitHub's API.
signaling
Package signaling implements various signaling backends to exchange encrypted messages between peers
Package signaling implements various signaling backends to exchange encrypted messages between peers
signaling/grpc
Package grpc implements a signaling backend using a central gRPC service
Package grpc implements a signaling backend using a central gRPC service
signaling/inprocess
Package inprocess implements an in-process signaling backend using Go channels
Package inprocess implements an in-process signaling backend using Go channels
tty
wg
Package wg provides various helpers for WireGuard
Package wg provides various helpers for WireGuard
wg/tracer/kernel
Package kernel defines some constants of the Kernel version and arch for which the code has been generated
Package kernel defines some constants of the Kernel version and arch for which the code has been generated
Package test implements universal helpers for unit and integration tests
Package test implements universal helpers for unit and integration tests

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL