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),