A tool to aid in self-hosting. Expose local services on your computer, via a public IPv4 address.

Overview

innisfree

A tool to aid in self-hosting. Expose local services on your computer, via a public IPv4 address.

Why?

Most of the data I maintain is local, within my house, or otherwise on a machine that I control. Uploading that information to a cloud server doesn't always make sense. For one, it's not private: the cloud provider has direct access to all the files I upload. Second, if I have large amounts of data, such as a music collection, it's both expensive and inefficient to upload all that data to the cloud simply so that I can access it remotely.

Mostly, I just want an IP address tied to a service I'm running. I don't want to publish my home IP in DNS records. I don't want to open ports on my home router to allow traffic in.

How it works

When you run innisfree up, the program performs the following steps:

  1. Checks for DIGITALOCEAN_API_TOKEN env var, so it can access the DigitalOcean cloud provider.
  2. Generates keypairs locally, for trusted connections over SSH and Wireguard.
  3. Creates a new cloud server, configured with those keypairs.
  4. Builds a Wireguard connection between your local computer and the server.
  5. Configures nginx on the server, to pass traffic from the public IP of the server to select services you're running locally (by default, 8080/TCP,443/TCP).
  6. If a --dest-ip was specified, configures a local proxy to pass traffic from the local Wireguard interface to another service locally. Useful when the local service is running on an address other than localhost.

Installation

There are deb packages available in the Releases page on this repo. You can install directly from source:

# Build a deb package and install it locally
make install

Requirements

  1. Linux-only. Even if the binary compiles under macOS, userspace implementations of Wireguard are still up-and-coming.
  2. Wireguard. For most modern Linux distros, this is available out of the box. Notably, Debian Stable Buster 10 lacks it, but it's available in the buster-backports repo. Run innisfree doctor to check support your machine.
  3. A DigitalOcean cloud account, to create a server.

Usage

USAGE:
    innisfree [SUBCOMMAND]

FLAGS:
    -h, --help       Prints help information
    -V, --version    Prints version information

SUBCOMMANDS:
    doctor    Run checks to evaluate platform support
    help      Prints this message or the help of the given subcommand(s)
    ip        Display IPv4 address for cloud node
    proxy     Start process to forward traffic, assumes tunnel already up
    ssh       Open interactive SSH shell on cloud node
    up        Create new innisfree tunnel

What's with the name?

It's from the Yeats poem:

I will arise and go now, and go to Innisfree,
And a small cabin build there, of clay and wattles made:
Nine bean-rows will I have there, a hive for the honey-bee;
And live alone in the bee-loud glade.

The idea is that in context of the internet, my own home is already the "bee-loud glade": I don't need to upload all my data into the hustle and bustle of cloud computing. Just give me an IP, so I can share data with others, and that's enough.

License

AGPLv3

You might also like...
A small utility to wake computers up or put them to sleep over the local network

WKSL - a wake and sleep utility An experiment in writing a small CLI utility in Rust. The program lets you wake a machine on your local network up fro

A modern, simple TCP tunnel in Rust that exposes local ports to a remote server, bypassing standard NAT connection firewalls
A modern, simple TCP tunnel in Rust that exposes local ports to a remote server, bypassing standard NAT connection firewalls

bore A modern, simple TCP tunnel in Rust that exposes local ports to a remote server, bypassing standard NAT connection firewalls. That's all it does:

Open Internet Service to store transaction history for NFTs/Tokens on the Internet Computer
Open Internet Service to store transaction history for NFTs/Tokens on the Internet Computer

CAP - Certified Asset Provenance Transaction history & asset provenance for NFT’s & Tokens on the Internet Computer CAP is an open internet service pr

Cover is an open internet service for canister code verification on the Internet Computer
Cover is an open internet service for canister code verification on the Internet Computer

Cover Cover (short for Code Verification) is an open internet service that helps verify the code of canisters on the Internet Computer. Visit our webs

Final Project for
Final Project for "Computer Networking Security": A Layer-3 VPN implementation over TLS

Final Project for "Computer Networking Security": A Layer-3 VPN implementation over TLS

Automatic HTTPS certificates for trillium.rs, via Let's Encrypt and ACME tls-alpn-01 challenges

trillium-acme helps you serve HTTPS with Trillium using automatic certificates, via Let’s Encrypt and ACME tls-alpn-01 challenges. To use trillium-acm

Acts as an IRC server and a nostr client. Connect with your IRC client using your nostr private key as the password.

nostr-irc Acts as an IRC server and a nostr client. Connect with your IRC client using your nostr private key as the password. Experimental code, use

Userspace libpcap-based tool to mirror your dns traffic

DNS traffic mirroring tool (dns-mirror) Description Userspace libpcap-based tool. dns-mirror sniffs dns packets on the given interface and proxies it

An handy tool that is intended to help your inventory cleanup or dump.

NeosVR Inventory Management Notes to foreign users This readme is written in Japanese. Please use external tool to translate this document into your l

Releases(v0.2.16)
Owner
Conor Schaefer
Conor Schaefer
Imagine your SSH server only listens on an IPv6 address, and where the last 6 digits are changing every 30 seconds as a TOTP code...

tosh Imagine your SSH server only listens on an IPv6 address, and where the last 6 digits are changing every 30 seconds as a TOTP code... Inspired fro

Mark Vainomaa 409 Oct 23, 2022
Automatically updates your Cloudflare DNS records for specific zones. Especially useful if you have dynamic IP address

Cloudflare DNS updater What does it do? Cloudflare DNS updater updates specified dns records for specified zones effortlessly and automatically. It wa

Niko Huuskonen 8 Aug 30, 2022
Test the interception/filter of UDP 53 of your local networks or hotspots.

udp53_lookup Test the interception/filter of UDP 53 of your local networks or hotspots. Inspired by BennyThink/UDP53-Filter-Type . What's the purpose?

null 1 Dec 6, 2021
A rust-based command line tool to serve as a gateway for a Internet Computer replica.

icx-proxy A command line tool to serve as a gateway for a Internet Computer replica. Contributing Please follow the guidelines in the CONTRIBUTING.md

DFINITY 25 Sep 6, 2022
Make every request from a separate IPv6 address.

Http Proxy IPv6 Pool Make every request from a separate IPv6 address. https://zu1k.com/posts/tutorials/http-proxy-ipv6-pool/ Tutorial Assuming you alr

zu1k 280 Dec 31, 2022
A collection of lower-level libraries for composable network services.

Actix Net A collection of lower-level libraries for composable network services. Example See actix-server/examples and actix-tls/examples for some bas

Actix 582 Dec 28, 2022
Off-chain services for Gnosis Protocol v2

Cow Protocol Services This repository contains backend code for Cow Protocol Services written in Rust. Order Book The orderbook crate provides the htt

CoW Protocol 42 Jan 3, 2023
An application for downloading public domain ebooks from irc.

An application for downloading public domain ebooks from irc. Despite the name it is not to be used for illegal activities and I am in no way responsible for any such use.

null 33 Nov 25, 2022
Self-hosted, fast, and efficient replacement for ngrok, built with Rust

reverse-proxy reverse-proxy is a self-hosted, fast, and efficient replacement for ngrok, built with Rust. The project leverages the power of Tokio and

null 4 May 22, 2023
Minimal self-contained crate to accept file descriptors from systemd

sd-listen-fds Exposes file descriptors passed in by systemd, the Linux init daemon, without dependencies, foreign or otherwise. Enables easy implement

Benjamin Saunders 3 Aug 14, 2023