Skip to content

Commit 5eb0f88

Browse files
remcovmclaude
andcommitted
Introduction: rework around the two-IPv4s framing
The Introduction led with the mechanism and left the argument for it implicit. Restructure it to make the architectural case first, drawing on the worked prose in the two RIPE Labs articles. 1.1 Two Kinds of IPv4. Separate the IPv4 applications require (reachability past the first hop, where the demand is real and durable) from the IPv4 networks deploy to satisfy it (subnet, broadcast domain, ARP, on-link gateway, which no application asks for). The conflation of the two is the actual subject of the document. Note that access and hosting segments already suppress lateral traffic, so the only on-link destination is the gateway, and cite RFC 3021 for the long-standing precedent that a subnet may contain nothing but the ends of a link: the netmask as compression scheme, ARP as decompressor. 1.2 The Local IPv4 Dependency Stack. Set out subnet -> ARP -> FHRP -> carved pools -> IPv4 host, with the policing apparatus as a side stratum rather than a layer, and a before/after figure. Close on the history: ARP was specified in 1982 on the assumption it was alone on the wire, which was true then, and was never revisited when IPv6 arrived on the same links with a complete resolution service. 1.3 Removing the Base Layer. The demolition in order: /32 is subnet deletion and providers already do it, the sentinel deletes ARP's last job, FHRP loses its object, pools flatten, policing collapses to one rule. Close on the precedent that every OS already runs subnet-less IPv4 on tunnel interfaces daily, so what changes is how the host is told to, not whether it can. 1.4 The Mechanism. The former opening material, now arriving after the case for it. Content of #8, #10 and #11 preserved. New informative reference: RFC 3021. Refs #12 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
1 parent 479c719 commit 5eb0f88

1 file changed

Lines changed: 182 additions & 49 deletions

File tree

‎draft-ietf-intarea-ipv6-resolved-gateway.md‎

Lines changed: 182 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ informative:
4242
RFC1918:
4343
RFC1122:
4444
RFC2516:
45+
RFC3021:
4546
RFC3046:
4647
RFC3442:
4748
RFC6877:
@@ -91,65 +92,197 @@ support this mechanism.
9192

9293
# Introduction
9394

94-
An IPv4 address functions as a service endpoint identifier --
95-
either for a client seeking access to a service, or a server
96-
providing one. The BSD socket API, present in virtually every
97-
operating system and language runtime, expresses this directly:
98-
a call to `connect(AF_INET, "192.0.2.1", 80)` is a statement
99-
about which service to reach, not about routing or link-layer
100-
resolution. The host implements IPv4 natively;
95+
Operators have been able to build IPv6-only infrastructure for
96+
years. The routing protocols, the address space and the tooling
97+
are all in place, and IPv6-only control planes run in production
98+
in datacenter fabrics and access networks today. Almost all of
99+
those networks nonetheless carry a parallel IPv4 architecture,
100+
because the applications, devices and systems running on top of
101+
them continue to require IPv4 reachability. A network team that
102+
has built a clean IPv6-only fabric finds itself maintaining IPv4
103+
subnets, IPv4 gateway addresses and ARP alongside it
104+
indefinitely.
105+
106+
This document addresses that situation by separating two things
107+
that have long been treated as one.
108+
109+
## Two Kinds of IPv4
110+
111+
The IPv4 that applications require is reachability to and from
112+
everything beyond the first hop: the public IPv4 Internet, and
113+
equally the internal services to which applications still open
114+
IPv4 sockets. An IPv4 address here serves as a service endpoint
115+
identifier, for a client seeking a service or a server providing
116+
one. The BSD socket API, present in virtually every operating
117+
system and language runtime, expresses this directly: a call to
118+
`connect(AF_INET, "192.0.2.1", 80)` is a statement about which
119+
service to reach, not about routing or link-layer resolution.
120+
This demand is real and durable, and this document does not
121+
question it.
122+
123+
The IPv4 that networks deploy in order to satisfy that demand is
124+
a different thing: an IPv4 subnet on the local segment, a
125+
broadcast domain, ARP, and a default gateway that must be the
126+
host's on-link neighbor. No application asks for any of it. It
127+
is the architecture that has historically been required to
128+
deliver the first thing, and the two have been conflated for so
129+
long that needing to reach IPv4 has been taken to entail being
130+
attached to an IPv4 network. Separating them is the subject of
131+
this document; the mechanism defined below is a consequence of
132+
the separation rather than the point of it.
133+
134+
On many segments the local part was never used. Access networks
135+
and hosting segments commonly suppress lateral traffic by
136+
design, through port isolation, split horizon or private VLANs:
137+
subscribers do not address subscribers, and tenants do not
138+
address tenants. On such a segment the only IPv4 destination
139+
ever resolved on-link is the gateway, and the subnet exists so
140+
that ARP has a jurisdiction within which to operate.
141+
142+
That a subnet may contain nothing beyond the ends of a link is
143+
long established. {{RFC3021}} standardised 31-bit prefixes by
144+
observing that the network and broadcast addresses carry no
145+
meaning on a point-to-point link. A large access subnet with
146+
lateral traffic suppressed is the same observation at scale: the
147+
netmask acts as a compression scheme for a set of host routes,
148+
and ARP as the corresponding decompressor.
149+
150+
## The Local IPv4 Dependency Stack
151+
152+
What rests on the local network is a stack of dependencies, from
153+
the bottom up:
154+
155+
- The IPv4 subnet establishes on-link jurisdiction. The netmask
156+
is the decision procedure determining whether a destination is
157+
resolved locally or handed to a gateway.
158+
- ARP enforces that decision on multi-access links. It does not
159+
make the determination; it acts on one already made.
160+
- A first-hop redundancy protocol exists because the subnet
161+
requires a gateway address and ARP admits only one owner for
162+
it, so any resilient deployment must hold an election. VRRP,
163+
HSRP and CARP address exactly this.
164+
- Address pools are carved to follow the subnetting: sized per
165+
service area, allocated ahead of demand, and renumbered when
166+
demand moves.
167+
- The IPv4 host address sits on top. It is the only layer any
168+
application asked for.
169+
170+
Alongside the stack rather than within it sits a policing
171+
apparatus: DHCP snooping, dynamic ARP inspection and binding
172+
tables. It exists because the base of the stack is an
173+
unauthenticated broadcast protocol feeding a table that permits
174+
only one answer to exist.
175+
176+
~~~
177+
Conventional This document
178+
179+
+----------------------+ +----------------------+
180+
| IPv4 host address | | IPv4 host address |
181+
+----------------------+ +----------------------+
182+
| carved address pools | | IPv6 Neighbor |
183+
+----------------------+ | Discovery |
184+
| FHRP | +----------------------+
185+
+----------------------+
186+
| ARP |--+ DHCP snooping, dynamic ARP
187+
+----------------------+ | inspection, binding tables
188+
| IPv4 subnet |
189+
+----------------------+
190+
~~~
191+
192+
None of this was poor engineering. ARP was specified on the
193+
assumption that it operated alone on the link, which in 1982 it
194+
did; there was no adjacent resolution protocol to design
195+
against. What did not follow was revision. IPv6 arrived on the
196+
same links carrying a complete neighbor resolution service, and
197+
IPv4 link-layer resolution was never reconsidered in its light.
198+
The prevailing dual-stack model held the two stacks deliberately
199+
independent instead. IPv4 continues to resolve as though it were
200+
alone on the link, which it has not been for a long time.
201+
202+
## Removing the Base Layer
203+
204+
Removing the base layer removes the need for those above it.
205+
206+
With no IPv4 prefix on the segment, every IPv4 destination is
207+
off-link by construction, and ARP retains one vestigial
208+
function: locating the gateway. This is not hypothetical.
209+
Hosting providers including Hetzner, OVH and Scaleway have
210+
assigned /32 host addresses with off-link IPv4 gateways for
211+
years, each using a different gateway address and a different
212+
per-OS configuration recipe -- Linux `pointopoint`, netplan
213+
`on-link: true`, explicit post-up routes -- documented in
214+
provider wikis and in no RFC, and not interoperable with one
215+
another.
216+
217+
The sentinel address defined in this document removes the
218+
remaining function. A host that receives it as its IPv4 default
219+
gateway resolves the first-hop link-layer address from the IPv6
220+
neighbor cache it already maintains, and ARP is not used at all.
221+
222+
The layers above lose their object in turn. With no gateway
223+
address on the link, there is no address for a redundancy
224+
protocol to elect an owner for, and any number of routers may
225+
present the sentinel simultaneously without coordination. With
226+
no subnetting to follow, address pools become flat: any address
227+
may be assigned anywhere in the deployment, and none is stranded
228+
by the sizing of a prefix. The policing apparatus reduces to a
229+
single rule, because the first-hop router is the only legitimate
230+
source of an ARP reply.
231+
232+
What remains is IPv6 Neighbor Discovery, a flat pool, and the
233+
host's own IPv4 address: a /32 resting directly on the neighbor
234+
discovery the segment already operates.
235+
236+
This is not a novel arrangement at the host. A VPN connection
237+
provides exactly it: a /32 with no subnet, no ARP, no local IPv4
238+
network, and a next-hop that is not on-link in any classical
239+
sense. Every mainstream operating system, and every application
240+
running on one, handles subnet-less IPv4 on tunnel interfaces
241+
routinely, closed platforms included. What this document changes
242+
is not a host's capacity to operate that way, but the means by
243+
which it is told to.
244+
245+
## The Mechanism
246+
247+
This document defines a sentinel IPv4 address, `IPV4-SENTINEL`,
248+
that signals to a host stack that link-layer resolution for the
249+
IPv4 default gateway is derived from the link-layer address
250+
entry for the IPv6 default router in the neighbor cache
251+
{{RFC4861}}, rather than via ARP. The IPv4 routing table entry
252+
is unchanged; only the next-hop resolution path is modified.
253+
This eliminates the need for IPv4 subnets and ARP on the local
254+
segment, and with them the requirement for tunneling or
255+
translation at the first hop. The host implements IPv4 natively;
101256
routers recognise and forward IPv4 packets and will continue to
102-
do so. What this document changes is solely how the host resolves
103-
the link-layer next-hop for the first hop.
104-
105-
Networks transitioning to IPv6-only segments still need to carry
106-
IPv4 traffic for dual-stack hosts. Traditional mechanisms such as
107-
dual-stack, tunneling, and translation all reintroduce IPv4 at
108-
the infrastructure level. This document defines a sentinel
109-
IPv4 address, `IPV4-SENTINEL`, that signals to a host stack that
110-
link-layer resolution for the IPv4 default gateway is derived
111-
from the link-layer address entry for the IPv6 default router in
112-
the neighbor cache {{RFC4861}}, rather than via ARP. The IPv4
113-
routing table entry is unchanged; only the next-hop resolution
114-
path is modified. This eliminates the need for IPv4 subnets and
115-
ARP on the local segment, removing the requirement for tunneling
116-
or translation at the first hop.
117-
118-
This problem is already being solved in production, but
119-
inconsistently. Hosting providers including Hetzner, OVH, and
120-
Scaleway independently deploy /32 host addresses with off-link
121-
IPv4 gateways using per-OS workarounds (Linux pointopoint, netplan
122-
on-link: true, explicit post-up routes). None of this is
123-
documented in any RFC, and the implementations are not
124-
interoperable across providers. This draft standardises the
125-
pattern with a single sentinel address that host stacks can
126-
implement natively. Alternative
127-
approaches (a new DHCPv4 option, or implicit behaviour when
128-
no router is specified) would both require DHCPv4 client
129-
changes across every OS implementation; given typical
130-
deployment timescales, meaningful coverage would take a decade
131-
at best.
257+
do so. What this document changes is solely how the host
258+
resolves the link-layer next-hop for the first hop.
259+
260+
Alternative approaches -- a new DHCPv4 option, or implicit
261+
behaviour when no router is specified -- would both require
262+
DHCPv4 client changes across every OS implementation; given
263+
typical deployment timescales, meaningful coverage would take a
264+
decade at best.
132265

133266
The cost of a new DHCPv4 option is also not confined to client
134267
stacks. An operator's billing, provisioning, inventory,
135268
monitoring, NOC tooling and validation logic all encode what an
136269
IPv4 gateway looks like, and a new option changes that shape in
137-
every one of them at once. A sentinel address changes none of it:
138-
to every system that reads or stores a lease it is an ordinary
139-
IPv4 gateway address, syntactically and semantically valid, and
140-
it passes through unaltered. The only component that has to know
141-
the value is special is the host stack performing next-hop
142-
resolution.
143-
144-
The sentinel address approach requires no changes to
145-
DHCPv4 clients or servers and is incrementally deployable
146-
today. Updated and unmodified hosts coexist on the same segment
270+
every one of them at once. A sentinel address changes none of
271+
it: to every system that reads or stores a lease it is an
272+
ordinary IPv4 gateway address, syntactically and semantically
273+
valid, and it passes through unaltered. The only component that
274+
has to know the value is special is the host stack performing
275+
next-hop resolution.
276+
277+
The sentinel address approach therefore requires no changes to
278+
DHCPv4 clients or servers and is incrementally deployable today.
279+
Updated and unmodified hosts coexist on the same segment
147280
indefinitely, and a segment may be converted one host at a time.
148281
There is no flag day or mandatory switch-over point.
149282

150283
The mechanism has been verified to work without changes to
151-
applications or DHCPv4 client configuration on Windows 11, macOS,
152-
Android, iOS, Linux, FreeBSD, and ChromeOS.
284+
applications or DHCPv4 client configuration on Windows 11,
285+
macOS, Android, iOS, Linux, FreeBSD, and ChromeOS.
153286

154287
This document addresses the host-side first-hop gap left open
155288
by {{I-D.ietf-intarea-v4-via-v6}}, which defines router-to-router

0 commit comments

Comments
 (0)