The Lunacy of IPv6 /64 and Google's Refusal to Support DHCPv6

📌 Introduction
In the grand design of IPv6, we were promised limitless address space, streamlined networking, and a clean break from the inefficiencies of IPv4. Yet, in practice, we're staring down a paradox — we have trillions of addresses, but they're unusable in any sane way for hotspot providers, network designers, or anyone running a router with real-world constraints.
This is the story of how an Android phone — due to deliberate design decisions — can unravel the supposed elegance of IPv6.
🌐 Our Setup: The Reality Check
We're allocated a /48 IPv6 prefix from our ISP (Zen Internet, for example), delivered via a routed /64. This sounds generous on paper:
- A /48 contains 2^16 = 65,536 /64 networks
- Each /64 contains 2^64 = 18,446,744,073,709,551,616 addresses
IPv6 Topology: The Wasteful Cost of SLAAC and Google’s DHCPv6 Refusal
ISP (Zen, Routed: 2A02:8011:D017:CBA8::/64, 2A02:8012:BC57::/48)
|
|-- PPPoE Interface (ppp0)
| -> Address: 2A02:8011:D017:CBA8::/64 (proto: RA)
|
Router (Receives 1x /64 via RA, routes full /48 from Zen)
|
|-- eth2 (Inbound PPPoE) VLAN 2A02:8011:D017:CBA8::1/64
|
|-- eth3 (10G uplink)
| -> 2a02:8012:BC57:3::/64 (proto: kernel) (Other IPv6 Networks)
|
|-- eth1 (2.5G uplink)
| -> 2A02:8012:BC57:1::/64 (proto: kernel) (Other IPv6 Networks)
|
|-- eth0 (LAN core) -> 2a02:8012:BC57:0::1/64
|
[Switch]
|||||
|||\-- eth0 (LAN: breath) -> 2A02:8012:BC57:0::C0DE/64
||| -> WIFI6 -> 2A02:8012:BC57:C0DE::1/64
|||
|||\-- wan0 (LAN: bpi-4-0) -> 2a02:8012:BC57:0::CACE/64
||| -> LAN -> 2A02:8012:BC57:3A00::1/96
||| -> WIFI7 -> 2A02:8012:BC57:CACE::1/80 (Other IPv6 Networks)
|||
||\-- wan0 (LAN: bpi-4-1) -> 2a02:8012:BC57:0::CA11/64
|| -> LAN -> 2A02:8012:BC57:3B00::1/80
|| -> WIFI7 -> 2A02:8012:BC57:CA11::1/64 (Other IPv6 Networks)
||
|\-- wan0 (LAN: bpi-4-2) -> 2a02:8012:BC57:0::BABE/64
| -> LAN -> 2A02:8012:BC57:3C00::1/112
| -> WIFI7 -> 2a02:8012:BC57:BABE::1/64 (Other IPv6 Networks)
|
|-- eth0 (LAN: gannah) -> 2A02:8012:BC57:0::2/64
-> wlan0 (WIFI6: gannah Hotspot output)
-> 2A02:8012:BC57:CAFE::1/64
|
|-- Any device (wlan client)
-> Forced SLAAC-only if Google Android
-> Refuses DHCPv6
-> 2A02:8012:BC57:CAFE:DEAF::BEEF:BABE/64
Yes that is REAL IPv6 Address Space
We may even allow connections to be made into the network when we publish our nftables
article to show a real world fully routed IPv6 secure network. Honeypot anyone?
We configure:
dnsmasq
andradvd
orfreeradius3 dhcp
andkea
- Try handing out a small prefix, like /68 /80 /112
- Android refuses
Why?
Because Android only supports SLAAC (Stateless Address Autoconfiguration), which requires a /64 subnet.
That means:
- No DHCPv6
- No address reservations
- No handing out a specific IP like
2a02:8012:bc57:cafe::babe
or2a02:8012:bc57:cafe::code
- No options like domain search or DNS unless hijacked into RA
You're left with one option:
Give every phone a /64, or give up
The RFC - We sure have a request for comments
https://datatracker.ietf.org/doc/html/rfc4862
DHCPv6 Logs: Android Refusal to Connect
A possible solution is under investigation and may be installable on a Samsung S25 Ultra:
https://github.com/akadatalimited/DHCPv6-Client-Android
This client may allow Android to connect using DHCPv6 instead only SLAAC worked and only on a /64 network, the phone with 18,446,744,073,709,551,616 addresses should insanity prevail.

Real Logs from Android (S25 Ultra) Failure to Connect via DHCPv6
07-26 04:19:56.813 2171 4408 D WifiClientModeImpl[1709351391:wlan0]: setSuspendOptimizationsNative: 1 true -want true stack:setSuspendOptimizationsNative - handlePostDhcpSetup - stopDhcpSetup - handleNetworkDisconnect
07-26 04:19:56.842 30141 21848 D WifiPickerTracker: ... NETWORK_SELECTION_DISABLED_DHCP_FAILURE=2 ... Obtaining IP address... / 6G
07-26 04:19:56.857 30141 21848 D WifiPickerTracker: ... NETWORK_SELECTION_DISABLED_DHCP_FAILURE=2
07-26 04:19:56.863 30141 21848 D WifiPickerTracker: ... Couldn't get IP address / 6G
07-26 04:19:59.695 2171 4408 D WifiNetworkSelector: "ipv6only":89 reason=NETWORK_SELECTION_DISABLED_DHCP_FAILURE, count=2;
07-26 04:19:59.696 2171 4408 V WifiLastResortWatchdog: "ipv6only" HasEverConnected: false, Failures: {Assoc: 0, Auth: 0, Dhcp: 3}
07-26 04:20:04.394 2171 4408 D WifiNetworkSelector: "ipv6only":89 reason=NETWORK_SELECTION_DISABLED_DHCP_FAILURE, count=2;
07-26 04:20:09.704 2171 4408 D WifiNetworkSelector: "ipv6only":89 reason=NETWORK_SELECTION_DISABLED_DHCP_FAILURE, count=2;
07-26 04:20:17.429 2171 4408 D WifiNetworkSelector: "ipv6only":89 reason=NETWORK_SELECTION_DISABLED_DHCP_FAILURE, count=2;
Summary
- Multiple DHCPv6 failure entries across seconds
- Android declares network as temporarily disabled due to DHCP_FAILURE
- Android never attempts SLAAC + DHCP fallback combo
These logs illustrate precisely the systemic limitation. The stack fails, retries, logs failure, and disables the network based solely on absence of DHCPv6 lease—even though SLAAC was available and configured with /66 /68 /70 thru /112.
When we reconfigure back to a /64 the phone simply connects and we wont use Googles own ipv6 test site as it has no AAAA records as mentioned in a previous article.
This behaviour leaves no room for flexible IPv6 subnet sizing or central IP address control.
More updates to follow once the DHCPv6-Client-Android
project is built and tested.
🤯 The Absurdity of the /64 Mandate
One /64 = 18.4 quintillion addresses
To visualize:
- There are 7.8 billion humans on Earth
- A single /64 could assign 2.6 million addresses to each human being
Now scale up:
- A /48 = 65,536 /64s
- That's 1.2e24 addresses, enough for more IPs than atoms in a grain of sand
So when Android demands a /64 for SLAAC to work, it’s demanding a network that could house more devices than all the transistors ever manufactured, for a single phone.
And we’re forced to waste it.
🤦♂️ Android, Google, and the Refusal of Progress
Android (by Google) refuses to implement DHCPv6.
Not a bug — a policy.
Despite countless requests, Google has maintained the position that SLAAC is sufficient. But it is not. SLAAC has no:
- Lease management
- Address reservation
- Central control
- DNS updates
- Logging or auditing
- Device traceability by DUID or MAC
Every ISP, enterprise, university, and public hotspot that dares use IPv6 has to:
- Either NAT6 everything
- Or give a full /64 per user
- Or bridge all clients into a flat space and firewall per MAC
Meanwhile, routers cannot even assign useful addresses to phones.
All because Google will not ship a DHCPv6 client.
📉 Comparing IPv6 to IPv4
Let’s put this into perspective:
Subnet | Hosts |
---|---|
/28 | 16 usable |
/26 | 64 usable |
/24 | 254 usable |
/64 | 18,446,744,073,709,551,616 usable (theoretically) |
This is not just over-provisioning — it’s lunacy.
If IPv4 were like this, every user would get a Class A block. Imagine assigning 10.0.0.0/8
to every single iPhone connecting to a Starbucks Wi-Fi. That’s what we’re doing in IPv6.
And the kicker?
You can't give them less — Android will reject it.
🧮 IPv6 by the Numbers
- IPv6 space: 2^128 = 340 undecillion addresses
- Global unicast (2000::/3): 2^125 addresses
- /64s available: 2^61 = 2.3e18
If every human got a /48:
- 2^45 = 35,184,372,088,832 /48s
- That’s over 4,000 /48s per person on Earth
If every home device got a /64:
- We’d still be at less than 1% of address space usage
So… it won’t run out. But that’s not the point.
🧨 The Point is Design
We are not running out of IPv6 — we are running out of good design.
IPv6 could be elegant. But not if devices refuse to support basic tools like DHCPv6.
What good is vast space if:
- You can’t subnet it?
- You can’t manage it?
- You’re forced to burn 18 quintillion addresses just to assign 1 IP?
This is not sustainable.
This is not good stewardship.
This is not sane engineering.
✅ Call to Action
- 🧱 Router developers: continue to support DHCPv6 + prefix delegation
- 🧪 Hotspot builders: consider dynamic /64 allocation per client with firewalling
- 📣 Users: pressure Google to enable DHCPv6
Even a toggle in Developer Mode would be enough.
If we don’t fix this now, IPv6 will remain the broken promise of modern networking.
RFCs are "Requests for Comments", not commandments. This is that comment.
Let it be heard.
We welcome improvements, references, or proofs of working setups using DHCPv6 on Android. Until then, the /64 wasteland continues.