Seikan is a self-hosted tunneling reverse proxy — an ngrok replacement — with automatic Let's Encrypt.

A public server exposes services running behind NAT/firewalls through a long-lived outbound tunnel from a client. The client dials the server over one TLS connection multiplexed with yamux; the server terminates public HTTPS (per-domain Let's Encrypt certs) and raw TCP, and proxies each public connection over the tunnel to the client, which forwards it to a local address.

            :443 HTTPS (autocert)          tunnel :7000 (TLS+yamux)
 browser ───────────────────────► server ◄──────────────────────── client ──► localhost:3000
            Host: app.example.com    │  route Host→frontend→stream      (your machine)
 tcp     ───────────────────────►    │  per-frontend public TCP port
            :10000-20000             ▼  admin API on the admin host (Bearer key)

Two binaries, no external services. Secrets (API keys, connect tokens) are stored only as SHA-256 hashes in an embedded bbolt database.

Use cases