Hi!
I've been having the same ideas. After studying Tore Andersen's documents...
(older paper, based on stateless NAT64 with it's requirement for IPv4 translatable addresses):
https://ripe64.ripe.net/presentations/67-20120417-RIPE64-The_Case_for_IPv6_Only_Data_Centres.pdf
(newer paper, based on (not quite so-)stateful NAT64)
http://fud.no/talks/20150317-V6_World_Congress_2015-SIIT_DC_IPv4_Service_Continuity_for_IPv6_Data_Centres.pdf
... I gave it a go on an CSR1000V - both stateless and not-so-stateful approaches turned out to be working, but only traffic coming from one single "external IPv4 domain" was being mapped into one single IPv6 prefix.
That's one problem: you can only define a single NAT64 prefix into which the IPv4 domain gets NATted.
There's a second problem:
In the return packet/outbound packet, after NAT64 extracts the (overlapping) v4-destination-address-to-be from the IPv6 address, there will be ambiguity which route is the correct one - into VPN1, VPN2, VPN3, all of which have overlapping IPv4 address space?
I don't think that policy routing would help here, as PBR is done upon ingress and fixes the outbound interface. IPv6 PBR would then still have to pass along the packet to the NAT64 engine while giving a hint about the intended choice of egress interface. I' not quite shure, but that seems a loooong shot to me.
In short: I think NAT64 currently can only be used once per routing instance. So either...
- it's one IOS XE router per customer/overlapping IPv4 domain (CSR1000V might come in handy, here)
- we get an IOS XE release that has VRF aware NAT64 capabilities (and while wer'e at that - som DNS Fixup Engine right along would be really cool!)
Cheers
Marc