VLANs e múltiplas interfaces de rede com o Xen
De Xen-BR wiki
Utilizando VLANs e múltiplas interfaces de rede com o Xen
Obs: estas configurações foram testadas no Xen 3.1 tarball baixado do site Xensource, instalado em um Debian Etch AMD-64.
Versão do documento: 31.10.07
O xen possui um script padrão que cria uma bridge “xenbr0” sobre a interface ethernet default. Esse script, “network-bridge”, é chamado pela linha “network-script network-bridge”, dentro do arquivo de configuração do xend: “xend-config.sxp”. Caso esteja comentada, descomente-a para que a configuração faça efeito. No próprio arquivo, existem comentários explicativos sobre outras possibilidades, como por exemplo, passar a interface eth1 como parâmetro.
Assim, partindo-se de uma configuração de rede trivial, como exemplificado abaixo através do arquivo “/etc/network/interfaces”, podemos dispor de uma bridge para conectar a rede das máquinas virtuais sem qualquer configuração manual.
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
#allow-hotplug eth0
auto eth0
iface eth0 inet static
address 192.168.0.150
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255
gateway 192.168.0.1
# dns-* options are implemented by the resolvconf package, if installed
dns-nameservers 192.168.0.1 192.168.0.2
dns-search exemplo.com.br
Entretanto, nossas necessidades podem tornar-se mais complexas, como adicionar novas placas de rede ao DOM0 para distribuir melhor a carga ou ainda conectar máquinas virtuais a diversas VLANs. No nosso caso vamos tratar das duas coisas ao mesmo tempo.
Comecemos com o diagrama da topologia pretendida:
Descrição da Topologia:
O hospedeiro de nossas máquinas virtuais (DOM0) terá duas interfaces físicas (eth0 e eth1). Começaremos criando a bridge xenbr0 sobre a interface eth0, para trafegar a VLAN default, sem qualquer “tag”. Sobre a interface eth0, também criaremos duas VLANs que se concretizarão na forma de duas interfaces virtuais (eth0.13 e eth0.14). Sobre essas duas interfaces virtuais criaremos as bridges xenbr0V13 e xenbr0V14. Sobre a interface eth1, criaremos a bridge xenbr1, que também trafegará a VLAN default, sem tagueamento. Repare, que mesmo tendo acesso a mesma rede, as bridges xenbr0 e xenbr1 irão acessá-la via interfaces físicas distintas (eth0 e eth1), o que evitará a sobrecarga de uma única interface de rede. Finalizando, podemos ver então, que a VM1 (máquina virtual 1) terá uma interface de rede (eth0) conectada à VLAN default através da bridge xenbr0. A VM2 terá três interfaces de rede: uma conectada à VLAN default através da bridge xenbr0 e outras duas conectadas às VLANs 13 e 14, respectivamente através das bridges xenbr0V13 e xenbr0V14. A última máquina virtual (VM3) terá uma interface de rede (eth0) conectada também à VLAN default, mas desta vez através da bridge xenbr1.
Implementação
A maior parde da implementação da topologia descrita, será executada por um script personalizado de poucas linhas, que chamaremos de “vlan-network-bridge” e que utilizará o script “ network-bridge”, padrão do Xen. O script está listado e comentado abaixo:
Conteúdo do arquivo “vlan-network-bridge”
#!/bin/sh #set -x #comando usado para debugar o script vconfig set_name_type DEV_PLUS_VID_NO_PAD #Cria as VLANs sobre a interface desejada – e necessario que o pacote que suporta VLANs esteja #instalado no DOM0 vconfig add eth0 13 vconfig add eth0 14 dir=$(dirname "$0") #Cria a bridge sobre a interface eth0 (sem tag/vlan) "$dir/network-bridge" "$@" netdev=eth0 vifnum=0 bridge=xenbr0 #Cria a bridge sobre as VLANS #e essencial que o parametro “vifnum” corresponda ao numero da VLAN, caso contrario não #funcionara "$dir/network-bridge" "$@" netdev=eth0.13 vifnum=13 bridge=xenbr0V13 "$dir/network-bridge" "$@" netdev=eth0.14 vifnum=14 bridge=xenbr0V14 #Cria a bridge sobre a interface eth1 (sem tag-vlan) "$dir/network-bridge" "$@" netdev=eth1 vifnum=1 bridge=xenbr1
Para o nosso script ser executado na inicilialização do xend, temos que colocá-lo (em substituição ao script padrão) no arquivo“xend-config.sxp”:
#(network-script network-bridge) (network-script vlan-network-bridge)
Nos arquivos de configuração de cada uma de nossas máquinas virtuais, os parâmetros de configuração de rede ficarão da seguinte forma:
VM1:
vif = [ 'bridge=xenbr0']
VM2:
vif = [ 'bridge=xenbr0', 'bridge=xenbr0V13', 'bridge=xenbr0V14' ]
Ficando as interfaces com a seguinte distribuição (correspondente à ordem acima): eth0-VLAN1 (default), eth1-VLAN13 e eth2-VLAN14.
VM3:
vif = [ 'bridge=xenbr1']
Como se pode observar a solução é flexível e suporta quaisquer tipos de combinações possíveis.
Geovane Gonçalves Analista de Rede - Porto Alegre RS
Referências:
http://sari.inpg.fr/IMG/pdf/virtualisation_sous_debian.pdf
http://www.debian-administration.org/articles/470
http://lists.xensource.com/archives/html/xen-users/2007-03/msg00988.html
