Mon réseau

Mon réseau d’entreprise

10.2 Installation d’une machine virtuelle

Précédent   Suivant

Il y a plusieurs notions relatives aux machines virtuelles :

  • la technologie d’isolation ;

  • les interfaces de gestion ;

  • la gestion du réseau.

10.2.1 Les technologies

Les technologies de machines virtuelles ou assimilées sont nombreuses. Il est possible de les classer selon le niveau de virtualisation et d’isolation. Les premières technologies permettent d’isoler des applications.

10.2.1.1 chroot

L’appel système (chroot, invoqué par la commande du même nom, permet de changer la racine du système de fichier pour un processus. Cele permet d’isoler un processus qui n’a plus accès qu’à un sous ensemble du système de fichiers. Un processus isolé peut continuer de voir les autres processus du système et il peut interagir avec.

Cette commande peut être utilisé pour récupérer un système défaillant. Il suffit de lancer le système à partir d’un CD d’installation, d’attendre l’installation du système de base, de changer de console (ctrl-alt-f2), et d’entrer la commande chroot /target. C’est ce que fait le mode rescue.

10.2.1.2 Les isolateurs

Les isolateurs permettent d’aller plus loin. La gestion des (cgroups) permet d’isoler les processus complètement. Ils partagent néanmoins le même noyau.

(image) Il est recommandé de les utiliser pour lancer les navigateurs internet. Tant de sites sont mal conçus du point de vue de la sécurité qu’il poussent l’utilisateur à autoriser des vulnérabilités (flash, javascript, cookies…).

Les solutions d’isolations sont nombreuses et méritent une évaluation. Nous pouvons citer OpenVZ, LXC, Docker.

10.2.1.3 Les machines virtuelles

Les machines virtuelles permettent de simuler un ordinateur complet. Elles peuvent être vues comme un ordinateur similaire à un ordinateur physique. Cet ordinateur peut avoir les mêmes composants qu’un système physique (écran, carte graphique, carte réseau, processeur, mémoire, disque). Les composants de la machine virtuelle peuvent être virtuels, rerésentés par un fichier ou être des périphériques physiques partagés entre la machine physique et la virtuelle.

Voici quelques solutions de machines virtuelles : qemu/kvm, virtualbox, vmware.

Nous allons utiliser qemu-kvm. Il s’agit de deux logiciels distincts :

qemu

est le logiciel de virtualisation ;

KVM

est le support dans le noyau Linux permettant d’utiliser qemu.

Qemu permet de simuler de nombreuses architecture, dont les processeurs arm utilisés par les systèmes embarqués, comme le Raspberry ou certains téléphones android.

Kvm se décompose en deux parties : une partie intégrée dans le noyau et une partie intégrée dans le logiciel Qemu. Il permet à la machine virtuelle d’utiliser nativement le processeur plutôt que d’utiliser un processeur virtuel. C’est un gain en performances notable.

C’est une solution qui est intégrée dans le noyau Linux. C’est donc la plus facile à configurer. Les performances sont bonnes. Sur un essai de compilation d’un noyau Linux, les temps étaient voisins sur la machine physique et la machine virtuelle.

L’autre avantage de cette solution, c’est l’utilisation du logiciel de virtualisation réseau VDE2. Après avoir lancé les machines virtuelles et les réseaux virtuels, les commandes à utiliser sont les mêmes que si les ordinateurs étaient tous physiques et reliés par des commutateurs Ethernet physiques. Il n’y a donc pas de surcharge cognitive pour les utiliser.

Pour pouvoir utiliser une machine virtuelle, il faut une machine physique, éventuellement reliée à Internet, comme dans la figure 10.8. Nous suppoons que la machine physique s’appelle joe, son interface Ethernet est eth0.

(image)

Fig. 10.8 : La machine physique

L’invocation de machine virtuelles est simple. Il suffit de créer un disque dur et de télécharger une image d’installation sur la page Debian. En haut, à droite de la figure 10.9, il faut récupérer la dernière image d’installation.

(image)

Fig. 10.9 : La page d’accueil de Debian, avec le téléchargement

Pour créer le disque dur, il faut utiliser la commande qemu-img en lui demandant de créer une image de disque dur (create).

$ qemu-img create -f qcow2 debian-fevrier.qcow2 4G

Les options sont :

-f qcow2

formate le disque virtuel en utilisant le format qcow2 ;

debian-fevrier.qcow2

le nom du fichier, il doit inclure votre nom de famille et si vous en avez plusieurs l’usage prévu (comme debian-apache-fevrier.qcow2) ;

4G

La taille du disque dur.

(image)Quelle taille de mémoire choisir ? Cela dépend... Suffisement pour que la machine n’ai pas de problème. Le moins possible pour mettre plusieurs machines virtuelles. Le moins possible pour que l’installateur ne coince pas le disque dur avec le formatage automatique. Pour une Buster, 700Mo, c’est un bon compromis pendant l’installation.

(image) Quelle taille de disque dur choisir ? La réponse est facile, c’est : “ça dépend !”. Pour un serveur, 3Go, c’est souvent suffisant, mais cela peut être vite rempli. L’avantage d’une très petite taille, c’est que la copie à distance est facilitée. Mes serveurs ont des disques de 10 Go et ils n’ont jamais été plein. L’autre écueil, c’est que si la machine virtuelle dispose de plus de mémoire vive que de disque, alors l’installateur va échouer.

Il faut maintenant lancer la machine virtuelle. Pour une première fois, nous n’allons pas définir un réseau particulier. Donc, nous aurons un accès réseau implicite. Cet accès permettra d’aller depuis la machine virtuelle vers Internet, mais le retour sera difficile.

Nous allons appeler la machine virtuelle Jack. Son interface Ethernet sera aussi eth0. Le réseau implicite se comporte, comme si magiquement les paquets étaient envoyés sur Internet, comme dans la figure 10.10.

(image)

Fig. 10.10 : La virtuelle, avec un accès au réseau magique

L’invocation se fait ainsi :

$ kvm -m 1000   -hda debian-fevrier.qcow2 -cdrom debian...iso

kvm

c’est la commande qui va lancer ensuite qemu-system-x86_64 ;

-m 1000

la taille de la mémoire vive affectée à la machine virtuelle, 1Go, c’est bien pour commencer ;

-hda x.qcow2

la spécification du premier disque ;

-cdrom debian...iso

le fichier image pour l’installation, il faut mettre le nom du jour.

Après une fenêtre s’ouvre. L’installation peut se poursuivre, comme pour une station.

10.2.2 La gestion

La première solution pour gérer les machines et réseaux virtuels, c’est la ligne de commande. Il est donc facile de créer des scripts pour automatiser les tâches répétitives.

Pour les adeptes des interfaces vous pouvez utiliser (libvirt), (proxmox) ou OpenStack.

Il existe bien d’autres plateformes de gestion. En particulier pour automatiser les achats de serveurs partagés dans le cloud.

10.2.3 Le réseau VDE2

L’installation que nous avons vu à la section 10.2.1.3 permet d’installer une machine virtuelle et de l’utiliser de manière autonome. Une des limitations, c’est qu’elle ne permet pas facilement d’atteindre cette machine virtuelle. Nous allons donc utiliser VDE2 qui va nous permettre définir une architecture réseau choisie.

Il faut commencer par créer une carte réseau virtuelle, nommée kvmtap0, et la connecter à un switch virtuel. Nous aurons alors l’ordinateur physique Joe, avec deux interfaces Ethernet (dont une virtuelle). La carte virtuelle est branchée sur le switchvde2, comme dans la figure 10.11.

(image)

Fig. 10.11 : La machine physique branchée sur le switch virtuel

Il faut créer le fichier kvmtap0 dans le répertoire dédié /etc/network/interfaces.d/.

auto kvmtap0
iface kvmtap0 inet static
address 10.101.3.1
netmask 255.255.255.0
vde2-switch -t kvmtap0

La première ligne crée l’interface virtuelle. Les trois lignes suivantes définissent les paramètres IP de cette interface. La dernière crée le switch et le connecte, par un câble virtuel, à l’interface réseau.

Il s’agit d’un vrai commutateur Ethernet, avec toutes les possibilités. Il a donc une interface d’administration que vous pouvez utiliser.

Si vous disposez d’une station avec deux cartes réseaux et que vous branchez une autre station sur la deuxième carte, vous obtenez le même comportement. Pour que la seconde station puisse utiliser le réseau, il faut que la première agisse en mode routeur et que les paramètres IP soient compatibles. Il n’y a donc plus de notions spécifiques aux machines virtuelles pour le réseau.

Pour pouvoir connecter une machine virtuelle à ce switch, il faut utiliser les paramètres suivants :

-net nic,macaddr=42 :30 :03 :01 :01 :02

Défini une carte réseau dont l’adresse mac est indiqué. Il est crucial que sur un réseau local, il n’y ai pas deux machines avec la même adresse mac. Comme le fabricant de la carte, c’est la personne qui lance la commande, la carte ne peut pas avoir d’adresse prédéfinie. Le premier octet 42, est une bonne réponse. Vous pouvez consulter la norme pour savoir pourquoi. Les autres octets peuvent être quelconques, sous réserver qu’il n’y a pas deux adresse identiques.

-net vde,sock=/var/run/vde2/kvmtap0.ctl

Connecte la carte définie à l’option précédent au commutateur nommé. Il peut y avoir plusieurs commutateurs, donc le nom peut changer.

La commande devient donc (tout sur une seule ligne) :

$ kvm -hda debian.qcow2 -net nic,macaddr=42:30:03:01:01:02
               -net vde,sock=/var/run/vde2/kvmtap0.ctl

Et le comportement est alors celui de la figure 10.12.

(image)

Fig. 10.12 : Les deux machines connectées par le switch virtuel

Les machines virtuelles sont utilisées pour installer des serveurs. Chaque serveur est mis en place sur une machines qui sont toutes hébergées sur une machine physique qui peut être dans un centre d’hébergement. Si la machine virtuelle est lancée comme précédement, alors elle sera forcément arrêtée quand l’adminstrateur va se déloguer de sa station. Pour éviter cela, il est possible de lancer la machine virtuelle sans ouvrir une fenêtre graphique avec l’option -nographic. Il est possible de reprendre le controle graphique en utilisant une connexion vnc.

(image)La connexion vnc n’est pas sécurisée automatiquement. Si le port réseau est accessible, alors la session est publique. Il est possible de sécuriser cet accès en utilisant un mot de passe ou, mieux, une connexion sécurisée par chiffrement. Une autre sécurisation complémentaire consiste à protéger le port.

La commande devient alors :

kvm -hda debian.qcow2 -nographic -vnc :77

Ce qui ouvre le port vnc 77 en écoute. Le numéro de port vnc 77 correspond au port tcp 5977. Il faut ajouter 5900 entre les deux numéros.

Pour accélerer la machine virtuelle, il est possible d’utiliser un processeur virtuel identique à celui de l’hôte. Dans ce cas, les migrations sont délicates, voire impossibles. L’option est :

-cpu host

10.2.4 La machine virtuelle, sans la machine virtuelle

Il est parfois utile d’utiliser le disque sans l’ordinateur virtuel. Il s’agit d’utiliser le disque dur directement, comme sortir un disque d’une machine physique pour le mettre comme deuxième disque d’une autre machine.

En particulier, cela te permet de changer le mot de passe root.

Attention ! Les manipulations ici sont risquées. Il n’est pas prudent de monter le disque d’une machine virtuelle lorsque celle ci tourne et réciproquement !

kpartx permet de créer des device (disque durs virtuels) depuis une image de disque.

Note : kpartx ne fonctionne pas avec les images de disque au format qcow2 (ou pas la dernière fois que j’ai regardé). Il faut donc convertir l’image dans un format accepté :

qemu-img convert -f qcow2 -O raw fichier.qcow2 fichier.img

Regardez /dev/mapper, puis créer les périphériques à partir de votre disque virtuel :
kpartx -a /.../disquevirtuel.img

Regardez de nouveau /dev/mapper, pour voir les fichiers créés par kpartx.

Tapez : mkdir /tmp/DISQUE
sudo mount -o loop /dev/mapper/loop0p1 /tmp/DISQUE
date > /tmp/DISQUE/home/nouveaufichier

vous ne devez pas avoir d’erreurs !. Si vous en avez appelez l’enseignant.

Démontez /tmp/DISQUE

10.2.5 Pour aller plus loin

Qemu dispose de nombreuses fonctionnalités. Il est possible de prendre des instantanés du système, de faire des migrations, d’utiliser des disques depuis le réseau, d’utiliser les périphériques matériel de l’hôte hébergeur, etc.