• Stars
    star
    15,265
  • Rank 1,913 (Top 0.04 %)
  • Language
  • Created about 4 years ago
  • Updated about 2 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

List of ngrok/Cloudflare Tunnel alternatives and other tunneling software and services. Focus on self-hosting.

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.

NOTE: We're building a community around self-hosting, data ownership, and decentralization in general. Join us over at IndieBits.io.

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 Lets's Encrypt, none of them integrate the domain registration and DNS management.

UPDATE 2022-09-23:

A lot of new tools have been developed since the list started, and many tools have been submitted for addition to the list. It's great to see so much interest in tunneling. That said, I want to make sure this remains a useful resource for not just listing all the possible options, but helping people pick one that will solve their problem. With that goal in mind, I've moved some of the items to a separate section at the bottom. This is dedicated to more complicated tools like overlay networks which can support tunneling and similar use cases, but aren't focused exclusively on tunneling. Please let me know if you think something is in the wrong section.

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. Note that it's technically against their ToS to host anything other than basic HTML pages on the free plan, including photos, audio, and video. In practice I'm not aware of many instances of this being enforced.
  • If you want to self-host, there are many options. For something production ready frp is probably what you want. If you're a developer, I'd recommend starting with my own SirTunnel project and modifying it for your needs. For non-developers and those wanting more of a GUI experience, I created boringproxy. It's my take on a comprehensive tunnel proxy solution. It's in beta but currently solves almost everything I want. Once the server is running this is a very easy tool to use and has some nice features.

Open source (at least with a reasonably permissive license)

  • Tunnelmole - Open source and optionally self hostable. The client and server are both written in TypeScript.
  • Telebit - Written in JS. Code.
  • tunnel.pyjam.as - No custom client; uses WireGuard directly instead. Written in Python. source code
  • 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 frp github stars badge - 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 ngrok 1.0 github stars badge - Original version of ngrok. No longer developed in favor of the commercial 2.0 version.
  • localtunnel localtunnel github stars badge - Written in node. Popular suggestion.
  • sshuttle sshuttle github stars badge - 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.
  • chisel chisel github stars badge - SSH under the hood, but still uses a custom client binary. Supports auto certs from LetsEncrypt. Written in Go.
  • bore bore github stars badge - Minimal tunneling solution. MIT Licensed. Written in Rust.
  • rathole rathole github stars badge - Similar to frp, including the config format, but with improved performance. Low resource consumption. Hot reload. Written in Rust.
  • expose expose github stars badge - ngrok alternative written in PHP.
  • sish sish github stars badge - Open source ngrok/serveo alternative. SSH-based but uses a custom server written in Go. Supports WebSocket tunneling.
  • go-http-tunnel go-http-tunnel github stars badge - Uses a single HTTP/2 connection for muxing. Need to manually generate certs for server and clients.
  • pgrok/pgrok pgrok github stars badge - A multi-tenant HTTP reverse tunnel solution through SSH remote port forwarding.
  • tunnelto tunnelto github stars badge - Open source (MIT). Written in Rust.
  • wstunnel wstunnel github stars badge - Proxies over WebSockets. Focus on proxying from behind networks that block certain protocols. Written in Haskell with executables provided.
  • boringproxy boringproxy github stars badge - 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.
  • zrok zrok github stars badge - 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.
  • PageKite pagekite github stars badge - Comprehensive open source solution with hosted options.
  • SirTunnel SirTunnel github stars badge - Minimal, self-hosted, 0-config alternative to ngrok. Similar to sish but leverages Caddy+OpenSSH rather than custom server code.
  • jprq jprq github stars badge - Proxies over WebSockets. Written in Python.
  • Crowbar crowbar github stars badge - Tunnels TCP connections over HTTP GET and POST requests.
  • tunneller tunneller github stars badge - Open source. Written in Go.
  • tunnel tunnel github stars badge - 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.
  • jerson/pgrok pgrok github stars badge - Fork of ngrok 1.0, with more recent commits. Archived.
  • onionpipe onionpipe github stars badge - 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.
  • docker-tunnel docker-tunnel github stars badge - Simple Docker-based nginx+SSH solution.
  • hypertunnel frp github stars badge - Public server appears to be down. MIT Licensed. Written in JavaScript.
  • remotemoe remotemoe github stars badge - 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.
  • tunwg tunwg github stars badge - 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.
  • holepunch holepunch github stars badge - Has nice hosted solution. Uses SSH for muxing.
  • StaqLab Tunnel staqlab github stars badge - SSH-based. Client is open source. Server doesn't appear to be.
  • tnnlink tnnlink github stars badge - SSH-based. Golang. Not maintained.
  • ngtor ngtor github stars badge - Easily expose local services via Tor. Written in Java.

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.
  • Beeceptor - Goes beyond tunneling. Rest API mocking and intercepting tool. You can view the live requests and send mocked response. 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. 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. 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.
  • 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.

Overlay networks and other advanced tools

  • Teleport teleport github stars badge - Comprehensive control plane tool, but also supports accessing apps behind NATs. Written in Go.
  • Nebula - nebula github stars badge 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 - zerotier github stars badge Layer 2 overlay network. They take decentralization seriously, and like to say "decentralize until it hurts, then centralize until it works." Written in C++.
  • headscale headscale github stars badge - Open source implementation of Tailscale control server. Can be used with Tailscale's official open source client. Written in Go.
  • Tailscale tailscale github stars badge - Built on WireGuard. Easy to use. Doesn't include an HTTPS proxy on the public side, but could be combined with nginx/Caddy/etc. Control server is closed source. Client code available with a BSD3 license + separate patents file.
  • Netmaker netmaker github stars badge - 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. Not FOSS, but source is available. Written in Go.
  • NetBird netbird github stars badge - 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.
  • innernet innernet github stars badge - 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.
  • Firezone firezone github stars badge - 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.
  • Pritunl pritunl github stars badge - Seems quite comprehensive and complicated. OpenVPN, WireGuard, and IPSec support.
  • Tinc tinc github stars badge - 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.
  • OpenZiti - OpenZiti github stars badge - 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.
  • Ngrok-operator ngrok operator github stars badge - Ngrok but integrated with Kubernetes, allows developers on private kubernetes to easily access their services via Ngrok.

Reference

Discussions

More Repositories

1

SirTunnel

Minimal, self-hosted, 0-config alternative to ngrok. Caddy+OpenSSH+50 lines of Python.
Python
1,340
star
2

fibridge-proxy-rs

Proxy for turning web browsers into web servers. Load a 100GB file in your browser and stream it over the public web with HTTP byte range requests.
Rust
97
star
3

react_rust_webapp

Code for my blog post about combining React and Rust in a statically-linked web app
Rust
66
star
4

react_rust_wasm

Code for my blog post about getting started with React and Rust/wasm
JavaScript
21
star
5

stealthcheck

0-dependency service health checks/restarts/email alerts in 150 lines of Go
Go
19
star
6

chromeps

Simple pubsub implementation for Chrome extensions
JavaScript
14
star
7

graphml-js

GraphML parser for javascript
TypeScript
10
star
8

chrome-extension-css-isolation-example

JavaScript
10
star
9

redpill

A Matrix code rain implementation that visualizes your latest public GitHub contributations.
JavaScript
9
star
10

de_bruijn_visualizer

JavaScript
6
star
11

ari-quickstart

Asterisk ARI Quickstart in Python
Python
4
star
12

golicons

Easy-to-use animated icons of Conway's Game of Life that nobody asked for
HTML
4
star
13

droplink

Tiny web app to convert Dropbox share links into direct HTML links that can be downloaded with tools like cURL
HTML
3
star
14

battle_beetles

Genetic algorithms school project
Rust
3
star
15

tuplates-py

Commit valid code; not templates
Python
3
star
16

octopress-blog

Personal Blog
Ruby
2
star
17

assg

[Anders'|Another] Static Site Generator
Rust
2
star
18

ergo-pedals

Arduino firmware and software for foot pedals I use to reduce my forearm pain when typing. Works with normal hardware switches and an Arduino Uno. No additional hardware necessary.
C++
2
star
19

certgrabber

Go
2
star
20

google-apps-script-database

Simple library for representing spreadsheets as databases with a mongo-like interface
JavaScript
2
star
21

pojo_flow

JavaScript
2
star
22

newb-server-go

Go
2
star
23

fsperf

C
1
star
24

dashtui

Go
1
star
25

autobencher

Python
1
star
26

euly_cycle

JavaScript
1
star
27

tuplates-js

Commit working code; not templates
JavaScript
1
star
28

anderspitman.net

JavaScript
1
star
29

rust_docker_barebones

Rust
1
star
30

reverserver

Host large files from your browser
JavaScript
1
star
31

issued

An itty bitty server for users to submit issues to
JavaScript
1
star
32

vanilla-js-example

HTML
1
star
33

apitman.com-posts

Backup of blog posts
1
star
34

iobio-absent-anders

1
star
35

fibridge-gui-js

JavaScript
1
star
36

fakevars

C++
1
star
37

timeline-user

HTML
1
star
38

gh_actions_apptainer_test

1
star
39

backrot

Shell
1
star
40

ifnot

Universal Notifcation Platform
1
star
41

pipefine

Go
1
star