How NAT breaks end-to-end connectivity

Network Address Translation was designed as a short-term fix for IPv4 address exhaustion. It works by letting many private hosts share a single public IP, rewriting packet headers as traffic passes through the router.

The problem is that NAT fundamentally breaks the internet's original design principle: that every device should be addressable from every other device.

What NAT actually does

When your laptop (192.168.1.5) sends a packet to a server, the NAT router rewrites the source address to its own public IP and records the mapping in a translation table. When the reply arrives, it rewrites the destination back and forwards it to you.

Private: 192.168.1.5:54321 → Public: 203.0.113.1:54321
Reply:   203.0.113.1:54321 → 192.168.1.5:54321

This works fine for client-initiated connections. The issue is inbound connections — there is no translation table entry, so the router drops the packet. A server behind NAT is unreachable by default.

Why this matters

Peer-to-peer applications, VoIP, gaming, and IoT devices all suffer from this. Workarounds like STUN, TURN, and UPnP exist, but they add latency, complexity, and failure points. IPv6 eliminates the problem entirely by giving every device a globally routable address.