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. Both TCP and
UDP are supported (see crate::proxy).
Only DigitalOcean is implemented as a cloud backend, but adding others should be fairly straightforward — see crate::server::Provider.
Modules§
- config
- Storage logic, to persist configuration of remote tunnels locally. Includes methods for creating and destroying configuration directories.
- doctor
- Pre-flight checks for the local environment.
- 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.
- providers
- Construction helpers for backend cloud providers.
- proxy
- Core network proxy logic for forwarding TCP and UDP traffic between two sockets.
- server
- Abstract representation of a remote server, plus the
Providerfactory that knows how to bring one up. - 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; the server keys are placed inside a cloudinit YAML file and passed in during instance creation.
- state
- On-disk layout for per-tunnel state.
- systemd
- Render the systemd unit (
innisfree@.service) from the in-tree Tera template atfiles/innisfree@.service. - wg
- Functions for managing Wireguard connections.
Includes methods for generating keypairs (
WireguardKeypair::new), for configuring interfaces (WireguardHost),