netscrew.dev/playbooks/cgnat
Networking concepts

CGNAT — why you can't port-forward, and what to do instead

Carrier-grade NAT shares one public address among many customers. Inbound connections can't reach you; Tailscale or a tunnel can.

Read it offline, in your terminal:n -h cgnat

What it is. Public IPv4 addresses ran out. Many ISPs (most mobile carriers, many fibre and cable providers) now give your router a *private* address from 100.64.0.0/10 and share one public address among hundreds of customers. Your router NATs you, then the ISP NATs you again.

How netscrew spots it. If the address your router calls its WAN address is in 100.64.0.0/10 — or differs from the address the internet sees you as — you're behind CGNAT.

What it breaks

What to do instead

Don't confuse: Tailscale also uses 100.64.0.0/10 for *its* addresses (100.x.y.z on the tailscale0 interface). That's the same range by design, and not CGNAT.