Tailscale vs Cloudflare Tunnel
Stop treating this as either/or. Tailscale gives you and your devices private access to your entire homelab over a WireGuard mesh, while Cloudflare Tunnel publishes specific web apps to the public internet without opening a single inbound port. They overlap in maybe 20 percent of real use cases and complement each other in the rest, which is why so many homelabbers run both at once. Tailscale's free Personal plan now covers 6 users with unlimited devices, and Cloudflare Tunnel is free too, but it needs a domain with DNS on Cloudflare and only makes things browser-reachable if they speak HTTP. Here is exactly where the line falls.
Updated 2026-07-01 · by Jonathan Caruso
Side by side
| Tailscale | Cloudflare Tunnel | |
|---|---|---|
| Core model | WireGuard mesh VPN, peer-to-peer between your devices where possible | Outbound reverse proxy: cloudflared dials out to Cloudflare's edge |
| Free tier | Personal plan: 6 users, unlimited devices, nearly all features | Zero Trust free plan: 50 users, 50 Access apps, 3 locations, 24h logs |
| Domain required | No. MagicDNS gives you device.tailnet-name.ts.net | Yes, DNS on Cloudflare (throwaway trycloudflare.com quick tunnels excepted) |
| Protocols | Any TCP, UDP, ICMP between your devices | HTTP(S) in any browser; SSH/RDP/arbitrary TCP require cloudflared or WARP on the visitor's machine |
| Public exposure | Funnel only: ports 443, 8443, 10000 on a ts.net name, bandwidth capped | The whole point: any hostname on your domain with automatic TLS |
| Who can read your traffic | Nobody. End-to-end WireGuard, DERP relays can't decrypt | Cloudflare. TLS terminates at their edge, they see plaintext |
| Upload size cap | None, limited only by your uplink | 100 MB per request on free and Pro plans (200 MB Business) |
| Media streaming | Fine, it's your bandwidth | Serving video via the CDN requires paid products (Stream etc.) per Cloudflare's service terms |
| Self-host option | Headscale, an open source control server | None. cloudflared is open source but the control plane is Cloudflare only |
Two tools, two different jobs
Tailscale builds a private overlay network. Every device you install it on gets a stable 100.x.y.z address and a MagicDNS name like nas.your-tailnet.ts.net, and they all talk directly to each other over WireGuard, with Tailscale's DERP relays as an encrypted fallback when NAT traversal fails. Add a subnet router (tailscale up --advertise-routes=192.168.1.0/24 on one Linux box) and devices that can't run Tailscale, like your printer or IPMI interfaces, become reachable too. Nothing is exposed to the public internet at any point.
Cloudflare Tunnel does the opposite job. The cloudflared daemon makes an outbound connection from your lab to Cloudflare's edge, and you map public hostnames on your domain (jellyfin.example.com, wiki.example.com) to internal services in the Zero Trust dashboard. Anyone on earth with a browser can hit those hostnames, gated only by whatever Access policies you put in front. Your home IP stays hidden, no ports open, and CGNAT doesn't matter because the connection is outbound-only.
The common mistake is treating these as competitors. One is access-to-everything for people you trust with client software installed. The other is publish-a-few-things for people who will never install anything. A typical mature homelab uses Tailscale for admin and family access and a Cloudflare Tunnel for the two or three apps that genuinely need public URLs.
Setup, cost, and the domain question
Tailscale setup is about three minutes per device: curl -fsSL https://tailscale.com/install.sh | sh, then tailscale up, then log in with Google, GitHub, Microsoft, or Apple. No domain, no DNS records, no config files. The free Personal plan got noticeably better with the pricing v4 update: 6 users (up from 3) and the old 100-device cap is gone entirely. Subnet routers, exit nodes, MagicDNS, and basic ACLs are all included free. Paid tiers (Standard at $8/user/month) exist but a homelab will almost never need them.
Cloudflare Tunnel costs $0 in software but requires a domain with its DNS hosted on Cloudflare, so budget roughly $10/year at Cloudflare Registrar if you don't own one. Install cloudflared, run cloudflared tunnel create homelab, map hostnames in the Zero Trust dashboard, done. The free Zero Trust plan covers 50 users and 50 Access applications, which is comically more than any homelab needs, and Cloudflare states the tunnel itself has no throughput limit. Past 50 users you'd pay $7/user/month for everyone, which will never apply to you.
Both tools work behind CGNAT, Starlink, and T-Mobile Home Internet because both only make outbound connections. If your ISP situation is the reason you're reading this, that specific problem is solved either way, and the decision comes down to who needs in and what they need to reach.
The fine print: protocols, streaming, and upload caps
Cloudflare Tunnel public hostnames are only browser-usable for HTTP and HTTPS. It can technically carry SSH, RDP, SMB, and arbitrary TCP, but then every visitor has to run cloudflared access tcp or the WARP client on their own machine, which erases the 'no client software' advantage and lands you back at Tailscale territory with extra steps. Tailscale carries any TCP or UDP natively, so Minecraft servers, SMB shares, RDP, and random UDP-based tools just work with zero per-service config.
Streaming is where Cloudflare's fine print bites. Their service-specific terms say that serving video or a disproportionate share of images, audio, or other large files through the CDN requires their paid products (Stream, Images, or the Developer Platform) unless you're on Enterprise. Cloudflare has historically been lenient with small personal Jellyfin setups, but enforcement is entirely their call, and the 100 MB per-request body limit on free plans breaks large uploads to Nextcloud or Immich unless the app chunks them. Route media over Tailscale instead and none of this applies because it's your own bandwidth end to end.
Tailscale's public-exposure story has the opposite shape. Funnel (available since v1.38.3) will publish a local service to the open internet, but only on ports 443, 8443, or 10000, only on your ts.net name rather than your own domain, and with non-configurable bandwidth limits. It's great for showing a client a demo or receiving the occasional webhook, and wrong for hosting a real public site. That job belongs to Cloudflare Tunnel.
Privacy, trust, and lock-in
Tailscale traffic is encrypted end to end with WireGuard. Private keys never leave your devices, the coordination server only shuffles public keys and metadata, and even the DERP relays can't decrypt what passes through them. The clients are open source, and if the closed-source control plane bothers you, Headscale is a solid open source replacement you can self-host (its lead maintainer is a Tailscale employee who's allowed to work on it, though the project is independent). Your exit ramp exists.
Cloudflare Tunnel terminates TLS at Cloudflare's edge, full stop. They can see the plaintext of everything flowing through your tunnel, which is how features like Access policies and their WAF work at all. For a wiki or a status page that's a fair trade. For Vaultwarden or anything with credentials and personal data, you're extending trust to a third party that Tailscale simply never asks for, and there is no self-hosted control plane option if that trust ever sours.
Where Tailscale wins
- Free plan covers 6 users and unlimited devices, including subnet routers, exit nodes, MagicDNS, and ACLs
- End-to-end WireGuard encryption; Tailscale cannot read your traffic, and direct peer-to-peer paths keep latency low
- Carries any protocol: SSH, RDP, SMB, game servers, UDP, ICMP, not just web apps
- No domain purchase required, and it works behind CGNAT and double NAT without router changes
- Headscale gives you a self-hosted, open source control plane if you want zero dependence on Tailscale Inc
- Exit nodes double as a free personal VPN when you're on hotel or coffee shop Wi-Fi
Where Cloudflare Tunnel wins
- Visitors need nothing installed; any browser reaches your apps at real hostnames on your own domain
- Zero Trust Access policies (email OTP, Google/GitHub SSO) gate any app, free for up to 50 users
- Your home IP is never revealed, and Cloudflare's edge absorbs DDoS and scanner traffic before it reaches you
- No inbound ports opened, works behind CGNAT, and the tunnel itself has no throughput cap
- Automatic TLS certificates on every published hostname with zero renewal work
- Quick tunnels (trycloudflare.com) let you test-expose a service with one command and no account
Which to pick, by situation
| Your situation | Pick | Why |
|---|---|---|
| You want to reach Proxmox, SSH, your NAS, and every LAN device from your laptop and phone anywhere | Tailscale | One install per device gets you the whole network over any protocol, with MagicDNS names and no exposure to the public internet. |
| Family or friends need Mealie, a photo album, or a booking page and will never install software | Cloudflare Tunnel | A real hostname on your domain works in any browser, and a Zero Trust Access policy with email one-time codes keeps strangers out. |
| Remote Jellyfin or Plex streaming for your household | Tailscale | Cloudflare's terms restrict serving video through the CDN without paid products, and the 100 MB body cap plus cache behavior make it wrong for media. Your own WireGuard path has no such rules. |
| You're behind CGNAT and want a public blog or portfolio served from a home server | Cloudflare Tunnel | Outbound-only tunnel defeats CGNAT, your home IP stays hidden, and Cloudflare's edge absorbs bot noise and DDoS for free. |
| Minecraft, Valheim, or any game server for a handful of friends | Tailscale | Game traffic is arbitrary TCP/UDP, which Cloudflare Tunnel can't hand to a browser and Spectrum charges for. Friends join your tailnet and connect to the private IP. |
| You want private admin access to everything plus two or three public apps | Both | This is the standard homelab endgame: Tailscale for you and your trusted devices, one cloudflared container publishing the short list of public services. |
The verdict
Run both, with a clear division of labor: Tailscale gets every private job (admin access, SSH, media streaming, file sync, game servers, anything for people willing to install a client) and Cloudflare Tunnel gets the short list of web apps you deliberately publish to people who won't. If you're only taking one, take Tailscale. Private access to your whole network covers far more homelab jobs than publishing does, it has no protocol restrictions, no upload caps, no terms-of-service gray zones around media, and an open source escape hatch in Headscale. Add Cloudflare Tunnel later, the first time someone without Tailscale needs to reach an app, because a $0 tunnel plus a $10/year domain is the cheapest safe way ever invented to serve the public from a home IP.
Choose Tailscale if you want private access to your whole network from your own devices, need protocols beyond HTTP, stream media remotely, or aren't comfortable with a third party terminating your TLS
Choose Cloudflare Tunnel if you need to publish web apps to people who will never install a client, want your home IP hidden behind Cloudflare's edge with free DDoS absorption, and can live with HTTP-only exposure and a 100 MB upload cap
Official links
FAQ
Can I stream Plex or Jellyfin through Cloudflare Tunnel?
You can make it work, but Cloudflare's service-specific terms restrict serving video through the CDN unless you use paid products like Stream. Enforcement against small personal setups has been rare, but it's their call, not yours. Stream over Tailscale instead and there are no terms to worry about.
Do I need to buy a domain for either of these?
Tailscale, no: MagicDNS gives every device a name under your tailnet's ts.net domain, and Funnel uses those names too. Cloudflare Tunnel, yes for anything permanent: named tunnels need a domain with DNS on Cloudflare, roughly $10/year at their at-cost registrar.
Can Cloudflare see my traffic through the tunnel?
Yes. TLS terminates at Cloudflare's edge, so they handle your traffic in plaintext, which is what enables Access policies and WAF filtering. Tailscale is end-to-end encrypted and structurally cannot read yours. Decide per-app how much that matters.
Is Tailscale's free plan actually enough for a homelab?
For almost everyone, yes. Since the pricing v4 update it covers 6 users with unlimited devices and includes subnet routers, exit nodes, MagicDNS, ACLs, and Funnel. You'd only pay ($8/user/month Standard) for things like SCIM provisioning that homelabs don't use.
Can I run Tailscale and Cloudflare Tunnel at the same time?
Yes, and you probably should. They don't conflict: cloudflared publishes your chosen public apps while Tailscale handles private access to everything else. A common pattern is both running as containers on the same Docker host.