Show HN: Pangolin – Open source alternative to Cloudflare Tunnels
469 miloschwartz 114 7/10/2025, 9:50:43 PM github.com ↗
Pangolin is an open source self-hosted tunneled reverse proxy management server with identity and access control, designed to securely expose private resources through encrypted WireGuard tunnels running in user space.
We made Pangolin so you retain full control over your infrastructure while providing a user-friendly and feature-rich solution for managing proxies, authentication, and access, all with a clean and simple dashboard web UI.
GitHub: https://github.com/fosrl/pangolin
Deployment takes about 5 minutes on a VPS: https://docs.fossorial.io/Getting%20Started/quick-install
Demo by Lawrence Systems (YouTube): https://youtu.be/g5qOpxhhS7M?si=M1XTWLGLUZW0WzTv&t=723
Some use cases:
- Grant users access to your apps from anywhere using just a web-browser
- Proxy behind CGNAT
- One application load balancer across multiple clouds and on-premises
- Easily expose services on IoT and edge devices for field monitoring
- Bring localhost online for easy access
A few key features: - No port forwarding and hide your public IP for self-hosting
- Create proxies to multiple different private networks
- OAuth2/OIDC identity providers
- Role-based access control
- Raw TCP and UDP support
- Resource-specific pin codes, passwords, email OTP
- Self-destructing shareable links
- API for automation
- WAF with CrowdSec and Geoblocking
Pangolin uses Traefik under the hood to do the actual HTTP proxying. A plugin, Badger, provides a way to authenticate every request with Pangolin. A second service, Gerbil, provides a WireGuard management server that Pangolin can use to create peers for connectivity. And finally, there is Newt, a CLI tool and Docker container that connects back to Gerbil with WireGuard fully in user space and proxies your local resources. This means that you do not need to run a privileged process or container in order to expose your services!
My experience went very smooth and stable. The one issue I thought I had turned out to be not related to Pangolin at all.
https://github.com/orgs/fosrl/discussions/950
Traefik is awesome, and one of the biggest reasons is it's extensibility and robustness.
It absolutely does not get enough attention!
The one thing I haven’t been able to figure out how to do with it is do compression (gzip/br/zstd) there, so I’m handling it in the application layer, which feels suboptimal.
Any tips? Seems like a table stakes sort of feature in the space that shouldn’t be too hard to implement.
https://doc.traefik.io/traefik/middlewares/http/compress/
Are you trying to compress the request that has already come in to your cluster? I'm not sure there's a ton of value to be extracted there, since the requests have already made their way across the internet uncompressed to your ingress point.
If there's a "long way" to go after hitting your ingress controller then maybe there's something to be gained...
https://github.com/traefik/traefik/releases/expanded_assets/...
For example, max sizes for the largest and smallest TLS libraries I have tried
OpenSSL 9.0MB
WolfSSL 4.6MB
OpenSSL bloat is unfortunate
Does Traefik allow any TLS libraries other than OpenSSL
https://aazar.me/posts/reincarnating-a-raspberry-pi
so, kind of an uneducated question (from someone who isn't heavily involved in actual infrastructure)... I haven't used CF tunnels, and the extent of my proxying private services has pretty much been either reverse proxy tunnels over SSH, or Tailscale. Where pretty much any service I want to test privately is located on some particular device, like, a single EC2 instance, or my laptop that's at home while I'm out on my phone. Could you explain in layman's terms what this solves that e.g. tailscale doesn't?
I think what you are using (SSH, Tailscale) is great for your use case! We see this as more of a static and permanent tunnel to a service - less ephemeral than a ssh tunnel - and more to get public users into your application. Meaning if you had a internal app for your business or some homelab application like Immich or Grafana at home/work that you want to expose to your family in their browser this could be a good tool to use. Does that make sense?
I get there's a tunnel provided by this sort of software, I just don't understand how so many people actually need one.
Pangolin has a tunnel component to it so if you were challenged on the ISP front you can put this on the VPS and it just makes configuring the connection back to the network easier so you don't need to set up WG back etc... It wraps it all up nicely in a UI and simple install script. It can also all be automated with the API if you are into that kind of thing.
The TL;DR is this - there are certain apps I host that I want to be public and don't want to onboard a Tailscale node (for example my sister uses my Plex server). So, instead of setting up a reverse proxy, I simply create a subdomain in DNS (via CF) and then route that subdomain to the CF tunnel.
It's like 3 form entries to do all of this for one site/service and automatically creates an SSL cert for me. I love it.
Thats why i use pangolin.
Fuck Plex, by the way. Good on them for building up and turning themselves into a streaming service of sorts. Add value and I'll pay for it. But suddenly one day your free mobile viewer app updates and requires payment to stream your own mp4 files? Seriously, they can go to hell. No one streaming movie files to their family is doing so because they love paying middle-men, by the way. And no core function of Plex can't be done freely.
> But suddenly one day your free mobile viewer app updates and requires payment to stream your own mp4 files
I have a plex server that a dozen of my friends and family use and none of them have to pay a cent to access it.
Then after thinking about it a bit longer, I remembered that plex was making some kind of distinction about "members of a household", apparently called Plex Home [1].
I'm not sure what benefits you get from using it, since I haven't bothered trying to see what it needs to work.
Long story short, however, is if you just have your family members sign up for their own plex account, then add them to your plex server as a separate user, things will continue to Just Work and do so for free.
I'm not sure what the deal is with Plex Home but maybe they grandfathered in some kinds of older accounts. At this point though, it no longer appears to be a free option to easily stream from your home server if you're setting it up fresh or have a regular account.
I would just prefer to not have to public expose a service for a single user. In my case when sharing an image server to family it has been easy enough to walk them through installing tailscale on their windows desktop that they use. I love adding friends and fam to my tailnet. It then also makes it easier to log in and troubleshoot their issues later too.
It looks like CFs solution for restricted public access is CF access controll, but thats still publicly exposed. Their non-public option is WARP, but that requires installation on the client machine. At that point your user setup is even harder then tailscale.
Cloudflare tunnels help expose a service to the internet with a bit more protection.
I have seen folks use both tailscale to access the backend and the public side is only Cloudflare tunnels.
It’s not unreasonable to point Cloudflare tunnels to a central and internal nginx proxy manager.
Tailscale can route the public internet into your services too can do this too but the protections in Cloudflare are likely a little more robust.
Panagolin looks interesting enough to try out, it could sit run behind Cloudflare tunnels while testing and then moved out.
While CF tunnels were nice and solved my ISP imposed issue with exposing ports via their crappy fiber gateway for couple of years. But I wanted more control. Specifically control over what I can expose without worrying about violating cloudflare’s TOS and ambiguity around media streaming. (Jellyfin/Emby).
That being said, I believe Pangolin is one of the better and polished ones.
In other words: Let's say I have a VPS with eg. Keycloak running on it. I want to be able to access it for management purposes but don't want it exposed to other people on the internet. Would Pangolin be a way for me to do this?
I use authentik and as far as I know the management is on the same web port so I have to allow some paths to be accessible to the world.
The thing is, I don't have any prior experience with hosting at all. So I am wondering if I can reduce attack surface by making "management" services (Keycloak admin console, the headless CMS admin interface etc.) accessible only to me...
The answer to this is YES. Of course there are a variety of ways to implement. In your case I would start simple with something like wireguard. Keycloak won't be easy to install and configure as a beginner. If your needs are simple, check out https://github.com/lldap/lldap for authentication (and user management).
But pangolin seems to be similar to that setup with a good UI, and more control. Definitely trying it out.
Quick question: Can it handle multiple domain names? I point multiple domain to the vps hosting my npm it proxy's them from there. Does Pangolin, also support multiple domains pointing to it?
I've been wanting to add some authentication lately so that I can manage access to the homelab resources. I currently prohibit all traffic and only allow the Wireguard subnet, but this means any clients have to be provisioned in Wireguard, which is a nuisance to setup manually. It does seem to work well enough though.
Pangolin seems like it would be a one-stop replacement and simplify the setup, especially once I look at adding user management to the mix.
> proxy there to allow certain traffic through.
Why not just run the proxy .. on your homelab?
https://github.com/netbirdio/netbird
I am personally a user of NetBird and love it.
The design of the UI is very similar though :)
But definitely it is not a vpn or mesh network it seems.
As the project grows and we have more resources to spend we will try to work with some professional service to take a look for sure.
I have set up something similar just recently with an OPNSense box running DNS, the WireGuard instance and getting a wildcard Let's Encrypt cert that it pushes to my Synology reverse proxy (Nginx). So from my clients I can enable the WG tunnel only on my internal IP range, setting the internal DNS, so I don't have to have my public cert pointing to my IP. It works once setup for my home net. But for multi-site, Pangolin looks very polished and probably easier to set up.
Is Newt a custom implementation of a WireGuard server? Has it been security audited in some way?
I have that same feeling with the self hosting I do. To alleviate the small amount of stress it would bring me I rent a VPS that’s public on the internet. I configure a persistent keep alive, on the client I run locally to keep a connection to the server open, no port forwarding needed.
Btw I like your short and clear CLA! Did you check the wording of the cla with a lawyer? In my project I wanted to replace the perpetual license granted by contributors by 'a license granted as long as the software is also proposed under the agpl', but that might make it too complicated to still keep it succinct and legally clear.
We have not had any concern about the CLA that we are aware of. It was important that we found a way to allow businesses to pay for something to fund the project while keeping it free for individual homelabbers so this was one effort in that regard.
https://github.com/fatedier/frp
So, if you built something that is resilient enough to handle change in IP addresses, you've beaten CF tunnels.
We are always looking for security experts to review the code and to pen test the application. Please hammer it and let us know at security@fossorial.io if there are any issues!
We are working on some "client" based solutions as well similar maybe to what Zrok is doing which we may release in Beta in the next couple of weeks!
Can Pangolin also provide public access (currently I'm using Caddy as a reverse proxy)?
Could you make a Dokploy template to let people deploy it easily?
can you give more details, would this be adapted to IoT devices running on MCUs like ESP32 etc?
I love working with CF Tunnels but I got frustrated with their lackluster web admin ux that I recently decided to have Claude whip up a quick terminal interface for it
I do this flow a number of times and the TUI I made solved this specific problem for me https://github.com/justingosan/tunnelman?tab=readme-ov-file#...
Just checked and it's:
Dashboard home > Zero Trust > Networks > Tunnels > [tunnel] > Public Hostname
And if it ends up provisioning a new DNS record, I always have to remember to go back to the domain's DNS screen and label it with the tunnel.
In general I use a tiny silver of Cloudflare's capabilities; it would be nice if the primary dashboard could bubble up the parts that I do use.
Thanks for building this. I’ll be trying it out when I get home tonight.
No comments yet