Passage en KVM (brouillon)

Introduction

Passage en KVM

Avant tout, passage en 100% Debian stable:

deb ftp://mir1.ovh.net/debian/ lenny main contrib non-free
deb-src ftp://mir1.ovh.net/debian/ lenny main contrib non-free
deb-src ftp://mir1.ovh.net/debian/ sid main contrib non-free
deb-src ftp://mir1.ovh.net/debian/ experimental main contrib non-free

deb http://security.debian.org/ lenny/updates main contrib non-free
deb-src http://security.debian.org/ lenny/updates main contrib non-free

deb http://volatile.debian.org/debian-volatile lenny/volatile main contrib non-free
deb-src http://volatile.debian.org/debian-volatile lenny/volatile main contrib non-free

Puis ajout du pont Ethernet à la place de l'interface physique en connexion Internet

auto br0
iface br0 inet static
        address 91.121.160.204
        netmask 255.255.255.0
        network 91.121.160.0
        broadcast 91.121.160.255
        gateway 91.121.160.254
        bridge_ports eth0
        bridge_fd 9
        bridge_hello 2
        bridge_maxage 12
        bridge_stp off

#auto eth0
#iface eth0 inet static
#       address 91.121.160.204
#       netmask 255.255.255.0
#       network 91.121.160.0
#       broadcast 91.121.160.255
#       gateway 91.121.160.254

Puis mise en place des switchs dans /etc/network/interfaces

auto vdeweb
iface vdeweb inet manual
   vde2-switch -

auto vdebd
iface vdebd inet manual
   vde2-switch -

MàJ kvm

apt-get -b source kvm kvm-source
m-a a-i -t kvm

Les démarreurs

Le service « servidéo » de démarrage est fourni par le script ci-joint : attachment:servideo.

Surtout pas oublier :

T0:23:respawn:/sbin/getty -L ttyS0 115200 vt100

dans /etc/inittab

arachnida

kvm \
-nographic -monitor pty -serial pty \
-kernel /vmlinuz -initrd /initrd.img \
-append "root=/dev/vda console=ttyS0" \
-drive file=system.img,index=0,media=disk,if=virtio,boot=on \
-drive file=swap.img,index=1,media=disk,if=virtio \
-net nic,vlan=0 -net vde,vlan=0,sock=/var/run/vde2/vdeweb.ctl \
-net nic,vlan=1 -net vde,vlan=1,sock=/var/run/vde2/vdebd.ctl

marsupilia

kvm \
-nographic -monitor pty -serial pty \
-kernel /vmlinuz -initrd /initrd.img \
-append "root=/dev/vda console=ttyS0" \
-drive file=system.img,index=0,media=disk,if=virtio,boot=on \
-drive file=swap.img,index=1,media=disk,if=virtio \
-net nic,vlan=0 -net vde,vlan=0,sock=/var/run/vde2/vdebd.ctl

shelob

kvm -nographic -monitor pty -serial pty \
-kernel /vmlinuz -initrd /initrd.img \
-append "root=/dev/vda console=ttyS0"  \
-drive file=squeeze.img,index=0,media=disk,if=virtio,boot=on \
-net nic,vlan=0 -net vde,vlan=0,sock=/var/run/vde2/vdeop.ctl \
-net nic,vlan=1 -net vde,vlan=1,sock=/var/run/vde2/vdeweb.ctl

xena

kvm \
-nographic -monitor pty -serial pty \
-kernel /vmlinuz -initrd /initrd.img \
-append "root=/dev/vda console=ttyS0" \
-drive file=system.img,index=0,media=disk,if=virtio,boot=on \
-drive file=swap.img,index=1,media=disk,if=virtio \
-net nic,vlan=0 -net user,vlan=0 \
-redir tcp:80::80 -redir tcp:443::443 \
-redir tcp:2222::2222 \
-redir tcp:2221::22 \
-net nic,vlan=1 -net vde,vlan=1,sock=/var/run/vde2/vdeop.ctl

xenarthra

kvm \
-nographic -monitor pty -serial pty \
-kernel /vmlinuz -initrd /initrd.img \
-append "root=/dev/vda console=ttyS0" \
-drive file=system.img,index=0,media=disk,if=virtio,boot=on \
-drive file=swap.img,index=1,media=disk,if=virtio \
-net nic,vlan=0,macaddr=00:1c:c0:3b:19:f1 -net user,vlan=0 \
-redir tcp:53::53 -redir udp:53::53 \
-redir tcp:389::389 \
-redir tcp:2223::22

Des tests

On effectue quelques tests:

sudo /usr/sbin/debootstrap squeeze squeeze-chroot ftp://mir1.ovh.net/debian/
sudo cp -ar /lib/modules/2.6.26-2-686/ squeeze-chroot/lib/modules
dd if=/dev/zero of=squeeze.img bs=128M count=4
sudo mkfs.ext3 squeeze.img
sudo cp -ar squeeze-chroot/* /mnt/
sudo umount /mnt
sudo kvm  -kernel /vmlinuz -initrd /initrd.img -drive file=squeeze.img,index=0,media=disk,if=virtio,boot=on -append root=/dev/vda -redir tcp:6666::22 -net nic,model=virtio -net tap,script=/etc/kvm/kvm-ifup

Comment démarrer les services

il faut tout d'abord se connecter sur xavier:

$ ssh -l login xavier

Démarrer les machines virtuelles

Pour avoir la liste des machines qui tournent actuellement:

$ ps aux | grep kvm

$ cd /home/kvm

il y a un répertoire par machine contenant entre autres une image disque et un fichier regroupant toutes les options de kvm pour cette machine (noyau utilisé, mémoire, disque, réseau,...)

Un script a été écrit pour démarrer chaque machine avec l'utilisateur kvm en mode démon:

/etc/init.d/servideo

Il permet de démarrer une machine:

$ sudo /etc/init.d servideo start-one arachnida

ou toutes les machines présentes dans /home/kvm:

$ sudo /etc/init.d servideo start

Rien à voir mais bon à savoir

L'esperluette (&) permet de lancer la tâche en tâche de fond.

La commande nohup permet de ne pas tuer une tâche de fond quand l'utilisateur se déconnecte. La sortie standard est alors redirigée vers le fichier ./nohup.out.

Routage sur xavier

Tous les paquets ip sont routés vers xavier. Il faut procéder à un routage des paquets sur Xavier en fonction de l'IP à laquelle ils ont été adressés et vice-versa:

$ sudo iptables -t nat -L

Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination
DNAT       all  --  anywhere             91-121-55-123.ovh.net to:192.168.200.3
DNAT       all  --  anywhere             87-98-159-1.ovh.net to:192.168.200.5

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination
SNAT       all  --  192.168.200.3        anywhere            to:91.121.55.123
SNAT       all  --  192.168.200.5        anywhere            to:87.98.159.1

On voit donc le preroutage permettant de diriger les paquets adressés à l'ip publique 91-121-55-123.ovh.net vers l'adresse locale de xena : 192.168.200.3 ; le postroutage permet le retour. Et la même chose pour xenarthra.

Sur xavier les interfaces sont configurée comme suit

-L'interface matérielle eth0 écoute sur l'adresse publique de Xavier

-on a ensuite deux interfaces virtuelles xena_tap et xenarthra_tap avec un masque spécial 255.255.255.254 (31 en octal) qui permet de mettre en relation chacune avec l'interface de la machine dont elle porte le nom.

Il faut ensuite que Xavier fasse bien suivre les paquets:

$ cat /etc/sysctl.conf | grep forward
# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1

Augmenter la mémoire d'une machine

arrêter la machine:

sudo /etc/init.d/servideo stop-one arachnida

modifier le fichier kvm.opts dans le bon répertoire:

cd /home/kvm/arachnida/

check-out du fichier de config:

co -l ./kvm.opts

rajouter la ligne suivante dans le fichier kvm.opts:

KVM_OPTS += "-m 256"

vérifier que la machine redémarre:

sudo /etc/init.d/servideo start-one arachnida

check-in de la config:

ci -u kvm.opts

Activer le tunnel ssh entre xena et arachnida

Pour pouvoir accéder directement à arachnida en ssh, il faut se connecter sur xena et créer le tunnel vers arachnida:

$ nohup ssh  -N -i .ssh/id_rsa-arachnida -L *:2222:localhost:22  arachnida &

Il faut être sûr que sa connexion ssh est valide

On peut la tester avant et voir déventuelles erreurs:

$ ssh  -N -i .ssh/id_rsa-arachnida -L *:2222:localhost:22  arachnida

arachnida est maintenant accessible via le port 2222 de xena.servideo.org

Ce tunnel sert à tous les utilisateurs et ne doit être lancé qu'une seule fois.

Fichier de configuration pour ssh

Ajouter les lignes suivantes dans ~/.ssh/config sans oublier d'éditer les noms des IdentityFiles:

Host xavier
Port 22
Compression yes
HostName xavier.servideo.org
IdentityFile ~/.ssh/id_rsa-xavier

Host xena
Port 22
Compression yes
HostName xena.servideo.org
IdentityFile ~/.ssh/id_rsa-xenarthra

Host arachnida
Port 2222
X11Forwarding yes
Compression yes
HostName xena.servideo.org
IdentityFile ~/.ssh/id_rsa-arachnida2

Host xenarthra
Port 22
Compression yes
HostName xenarthra.servideo.org
IdentityFile ~/.ssh/id_rsa-xenarthra

SerWikiDeo: kvm (last edited 2011-07-13 21:15:26 by RomainChantereau)