Finalmente, encontrei a maneira correta de atingir o objetivo da pergunta. Isso implica em bridging do Linux, porque eu não pude resolver o problema com a rede libvirt.
Etapas:
- Identifique as interfaces da VM KVM. Provavelmente nomes de interfaces começam com
vnet*
Neste exemplo, vnet0
e vnet1
-
Crie uma ponte Linux com:
brctl addbr virbr1
-
Anexe as interfaces da interface física e VMs do KVM à nova ponte:
AVISO: se você estiver conectado ao servidor físico através da rede (SSH, Telnet, etc.), perderá a conexão. Use um terminal ou um método alternativo (como outra interface com conectividade).
brctl addif virbr1 vnet0
brctl addif virbr1 vnet1
brctl addif virbr1 eth0
- Configurar a interface do servidor físico sem o endereço IP atribuído:
No CentOS 6.5, edite o arquivo /etc/sysconfig/network-scripts/ifcfg-eth0
com estes conteúdos:
DEVICE=eth0
BOOTPROTO=none
ONBOOT=yes
NAME=eth0
TYPE=Ethernet
IPV6INIT=no
USERCTL=no
- Configurar a ponte do servidor físico para ter o endereço IP:
No CentOS 6.5, edite o arquivo /etc/sysconfig/network-scripts/ifcfg-virbr1
com estes conteúdos:
DEVICE=virbr1
BOOTPROTO=none
ONBOOT=yes
IPADDR=<physical_server_public_ip_address>
NETMASK=<physical_server_public_ip_netmask>
GATEWAY=<physical_server_gateway_ip_address>
NAME=virbr1
TYPE=Ethernet
IPV6INIT=no
USERCTL=no
NM_CONTROLLED=no
DNS1=<physical_server_primary_dns_server_ip_address>
DNS2=<physical_server_secondary_dns_server_ip_address>
- Reinicie a rede do servidor físico:
service network restart
NOTA: você deve recuperar a conectividade de rede do servidor físico (através da interface e da ponte)
- Configure a interface de rede das VMs do KVM:
Isso depende do sistema operacional das VMs. De qualquer forma, deve incluir endereço IP, máscara de rede e gateway padrão, pelo menos. Obviamente, os servidores DNS irão completar a configuração.
Todas essas configurações são estáticas e podem ser substituídas pela atribuição de DHCP. Nesse caso, os endereços MAC da ponte e as interfaces VM KVM podem ser úteis.