sim, eu sinto um pouco de confusão no seu post. Uma máquina virtual (VM) é apenas isso; uma instância lógica e completamente separada, digamos, de hardware emulado no qual você instala um sistema operacional como o Linux ou o Windows.
Todos os conceitos HTTP e DNS não estão relacionados às VMs! Um domínio como o stackexchange.com pode ser hospedado em várias máquinas físicas ou virtuais para balancear a carga ou simplesmente manter o conteúdo separado.
Você pode hospedar vários domínios (stackoverflow.com, stackexchange.com) em um único endereço IP. Isso faz parte da especificação HTTP 1.1. Sob o Apache, ele é chamado de host virtual baseado em nome (vhosts, abreviado). O mesmo recurso existe no Microsoft IIS.
Como o software de servidor da Web (Apache e IIS) é executado no contexto de um sistema operacional (Linux e Windows, respectivamente), você precisa de uma VM ou hardware físico para executar o SO e o software do servidor da Web (apache, IIS) .
Apache / IIS (e outros) se ligam à pilha IP dentro do sistema operacional que, novamente, está sendo executado em uma VM ou em um hardware físico. A pilha IP e todo o gerenciamento relacionado ao gerenciamento de endereços IP, a resolução IP (chamada de resolvedor), é específica do sistema operacional. No Linux, por exemplo, você lida com /etc/resolv.conf em muitas distribuições ou pode configurar o BIND para responder a solicitações de DNS para converter coisas como stackoverflow.com em um endereço IP.
Assim, você pode ter uma única VM Linux executando o Apache e hospedando vários sites em um único endereço IP!
O truque é fazer com que o casamento entre o DNS e o software do servidor da Web funcione em conjunto ou em conjunto, para que os diferentes protocolos (http, dns) estejam corretos. NOTA: Você também pode hospedar o DNS fora de suas VMs.
espero que isso ajude
Para responder à outra parte da pergunta sobre como fazer com que um único IP público atinja várias VMs ou computadores físicos que executam sites, você precisa de um proxy reverso. O Apache faz isso; não tenho certeza sobre o IIS e há o HAProxy que também pode fazer isso.
Você pode, por exemplo, ter o HAProxy escutando o único IP PÚBLICO e rotear o tráfego para o servidor interno correto em um IP privado. Tenha em mente que há comunicação bidirecional aqui - por isso, uma resposta do seu servidor da Web precisa aparecer como se viesse do IP único.