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:

Xen.png

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

Ferramentas pessoais