From 77cad98d56083e0bd2d8bab3fc31c0001af442cc Mon Sep 17 00:00:00 2001 From: Jarvis Jr Hermes Date: Wed, 22 Jul 2026 10:42:37 +0000 Subject: [PATCH] research: add range-based global IP registry --- README.md | 10 ++++--- address-book/ip-addresses.md | 2 +- registry-ips/README.md | 46 ++++++++++++++++++++++++++++++ registry-ips/apnic--1-1-1-0--24.md | 46 ++++++++++++++++++++++++++++++ registry-ips/iana--0-0-0-0--8.md | 39 +++++++++++++++++++++++++ scripts/validate.py | 3 ++ 6 files changed, 141 insertions(+), 5 deletions(-) create mode 100644 registry-ips/README.md create mode 100644 registry-ips/apnic--1-1-1-0--24.md create mode 100644 registry-ips/iana--0-0-0-0--8.md diff --git a/README.md b/README.md index bb1ffb3..61f190a 100644 --- a/README.md +++ b/README.md @@ -7,10 +7,11 @@ A source-backed address book and evolving map of the organizations, coordination ## Start here 1. Read the [first-round investigation](docs/02-first-round-investigation.md). -2. Browse the human-readable [address book](address-book/README.md). -3. Start the IP-level map with [0.0.0.0 and 1.1.1.1](address-book/ip-addresses.md). -4. Use [`data/entities.csv`](data/entities.csv) and [`data/ip-addresses.csv`](data/ip-addresses.csv) for machine-readable records. -5. Review the [next research round](research/next-round.md) and [IP network roadmap](research/ip-network-roadmap.md). +2. Browse the [human-readable address book](address-book/README.md). +3. Browse the range-based [`registry-ips/`](registry-ips/README.md), currently covering the investigated `0.0.0.0/8` and `1.1.1.0/24` ranges. +4. Start the exact-address map with [0.0.0.0 and 1.1.1.1](address-book/ip-addresses.md). +5. Use [`data/entities.csv`](data/entities.csv) and [`data/ip-addresses.csv`](data/ip-addresses.csv) for machine-readable records. +6. Review the [next research round](research/next-round.md) and [IP network roadmap](research/ip-network-roadmap.md). ## What “global network” means here @@ -34,6 +35,7 @@ It deliberately maps institutions and trusted public directories before attempti ├── address-book/ # concise human-readable directories ├── data/ # canonical entity and IP address datasets ├── docs/ # scope, method, findings, taxonomy +├── registry-ips/ # range-based global IP knowledge registry ├── research/ # unanswered questions and next rounds ├── scripts/validate.py # dependency-free data/link-shape checks ├── sources/ # provenance policy diff --git a/address-book/ip-addresses.md b/address-book/ip-addresses.md index 38b7c20..7f4fc8b 100644 --- a/address-book/ip-addresses.md +++ b/address-book/ip-addresses.md @@ -21,4 +21,4 @@ For every address, investigate these independently: 6. **Infrastructure relationships** — IXPs, facilities, upstreams, cables, and geography where evidence permits. 7. **Time and provenance** — registry and routing facts can change, so every claim needs a source and verification date. -The canonical structured records are in [`data/ip-addresses.csv`](../data/ip-addresses.csv). +The canonical structured records are in [`data/ip-addresses.csv`](../data/ip-addresses.csv). Range-level knowledge is indexed in [`registry-ips/`](../registry-ips/README.md), using filenames such as `apnic--1-1-1-0--24.md`. diff --git a/registry-ips/README.md b/registry-ips/README.md new file mode 100644 index 0000000..ceda118 --- /dev/null +++ b/registry-ips/README.md @@ -0,0 +1,46 @@ +# Global IP range registry + +This folder is the human-readable registry of IP knowledge collected by this repository. It is organized by **network range**, not by one file for every individual address: IPv4 alone contains 4,294,967,296 addresses, and registration and routing facts normally apply to prefixes. + +## Filename convention + +```text +----.md +``` + +Examples: + +```text +iana--0-0-0-0--8.md +apnic--1-1-1-0--24.md +``` + +The parts mean: + +- `registry`: authoritative number registry currently responsible for the record (`iana`, `afrinic`, `apnic`, `arin`, `lacnic`, or `ripe-ncc`); +- `network-address-with-hyphens`: canonical network address with dots replaced by hyphens; +- `prefix-length`: CIDR range number without `/`. + +IPv6 filenames use the same rule, with colons replaced by hyphens and compressed notation expanded to avoid ambiguous names. + +## Current coverage + +| Range | Registry | Classification | Known exact addresses | Record | +|---|---|---|---|---| +| `0.0.0.0/8` | IANA | Special-purpose | `0.0.0.0` | [record](iana--0-0-0-0--8.md) | +| `1.1.1.0/24` | APNIC | Public unicast | `1.1.1.1` | [record](apnic--1-1-1-0--24.md) | + +This is **not yet a list of all global ranges**. It contains the two ranges investigated so far. The expansion plan is in [`research/ip-network-roadmap.md`](../research/ip-network-roadmap.md). + +## Required contents + +Every range file must distinguish: + +1. registry and registered resource holder; +2. special-purpose classification, where applicable; +3. observed BGP announcement and origin ASN; +4. operator and service relationships; +5. exact addresses already investigated inside the range; +6. sources and verification dates. + +Do not compress these into a single misleading “owner” field. Registration, routing, operation, and service responsibility can belong to different organizations. diff --git a/registry-ips/apnic--1-1-1-0--24.md b/registry-ips/apnic--1-1-1-0--24.md new file mode 100644 index 0000000..5ea9106 --- /dev/null +++ b/registry-ips/apnic--1-1-1-0--24.md @@ -0,0 +1,46 @@ +# APNIC range: 1.1.1.0/24 + +- **Registry:** APNIC +- **Range:** `1.1.1.0/24` +- **RDAP name/type:** `APNIC-LABS` / `ASSIGNED PORTABLE` +- **Registered resource holder:** APNIC Research and Development +- **Observed route origin:** `AS13335` — Cloudflare, Inc. +- **Classification:** Public unicast +- **Globally routed:** Yes +- **Verified:** 2026-07-20 + +## Range knowledge + +APNIC RDAP describes `1.1.1.0/24` as APNIC research space and documents the APNIC–Cloudflare DNS Resolver project. Current routing evidence observed during the investigation showed Cloudflare's `AS13335` originating the prefix. + +This means “ownership” must be separated into relationships: + +- **Registration:** APNIC Research and Development is the published registrant. +- **Routing:** Cloudflare `AS13335` originates the covering prefix. +- **Operation:** Cloudflare operates the public resolver service. +- **Project relationship:** APNIC and Cloudflare publicly document their collaboration. + +## Investigated addresses + +### 1.1.1.1 + +`1.1.1.1` is Cloudflare's public recursive DNS resolver address within the registered range. + +Detailed address page: [`address-book/ip/1.1.1.1.md`](../address-book/ip/1.1.1.1.md) + +## Relationship summary + +| Axis | Finding | +|---|---| +| Registration | APNIC `APNIC-LABS` resource | +| Registered holder | APNIC Research and Development | +| Announced prefix | `1.1.1.0/24` | +| Route origin | `AS13335`, Cloudflare, Inc. | +| Operator | Cloudflare | +| Known service | 1.1.1.1 public recursive DNS resolver | + +## Sources + +- [APNIC RDAP record](https://rdap.apnic.net/ip/1.1.1.1), checked 2026-07-20 +- [RIPEstat prefix overview](https://stat.ripe.net/data/prefix-overview/data.json?resource=1.1.1.1), checked 2026-07-20 +- [Cloudflare launch announcement](https://blog.cloudflare.com/announcing-1111/) diff --git a/registry-ips/iana--0-0-0-0--8.md b/registry-ips/iana--0-0-0-0--8.md new file mode 100644 index 0000000..155c89f --- /dev/null +++ b/registry-ips/iana--0-0-0-0--8.md @@ -0,0 +1,39 @@ +# IANA range: 0.0.0.0/8 + +- **Registry:** IANA +- **Range:** `0.0.0.0/8` +- **IANA name:** This network +- **Classification:** Special-purpose IPv4 space +- **Organizational holder:** None; reserved by the IP protocol +- **Globally reachable:** No +- **Verified:** 2026-07-20 + +## Range knowledge + +IANA reserves `0.0.0.0/8` as “This network.” It is not an ordinary public allocation to an ISP, cloud provider, company, or person. IANA marks the block as not usable as a destination, not forwardable, and not globally reachable. + +No normal BGP origin or global network operator should be inferred for this block. + +## Investigated addresses + +### 0.0.0.0 + +The exact `0.0.0.0/32` entry means “This host on this network.” It is used as an unspecified source address in limited host-initialization contexts and must not be treated as a normal destination. + +Detailed address page: [`address-book/ip/0.0.0.0.md`](../address-book/ip/0.0.0.0.md) + +## Relationship summary + +| Axis | Finding | +|---|---| +| Registration | IANA special-purpose reservation | +| Registered holder | Not organizationally assigned | +| Route origin | None expected | +| Operator | None | +| Service | Protocol-defined unspecified/this-network semantics | + +## Sources + +- [IANA IPv4 Special-Purpose Address Space](https://www.iana.org/assignments/iana-ipv4-special-registry/iana-ipv4-special-registry.xhtml), checked 2026-07-20 +- [RFC 1122, section 3.2.1.3](https://www.rfc-editor.org/rfc/rfc1122.html#section-3.2.1.3) +- [RFC 791](https://www.rfc-editor.org/rfc/rfc791.html) diff --git a/scripts/validate.py b/scripts/validate.py index 5c6cf05..56090f0 100644 --- a/scripts/validate.py +++ b/scripts/validate.py @@ -120,6 +120,9 @@ def main() -> int: ROOT / "address-book" / "README.md", ROOT / "address-book" / "ip-addresses.md", ROOT / "docs" / "04-ip-address-model.md", + ROOT / "registry-ips" / "README.md", + ROOT / "registry-ips" / "iana--0-0-0-0--8.md", + ROOT / "registry-ips" / "apnic--1-1-1-0--24.md", ROOT / "research" / "next-round.md", ] for path in required_docs: