Poor interoperability with NAT is a feature, not a bug, IMHO. NAT rarely makes sense in IPv6. In your scenario, why wouldn't you just set up your router so you can directly address the V6 subnets over V6 to begin with?
IPv6 works best when all addresses are globally routable (whether firewalled off or not). We're all so used to RFC1918 that we forget it was an ugly kludge that fundamentally broke how the internet was meant to work. IPv6 is the fix for that breakage: the address of every individual device can actually mean the same thing everywhere on the internet, as it was meant to be. L3 routing can be stateless again.
The primary intent of IPv6 is to replace IPv4, not coexist with it. Coexistence is transitory and not worth optimizing for over the future of the internet when V4 is dead.
V6-V6 sure, that doesn't need nat. It's the V6->V4. NAT is preferably to dual stack. I don't want to double my administration efforts by maintaining a v4 and a v6 network on every machine and every router, which appears to be best practice. Let me deploy v6, and only v6, but still interoperate with v4 until everyone has migrated.
As for nat being a cludge, lets assume I have a simple small office network with two independent ISPs. Normally I want to send half my users out of ISP1 and half out of ISP2.
If ISP2 fails, I want to send them all out of ISP1, OK there's less bandwidth to go round, but better than having no bandwidth for half my users.
How do I do that with ipv6 without natting (assuming I'm not large enough to be running my own AS and peering with two different providers)
What I've been told is both ISP's v6 prefix should be advertised with different priorities to the clients, which also yields the net bonus that applications that are stateless (UDP) or use MP-TCP can seamlessly fail over or adapt to network conditions without the intervention of another network device.
I don't have easy access to multiple V6-PD enabled providers to test this theory, and as someone with quite the neck beard I really don't know how I feel about ceeding this level of control to endpoints. But also, I'm not sure I hate it either.
Oh and don't forget link-local and a ula prefix for your local addressing requirements for pinters and whatnot that shouldn't be using dynamic discovery.
> What I've been told is both ISP's v6 prefix should be advertised with different priorities to the clients
That basically doesn't work with real clients. They'll do dumb stuff like use address from provider A to send through the router advertising addresses from provider B. And take forever to do anything in response to prefixes that are advertised as no longer usable or simply no longer advertised.
Is this conjecture or something you’ve tested or known to be tested? V6 devices are actually expected to be able to understand multiple route advertisements and I know for sure they do properly understand the mix of link-local, ULA and public prefixes.
I tested it; I was trying to get failover (preferably automated failover) between DSL and LTE on IPv6. Should be simple: advertise from DSL as normal priority (would do high priority, but I can't change how the modem advertises it), advertise from the LTE as low priority, somehow make the DSL modem advertise deprecated or at least stop advertising when it's disconnected.
V6 devices are expected to understand that and do the right thing, but Windows (10) doesn't, Linux was worse, and I don't remember what Android did and I didn't get around to testing FreeBSD, and that's all the OSes I have.
If you've got experience otherwise, I'd love to know, one of these days I need to setup IPv6 again, but what I'd really like to do is too much work, so I'm IPv4 only for the foreseeable future.
IPv6 works best when all addresses are globally routable (whether firewalled off or not). We're all so used to RFC1918 that we forget it was an ugly kludge that fundamentally broke how the internet was meant to work. IPv6 is the fix for that breakage: the address of every individual device can actually mean the same thing everywhere on the internet, as it was meant to be. L3 routing can be stateless again.
The primary intent of IPv6 is to replace IPv4, not coexist with it. Coexistence is transitory and not worth optimizing for over the future of the internet when V4 is dead.