Installation de Xen Hyperviseur sous Debian Squeeze chez OVH - Partie 2/2

Dans la partie précédente, nous nous étions arrêtés à la mise en place du Dom0 en assurant la compatibilité matérielle avec les dédiés OVH.

Aujourd’hui, nous allons aborder la configuration du réseau, afin de fournir un accès au net à toutes les machines virtuelles.

En revanche, contrairement à la majorité des tutoriaux que l’on trouve, nous ne ferrons pas de configuration bridgé ou chaque machine virtuelles est accessible via une IP différente ( IP Fail Over ),
mais nous serons en configuration NAT, où le Dom0 redirige les requêtes de chaque port sur la machine virtuelle correspondante.

##Configuration de Xen

On va éditer le fichier de configuration du daemon xend :

1
vi /etc/xen/xend-config.sxp

On commente les lignes suivantes :

1
2
# (network-script network-bridge)
# (vif-script vif-bridge)

On décommente les lignes suivantes :

1
2
(network-script network-nat)
(vif-script vif-nat)

Afin de respecter les bonnes pratiques de Xen (http://wiki.xensource.com/xenwiki/XenBestPractices), nous allons effectuer quelques réglages supplémentaires :

  • Fixer la mémoire minimale du Dom0 à 512Mo
  • Désactiver le “ballooning” de la mémoire du Dom0 qui évite de partager la mémoire lorsqu’elle n’est pas utilisée
  • Allouer un cpu au Dom0
/etc/xen/xend-config.xsp
1
2
3
(dom0-min-mem 512)
(enable-dom0-ballooning no)
(dom0-cpus 1)

On relance Xen :

1
/etc/init.d/xend restart

Création des machines virtuelles (DomU)

Dans mon cas, je vais créer un grand nombre de machines virtuelles similaires qui n’auront que 2 ou 3 ports ouverts, cette configuration ne correspondra certainement pas à tout le monde, je vais donc d’abord détailler les étapes les plus adaptées à ce mode de fonctionnement, et je proposerai une procédure alternative pour ceux qui vont avoir un nombre moins important de machines virtuelles qui posséderont plus de différences.

Nous allons créer les images de nos DomU à l’aide de Xen Tools.
Le stockage se fera sur l’espace LVM du disque dur, chaque DomU aura 6Go d’espace disque, 128Mo de RAM et 128Mo de Swap.
Nous générerons automatiquement des mots de passe de 8 caractères.
Chaque DomU aura une IP du type 10.10.10.X

Editons le fichier de configuration de Xen Tools afin de stocker les informations communes :

/etc/xen-tools/xen-tools.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#dir = /home/xen
lvm = vg0
size = 6Gb # Disk image size.
memory = 128Mb # Memory size
swap = 128Mb # Swap size
# noswap = 1 # Don't use swap at all for the new system.
fs = ext3 # use the EXT3 filesystem for the disk image.
dist = `xt-guess-suite-and-mirror --suite` # Default distribution to install.
image = full # Specify sparse vs. full disk images.
genpass = 1
genpass_len = 8
hash_method = sha256
netmask = 255.255.255.0
broadcast = 10.10.10.255

Créons ensuite notre VM ( commande courte pour génération à la volée ):

1
DOMU_IP="10.10.10.1"; xen-create-image --hostname=test --ip=$DOMU_IP --arch=amd64 --gateway=$(echo $DOMU_IP | awk -F. '{print $1"."$2"."$3"."$4 + 127}')

Le script générant l’ip de la gateway est tiré du vif-nat fournit avec Xen, afin de correspondre avec la virtual interface correspondante.
On observe donc qu’on ne peut utiliser que des ips entre les plages 1 et 127 afin d’avoir des gateway entre 128 et 254.

Pour la version plus longue, ça donne :

1
2
3
4
5
6
7
8
9
10
11
12
13
xen-create-image \
–-lvm=vg0 \
-–memory=128Mb \
-–swap=128Mb \
-–vcpus=2 \
-–arch=amd64 \
-–dist=squeeze \
-–broadcast=10.10.10.255 \
–-netmask=255.255.255.0 \
–-ip=10.10.10.1 \
-–size=6Gb \
-–fs=ext4 \
--hostname=test

On crée le DomU ensuite :

1
xm create test.cfg

Notre machine est maintenant lancée, mais pour le réseau c’est pas encore ça, vous pouvez vous connectez dessus avec :

1
xm console test

Configuration de IPTables

Première règle importante qui va concerner toutes les VMs :

1
iptables -A POSTROUTING -o eth0 -j MASQUERADE

A partir de là, vos VMs devraient pouvoir accéder au net, et pinguer l’extérieur.

Nous allons maintenant rediriger le port 80 vers notre machine virtuelle :

1
iptables -A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 10.10.10.1:80

Vous pouvez maintenant accéder au port 80 depuis l’extérieur vers votre VM au lieu du Dom0.

C’est bien, mais si sur une autre VM j’ai besoin d’accéder au contenu qui se trouve à cettre adresse via une résolution DNS, comment ça se passe.
La résolution de domain.tld va vous renvoyer l’ip de votre Dom0 et donc la VM n’atteindra pas le contenu, j’ai donc créé cette règle qui va rediriger le traffic :

1
iptables -A PREROUTING -d 1.2.3.4/32 -p tcp -m tcp --dport 80 -j DNAT --to-destination 10.10.10.1:80

Remplacez 1.2.3.4 par l’adresse IP de votre serveur.

Maintenant le traffic qui était destiné à votre Dom0 sur le port 80 ( sur toutes les interfaces ) sera redirigé vers la VM.

Sources

J’ai oublié de le faire dans la première partie, je vais donc mettre pèle mêle tous les liens qui m’ont aidés.