Something else that isn't often mentioned is that NAT requires keeping track of connection state on the router and anyone that writes code knows that state is the devil. That's state for every connection and for every device on the network. A perfectly implemented NAT router with unlimited memory is just as reliable as an IPv6 router that just forwards packets. In reality, the consumer grade devices have 16MB or so of memory and fall far short of this ideal.