I am designing a public data network to connect branch offices of different clients, by creating a VPN for each client on the same public infrastructure. Physically, what I'm going to end up with is branch office LANs of different clients connecting into a cloud. I intend to use private IP addresses for this public network because clients will use it mostly to connect branch offices. My problem is that different clients will have overlapping IP addresses on their LANs over which I do not wish to have any influence. What technologies can I deploy that will allow clients to maintain their own IP addresses irregardless of who else is using the same addresses on the network and still be able to implement the routing correctly?