CentOS, KVM, VLANs e bridging

3

Preciso de ajuda para projetar redes para convidados virtualizados usando o KVM. Minha máquina está executando o CentOS 7 e possui 2 NICs. Eu gostaria de alcançar o seguinte

  • Uma interface física (em1) deve ser usada apenas para acesso ao host. O host terá uma configuração bem normal com tráfego não marcado e endereço IP estático.
  • A outra interface física (em2) recebe tráfego marcado para diferentes VLANs.
  • As máquinas virtuais só verão o tráfego para sua VLAN específica. A comunicação entre convidados não precisa ser feita dentro do KVM.
  • Eu preferiria que o tráfego na NIC virtual fosse não marcado, para garantir que o convidado não altere sua configuração interna da NIC para falsificar outras redes.

Link para o conceito gráfico

Eu sou novo no libvirt e também não estou acostumado com o Network Manager. Eu procurei por documentação, mas encontrei informações conflitantes, começando com a questão de saber se é possível configurar essa ponte via gerenciador de rede. Eu também li sobre a possibilidade de deixar o KVM fazer a comutação.

Eu agradeceria a ajuda direta da configuração ou um ponteiro para uma documentação atualizada que não usa (no CentOS 7) ferramentas obsoletas ou soluções alternativas para problemas removidos nesse meio tempo.

Obrigado antecipadamente.

    
por taranion 02.11.2015 / 16:52

1 resposta

3

O que você quer, embora seja útil, não é muito fácil de fazer. Basicamente, você tem 3 possibilidades:

  1. use a pilha Open vSwitch para virtualizar a ponte / switch
  2. use uma ponte de software dedicada para cada vlan
  3. nos kernels recentes, é possível usar o recurso "filtro VLAN de ponte" para ter um único ponte "inteligente" para governá-los todos

A solução n.1 é (provavelmente) a mais completa, mas a mais difícil de configurar.

Solução n.2 é o que eu adotei para o meu teste de laboratório. Por exemplo, para a VLAN 10 e 20, você criou uma configuração semelhante:

eth0 (physical interface) -> eth0.10 (VLAN tagged) -> br10 (bridge with eth0.10 and the relative virtual qemu/kvm interface)
eth0 (physical interface) -> eth0.20 (VLAN tagged) -> br20 (bridge with eth0.20 and the relative virtual qemu/kvm interface)

Observe que, se você precisar ter tráfego não marcado também na ponte marcada, deverá emitir a seguinte regra ebtables: %código% Essa regra é necessária devido a como a pilha de rede Linux gerencia pacotes de entrada. Para mais informações, consulte aqui , aqui e aqui

A solução n.3 deve ser a mais inteligente, mas você precisa do suporte do kernel para ela (e libvirt também). O CentOS7 deve ter um kernel recente suficiente, mas não sei se todos os outros softwares estão prontos.

Solução n.4 (bônus 1): se você não precisa de comunicação guest / host, dê uma olhada no driver macvtap. Embora eu não o use, você deve ser capaz de configurar uma solução semelhante:

eth0 (physical interface) -> eth0.10 (VLAN tagged) -> MAC vtap on eth0.10
eth0 (physical interface) -> eth0.20 (VLAN tagged) -> MAC vtap on eth0.20

Para mim, a impossibilidade de se comunicar de / para convidado / host é uma limitação muito grande, mas sua exigência pode ser diferente.

Finalmente, dê uma olhada aqui , vale a pena ler.

    
por 02.11.2015 / 18:58