libvirt rede TCP encapsulada só funciona para 2 VMs

1

Estou configurando algumas VMs com o libvirt (driver qemu). Uma VM deve ser o gateway e, portanto, é configurada com duas interfaces de rede. Uma interface está conectando a minha LAN real e a outra usa o encapsulamento TCP (modo de servidor):

<!-- External interface - i.e. facing the Internet -->
<interface type='direct' trustGuestRxFilters='no'>
  <source dev='eth0' mode='vepa'/>
</interface>

<!-- Virtual network -->
<interface type='server'>
  <source address='0.0.0.0' port='5558'/>
</interface>

Então eu tenho duas outras VMs (chamadas de test_1 e test_2) que são praticamente idênticas (exceto para UUID, MAC e hostname, é claro). Aqueles que possuem apenas interfaces de rede que usam a rede TCP-tunneled virtual:

<interface type='client'>
  <source address='127.0.0.1' port='5558'/>
</interface>

Agora, a VM do gateway deve distribuir endereços IP para todas as VMs na rede virtual, mas isso só é feito na VM de teste, que é inicializada pela primeira vez. Além disso, se ambos estiverem funcionando e eu desligar o que atualmente tem um IP, o outro receberá um IP.

Não acho que seja um problema do DHCP, porque vejo que a segunda VM de teste nem mesmo envia uma solicitação DHCP ao gateway. Também definir um IP estático na segunda VM não ajuda.

Afinal, parece que só pode haver uma VM como cliente para a rede virtual e a outra VM não está conectada à rede virtual. Mas, verificando as conexões na máquina host, vejo que ambos os processos do qemu para as VMs de teste têm túneis de TCP abertos para o processo de host do gateway.

Eu estou realmente sem noção. Algum conselho sobre o que poderia estar errado ou o que eu poderia tentar em seguida?

EDITAR: É interessante dar uma olhada nas conexões reais no sistema host:

qemu-syst 2900 libvirt-qemu   12u  IPv4  22574      0t0  TCP *:5558 (LISTEN)
qemu-syst 2900 libvirt-qemu   17u  IPv4  22639      0t0  TCP localhost:5558->localhost:38714 (ESTABLISHED)
qemu-syst 2946 libvirt-qemu   12u  IPv4  21820      0t0  TCP localhost:38714->localhost:5558 (ESTABLISHED)
qemu-syst 2967 libvirt-qemu   12u  IPv4  21835      0t0  TCP localhost:38717->localhost:5558 (ESTABLISHED)

Parece que o servidor (processo 2900) aceitou somente a conexão da primeira VM (processo 2949)

    
por Janosch Gräf 02.08.2016 / 20:41

1 resposta

1

Depois de examinar o código do libvirt e do qemu, descobri que esse é o comportamento pretendido (pelo menos pelo qemu). O libvirt passa as opções do túnel TCP para o switch -net do qemu. O comportamento de cliente único parece ter sido introduzido por este patch [1]. Além disso, o código do qemu claramente aceita apenas um cliente de cada vez.

No entanto, a documentação do libvirt parece que pode haver vários clientes. Portanto, a funcionalidade deve ser implementada ou a documentação deve ser adaptada pelos desenvolvedores.

[1] link

    
por 09.08.2016 / 10:20