Blog

Port forwarding behind CGNAT: what works

Why a forwarded port never answers behind carrier-grade NAT, a three-step check to confirm it, and four ways out with what each needs at both ends.

Published October 16, 2026 · 9 minutes read

Key takeaways

  • The 100.64.0.0/10 range is reserved for carrier-grade NAT, so a router WAN address inside it means your router cannot receive unsolicited inbound connections and a forwarding rule on it never fires.
  • Four options exist: a public IPv4 address from the ISP, IPv6 on both ends, a relay or tunnel service, and a device-to-device link where both ends connect out.
  • Three lab topologies were built on 2026-10-16 and all three passed: two cone NATs went direct after 16 seconds, two symmetric NATs stayed on the relay, and a NAT-PMP router mapped one UDP port.
  • An open port on a home router adds a service to the attack surface, and CISA advises removing unneeded services and disabling UPnP when it is not needed.
On this page (9)

Your forwarding rule is probably fine; behind CGNAT your router may not hold a public address at all. The address it reaches the internet through is shared with other customers, behind a translator you cannot configure.

CGNAT
Carrier-grade NAT: a network address translator run by the ISP that lets many customers share public IPv4 addresses, so no single customer's router holds one.

Why does port forwarding not work behind CGNAT?

Because the translator that decides which packets get in is at your ISP, not in your living room. A forwarding rule tells your router "send traffic for this port to that computer"; that only works if the traffic reaches your router in the first place.

Behind carrier-grade NAT it does not. Nothing arrives. An inbound packet arrives at the ISP's translator, which has no mapping created by an outgoing connection from you, and drops it. RFC 6888 sets out the common requirements for these translators, and the mapping logic is the same as at home: state is created by traffic going out, not coming in.

So no better rule on your router will help by default. A few ISPs support PCP on their translator, which lets a router request an inbound mapping (RFC 6887), but the ISP decides that. Otherwise you obtain an address that arrives at your router, or both ends of the conversation connect outward.

Why the rule never fires, and the shape that works instead. Both ends connect out.

How do I know if I am behind CGNAT?

Compare two addresses with a VPN switched off on the router and the device you test from. Tunnel addresses can sit in the same range as CGNAT ones, and a VPN left on will fool the check.

  1. Open your router's status page and read its WAN address (sometimes called the internet or external address).
  2. Look up the public address your connection shows to the outside, using any address-lookup page.
  3. Compare. If the two differ, there is another translator between you and the internet.

A WAN address between 100.64.0.0 and 100.127.255.255 is in the shared address space that RFC 6598 reserves as 100.64.0.0/10. Carriers use it to number the links between their translators and your equipment.

One public example of the pattern: a GL.iNet forum thread dated 2026-04-05 describes a user on a 5G home connection whose address started with 100 and who found that forwarding WireGuard's port did nothing. A WAN address in the private ranges of RFC 1918 (10.0.0.0/8, 172.16.0.0/12 or 192.168.0.0/16) means another NAT sits in front of your router, which usually blocks inbound traffic the same way.

What can I use instead of port forwarding behind CGNAT?

There are four alternatives, and they differ in what each end must have. Read the far-end column first; it usually decides.

OptionWhat your home end needsWhat the far end needsTrade-off
Public IPv4 from the ISPA WAN address that is routable; then an ordinary forwarding ruleNothing specialDepends on the ISP agreeing; opens a port to the whole internet
IPv6 on both endsIPv6 from the ISP and a firewall exception for the serviceIPv6 from its own networkThe far network may have no IPv6; the exception is still an open port
Relay or tunnel serviceA client that connects out to the serviceA client or a hostname the service gives youA third party carries or fronts the traffic; the service sets the terms
Device-to-device linkAn app on the home device that connects outThe same app, on your account or on an exit shared with youBoth devices must run it; the home device has to be on; when neither NAT allows a direct path, traffic stays on the relay, a machine someone else operates

The first two keep the old model: someone connects to a port you opened. The last two replace it: the home side connects out, so nothing needs to be opened by hand on your router. (For the device link, the app may still ask the router for a temporary mapping, as described below.)

Can I get a public IP from my ISP?

Sometimes. The only way to find out is to ask. Ask for a public IPv4 address rather than a static one; those are different requests, and the ISP decides terms and whether it is available on your line.

After the change, repeat the three-step check. The WAN address should now match what the lookup page shows and sit outside 100.64.0.0/10. If it does, a normal forwarding rule will work, and you are back to the usual exposure questions covered below.

Does IPv6 fix CGNAT?

It fixes the address shortage, not the filter. That distinction matters. Under IPv6 your devices can have global addresses of their own, so nothing is shared and there is no translator to cross.

Home routers still keep inbound traffic out by default. RFC 6092 recommends that gateways require filter state to be activated by traffic originating at interior nodes, and allow manually configured exceptions. You add the exception, which is again a port open to the internet. The second condition is on the far side: whoever connects needs IPv6 as well, and many networks still do not have it.

How does a tunnel service work behind CGNAT?

A tunnel service gives your home side something to connect out to. The service holds a public address, your home end opens a connection to it, and visitors reach the service.

Pinggy's own page, read on 2026-10-16 (updated 2026-08-20), describes its answer to CGNAT as an SSH reverse tunnel to its hosted endpoint, with a sign-in for permanent URLs and custom domains. That is one vendor selling one service, and we make no claim about it beyond what its page says. A VPS you rent and run yourself plays the same role, at the price of keeping that server patched. Either way, the traffic passes through a machine someone else operates.

A peer behind CGNAT that must receive while idle needs PersistentKeepalive.

Can two devices connect with no open port at all?

Yes. It works when both ends connect out and the NAT in front of each lets the replies back in. This is what the term NAT traversal covers, and RFC 5128 surveys the techniques, including the hole punching used between two peers that both sit behind a NAT. Sharing an exit with a person you name rides on the same idea; see sharing a VPN with family.

  • A cone NAT reuses one outside port for every destination a device talks to, so a peer can be told where to send.
  • A symmetric NAT picks a new port per destination, which defeats that.
  • Hole punching is both peers sending outward at once, so each NAT opens a path for the other.

RFC 6886 defines NAT-PMP, a protocol that lets a device ask its router for a port mapping.

This is how ForestVPN's My exits works. On the home computer you turn on Use as an exit; on your phone or laptop you pick that computer under My exits. No port forwarding and no router setup is involved. While the home computer serves as an exit, the app asks a router that offers UPnP, PCP or NAT-PMP for a temporary UDP mapping.

Anything on the home network that can run ForestVPN is reachable while you are connected through that exit. Details and limits are on the home anywhere page, including that the home computer has to be on and that home upload speed is the ceiling.

Sharing a device with a named person is on the family sharing page, and the mesh comparison sets it beside Tailscale, a mesh VPN service. Every plan includes it, the Free plan too; the limits on exits and people are on the home anywhere page.

Which path two devices end up on depends on the NATs in front of them, so we built three topologies and ran each once.

What happened in our network-fault lab?

How this was tested

Product
ForestVPN fv (mesh, lab build)
Version
0.3.10, main sha 4adf0ab887
System
Linux aarch64 musl, Alpine container
Checked
Runs
1
Not tested

One run of each scenario on 2026-10-16, in a privileged container on a local Mac with no ISP path, using lab accounts and no production identity. The router in each scenario is a Linux masquerade, not an ISP carrier-grade translator, so these results describe the topology the script built on this date and say nothing about what CGNAT always does. The relay in these runs was the lab's stand-in (mesh_stub), not the production relay, so "stayed on the relay" describes the lab's relay. Not measured: a real ISP CGNAT, IPv6 paths, round-trip times, repeated runs.

ScenarioWhat the script builtPath the pair ended onResult recorded
mesh_punch_coneTwo cone NATs, nothing inbound unsolicitedRelayed first, then directDirect after 16 seconds of traffic; 208 relay bytes in 5 seconds afterwards; passed
mesh_punch_symmetricTwo endpoint-dependent (symmetric) NATsStayed on the relayNo endpoint switches; 0 of 20 probes lost over 20 seconds; passed
mesh_portmappedThe home side behind a NAT-PMP router, hole punching offThe address the router mappedUDP port 51237 mapped; 5 of 5 probes answered with the relay cut; passed

In the first two topologies the router offered no mapping protocol and the pair still connected, direct in the cone run and relayed in the symmetric run.

Symmetric NAT is the hard case for any peer-to-peer technique. It worked here only by staying on the relay: data flowed, but through a middleman.

Cone went direct, though we expected about 5 seconds and it took 16. In the third run the router handed out a NAT-PMP mapping on request.

Is an open port safe?

An open port is a service the whole internet can try, so it is only as safe as the software behind it and how fast you patch it.

CISA's home network guidance advises disabling unnecessary services to shrink the attack surface, and turning off UPnP unless there is a specific need, because, CISA warns, malware inside your network can use UPnP to weaken the router's firewall and let attackers control devices remotely.

The app asks for a mapping through any of UPnP, PCP or NAT-PMP, so switching UPnP off alone may not stop it; a router that answers none of them leaves the pair on hole punching or the relay. The outbound shapes in the table are not risk-free either: the home device runs a client, so keep it updated.

What should I do if I am behind CGNAT?

Run the three-step check. If the WAN address is outside 100.64.0.0/10 and matches the lookup page, forward as usual. If it is inside, write to the ISP once for a public IPv4 address; if that fails or you would rather open nothing, make the home side connect out. If you were weighing a rented server instead, self-hosted WireGuard vs a VPN service times that build.

For reaching your own devices, that means one app on each end and no router login.

Prices in USD
PlanPriceBilled
Free–2 GB per connection, 5 connections a day
Monthly$7.99per month
Yearly$49.99per year

Questions and answers

Why does port forwarding not work behind CGNAT?

The shared translator sits at your ISP, outside your router. An inbound packet reaches it first, finds no mapping created by an outgoing connection, and is dropped, so the rule on your router never sees it. Forwarding on your own router only helps when your router holds the public address.

How do I know if I am behind CGNAT?

Read the WAN address on your router's status page. If it is inside 100.64.0.0/10, you are behind carrier-grade NAT. If it is a different address from the one a lookup page shows for your connection, another translator sits in between. Run the check with any VPN off.

Can I get a public IP from my ISP?

Some ISPs hand out a public IPv4 address on request and some do not; the answer and the terms are the ISP's. Ask support for a public IPv4 address, not a static one, and check the WAN address again afterwards.

Does IPv6 fix CGNAT?

It removes the shortage of addresses, so each device can have a global one. It does not remove the router's filter: IPv6 home routers are recommended to allow only traffic started from inside, so you still add an exception, and the device you reach from also needs IPv6.

What can I use instead of port forwarding?

A relay or tunnel service, or a link where both ends connect outward. With ForestVPN's My exits, your home computer and your phone both open outbound connections, and you forward nothing by hand.

Is an open port safe?

An open port exposes a service to the whole internet, which adds to what you must patch and watch. CISA advises removing unnecessary services and turning off UPnP unless needed. Outbound-only shapes such as a relay or tunnel service avoid a hand-opened inbound port, though each has its own risks. Turning UPnP off does not stop the mapping by itself, because the app also tries PCP and NAT-PMP; only a router that answers none of the three leaves the pair on hole punching or the relay.

How can I reach my home computer from outside with CGNAT?

Use an approach where the home side connects out: a hosted tunnel, a VPS you rent, or a device link. In ForestVPN, turn on Use as an exit on the home computer and pick it under My exits on the device you carry.

Sources

  1. RFC 6598: IANA-Reserved IPv4 Prefix for Shared Address Space (read October 16, 2026)
  2. RFC 6888: Common Requirements for Carrier-Grade NATs (CGNs) (read October 16, 2026)
  3. RFC 6092: Recommended Simple Security Capabilities in Customer Premises Equipment (CPE) for Providing Residential IPv6 Internet Service (read October 16, 2026)
  4. RFC 6887: Port Control Protocol (PCP) (read October 16, 2026)
  5. RFC 6886: NAT Port Mapping Protocol (NAT-PMP) (read October 16, 2026)
  6. RFC 5128: State of Peer-to-Peer (P2P) Communication across Network Address Translators (NATs) (read October 16, 2026)
  7. RFC 1918: Address Allocation for Private Internets (read October 16, 2026)
  8. CISA, Home Network Security (read October 16, 2026)
  9. Pinggy, How to Set Up Port Forwarding Even Behind CGNAT (read October 16, 2026)
  10. GL.iNet forum, Configuring port forwarding with CGNAT (read October 16, 2026)

How this was made

Drafted with AI assistance from IETF documents, a CISA page, a tunnel vendor's page and a forum thread read on 2026-10-16 and ForestVPN's own network-fault test logs, checked by automated gates and an editor.

All posts

Back to top

Ask us anything