Le serveur de virtualisation XenServer de Citrix permet de passer un périphérique PCI à une machine virtuelle via une fonction qui s'appelle "PCI passthrough".
Cette fonctionnalité est présente dans le projet Xen dont le site officiel est "xenproject.org" et dont le wiki (la documentation) se trouve sur "wiki.xenproject.org" et "wiki.xen.org".
Vous trouverez donc toutes les informations nécessaires, sur le Wiki du projet Xen.
ATTENTION : bien que le PCI passthrough soit possible sous Citrix XenServer, il faut savoir que cette technique n'est pas officiellement supportée par Citrix. Ce qui veut dire que si vous souhaitez obtenir de l'aide de la part de Citrix (si vous avez payé pour obtenir leur support), vous devrez annuler vos modifications PCI passthrough avant de les contacter.
Pourquoi utiliser cette fonctionnalité ?
Pour utiliser des périphériques physiques branchés sur le serveur (clé USB, cartes PCI, ...).
Ainsi, la machine reste isolée du système (grâce à la virtualisation de la machine), mais elle aura directement accès au périphérique PCI passé à cette machine virtuelle. Si on réfléchit jusqu'au bout, on se rend compte que la machine virtuelle aura directement accès au périphérique PCI concerné et donc au matériel du serveur. Ce qui pose un problème de sécurité, car cette machine virtuelle aura un accès direct à la mémoire (DMA).
Notez que le passage d'une carte graphique à une machine virtuelle ne peut pas se faire via le PCI passthrough.
En effet, pour passer une carte graphique, vous devrez utiliser le VGA passthrough comme expliqué dans notre tutoriel : Citrix XenServer - VGA passthrough
Comment corriger cette faille de sécurité ?
C'est très simple, il suffit d'activer l'IOMMU (ou VT-D chez Intel) dans le BIOS de votre carte mère. Cette fonctionnalité permet de "remaper" les accès au matériel et à la mémoire pour limiter les accès au périphérique associé à la machine virtuelle.
Note : Dans le tutoriel, vous verrez que le contrôleur USB 2.0 physique aura l'ID "02:03.0" et dans la machine virtuelle, cet ID sera "00:00.0". IOMMU fera l'intermédiaire entre les 2.
Plain Text
Serveur physique Debian VM 02:03.0 <=> 00:00.0
En résumé, la machine virtuelle pourra utiliser le périphérique PCI, mais elle n'aura pas accès au reste du matériel du serveur.
Note : IOMMU (Input–output memory management unit) s'occupe des entrées / sorties et MMU (Memory management unit) s'occupe des accès à la mémoire.
IOMMU ou VT-d est obligatoire pour utiliser le "PCI passthrough" ?
Oui et non. Mais dans les 2 cas, il est recommandé d'activer cette fonction dans le BIOS de la carte mère du serveur pour bloquer les attaques par DMA (accès directs à la mémore).
A titre d'exemples : avec XenServer, Debian est paravirtualisé (PV guest) et Windows est une machine virtuelle de type "HVM".
IOMMU ou IOMMU mode (64 MB / Disabled) ?
IOMMU correspond à IOMMU.
Alors que IOMMU mode permet de rediriger les entrées/sorties 32 Bits vers des entrées/sorties 64 Bits.
Si le serveur et la machine virtuelle à laquelle vous voulez passer un périphérique PCI sont tous les 2 en 64 Bits, IOMMU mode est inutile et peut être désactivé (Disabled).
De plus, IOMMU mode prend 64 MB de RAM si il est activé.
Quelle version de Xen faut-il utiliser ?
Comme indiqué sur le site de Xen, PCI passthrough requiert aussi :
Dans le cas d'une machine virtuelle paravirtualisée, elle doit posséder le pilote "Xen PCI frontend driver".
La configuration requise complète se trouve sur le wiki de Xen.
Dans ce tutoriel, nous allons utiliser le serveur de virtualisation "XenServer 6.5.0".
Note : les mises à jour ne sont pas installées, mais il est évidemment recommandé de les installer en production.
Le client "XenCenter 6.5".
Et une machine virtuelle Debian 7.0 en 64 Bits que nous venons d'installer.
Pour commencer par quelque chose de simple, nous allons utiliser le PCI passthrough pour brancher une clé USB sur une machine virtuelle Debian.
Comme indiqué précédemment, Debian sera paravirtualisé (PV guest) par XenServer, donc "PCI passthought" requiert que Debian supporte le pilote "Xen PCI frontend driver".
Et comme indiqué sur le wiki du projet Xen, certains noyaux linux (kernels) posent problèmes avec le "passage" de contrôleurs USB à une machine virtuelle linux.
Donc, ils conseillent les noyaux 3.4.9 et 3.3.8. Et déconseillent les noyaux 3.5 and 3.5.2.
Dans ce tutoriel, nous allons télécharger, compiler et installer le noyau 3.4.9 de linux comme expliqué sur le wiki du projet Xen (voir le lien cité précédemment).
Pour commencer, démarrez la machine virtuelle "Debian 64 Bits" et connectez-vous en root dans la console de cette machine.
Créez un dossier "src/linux" dans votre répertoire personnel.
Bash
mkdir -p ~/src/linux cd ~/src/linux
Installez les paquets nécessaires à la suite du tutoriel.
Bash
aptitude install wget tar bzip2 build-essential libncurses-dev kernel-package fakeroot
Pour accélérer la vitesse compilation du noyau, tapez ceci :
Bash
echo "CONCURRENCY_LEVEL=8" >> /etc/kernel-pkg.conf exit
Reconnectez-vous en tant que root puis tapez ces commandes pour télécharger, décompresser et configurer le noyau.
Bash
wget https://www.kernel.org/pub/linux/kernel/v3.0/linux-3.4.9.tar.bz2 tar jxf linux-3.4.9.tar.bz2 && rm linux-3.4.9.tar.bz2 cd linux-3.4.9/ cp /boot/config-3.2.0-4-amd64 .config make menuconfig
Note : Il est possible que le fichier "config-3.2.0-4-amd64" ait un nom légèrement différent à cause de la version indiquée dans son nom.
Lorsque vous taperez la commande "make menuconfig", quelques lignes vont s'afficher en ligne de commandes puis ce menu s'affichera.
Dans ce menu, vérifiez que ces options sont activées :
Comme vous pouvez le voir, "Xen guest support" est intégré par défaut dans le noyau linux 3.4.9.
Et Xen PCI Frontend est disponible en module. Cela ne pose aucun problème.
Retournez au menu principal en appuyant plusieurs fois sur la touche "Esc" ou "Echap", puis descendez sur la ligne "Save an Alternate Configuration File" et appuyez sur Enter.
Note : il est possible que vous ayez l'option "<Save>" en bas de l'écran. Il s'agit de la même option.
Laissez le nom par défaut et appuyez sur Enter.
Puis, quittez le menu en allant sur <Exit> et en appuyant sur Enter.
Si vous êtes connecté en SSH sur la machine Debian (ce qui n'est pas notre cas), tapez la commande : screen
Ensuite, compilez le noyau linux en tapant ces commandes :
Note : Cela peut prendre plus d'une heure.
Bash
make-kpkg clean fakeroot make-kpkg --initrd --revision=3.4.9.custom kernel_image
Une fois le noyau compilé, installez-le en tapant la commande :
Bash
cd .. sudo dpkg -i linux-image-3.4.9_3.4.9.custom_amd64.deb
Note : Pour éviter de recompiler le noyau la prochaine fois, sauvegardez le fichier "linux-image-3.4.9_3.4.9.custom_amd64.deb" quelque part.
Une fois installé, la commande "update-grub" se lancera automatiquement. D'où les lignes "Generating grub.cfg" ainsi que les lignes qui suivent.
Pour terminer, redémarrer Debian en tapant la commande :
Bash
reboot
Reconnectez-vous en tant que root et tapez la commande :
Bash
uname -r
Si le noyau est bien installé, vous verrez la version 3.4.9 s'afficher.
Pour le moment, arrêtez la machine virtuelle et faites un snapshot de celle-ci pour pouvoir revenir en arrière en cas de problème.
Bash
shutdown -h now
Citrix 30/12/2014
Citrix 13/6/2017
Citrix 30/4/2015
Citrix 21/5/2016
Contenu épinglé
Contact
® InformatiWeb-Pro.net - InformatiWeb.net 2008-2022 - © Lionel Eppe - Tous droits réservés.
Toute reproduction totale ou partielle de ce site est interdite et constituerait une contrefaçon sanctionnée par les articles L.335-2 et suivants du Code de la propriété intellectuelle.
Vous devez être connecté pour pouvoir poster un commentaire