List of ngrok, Cloudflare Tunnel, Tailscale, and ZeroTier alternatives
and other tunneling software and services. Focus on self-hosting.
What is this list for
The purpose of this list is to track and compare tunneling solutions. This is
primarily targeted toward self-hosters and developers who want to do things
like exposing a local webserver via a public domain name, with automatic HTTPS,
even if behind a NAT or other restricted network.
The dream
I started this list because I'm looking for a simple tool/service that does the
following:
Allows me to register a domain name and automatically points the records at
the server running the tunnels.
Automatically sets up and manages HTTPS certificates (apex and subdomains)
for the domain.
Provides a client tool that tunnels HTTP/TCP connections through the server
without requiring root on the client.
Provides a simple GUI interface to allow me to map X domain/subdomain to Y port
on Z client, and proxy all connections to that domain.
So far I haven't found a tool that does all of this. In particular, while some
of them can do automatic certs through Let's Encrypt, none of them integrate
the domain registration and DNS management in a simple way.
Recommendations
For most people, I currently recommend Cloudflare Tunnel.
Although it's closed source, this is the production-quality service
that gets the closest to achieving the dream. It's also a loss-leader
for Cloudflare's other products which means they can offer it for free.
If you want to self-host, there are many options. For something production ready I would look at Pangolin or frp. If you're a developer and want something very simple, I'd recommend starting with my own SirTunnel project and modifying it for your needs.
Open source (at least with a reasonably permissive license
SSH-J.com
- Public SSH Jump & Port Forwarding server. No software, no
registration, just an anonymous SSH server for forwarding. Users are
encouraged to use it for SSH exposure only, to preserve end-to-end
encryption. No public ports, only in-SSH connectivity. Run ssh ssh-j.com and it will display usage information.
frp
- Comprehensive open alternative to ngrok. Supports UDP, and has a P2P
mode. Supports multiplexing over TCP (single connection or pool), QUIC,
and KCP.
ngrok 1.0 - Original version of ngrok. No longer developed in favor of the commercial 2.0 version.
Pangolin
- Fully self-hostable tunneled reverse proxy management server with
identity and access control, automated SSL certificates, and dashboard
UI.
chisel - SSH under the hood, but still uses a custom client binary. Supports auto certs from LetsEncrypt. Written in Go.
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.
rathole
- Similar to frp, including the config format, but with improved
performance. Low resource consumption. Hot reload. Written in Rust.
bore - Minimal tunneling solution. MIT Licensed. Written in Rust.
wstunnel
- Proxies over WebSockets. Focus on proxying from behind networks that
block certain protocols. Written in Rust with executables provided.
gost - Looks like a comprehensive option. TCP and UDP tunneling. TAP/TUN devices. Load balancing. Web API. Written in Go.
sish - Open source ngrok/serveo alternative. SSH-based but uses a custom server written in Go. Supports WebSocket tunneling.
zrok
- Aims for effortless sharing both publicly and privately. Supports
multiple types of resources, including HTTP endpoints and files. Built
on OpenZiti (see overlay section below). Apache 2 License. Written in
Go.
go-http-tunnel - Uses a single HTTP/2 connection for muxing. Need to manually generate certs for server and clients.
pgrok/pgrok - A multi-tenant HTTP reverse tunnel solution through SSH remote port forwarding.
progrium/localtunnel
- As far as I know this is the first ever tool of this kind, predating
ngrok and the other localtunnel. No longer maintained, but here for
posterity. MIT License. Written in Go.
portr - Has a JavaScript/Python admin page and request inspection/replay features. AGPL-3.0 License. Tunneling implemented in Go.
piko
- Piko is an open-source alternative to Ngrok, designed to serve
production traffic and be simple to host (particularly on Kubernetes).
MIT License. Written in Go.
gsocket/Global Socket
- The Global Socket Toolkit allows two users behind NAT/Firewall to
establish a TCP connection with each other. Securely. Written in C.
Tunnelmole - Open source and optionally self hostable. The client and server are both written in TypeScript.
SirTunnel
- Minimal, self-hosted, 0-config alternative to ngrok. Similar to sish
but leverages Caddy+OpenSSH rather than custom server code.
boringproxy
- Designed to be very easy to use. No config files. Clients can be
remote-controlled through a simple WebUI and/or REST API on the server.
Wiretap
- Transparent tunneling over WireGuard (UDP) using userspace network
stack. Root not required on server. Supports multiple clients and
servers. Written in Go.
PageKite - Comprehensive open source solution with hosted options.
onionpipe - Onion addresses for anything. onionpipe forwards ports on the local host to remote Onion addresses as Tor hidden services and vice-versa. Written in Go.
Port Buddy
- Port Buddy is a tool that allows you to share a port opened on your
local host or private network to the public network. HTTP/TCP/UDP
tunnels. Apache 2.0 License. Written in Java.
Crowbar - Tunnels TCP connections over HTTP GET and POST requests.
pipenet
- A modern alternative to localtunnel. Bundles client & server with
both SDK and CLI. Supports single-port mode for cloud deployments. MIT
Licensed. Written in TypeScript.
tunnel
- This one is a Golang library, not a program you can just run.
However, it looks easy to use for creating custom solutions. Uses a
single TCP socket, and yamux for multiplexing.
remotemoe
- SSH-based, with custom golang server. Does some cool unique things.
Instead of just plain tunnels, it drops you into a basic CLI UI that
offers several useful commands interactively, such as adding a custom
hostname. Also allows end-to-end encryption for both HTTPS and upstream
SSH. Doesn't appear to offer non-e2e HTTPS, ie no auto Let's Encrypt
support.
mmar
- A zero-dependency, self-hostable, cross-platform HTTP tunnel that
exposes your localhost to the world on a public URL. AGPL-3.0 License.
Written in Go.
jerson/pgrok - Fork of ngrok 1.0, with more recent commits. Archived.
tunwg
- Wireguard in userspace based. Offers end to end encrypted TLS with
LetsEncrypt certificates generated automatically by clients, with
support for custom domains. Server can be self-hosted and doesn't
require storing any data.
hypertunnel - Public server appears to be down. MIT Licensed. Written in JavaScript.
EXPOSE
- SSH-based open source tool, with no configuration or installation,
distributed worldwide, to expose your local services. Uses your GitHub
username and public SSH keys to authenticate you and provide you with a
short personalised URL. AGP-3.0 License. Written in Python.
reverse-tunnel - Support TCP and UDP tunnels. Has docker images. Supports Let's Encrypt. MIT License. Written in Go.
chiSSL
- Lightweight version of Chisel that allows you to expose local servers
running on your development machine to the internet with valid SSL
certificates. MIT License. Written in Go.
srv.us
- SSH-based. Terminates TLS. Hostnames based on your key, optionally
GitHub and/or GitLab username. 0BSD License. Written in Go.
jkuri/bore - Reverse HTTP/TCP proxy via SSH. Written in Go.
gt - Supports peer-to-peer direct connection (P2P) and Internet relay. Focus on performance. Written in Go.
h2tunnel
- A pure Node.js TCP tunnel with zero dependencies in less than 500
LOC. Supports IPv4 and IPv6, half-open / half-closed connections,
encrypted using TLS. Uses HTTP2 under the hood for multiplexing. MIT
License.
vgrok [] - CLI to get a secure public URL for your local web server. Built with Vercel Sandbox and written in JavaScript.
docker-wireguard-tunnel - Connect two or more Docker servers together sharing container ports between them via a WireGuard tunnel.
holepunch - Uses SSH for muxing. Domain has expired. AGP-3.0 Licensed. Written in Python.
cactus-tunnel - 🌵 A charming TCP tunnel over WebSocket and Browser. Written in TypeScript.
tunnelite
- A self-hostable tunneling solution for TCP, HTTP and WS connections
over websockets. CLI client. MIT License. Written in .NET.
specter - Interesting approach utilizing a DHT. QUIC transport. MIT License. Written in Go.
Punchmole - Can be integrated directly into an existing Node.js project. Written in JavaScript.
ngtor - Easily expose local services via Tor. Written in Java.
wireport -
Multi-protocol tunneling (HTTP[S]/2, WebSockets, gRPC, TCP, UDP,
auto-TLS/SSL). Securely resolves remote Docker container names as local
hostnames. Easy self-hosting (no tinkering with docker-compose and
configs). MIT License. Written in Go.
netmask
- A TCP/UDP self-hostable network tunneling solution that supports IPv4
and IPv6. Client has a GUI. MIT License. Written in Python.
hsync
- Works in Node.js and browsers. Any two instances can easily pair and
make a peer-to-peer WebRTC connection to forward TCP/UDP ports (even in
browser). No additional signaling server needed. Written in JavaScript.
ephemeral-hidden-service - Create ephemeral Tor hidden services from the command line. Written in Python.
TunnelAPI 1.0
- Expose localhost to the internet. Free secure tunneling as an ngrok
alternative. Appears developer focused. MIT License . Written in
TypeScript.
YTunnel - MIT Licensed, Rust powered, uses your domains and creates Cloudflare Tunnels with easy to use TUI
Commercial/Closed source
ngrok 2.0 - Probably
the gold standard and most popular. Closed source. Lots of features,
including TLS and TCP tunnels. Doesn't require root to run client.
Cloudflare Tunnel
- Excellent free option. Nicely integrates tunneling with the rest of
Cloudflare's products, which include DNS and auto HTTPS. Client source code is Apache 2.0 licensed and written in Golang.
Microsoft Dev Tunnels
- Not as useful for self-hosting (no custom domains and it shows
warnings when people visit the URLs), but a solid option for dev work.
Livecycle Docker Extension
- Offer much more than just tunneling. Have a collaboration layer
(Dashboard) that allows you to bring collaborations, debug, and gather
feedback from the people you are working with. Share HTTPS URLs.
Beeceptor
- Goes beyond tunneling. Rest API mocking and intercepting tool. You
can view the live requests and send mocked responses. Written in
JavaScript.
Pinggy - SSH based
single command HTTPS / TCP / TLS tunnels, no downloads required. Rich
terminal interface and a web debugger. Free tier - 60 min timeout. The
paid tier allows custom domains with built-in Let's Encrypt
certificates.
Loophole -
Offers end-to-end TLS encryption with the client automatically getting
certs from Let's Encrypt. QR codes for URL sharing. The client is open
source. Can serve a local directory over WebDAV. MIT License. Written in
Go.
localhost.run - Simple hosted SSH option. Supports custom domains for a cost.
Packetriot -
Comprehensive alternative to ngrok. HTTP Inspector, Let's Encrypt
integration, doesn't require root and Linux repos for apt, yum and dnf.
Enterprise licenses and self-hosted option.
Horizon Tunnel - Easy to use HTTP(S) and websocket tunneling aimed at development. Free tier available. Fixed URL is part of paid plans.
Hoppy -
WireGuard-based. Provides static IPv4 and IPv6 addresses for your
machines, which is a simple and useful level of abstraction. Targeted
towards self-hosters and people behind NATs.
gw.run - Specifically
focusing on securely exposing internal web apps to a group of people;
not for publicly facing apps. Share access via email address then allow
users to log in with common login providers like Google.
SSHReach.me - Paid SSH-based option. Uses a simple Python script.
KubeSail - Company offering tunneling, dynamic DNS, and other services for self-hosting with Kubernetes.
inlets - Used to be open source; now focused on a polished commercial offering. Designed to work well with Kubernetes.
LocalToNet - Supports UDP. Free for a single tunnel. Paid supports custom domains.
LocalXpose - Looks like a solid paid option, with a limited free tier.
playit.gg
- Specifically marketed as tunneling for game servers. Client is open
source. Server is not. Has a free tier. TCP and UDP supported. Custom
domains and dedicated IPs available. Client written in Rust.
Tabserve.dev - Web UI that runs entirely in the browser and uses a Cloudflare Worker for https.
TunnelAPI 2.0 -
With a lot of features for teams and enterprises, including the AI API
Gateway (a single gateway to multiple models), API Workflow, and
exposing localhost to the internet with a custom subdomain. Doesn't
require root to run the client.
Serveo - SSH-based, signup optional, offering HTTP(S) and TCP tunneling and SSH jump host forwarding capabilities.
Homeway - Secure and
private remote access for Home Assistant. The free tier has a monthly
data limit cap, but unlimited data is only $2.49/month.
btunnel - Expose
localhost and local tcp server to the internet. The free plan includes
file server, custom http request and response headers, basic auth
protection and 1 hour tunnel timeout.
instatunnel
- Hosted tunneling service offering HTTP/TCP tunnels and custom domain
support. Suitable for quickly exposing local services with built-in
HTTPS and simple setup. Allows for 3 simultaneous tunnels
remote.it - Tunnels SSH, HTTP/S, TCP, Docker, popular database etc. allows mapping a local port to a remote port.
StaqLab Tunnel - SSH-based. The client is open source. The server doesn't appear to be.
LocalCan -
MacOS app for exposing local apps, has custom domains with built-in
Let's Encrypt certificates. It also can publish .local domains on the
local network.
Openport.io - Open-source client, written in Go. Supports HTTP(S) and TCP. REST Api. No account needed. Web dashboard. Also works on ESP32.
Lokal.so
HTTP/TCP/UDP Tunneling & Debugging, zero-config .local address with
https, built-in S3 Server, AI Assistant, available as Desktop GUI, Web,
REST API, and *CLI, available on Mac, Windows and Linux.
Optimistix Tunnel
- Easily expose your local server to the internet with simple SSH-based
tunneling. Supports HTTP(S) and TCP. No signup, no install—just connect
and go. Free plan available.
Overlay networks and other advanced tools
headscale
- Open source implementation of Tailscale control server. Can be used
with Tailscale's official open source client. Written in Go.
Tailscale - Built on WireGuard. Easy to use. Control server is closed source. Client code available with a BSD3 license + separate patents file.
NetBird
- NetBird is an open-source VPN management platform built on top of
WireGuard® making it easy to create secure private networks for your
organization or home.
Teleport - Comprehensive control plane tool, but also supports accessing apps behind NATs. Written in Go.
Nebula -
Peer-to-peer overlay network. Developed and used internally by Slack.
Similar to Tailscale but completely open source. Doesn't use WireGuard.
Written in Go.
ZeroTier -
Layer 2 overlay network. They take decentralization seriously, and like
to say "decentralize until it hurts, then centralize until it works."
Written in C++.
Netmaker
- Layer 3 peer-to-peer overlay network and private DNS. Similar to
Tailscale, but with a self-hosted server/admin UI. Runs kernel WireGuard
so very fast. Apache 2.0 License. Written in Go.
Firezone
- Layer 3/4 overlay network. Runs on kernel WireGuard® and supports SSO
using generic OIDC/SAML connectors. Distributed under Apache 2.0
license and written in Elixir/Rust.
iroh
- A QUIC way of doing peer-peer connectivity using 'dialing by public
key' for all applications. MIT or Apache 2.0 License. Written in Rust.
n2n - - Built on nodes and supernodes. GPL-3.0 license. Written in C.
innernet
- Similar to Netmaker, Nebula, and Tailscale. Takes advantage of
existing networking concepts like CIDRs and the security properties of
WireGuard to turn your computer's basic IP networking into more powerful
ACL primitives. Written in Rust.
Portals for Mac - A Mac app that uses the Ockam
library to privately share a service on your Mac to anyone, anywhere.
The service is shared securely over an end-to-end encrypted Ockam
Portal. Apache 2.0 License. Written in Rust.
Pritunl - Seems quite comprehensive and complicated. OpenVPN, WireGuard, and IPSec support.
OpenZiti -
- Overlay network. The goal of OpenZiti is to extend zero trust all the
way into your application, not just to your network. Apache 2.0
license. Written in Go.
Octelium
- A FOSS self-hosted unified zero trust secure access platform that can
operate as a remote access VPN, a ZTNA platform, API/AI/MCP gateway, a
PaaS, an ngrok-alternative and a homelab infrastructure. AGPL-3.0 and Apache-2.0 Licenses. Written in Go.
Tinc
- Tinc is a peer-to-peer VPN daemon that supports VPNs with an
arbitrary number of nodes. Instead of configuring tunnels, you give Tinc
the location and public key of a few nodes in the VPN. After making the
initial connections to those nodes, tinc will learn about all other
nodes on the VPN, and will make connections automatically. When direct
connections are not possible, data will be forwarded by intermediate
nodes. Written in C.
weron - - Built on WebRTC. Can create Layer 2 and Layer 3 networks. NAT traversal via STUN and TURN. AGPL-3.0 license. Written in Go.
Anywherelan
- Layer 3 peer-to-peer VPN. Fully mesh, no coordination servers. Built
on the libp2p networking stack (QUIC, TCP). Has NAT traversal and
relaying support. Available on Linux, Mac, Windows and Android. MPL-2.0
License. Written in Go.
LanEmu/P2PVPN - LanEmu is a 2023+ continuation of the original P2PVPN from 2009.
It uses Bittorrent trackers for matchmaking/rendezvous, and then routes
traffic in a peer-to-peer VLAN via OpenVPN's TAP drivers; effectively a
decentralized peer-to-peer mesh VPN. It uses RSA-4096 for peer authentication, AES-128-GCM for encrypting peer-to-peer traffic and SHA-512 with RSA algorithm to sign invitations. LGPLv3 License. Written in Java and supported on WinXP+, Linux, FreeBSD, and Mac OS X.
bifrost
- Bifrost is a peer-to-peer communications engine with pluggable
transports. It supports dynamic configuration of transports, listeners,
forwarding rules, and can tunnel other protocols over WebRTC and Quic.
Apache 2.0 License. Written in Go.
connet - connet is a p2p reverse proxy with NAT traversal. Uses QUIC as a protocol and is written in Go. Apache 2.0 License.
Ngrok-operator - Ngrok but integrated with Kubernetes, allows developers on private Kubernetes to easily access their services via Ngrok.
chisel-operator - Kubernetes integration for Chisel. Similar functionality to inlets. MIT License. Written in Rust.
frp-operator - Kubernetes integration for FRP. MIT License. Written in Go.
Mycoria
- Overlay network where the IPv6 address is the key: Easily share
address + public key via a DNS AAAA record or map names locally. Secure
by default (firewall included). BSD-3 license. Written in Go.
Nilloc - Developer-focused. Aims to have better pricing than ngrok. Free tier.