Aude Code

aude-tunnel(7)

NAME

aude-tunnel — which other devices reach this computer's aude sessions

SYNOPSIS

aude tunnel tailnet | funnel | trycloudflare | none

DESCRIPTION

Because the listener of aude-rc(7) listens only at 127.0.0.1, only this computer reaches it. A tunnel lets other devices reach the listener.

‘aude tunnel’ starts the listener if necessary. The listener writes tunnel.json. ‘aude tunnel’ prints the new reach: the URL and its QR code. If no device is listed and no pairing window is open, it prints only ‘tunnel <word>’.

While the listener listens, it runs the tunnel's program, which it finds on PATH. The program stops with the listener. It continues if all aude processes get SIGKILL. A pairing window, or ‘aude tunnel’ with the same word, starts a failed program again.

TUNNELS

The devices of this machine's tailnet reach the listener through ‘tailscale serve’. Tailscale 1.52.0 or later must run. Log in to Tailscale. Turn on HTTPS certificates in the tailnet. On Linux, run ‘sudo tailscale set --operator=$USER’ once.
The internet reaches the listener through ‘tailscale funnel’. Also turn on Funnel for this machine in the tailnet policy.
The internet reaches the listener through a quick tunnel of ‘cloudflared’ 2025.6.1 or later, with no account. The name changes at each start, so scan the new URL.
Only this computer reaches the listener, as with no tunnel.json.

With a tunnel, the URL gives the tunnel's domain name and no port:

AUDE:<name>/<fingerprint>
The name is in upper case. In the name, $ replaces .trycloudflare.com and + replaces .ts.net. A device dials the name over TLS at port 443. The tunnel supplies the TLS certificate. The fingerprint proves the machine.

FILES

~/.aude/rc/tunnel.json
One JSON string, the tunnel's word:
"trycloudflare"
‘aude tunnel’ writes it. You can also write it while no aude process runs.

EXIT STATUS

‘aude tunnel’ exits 0 when it prints the reach, open or closed. It exits 8 when the tunnel or the port fails. It exits 6 when aude cannot read or write a file. It exits 64 for an unknown word.

EXAMPLES

$ aude tunnel trycloudflare
  devices reach this machine at AUDE:<name>$/<fingerprint>: my phone

  <the QR code>
$ aude devices
this machine  CIWVK7ZHMCBW6Z5BRVKUL6VJGK7Z
tunnel  trycloudflare
my phone  43MINEMOLU2QDYIRISB6HVGMMF6X

DIAGNOSTICS

devices cannot reach this machine: the <tunnel> tunnel <finding> — see aude-tunnel(7)
The finding is one of:
has no program on PATH
Install the program.
has a program older than aude needs
Update the program.
has a service that does not run, or is logged out
Start Tailscale. Then log in.
is refused by its provider
Turn on HTTPS certificates. For funnel, also turn on Funnel.
did not serve in time, exited <n>, was killed by signal <n>, wrote a line past <n> bytes, could not start its program: <reason>
Run the program by hand to see the cause. The quick tunnel service can refuse it, or a network can block it.
does not know if its program still runs
Stop the program if it runs.
rc could not read tunnel.json: <defect>
‘aude devices’ exits 6. Run ‘aude tunnel’.
unknown tunnel '<word>' — available: funnel none tailnet trycloudflare
 
could not attach — this platform has no TLS client; attach from a Mac or a phone
A terminal on Linux cannot dial a tunnel.

SEE ALSO

aude(1), aude-rc(7), aude-workflow(7)

CAVEATS

With funnel and trycloudflare, a person who finds the name can reach the listener. The listener refuses a device that it does not list. But while other devices hold all the handshake slots, your devices cannot attach.

The tunnel's operator sees who dials, when, and how much data, and can stop the tunnel. The operator cannot read the data.

The public logs of TLS certificates show the name of tailnet and funnel.

The listener is not tested over Tailscale's tunnels.