tl;dr everything that currently has a v4 address should have the same v6 address (with padding), in every kind of dual-stack network, to ease the transition
IPv6 is generally considered better and even simpler than v4. Slow adoption has usually been blamed on old systems, but I'm getting tired of that explanation. Currently, many networks are dual-stack, meaning both v4 and v6 are spoken on it totally independently. Not only is v4 still around, but the phrase "IP address" is generally understood to mean v4. Why is this still a thing?
First I considered the human side. Say a device's IPv4 address is 71.177.17.171 (seriously I used to have this one). Maybe I also get v6 address 2345:0425:2CA1:::0567:5673:23b5. You're telling me this ::::ing eyesore of base16 is an upgrade? Even making it a longer octal like 71.177.17.171.77.111.11.11 would've been easier for most people. Yes, either way it's just a number to the computer, but human-friendliness still matters (consider JSON).
When I mentioned this to some network expert colleagues over lunch (I'm no expert), they each said, the human-unfriendly v6 addresses are a feature to encourage use of DNS within an enterprise system. Something is wrong if you care about the address rather than just using DNS. DNS also solves the v4->6 migration. I get it, but doesn't that sound user-hostile? If the benefit of switching from 4 to 6 is repeatedly too small for companies to justify in the short term, shouldn't this be nicer?
So I asked, why is v4 still king if DNS can resolve to v6, and the answer confirmed my guess: It's not a lack of hardware/software support for v6. It's all these old, shoddy systems with hardcoded peer ipv4 addresses within datacenters, enterprise setups, etc. Maybe a sensor hardcodes the controller address. And a v4 network will often include all sorts of middleware like NATs that you don't put into a v6 network, so often everything changes going from 4 to 6. For companies that don't need v6 today, the value proposition doesn't make sense. I'm "guilty" of this at home too, setting static ipv4s for devices and disabling v6 entirely cause who needs it. v4 is king because v4 addresses are king.
The common enterprise workaround is predictable. Configure a 4->6 middlebox for legacy parts of the network, but of course that requires special configuration coding in the 4->6 address mapping. And in dual-stack networks, you get a confusing mix of v4 and v6 addresses. Even home networks and consumer ISPs are in that situation now. It's a mess.
As we spoke at the lunch table, each person who sat down to join us left this insanely boring conversation within a minute.
So I had previously thought about shoving the v4 address into the v6 with some padding. Turns out there's a spec* for this, but it's optional. Here's my proposition: In every dual-stack setup, make each host's v6 address always the same as its v4 address (with padding). I don't just mean within one company, I mean globally as part of the IP spec. Change ipv4 networks to speak v6, from ISPs to tiny subnets, but don't change any addresses. Crappy old code just needs a protocol change, nothing else. Humans should even represent such padded v6 address in the v4 octal notation; don't scare people with hexes. Your gateway is still 192.168.1.1, your DNS is 8.8.8.8, but you're speaking v6. Once that single step is complete, we can take the next steps with the critical mass of adoption put behind us. Maybe some v4-padded addresses will survive, but IPv4 won't.
In some ways, this makes no technical sense. The address shouldn't matter, and why use padded v4 addresses even in dual-stack networks that don't have this problem of hardcoded addresses? Because this is less confusing, and it's not about the technical perfection, it's about getting people on the same page.
* https://docs.oracle.com/cd/E19683-01/817-0573/transition-4/index.html
IPv4-mapped addresses are supported, depending on your network stack (I think for example OpenBSD doesn’t allow it for security reasons), but only to have a combined socket listening to both IPv4 and IPv6.
NAT64 is what you want I guess, but there is no requirement for a prefix (in a sense you can choose who handles the 6-to-4 translation by choosing the prefix). There is a “well-known” prefix though: 64:ff9b::/96
NAT64 is often combined with a DNS server translating A records into the corresponding AAAA records (DNS64). I don’t know whether they solved how that works together with DNSSEC though