Maneira mais simples de configurar vários subdomínios para separar VMs em execução em um único host

1

Problema:

Estou planejando configurar várias máquinas virtuais centos, rhel ou ubuntu virtualizadas em um único servidor host centos (provavelmente usando o KVM). Cada guest VM está executando uma instância de um webapp + alguns outros serviços / protocolos, e cada guest VM precisa estar acessível fora do host, em qualquer porta aberta, como se cada uma delas fosse uma caixa DNSed separada.

Eu sou (aparentemente) fraco em redes tech / config, então estou simplesmente tentando encontrar as primeiras arestas desse problema, ie. as principais abordagens que eu preciso olhar para obter uma posição sobre isso. Configuração de rede "pseudocódigo" se você quiser. :)

Exemplo:

Digamos que eu possua o domínio foo.com.

Eu tenho uma máquina física do CentOS DNSed como guests.foo.com.

Nesta máquina host física, tenho três VMs em execução. Eu quero que as VMs convidadas sejam acessadas como 1.guests.foo.com, 2.guests.foo.com e 3.guests.foo.com. As VMs convidadas executam as distribuições centos, rhel e ubuntu.

Cada VM precisa responder a qualquer porta (aberta localmente), não apenas ao tráfego http, mas também às conexões ssh e às operações git: protocol.

Por onde começo, qual é a abordagem mais elegante? O que, aproximadamente, o anfitrião e os convidados precisam, minimamente, para que isso funcione bem?

Nota:

Eu atualizarei o texto da pergunta + comentários enquanto aprendo mais.

    
por thomanil 14.08.2012 / 21:26

2 respostas

3

A menos que você tenha pelo menos um IP público por VM, não será possível fazer com que eles respondam em "qualquer" porta aberta (o que significa que você precisará de solicitações NAT em portas específicas do IP público de seus sistemas host para o IP interno da VM ). Vamos dizer que você tem apenas 1 IP público, por exemplo. 2.3.4.5 e que está configurado no host. Agora você pode redirecionar as solicitações que chegam à porta 80 para 1 VM e as solicitações que chegam ao 443 para outra VM e solicita a chegada de qualquer outra porta a qualquer VM de sua escolha, mas no geral você estará distribuindo as 65530 portas utilizáveis no IP e encaminhando-os para suas VMs, portanto, qualquer VM específica não pode estar escutando em uma porta na qual outra VM está escutando.

E se você tiver vários IPs públicos (pelo menos 1 por VM), basta criar os registros DNS para os IPs das VMs.

Na configuração múltipla de IP, você deve ter uma pequena sub-rede pública como 2.3.4.0/28, por exemplo. Esta rede contém os seguintes IPs utilizáveis:

  1. 2.3.4.1
  2. 2.3.4.2
  3. 2.3.4.3
  4. 2.3.4.4
  5. 2.3.4.5
  6. 2.3.4.6

2.3.4.0 é o IP da rede e não é utilizável e 2.3.4.7 é o IP de difusão para a rede. Agora, nessa abordagem, normalmente o primeiro IP (2.3.4.1) é usado como o gateway para o resto da sua sub-rede, ou seja. seu ISP ou DataCenter coloca uma rota para 2.3.4.0/8 com 2.3.4.1 como o próximo salto em seu firewall / roteador. Agora todos os pedidos vindos da internet para qualquer IP em 2.3.4.0/8 chegam à máquina com o IP 2.3.4.1. Então, a coisa lógica a fazer seria ter esse IP em sua máquina host.

Agora você pode seguir duas abordagens:

  1. Conecte as interfaces de rede das máquinas VM à interface Host Machines com o IP 2.3.4.1 e forneça às VMs os IPs 2.3.4.2, 3 e 4 em suas interfaces interligadas.

  2. Tenha uma rede somente de host nas VMs, por exemplo. 192.168.10.0/24 com o IP 192.168.10.1 na interface virtual do host e 192.168.10.2-4 nas interfaces da VM. E então você pode apenas pedidos NAT chegando a 2.3.4.X a 192.168.10.X.

Em ambos os casos, os registros de DNS que você precisará serão os seguintes:

1.guests.foo.com 2.3.4.2 2.guests.foo.com 2.3.4.3 3.guests.foo.com 2.3.4.4 etc.

Espero que isso lance alguma luz sobre o assunto.

    
por 14.08.2012 / 21:52
0

Nomes de host podem apontar para qualquer lugar. São endereços IP globais exclusivos para cada VM que você precisa. (Certifique-se de realmente tê-los; eles podem ser muito difíceis de serem encontrados em algumas partes do mundo.) Cada máquina virtual exigirá seu próprio endereço IP e, se você quiser acessá-los pela Internet, eles devem ser endereços globais.

A maneira mais fácil de fazer isso é usar a rede em ponte para as VMs. Como você configura isso depende principalmente de fatores externos, como se você está instalando um painel de controle de VM, mas este guia fornecerá as etapas básicas para configurar uma ponte em sua máquina local para que você possa começar a testar e se familiarizar mais com a forma como tudo funciona.

    
por 14.08.2012 / 21:41