Blog  →  Backhaul & Connectivity

Satellite Internet as WISP Backhaul: Living With CGNAT

What Carrier-Grade NAT actually means for a WISP using satellite internet as an uplink, and a working way to still manage the router remotely.

Low-earth-orbit (LEO) satellite internet has become a common backhaul choice for small WISPs in areas without reliable fiber — it's fast to deploy and doesn't depend on local infrastructure. But most consumer satellite ISPs share one architectural detail that catches new operators off guard: your router's WAN interface never gets a real public IP address.

What CGNAT actually is

Carrier-Grade NAT (CGNAT) is your satellite provider sharing a pool of public IPv4 addresses across many customers simultaneously, the same way your router shares one public IP across many subscribers via masquerade — just one layer further up. Your router's WAN interface gets an address from the range 100.64.0.0/10, reserved specifically for this purpose under RFC 6598. That address is real and routable on the provider's internal network, but it is not a public internet address — nothing outside that network can initiate a connection to it.

How to tell if you're behind CGNAT: check your router's WAN IP. If it starts with 100.64 through 100.127, you're behind CGNAT. Compare it to what a site like whatismyip.com reports from a device on that connection — if they're different, there's NAT happening between your router and the public internet.

What this changes in practice

The practical workaround: an outbound-initiated tunnel

Since the router can always reach out even though nothing can reach in, the standard fix is a VPN tunnel that the router itself initiates toward a server with a real public IP — typically a small VPS. Once the tunnel is up, you connect to the VPS, and the VPS forwards your management traffic through the tunnel to the router. WireGuard is the simplest modern option on RouterOS for this.

The setup, at a high level

ComponentRole
VPS (Contabo, DigitalOcean, etc.)Has a real public IP. Runs the WireGuard server side.
MikroTik routerRuns the WireGuard client side, initiates the tunnel outbound — this works fine even behind CGNAT since it's an outbound connection.
Your laptopConnects to the VPS (or its own WireGuard client), reaching the router through the tunnel.

Once configured, Winbox, SSH, or the API can all be reached through the tunnel's IP address as if you were on the router's own LAN — CGNAT on the WAN side becomes irrelevant for management purposes.

Set this up before you need it. A router only reachable through a tunnel that isn't configured yet is a router you can't fix remotely if something goes wrong. Build the WireGuard tunnel as part of initial deployment, not as an emergency measure after a lockout.

What CGNAT doesn't affect

It's worth being precise about the boundary here, since it's easy to over-apply this concern:

Common mistakes and how to fix them

SymptomLikely causeFix
Port forward configured correctly but still unreachable from outsideWAN interface is behind CGNAT — the packet never arrivesConfirm the WAN IP is in 100.64.0.0/10; if so, port forwarding cannot work without a different approach (tunnel, or a business-tier plan with a real public IP if your provider offers one in your region)
Lost remote access to a router after a network changeNo VPN tunnel was configured before the change, and CGNAT means no direct fallbackRequires physical access to reconfigure — this is exactly why the tunnel should exist before it's needed
WireGuard tunnel drops intermittentlyThe provider's own IP reassignment behind CGNAT can occasionally interrupt long-lived connectionsSet a reasonable WireGuard keepalive interval (25–30 seconds) so the tunnel re-establishes quickly after any interruption

Best practices

Hardening the router itself?

The NAT + Firewall generator covers WAN-side hardening that applies whether or not you're behind CGNAT.

Open the NAT + Firewall Generator →