Few days ago I enjoyed listening to the Teredo-bashing Packet Pushers Podcast during which Greg & the crew simply couldn’t avoid NAT64. Tom even wrote a follow-up post explaining why NAT is bad (we all agree with that) and why we shouldn’t use it in IPv6. Unfortunately he missed the elephant in the room: it’s all about the legacy content. IPv6-only residential users have to access IPv4-only content.
We know IPv4 address space has been sold out. In Asia an ISP cannot get more than a /22 regardless of their size. There are three ways to connect new customers to the Internet (see my NAT64 and DNS64 in 30 minutes presentation for details).
Connect them using private IPv4 address space and use NAT44 (or NAT444 aka LSN/CGN). This is clearly a dead end. Layered NAT is even more broken than regular NAT or NAT64 (although it’s possible to do 30 layers of NAT and still have some connectivity). You have also not addressed the IPv4 address exhaustion problem.
Connect them using dual-stack. As above, you still need NAT44/NAT444 for IPv4 and you make your network more complex than necessary. On top of that, people trying to avoid NAT444 have proposed convoluted schemes like DS-Lite or A+P.
Supporting and troubleshooting dual-stack residential ISP networks with unknown customer-side configs could also turn out to be great fun.
Connect them to IPv6 and use NAT64. Still seems to be the cleanest solution to me. Single protocol in the access network, NAT is out of the forwarding path, and it’s used only where absolutely needed. Caveat: while regular web browsing works just fine with NAT64, P2P applications (like Skype) might get totally confused unless they're NAT64-aware.
We all hate NAT to various degrees, but at the moment NAT64 seems to be the least painful interim solution. The long tail of the content will take years to figure out why you shouldn’t ignore IPv6.
What are the alternatives?
The proper way to tackle this issue is to make your content available over IPv4 and IPv6. IPv4 clients won’t notice it and IPv6 clients will use native IPv6 connectivity bypassing NAT64. You might find useful overview of what needs to be done in my Enterprise IPv6 – the first steps webinar.