An easy-to-use tool for exposing local services to the Internet, using a remote cloud machine as a passage https://jauto-heberge.fr
  • Rust 96.1%
  • Shell 3.9%
Find a file
2026-10-09 11:49:48 +02:00
docs Create icon 2026-10-09 11:07:28 +02:00
src Save drawings 2026-10-09 10:27:12 +02:00
.gitignore Prepare first test release 2026-10-03 23:48:48 +02:00
Cargo.lock Update README, some commands and prepare 1.0 release 2026-10-08 16:42:41 +02:00
Cargo.toml Update README, some commands and prepare 1.0 release 2026-10-08 16:42:41 +02:00
CONTRIBUTING.md Add CONTRIBUTING.md 2026-10-09 11:12:28 +02:00
jauto-expose.iml WIP 2026-10-02 10:37:01 +02:00
LICENSE Prepare first test release 2026-10-03 23:48:48 +02:00
README.md Translate README to french 2026-10-09 11:49:48 +02:00
README_fr.md Translate README to french 2026-10-09 11:49:48 +02:00
release.sh Translate README to french 2026-10-09 11:49:48 +02:00
rust-toolchain Prepare first test release 2026-10-03 23:48:48 +02:00

project icon J'auto-expose

An easy-to-use tool for exposing local services to the Internet, using a remote cloud machine as a passage.

version en français

A typical challenge when self-hosting is how to make your services (say, your personal blog) accessible to anyone on the open Internet. Some Internet providers give you a dedicated IP and allow you to configure your router to redirect the necessary ports if you feel like doing it.

However, for a multitude of other reasons, that typical solution may not be available for you. Say, maybe you don't have access to the router, or you prefer not changing it, or you're hosting in a Raspberry Pi tethering from your phone, etc...

This tool allows you to expose one or more TCP ports in a "home computer" using a "cloud computer". A general overview of the steps to achieve this is schematised below:

Goals

Jauto-expose is meant to be simple to use, especially for people less familiarised with systemd, networking and Linux overall. It provides the commands configure-cloud and configure-home to help configuring and setting everything up. It also avoids using too many networking acronyms of jargon that can be confusing for some people. That's why, for example, it uses "home" instead of "client behind CGNAT".

How to use

Preparing the cloud machine

Let's say you want to expose a typical Web server (using port 80 for http and 443 for https) running in a machine in your home.

  1. you need to rent a machine in the cloud with some Linux system on it, for example, Debian 13 Trixie. This machine does not need to be very powerful. You can start with a cheap one: 1 CPU, 2 GiB of memory and 10 GiB of disk should be enough. If you notice slow connections, then you can try bigger, more expensive ones.

It's common for cloud providers to charge extra for machines with IP v4 connection. This is not strictly necessary, so you can save some money by enabling only IP v6 connection, which is usually free.

  1. you need to rent a domain. In my examples, I'll use "jauto-heberge.fr".
  2. you need to edit the records for your domain to point to your cloud machine. Add an AAAA record with the IP v6 address and, only if you're also using IP v4, an A record with that address.
  3. connect to the cloud machine using SSH and install jauto-expose by running these commands:
curl https://git.sitegui.dev/sitegui/jauto-expose/releases/download/v1.0.0/jauto-expose-$(dpkg --print-architecture) -o jauto-expose
chmod +x jauto-expose
  1. in the cloud computer, run this command to configure it. Remember to replace the example domain "jauto-heberge.fr" with your own domain!
sudo ./jauto-expose configure-cloud jauto-heberge.fr

This command copies some files and create a background service that will run in cloud mode. It should produce an output more or less like this:

Resolved jauto-heberge.fr as 2001:bc8:1640:8ad5:dc00:ff:fe59:bbfe
Copied executable to /usr/bin/jauto-expose
Saved config in file /etc/jauto-expose/cloud.toml
Declared systemd service in /etc/systemd/system/jauto-expose.service
To check the status of the service, run: sudo systemctl status jauto-expose
Run the following command on your home computer to connect to it:

sudo ./jauto-expose configure-home 2001:bc8:1640:8ad5:dc00:ff:fe59:bbfe 37a880630e407c9114dc02bd33ab80c9 --ports 80,443

Or, if you are using Yunohost, install the app "jauto-expose" and configure it with:

IP address of the cloud machine:
        2001:bc8:1640:8ad5:dc00:ff:fe59:bbfe
Configuration secret token:
        37a880630e407c9114dc02bd33ab80c9
  1. on the cloud computer, run this command to check if jauto-expose is running as expected:
sudo systemctl status jauto-expose

Preparing the home machine

If you use Yunohost, I'm writing an application to make this setup easier and integrated on the Yunohost platform. Stay tunned!

  1. on your home computer, open the terminal and install jauto-expose just like above:
curl https://git.sitegui.dev/sitegui/jauto-expose/releases/download/v1.0.0/jauto-expose-$(dpkg --print-architecture) -o jauto-expose
chmod +x jauto-expose
  1. then execute on your home computer the command previously provided to you on step 5. The following is just an example, make sure to use the values given to you!
sudo ./jauto-expose configure-home 2001:bc8:1640:8ad5:dc00:ff:fe59:bbfe 37a880630e407c9114dc02bd33ab80c9 --ports 80,443

This command copies some files and creates a background service that will run in home mode. It should produce an output more or less like this:

Copied executable to /usr/bin/jauto-expose
Saved config in file /etc/jauto-expose/home.toml
Declared systemd service in /etc/systemd/system/jauto-expose.service
To check the status of the service, run: sudo systemctl status jauto-expose
  1. on the home computer, run this command to check if jauto-expose is running as expected:
sudo systemctl status jauto-expose
  1. open your browser and type your domain, it should work 🤞🏽

Stop or uninstall

To temporarily stop the service, run this command in both your cloud and home machines:

sudo ./jauto-expose stop

It will stop and disable the background task on this machine. You can start it back with:

sudo ./jauto-expose start

To completely remove jauto-expose, run this in both machines:

sudo ./jauto-expose uninstall

Alternatives

This project was inspired by rathole and uses a similar solution. Jauto-expose implements fewer features, but it has a more modern codebase and dependencies. Jauto-expose is also simpler to use, especially for people less familiarised with systemd, networking and Linux overall.

Another open-source alternative is pangolin, but by default it terminates the HTTPs and requires manually managing subdomains. Configuring it to pass the packages unalterated like jauto-expose is possible, but quite complex.

A commercial alternative is Cloudflare tunnel, but in my tests I could not use the free version because it imposes a non-configurable timeout that was too low for the apps I'm exposing.

Other installation methods

The compiled binaries and the configure-cloud and configure-home commands are provided as a convenience. But if you want to audit all the code that you're running and run it in another way, you can!

Compiling from source is simple with cargo:

  1. install Rust
  2. run cargo build --release
  3. copy the binary cp ./target/release/jauto-expose .

Write the config cloud.toml and home.toml wherever you want. You can check in the code all possible fields.

Run jauto-expose run-cloud path_to_cloud.toml in the cloud and jauto-expose run-home path_to_home.toml in the home machine.