I feel like you’re forgetting about subnetting and default gateways. You can’t just route to an internal host if there isn’t a route. That route, if designed correctly, will be behind a firewall that has things subnetter to default deny all for anything “internal” that shouldn’t be publicly routable.
I’m not forgetting subnetting/default gateways… that’s exactly what I’m describing.
If you assign public addresses to internal hosts, then by definition your ISP routes that public prefix to your edge, and your edge routes it to the internal subnets. At that point, reachability exists (there is a route); whether traffic gets through is entirely a question of firewall correctness. One bad zone assignment or an overly-broad “temporary” allow can make a host directly reachable.
With typical IPv4 NAT/PAT, the default posture is different: those internal addresses are not globally routable, and there is no inbound mapping/state unless you intentionally publish something (port-forward/reverse-proxy/VPN). So a lot of “oops” mistakes fail closed. NAT isn’t a security control in theory, but it is a very real operational guardrail against accidental internet exposure.
And on IPv6: the architecture isn’t “give everything a public IP and call it done.” IPv6 can use global addresses with a default-deny stateful firewall, but the IETF also standardized ULA (fc00::/7) specifically for local communications not expected to be routable on the public Internet.
IPv4 NAT was largely driven by address exhaustion, but the reason people keep defending “internal is not directly addressable” is the exposure boundary and change-control safety margin it provides, not a belief that NAT magically replaces a firewall.
I feel like you’re forgetting about subnetting and default gateways. You can’t just route to an internal host if there isn’t a route. That route, if designed correctly, will be behind a firewall that has things subnetter to default deny all for anything “internal” that shouldn’t be publicly routable.
I’m not forgetting subnetting/default gateways… that’s exactly what I’m describing.
If you assign public addresses to internal hosts, then by definition your ISP routes that public prefix to your edge, and your edge routes it to the internal subnets. At that point, reachability exists (there is a route); whether traffic gets through is entirely a question of firewall correctness. One bad zone assignment or an overly-broad “temporary” allow can make a host directly reachable.
With typical IPv4 NAT/PAT, the default posture is different: those internal addresses are not globally routable, and there is no inbound mapping/state unless you intentionally publish something (port-forward/reverse-proxy/VPN). So a lot of “oops” mistakes fail closed. NAT isn’t a security control in theory, but it is a very real operational guardrail against accidental internet exposure.
And on IPv6: the architecture isn’t “give everything a public IP and call it done.” IPv6 can use global addresses with a default-deny stateful firewall, but the IETF also standardized ULA (fc00::/7) specifically for local communications not expected to be routable on the public Internet.
IPv4 NAT was largely driven by address exhaustion, but the reason people keep defending “internal is not directly addressable” is the exposure boundary and change-control safety margin it provides, not a belief that NAT magically replaces a firewall.