* [ngrok 2.0](https://ngrok.com/) - Probably the gold standard and most popular. Closed source. Lots of features, including TLS and TCP tunnels. Doesn't require root to run client.
* [frp](https://github.com/fatedier/frp) - Seems to be a pretty comprehensive open alternative to ngrok.
* [inlets](https://github.com/inlets) - Open source ngrok alternative. Has pro option.
* [go-http-tunnel](https://github.com/mmatczuk/go-http-tunnel) - Uses a single HTTP/2 connection for muxing, so likely avoids TCP-over-TCP issues. Need to manually generate certs for server and clients.
* [sish](https://github.com/antoniomika/sish) - Open source ngrok/serveo alternative. SSH-based but uses a custom server written in Go. Supports WebSocket tunneling.
* [Tailscale](https://www.tailscale.com/) - Built on WireGuard. Closed source. Easy to use. Doesn't include an HTTPS proxy on the public side, but could be combined with nginx/Caddy/etc.
* [sshuttle](https://github.com/sshuttle/sshuttle) - Open source project originally from one of the founders of Tailscale. Server doesn't require root; client does. Explicitly designed to avoid TCP-over-TCP issues.
* [expose](https://github.com/beyondcode/expose) - ngrok alternative written in PHP.
* [chisel](https://github.com/jpillora/chisel) - Another HTTPS+SSH option.
* [tunneller](https://github.com/skx/tunneller) - Open source. Written in Go.