Visto che hai un unico IP pubblico e le porte per i siti web sono le stesse (80 e 443 presumo) non puoi sapere a priori a quale pc instradare il traffico. Quello che fanno gli hosting condivisi è avere un web server unico che in base all'header
Host
decide a quale macchina inoltrare la richiesta. Ad esempio nella documentazione nginx (link) parla di come gestire più domini sullo stesso webserver, la differenza sarebbe che invece di pescare in un altra cartella nel tuo caso potresti usare il reverse proxy per inoltrare alla VM corretta in base all'host. Si può fare anche con apache ma proprio questa configurazione non mi è mai servita quindi non ho esempi già pronti da darti.