O que você quer, embora seja útil, não é muito fácil de fazer. Basicamente, você tem 3 possibilidades:
- use a pilha Open vSwitch para virtualizar a ponte / switch
- use uma ponte de software dedicada para cada vlan
- 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.