Crate innisfree

Source
Expand description

Innisfree, a project for exposing local network services via a public cloud IP. The traffic is routed transparently from a cloud VM to the local machine running innisfree via an ad-hoc Wireguard tunnel. Multiple services can be configured, via crate::config::ServicePort.

Right now, only TCP traffic is supported, but UDP support is planned. As for cloud providers, only DigitalOcean is supported, but adding others should be fairly straightforward.

Modulesยง

config
Storage logic, to persist configuration of remote tunnels locally. Includes methods for creating and destroying configuration directories.
manager
High-level controller logic for managing service proxies, i.e. TunnelManager.
net
Utility functions for looking up available IP ranges for establishing the Wireguard interface.
proxy
Core network proxy logic, for passing traffic between TCP sockets. Right now, only TCP is supported, but UDP support would be dope.
server
Abstract representation of remote server. Designed to be modular in terms of providers, but really only supports DigitalOcean. The abstract struct is InnisfreeServer, but underneath it assumes implementation as a DigitalOcean Droplet.
ssh
Utility functions for generating OpenSSH keypairs. These keypairs are used for both client and server identities. The client-side keys are written to a local config dir, by default ~/.config/innisfree/<service>; the server keys are placed inside a cloudinit YAML file and passed in during instance creation.
wg
Functions for managing Wireguard connections. Includes methods for generating keypairs (WireguardKeypair::new), for configuring interfaces (WireguardHost),