Beating CGNAT Without a Public IP: WireGuard, Tunnels, and Reverse Proxies

Home network linked by encrypted tunnels to cloud servers to bypass carrier NAT

You can reach home services from anywhere while stuck behind CGNAT, with no public IP and no port forwarding, by making your network dial outward to a rendezvous point that does have a public address. CGNAT blocks unsolicited inbound traffic but allows outbound connections freely, so a daemon at home connects out and inbound traffic rides back down that established link. The three workhorse methods are a Cloudflare Tunnel, WireGuard to a cheap VPS, and an overlay network like Tailscale.

This is the approach that actually gets most homelabbers reachable, because it ignores the ISP entirely. On my own network I run more than one of these side by side — an overlay for private device access, a reverse proxy for the handful of services I expose publicly, and WireGuard for getting into the management plane. This guide breaks down each method, what it is good at, and how to choose. It is the practical sequel to the main reachability guide; if you have not yet confirmed CGNAT, do that first with how to tell if you’re behind CGNAT.

Why Outbound Tunnels Beat CGNAT

Every method here exploits the same asymmetry: CGNAT permits outbound connections but drops unsolicited inbound. So instead of waiting for traffic to arrive, your home network initiates a persistent outbound connection to a machine with a real public IP. That machine becomes the front door, and your services answer through the tunnel the home end already opened.

Once you internalize that, the whole problem changes shape. You are no longer trying to open a port on hardware you do not control — you are renting or borrowing a public address somewhere else and stitching it to your home network with an encrypted tunnel. The rendezvous can be Cloudflare’s global edge, a $5 virtual server in a datacenter, or an overlay coordinator that helps your own devices find each other. In all cases the home side dials out, the carrier NAT happily allows it because it looks like ordinary outbound traffic, and reachability is restored without a single inbound port. The methods differ mainly in who owns the public endpoint, what protocols they carry, and whether the result is public to the world or private to you.

Diagram of a home network dialing out to a public rendezvous server to bypass carrier NAT

Method 1: Cloudflare Tunnel

Cloudflare Tunnel runs a small daemon called cloudflared on a machine at home that connects out to Cloudflare’s edge; Cloudflare’s Tunnel documentation details the cloudflared install and config. You map a hostname to an internal service, and it becomes reachable over HTTPS with no open ports and no public IP. The free tier covers a great deal of home use, which makes it the lowest-friction option for web apps and dashboards.

The appeal is that Cloudflare provides the public endpoint, the TLS certificate, and DDoS protection, and you provide nothing but an outbound connection and a domain on Cloudflare. It is excellent for self-hosted web UIs — a dashboard, a wiki, a photo gallery — that you want reachable by hostname over HTTPS. The important limitation to know upfront: Cloudflare’s terms restrict using the proxy to serve large volumes of non-HTML content like big video files or general file hosting, so it is the wrong tool for a media-streaming server you hammer from outside. It is also HTTP(S)-oriented; arbitrary TCP/UDP is possible but more involved than the web case. For pure web exposure with minimal effort, though, it is hard to beat, and I compare it head-to-head with the VPS approach in Cloudflare Tunnel vs a VPS reverse proxy.

Method 2: WireGuard to a VPS

Renting a small VPS — roughly $4 to $6 a month — gives you a public IP you fully control. You establish a WireGuard tunnel from your home network to the VPS, then forward ports on the VPS down the tunnel to your home services. Because it is a raw encrypted link, it carries any protocol, not just web traffic, which makes it the most flexible CGNAT bypass.

This is my preferred approach when I need something Cloudflare’s web-centric model does not cover — a game server, a non-HTTP service, or full control over the public endpoint. The mechanics: WireGuard establishes a fast, modern encrypted tunnel between a home host and the VPS; the VPS has a public IP, so you configure it to forward the ports you care about across the tunnel to the home end. The home side dialed out to bring the tunnel up, so CGNAT never gets in the way. You own the whole path, you can run any protocol over it, and the only recurring cost is the cheap VPS. WireGuard itself is lightweight and I walk through it in WireGuard vs OpenVPN for home use and the OPNsense WireGuard tutorial. Pair it with a reverse proxy on the VPS when you want clean hostnames and TLS for multiple services.

A low-cost cloud VPS linked by an encrypted WireGuard tunnel to a home server rack

Method 3: Overlay Networks (Tailscale / Headscale)

An overlay network like Tailscale builds a private encrypted mesh directly between your devices using WireGuard under the hood, with a coordination service that helps them find each other through NAT. It exposes nothing to the public internet — only your enrolled devices can reach the lab — making it the safest option when “anywhere access” really means you and your own machines, not the world.

For remote access to your own network — reaching the NAS, a dashboard, or SSH from your laptop or phone — an overlay is often the right answer and the least risky. There is no public endpoint to attack because nothing is published; your devices simply join a private mesh and talk to each other as if on the same LAN, with traffic relayed through coordination servers only when a direct path cannot be punched. Tailscale’s free tier is generous, and if you would rather not depend on their coordination service you can self-host the open-source Headscale control server instead. I cover both in the Tailscale and Headscale setup guide. The trade-off versus a tunnel or reverse proxy is that an overlay is for private access by devices you enroll, not for publishing a service to anonymous visitors.

Method 4: Reverse Proxy on a VPS

When a service must be genuinely public — reachable by anyone, not just your devices — run a reverse proxy on the VPS that has the public IP. The proxy accepts public connections, terminates TLS, and relays them down the WireGuard tunnel to your home service, while hiding your home’s real address. It is the natural pairing with Method 2 for hosting public sites and apps.

This is how you turn a raw VPS tunnel into a polished public front end. The reverse proxy — Nginx, Caddy, or Traefik — sits on the public side, handles certificates, routes hostnames to the right backend, and can add authentication before anything reaches home. Your home services never face the internet directly; they only answer requests that arrived through the proxy and the tunnel. I run Nginx in this role for what I expose, and the choice of proxy software for home use is covered in reverse proxy setup: Nginx Proxy Manager vs Traefik, with the broader stack in the self-hosting guide.

Choosing a Method

MethodPublic or private?ProtocolsCostBest for
Cloudflare TunnelPublicHTTP(S) mainlyFree tierWeb apps and dashboards, fastest setup
WireGuard to a VPSEitherAny TCP/UDP~$4–6/mo VPSAny protocol, game/media servers, full control
Overlay (Tailscale/Headscale)PrivateAny (between your devices)Free tier / self-hostPrivate access for you and trusted devices
Reverse proxy on a VPSPublicHTTP(S) + more~$4–6/mo VPSMultiple public services with clean hostnames

Security: Expose Only What You Mean To

Every public endpoint is an attack surface, so expose the minimum. Put internet-facing services on an isolated VLAN with default-deny rules so a compromised service cannot reach the rest of the network, terminate TLS and add authentication at the proxy, and prefer a private overlay whenever you do not actually need anonymous public access. Reachability without segmentation is a liability.

On my network anything internet-facing lives on the LAB/DMZ segment, walled off from the trust LAN by default-deny firewall rules, so even a fully compromised public service has nowhere to pivot. That separation is the part people skip in their rush to “just make it reachable,” and it is the part that matters most. If you have not built it, the home network VLAN guide and OPNsense firewall rules are the prerequisites. And once a method is live, confirm it actually works — and that nothing unintended is open — from outside your network using testing inbound reachability.

Home server rack with internet-facing services isolated on a separate VLAN segment

Frequently Asked Questions

Can I host services behind CGNAT without a public IP?

Yes. Because CGNAT allows outbound connections, a daemon at home can dial a public rendezvous such as Cloudflare’s edge or a rented VPS, and inbound traffic rides back down that tunnel. A Cloudflare Tunnel, WireGuard to a VPS, or an overlay like Tailscale all work with no public IP and no port forwarding.

Is Cloudflare Tunnel or a VPS better for bypassing CGNAT?

Cloudflare Tunnel is fastest for web apps and dashboards over HTTPS and has a free tier, but it is restricted from serving large non-HTML files. A VPS with WireGuard costs a few dollars a month but carries any protocol and gives you full control, making it better for game servers, media, and non-web services.

Does Tailscale work behind CGNAT?

Yes. Tailscale and the self-hosted Headscale build a private WireGuard mesh between your devices and use a coordination service to traverse NAT, including CGNAT. Nothing is exposed to the public internet, so it is ideal for reaching your own network from your own devices rather than publishing a service.

How much does a VPS for CGNAT bypass cost?

A small VPS suitable for a WireGuard endpoint and reverse proxy typically runs about $4 to $6 per month from budget providers. That is enough to relay home services, since the heavy lifting stays on your home hardware and the VPS only forwards traffic across the tunnel.

Is bypassing CGNAT with a tunnel secure?

It can be, if you segment properly. Put internet-facing services on an isolated VLAN with default-deny rules, terminate TLS and add authentication at the reverse proxy, and use a private overlay when you do not need anonymous public access. The tunnel itself is encrypted, but exposing a service still creates an attack surface to defend.

Related Guides

Leave a Comment

Your email address will not be published. Required fields are marked *