{"repo":"eleboucher/towonel","free":true,"listed":false,"github":"https://github.com/eleboucher/towonel","clone":"git clone https://github.com/eleboucher/towonel.git","description":"Exposes HTTP(S) services behind NAT, CGNAT, or dynamic IPs without opening inbound ports. Mirror from https://codeberg.org/towonel/towonel","language":"Rust","stars":24,"topics":["cgnat","nat-traversal","reverse-proxy","rust","self-hosted","tunnel","homelab"],"license":"MIT","category":"self-hosted-apps","readme_excerpt":"towonel Self-hosted tunnel for exposing HTTP(S) services behind NAT, CGNAT, or dynamic IPs without opening inbound ports. Status: alpha . Functional and covered by integration tests. Wire format and APIs may change between 0.0.x releases. How it works Two processes, one persistent QUIC tunnel between them: - Hub + edge runs on a public VPS. Accepts TLS on :443 , peeks the SNI, and forwards the connection over an open QUIC stream to the matching agent. Also serves the hub control plane on :8443 where agents register their hostnames and TCP/UDP services. - Agent runs wherever your origin is reachable (homelab, k8s, behind CGNAT). It dials the edge over QUIC, holds the connection open, and forwards traffic to the origin. Identity is post-quantum (ML-DSA-65) at the tenant level, Ed25519 at the iroh transport layer. Agents authenticate to the hub with an invite token; clients authenticate to the edge with the regular TLS handshake. Quick start You need: - A public VPS for the hub with TCP 443 , TCP 8443 , and UDP 51820 (iroh QUIC) open to the internet. - A machine that can reach your service for the agent (homelab, k8s, VM). No inbound ports required. - A DNS record pointing your hostname at the VPS. 1. Run the hub On the VPS: The image pins TOWONEL DATA DIR=/data ; every path-shaped env var defaults to a subpath under it. node.key , operator.key , and invite hash.key are generated on first boot — back up operator.key (admin auth) and invite hash.key (losing it invalidates every o","default_branch":null,"files":null,"tree":[],"storefront":"/r/eleboucher","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/eleboucher/towonel/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}