Public vs. private address space
Public IP
192.0.2.10
globally unique -- routable from anywhere
Private ranges
not routable on the public internet
Why Private IP Addresses Are Not Routable on the Public Internet
RFC 1918 set aside three IPv4 ranges -- 10.0.0.0/8, 172.16.0.0/12, and 192.168.0.0/16 -- specifically for use inside private networks, precisely because there aren't enough public IPv4 addresses for every device on every private network to have a globally unique one. These ranges are reused, simultaneously, inside millions of unrelated networks worldwide. Your home router almost certainly hands out 192.168.x.x addresses; so does practically everyone else's.
What it means for a public domain to resolve into this range
Because these addresses are meaningful only within whatever local network is asking, a public domain that resolves to one is, at best, a misconfiguration -- and at worst, a deliberate attempt to get a public-facing system to make a request to whatever happens to sit at that address on its own internal network. The public internet has no consistent idea of what 10.0.0.5 even refers to; it's a different machine depending entirely on which network is asking.
| Range | Name | Why it's blocked |
|---|---|---|
| 10.0.0.0/8 | Private (RFC 1918) | Reused inside millions of unrelated networks |
| 172.16.0.0/12 | Private (RFC 1918) | Same as above |
| 192.168.0.0/16 | Private (RFC 1918) | Same as above -- the common home-router range |
| 127.0.0.0/8 | Loopback | Refers back to the querying machine itself |
| 169.254.0.0/16 | Link-local | Includes 169.254.169.254, the cloud metadata endpoint |
| 100.64.0.0/10 | Shared address space (RFC 6598) | Carrier-grade NAT -- often missing from hand-rolled blocklists |
| 0.0.0.0/8 | Unspecified | Not a real routable destination |
| 192.0.2.0/24, 198.51.100.0/24, 203.0.113.0/24 | Documentation ranges | Reserved for examples, never meant to be live |
- A legitimate public domain has no reason to ever resolve to a private-range address -- if you see one, treat it as a signal worth investigating, not a normal result.
- IPv6 has its own equivalent private/reserved ranges -- unique local addresses (fc00::/7) and link-local (fe80::/10) -- that need the identical treatment.
Filtering these ranges out at the point of resolution -- rather than trusting that a public-looking domain always resolves to a public-looking address -- is the baseline expectation for any tool that resolves domains on a user's behalf.
The range most blocklists forget
100.64.0.0/10 -- "shared address space," defined by RFC 6598 -- doesn't get anywhere near the recognition that 10.0.0.0/8 or 192.168.0.0/16 do, despite being just as unroutable on the public internet. It exists specifically for carrier-grade NAT, letting an ISP address large numbers of customer connections internally without consuming public IPv4 space for each one. Because it's newer and less well-known than the classic RFC 1918 ranges, it's the one most commonly missing from a hand-rolled blocklist -- exactly the kind of gap that only shows up once someone deliberately points a domain at an address inside it.
"Fail closed" matters as much as the list itself
A blocklist is only as good as what happens when an address can't be parsed at all. Malformed input, an unusual notation, or a value that doesn't cleanly match any known range should never be treated as "probably fine" by default -- the safe default is to reject anything that can't be confidently classified as public, rather than only rejecting addresses that positively match a known-bad range. This "fail closed" posture is what keeps a blocklist robust against the ranges nobody thought to add yet, not just the well-known ones already on the list.
Need to check a domain's public DNS addresses? Use the Domain IP Lookup tool.
Free tools for this topic
Related reading
SSRF turns a server into an unwilling proxy
Attacker
crafts a request URL
Vulnerable server
fetches it, SSRF-tricked
169.254.169.254
the metadata endpoint
Credentials
returned to the attacker
Cloud Metadata Endpoints: Security Risks and Protection
A single, unroutable-looking IP address gives cloud instances access to credentials and configuration -- and it's a common SSRF target.
The same address, four different ways to write it
SSRF and DNS: How Server-Side Request Forgery Exploits DNS
Server-side request forgery often starts with nothing more than a domain name your server was tricked into resolving and requesting.
The same domain, two different answers
First request
resolves to a public IP
Validation
passes -- looks safe
TTL expires
seconds later
Second request
resolves to 127.0.0.1
DNS Rebinding Attacks Explained: Risks and Defenses
A domain that resolves to a safe address once and an internal address later -- DNS rebinding turns DNS itself into an attack surface.