Table des matières

Guide d'utilisation de Virtual Didactic Network (VDN)

Présentation

VDN est un logiciel conçu pour permettre à des étudiants de créer, utiliser, configurer, casser et réparer, autant de réseaux virtuels de systèmes virtuels que nécessaire et cela tout au long de leur formation s'étalant sur plusieurs mois.

Cette notion de virtualisation de réseaux/systèmes à beaucoup d'avantages (permettre aux étudiants d'être administrateur d'un réseau par exemple) et peu d'inconvénients (la solution virtuelle s'écarte quelque fois, à la marge, de la réalité, cf. particularité des réseaux/systèmes dans VDN).

En étant administrateur (et propriétaire) de leurs systèmes (voir de leurs réseaux) virtuels les étudiants vont pouvoir se former :

Tous ces apprentissages nécessitent les droits administrateurs or nos étudiants :

VDN répond à ces deux contraintes en mariant la virtualisation et le principe du LiveCD (avec sauvegarde des modifications) pour les 3 types d'utilisateurs suivants :

En résumé, avec VDN :

Sur votre machine personnelle vous serez amener à jouer les trois rôles.

Chacun de ces 3 types d'utilisateurs dispose d'une partie spécifique dans ce document :

  1. Téléchargement et installation de VDN (plutôt pour l'administrateur).
  2. Utilisation de VDN (guide de démarrage pour l'étudiant).
  3. Administration de VDN (plutôt pour les enseignants souhaitant adapter le réseau et le disque virtuel fournis).

VDN est distribuée sous licence GPL V3 en espérant qu'il puisse servir à “optimiser” l'apprentissage des “Systèmes” et des “Réseaux”. L'équipe de développement n'a malheureusement que peu de temps à consacrer à VDN.

Téléchargement et installation

Normalement VDN fonctionnera sur une machine sous Linux si :

  • le noyau est un linux d'architecture x86_64 (la commande uname -m doit afficher x86_64).
  • votre environnement graphique est X11 (Wayland n'est pas supporté).
  • Votre CPU possède des instructions de virtualisation et que ces dernières sont activées au niveau du processeur et au niveau du système d'exploitation. Si ce n'est pas la cas les systèmes virtualisés seront très lents (ici ),
  • Une RAM de 4 Go doit suffire pour virtualiser le réseau “demo”
  • Un espace disque libre de 12 Go (au final 7 Go seront occupés mais de l'espace disque supplémentaire est nécessaire pour la décompression du disque virtuel).

Aperçu du processus d'installation

Pour fonctionner VDN nécessite :

La commande vdn-install vous guide pas à pas dans l'enchaînement de ces commandes. Elle effectue des tests, vous propose éventuellement plusieurs types d'installation, et pour les problèmes courants vous propose (à root en général) d'effectuer des actions pour y remédier.

Téléchargement

Téléchargement de VDN

Si les commandes git, wget, fakeroot sont absentes, l'administrateur du système doit au préalable les installer.

exemple sous root sur Debian : apt-get install git-core wget fakeroot

Ensuite sur le compte de l'utilisateur :

git clone http://opale.u-clermont1.fr/vdn/git/vdn.git

Installation de VDN

sur le compte de l'utilisateur :

en tant qu'utilisateur lambda, lancer l'assistant de configuration :

 vdn/bin/vdn-assistant

Des questions vous sont posées, choisissez les choix par défaut et/ou sollicitez “root” lorsque qu'indiqué.

A l'issue l'interface graphique se lance. Il vous reste à télécharger le disque virtuel utilisé par les machines des réseaux. Pour cela :

FIXME

Installation sous Debian Stretch

La commande suivante, à exécuter sous le compte root, vous proposera l'installation des paquets Debian nécessaires à l'utilisation de VDN. C'est la seule commande qui devra être lancé par l'administrateur du système.

vdn/bin/vdn-prepare

Installation "générique"

Si votre système n'est pas une Debian stretch VDN devra fonctionner dans un environnement chrooté contenant tous les fichiers nécessaires à VDN.

Pour cela, l'administrateur du système devra au préalable avoir installé les paquets très standard fakechroot et wget de sa distribution.

Post installation

A sa première exécution par un utilisateur la commande vdn/bin/vdn propose dans le cas d'une exécution dans un environnement chrooté le téléchargement de l'environnement chroot (environ 300 Mo). Acceptez.

Dans tous les cas (environnement chrooté ou non) d'éventuelles questions supplémentaire vous seront posées. Le choix par défaut convient généralement.

A l'issue de la post installation, la fenêtre VDN s'ouvre.

Il vous reste à choisir un réseau et à télécharger ses disques comme expliqué ci-dessous.

Téléchargement des disques virtuels

En téléchargeant VDN vous téléchargez le logiciel lui même ainsi que la définition de quelques réseaux. Il vous reste à télécharger les disques virtuels associés au(x) réseau(x) de votre choix.

Pour cela, vous pouvez :

Ou bien,

cd vdn/networks/nomDuRéseau
export NET_DIR=.
vdn-download-disks

Installation en réseau

Idem mais dans un répertoire partagé (une seule installation de vdn pour une centaine d'utilisateurs). Chaque machine devra cependant posséder les dépendances logicielles; l'administrateur devra exécuter une fois la commande suivante sur chaque machine. :

sudo vdn/bin/vdn-prepare-debian

Les réseaux

VDN est distribué avec les réseaux décrits ci-dessous. Pour éviter de multiplier les disques virtuels tous ces réseaux sont constitués de machines Debian stretch.

Le réseau "demo"

Le réseau “démo” propose un petit réseau d'entreprise constitué des machines suivantes :

Utilisation

Dans ce chapitre nous précisons le minimum à savoir pour utiliser VDN (démarrage, sauvegarde et arrêt des machines virtuelles) dans le cas des réseaux “demo” et “routing”. Nous vous invitons à lire attentivement le chapitre suivant qui présente les particularités des systèmes virtuels que vous allez manipuler (ce serait dommage que vous les “explosiez” ;))

Particularités des systèmes virtuels

Dans la suite de ce document, nous désignons par système hôte (ou plus simplement hôte) le système sur lequel s'exécutent les systèmes virtuels.

VDN propose des systèmes virtuels Debian quelque peu modifiés pour minimiser la taille occupée sur le disque par la sauvegarde des modifications effectuées (vos quotas disque sont limités !). Les systèmes virtuels utilisent le principe des LiveCD ; ils utilisent un disque en lecture seule et les modifications sont stockées en mémoire vive jusqu'a l'arrêt “propre” du système via les commandes save, halt ou reboot.

Autrement dit, si vous “tuez” brutalement un système en cliquant sur la croix de la console associée la sauvegarde des modifications ne sera pas effectuée !

Une autre conséquence du fait que les modifications soient effectuées en mémoire vive est qu'il est très fortement déconseillé d'installer des logiciels dans vos systèmes virtuels. Vous risquez en effet de faire “exploser” votre système et/ou votre quota disque ! Normalement, tous les logiciels nécessaires aux travaux pratiques sont déjà installés.

Une dernière particularité des systèmes virtuels proposés est la présence d'une interface réseau supplémentaire (adresse IP 10.0.2.X). Cette interface est utilisée par VDN pour différents usages. L'usage le plus visible pour l'utilisateur est la capacité à se connecter par ssh, sans identification, à partir de l'hôte vers toutes les machines virtuelles. Ignorez cette interface (et évitez de la filtrer avec votre pare-feu “virtuel” !).

En lançant la commande bin/vdn vous démarrez VDN et :

  1. Le chemin des éxecutables de VDN est ajouté à votre PATH dans votre fichier ~/.bashrc. Vous n'aurez donc plus besoin de précisez le chemin complet des commandes VDN dans tous les nouveaux shells.
  2. Un couple de clés SSH DSA, est généré si vous n'en aviez pas déja. Votre clé publique sera ajouté au fichier /root/.ssh/authorized_keys des systèmes virtuels. Vous pourrez ainsi vous connecter par ssh sans identification sur les systèmes virtuels.

L'interface graphique

Si VDN démarre correctement vous obtenez la fenêtre principale de VDN composée des onglets suivants :

OngletDescription
DocumentationLa documentation de VDN ou, si un réseau est “ouvert”, la documentation du réseau. FIXME
GraphLa représentation graphique du réseau à partir de laquelle il est possible de sélectionner des machines et d'appliquer des actions.
ConsolesChaque système virtuel VDN possèdera une unique console (liaison série virtuelle ou écran VNC). Une console (liaison série virtuelle) servira de dernier secours si les consoles ssh ne fonctionnent plus.
Ssh

Remarque :

Si vous débutez en administration de réseaux vous allez peut-être être surpris par toutes ces fenêtres (consoles, ssh) à gérer. Pas de panique, il suffit de changer de bureau (CTRL ALT Flèche Droite). Sur ce nouveau bureau ouvrez plusieurs terminaux et connectez-vous aux systèmes virtuels via la commande :

vdn-ssh root@nomDuSystèmeVirtuel # (exemple vdn-ssh root@bigboss).

Ouvrez autant de connexion ssh que bon vous semble (une pour la doc, une pour le fichier de config, une pour relancer le service, une pour surveiller les logs, …) mais gardez les consoles de démarrage en l'état. Elles ne vous seront utiles qu'en cas de perte de réseau.

Après les onglets voiçi une description des menus “Networks” et “Scripts”.

MenuDescription
NetworksPour “ouvrir” ou “fermer” un réseau“ et quitter l'application.
ScriptsPour exécuter un script de préconfiguration ou de test (voir ci-dessous : Scripts).

Lancement des systèmes virtuels

Au démarrage d'une machine virtuelle l'onglet “Console” devient actif et une console virtuelle (pour surveiller le processus d'amorçage est lancée). Pour rappel, cette console ne vous sera utile que dans le cas où les consoles “ssh” ne répondent plus.

Une fois les machines démarrées, basculez sur l'onglet “Ssh” et cliquez sur le bouton nommé du nom d'une machine que vous venez de démarrer. Un terminal graphique effectuant la commande ssh -X root@nomStation se lance et vous permet d'être root sur le système virtuel.

Ouvrez autant de connexions ssh que bon vous semble (une pour la doc, une pour le fichier de config, une pour relancer le service, une pour surveiller les logs, …) mais gardez les consoles de démarrage en l'état. Elles ne vous seront utiles qu'en cas de perte de réseau.

L' état “démarré” ou “arrêté” d'une machine virtuelle est observable dans l'onglet graphe via le classique code des couleurs suivant :

Arrêt des systèmes virtuels

L'arrêt d'un système virtuel doit s'effectuer via le menu des “Actions” (onglet “Graph”, sélection des systèmes à arrêter, bouton droit → “Halt”).

Lors de cet arrêt, la sauvegarde des fichiers modifiés du système est effectuée dans ~/vdn-save (cf. ci-dessous : Sauvegardes des différences).

Sauvegardes des différences

Le répertoire ~/vdn-save accueil la sauvegarde des systèmes de type TGZ ou COW.

Actions

Le tableau suivant décrit le rôle des différentes entrées du menu “Actions” :

Attention, lisez bien les notes indiquées car aucune demande de confirmation n'est effectuée !

StartDémarre la machine virtuelle.
HaltArrête la machine virtuelle (la sauvegarde des modifications sera effectuée)
SaveSauvegarde immédiatement les modifications.
SshOuvre un nouveau terminal effectuant une connexion ssh vers le système virtuel.
ConfigEdite le fichier de configuration de la machine virtuelle.
InfosAffiche des informations sur la machine virtuelle.
CleanSupprime le fichier de sauvegarde des modifications. A faire lorsque la machine virtuelle est “éteinte”.
KillTue le(s) processus associé(s) à la machine virtuelle. Attention, pas de sauvegarde effectuée.

Scripts

En ouvrant le menu scripts vous accédez aux scripts du réseau. Ces scripts permettent de préconfigurer le réseau (et/ou de tester) le réseau.

Remarque : les scripts d'un réseau sont dans vdn/networks/nomDuRéseau/scripts. Vous pouvez les consulter !

Exécution d'applications graphiques

Il est possible d'exécuter une (ou plusieurs) application graphique sur un système virtuel et de recevoir ses fenêtres sur l'écran de l'hôte. Il suffit simplement d'exécuter l'application (firefox, whireshark, nautilus, …) dans un terminal de l'onglet “Ssh” ou dans un terminal de votre choix exécutant une commande du type :

vdn-ssh -X login@machine # Le -X autorisant le relai des fenêtres graphiques. 

Conclusion sur l'utilisation de VDN

Que vous soyez un simple amateur curieux de la configuration des systèmes d'exploitation et des réseaux ou un étudiant forcé de taper des lignes de commandes ;-) sachez que normalement vous ne pouvez rien “casser” sur l'hôte donc amusez-vous bien !

En cas de problèmes, consultez la FAQ et la section Bogues. Pour installer VDN sur votre Debian stretch (64 bits avec instructions de virtualisation activées) consulter ”Téléchargement et installation“.

Administration

Dans cette partie nous nous intéressons aux points permettant de modifier la configuration des machines virtuelles, des réseaux virtuels, des disques virtuels afin que vous puissiez adapter VDN à vos besoins : nouveaux services/logiciels, nouvelles machines virtuelles, nouvelles interconnexions des machines virtuelles, nouveaux réseaux virtuels, nouveaux disques virtuels…

Cette partie n'est pas couverte par l'interface graphique et sera réalisée par des commandes shell (ou des scripts shell) utilisant des commandes vdn ainsi que par l'édition de fichiers de configuration.

Vous trouverez dans la section ”Opérations classiques“ des exemples pratiques d'utilisation des commandes présentées ci-dessous.

Organisation des fichiers

Chemin Description
bin Répertoires des commandes VDN.
config.rcConfiguration par défaut de VDN.
config.templateConfiguration par défaut d'un système virtuel.
disksRépertoires des disques virtuels (et des ISO de cédéroms).
distribsRépertoire spécifiques au système de type LiveCD.
docRépertoire de la documentation
networksRépertoire des réseaux.

Le fichier de configuration global

Le script de configuration global exécuté par défaut au lancement de VDN (et de toutes ses commandes) est config.rc.

Si l'utilisateur à défini un script ~/.vdnrc il sera exécuté après config.rc. Toutes les variables peuvent donc être redéfinies.

Organisation d'un réseau

Un réseau est un sous répertoire du répertoire networks. Les fichiers de ce répertoire sont :

Fichier Description
buildScript de construction des machines virtuelles.
graph.svgDessin du graphique généré par la commande vdn-graph.
index.htmlDocumentation.
net.svgDessin “personnalisé” avec Inkscape.
network.vdnFichier “marqueur”. Uniquement utile pour “ouvrir” le réseau.”
scriptsRépertoire des scripts du réseau.

Le réseau “courant” est le réseau dont le chemin est précisé dans la variable d'environnement NET_DIR ou, à défaut, le dernier réseau ouvert par la commande vdn (interface graphique).

La commande vdn-build-network utilisera le script build pour construire les fichiers de configuration des systèmes virtuels.

La commande vdn-show montrera les caractéristiques des systèmes virtuels.

La commande vdn-graph construira le graphique graph.svg.

Le fichier de configuration d'une machine

Le fichier de configuration d'une machine est généré par le script build du répertoire de son réseau. Les valeurs utilisées par défaut sont celles du fichier vdn/config.template.

Plutôt que d'éditer “à la main” les fichiers nomDuSystème.conf modifiez plutôt le script de construction du réseau et régénérez les fichiers des systèmes via la commande :

vdn-build-network nomDuReséau

Pour chaque système la fonction build du script construit le fichier nomDuSystem.conf (vdn-build) à partir du fichier config.template et affecte un identificateur unique pour le système (variable IDENT).

Par la suite seules les variables qui doivent différer du fichier de configuration sont modifiées dans la fonction build.

Après avoir (re)construit le réseau (vdn-build-network) la commande vdn-show affichera une synthèse des caractéristiques du réseau afin de vérifier la cohérence de l'ensemble.

L'image du graphe du réseaux générée est graph.svgz et est visualisable par tout lecteur d'image (eog par exemple).

Les fichiers de swap des machines (de SWAP_SIZE Mo) sont stockés dans /tmp.

Le fichier utilisé pour l'union est également stocké dans /tmp.

Le tableau des affectations des variables NETWORKS montre les interconnexions des machines. Le récapitulatif GUESTS(ETH) permet également d'obtenir les connexions des machines aux différents switchs virtuels.

Les redirections de ports sont également affichées, ainsi que les services qui seront activer.

Particularités des systèmes virtuels

Dans cette partie nous détaillons les particularités des systèmes gérés par VDN. Si vous vous posez des questions quant aux choix faits ne perdez pas de vue que nous devions prendre en compte les contraintes fortes suivantes :

D'autres contraintes comme la simplicité d'utilisation pour l'étudiant et l'enseignant ont également guidé certains choix.

Les disques virtuels

VDN est conçu pour simplifer à la fois la mise en oeuvre de travaux pratiques de “Systèmes d'exploitation” et de travaux pratiques de “Réseaux”. Ces deux types de travaux pratiques, utilisent tous deux la virtualisation mais n'ont pas les mêmes besoins en disques.

En ce qui concerne la gestion des disques virtuels (à un disque virtuel est associé un unique fichier sur le système hôte), trois techniques (ou stratégies) différentes sont possibles :

Pour aiguiller le choix d'un type de partage (COW ou LiveCD) voiçi une comparaison plus détaillée des deux :

Comme indiqué précédemment, la technique de sauvegarde des différences “COW” s'effectue au niveau des blocs du disque virtuel. Cette technique à l'avantage d'être très générique et transparente pour le système virtuel (qui n'a donc pas besoin d'être adapté).

Cependant la technique de sauvegarde des différences “COW“ ne permet pas de :

La technique du LiveCD (dont s'inspire VDN) lève les contraintes précédentes en permettant :

Cependant la technique du LiveCD à les désavantages suivants :

En résumé :

Type de sauvegarde Système d'exploitation Ordre de grandeur des modifications
COWquelconque supporté par KVMquelconque
LiveCD (adapté dans VDN)Debian modifiée fournie avec VDNLimités à quelques fichiers (quelques dizaines de Mo maximum)

Emulateur supportés

L'émulateur de référence dans VDN est KVM. Cependant l'émulateur QEMU peut également être utilisé dans le cas de machines ne disposant pas de processeur doté d'instructions de virtualisation ou dans le cas ou le système virtuel est d'une architecture autre que x86_64.

L'émulateur à utiliser est à préciser dans la variable EMULATOR. Exemple :

EMULATOR=“kvm”

VDN prévoit la gestion de certaines particularités des émulateurs (modèle de disque, type d'affichage, …) et prévoit également le cas de l'usage d'une commande personnalisée quelconque via la variable KVM_CMD. Cette variable permet de personnaliser complètement la ligne de commande utilisée pour démarrer le système virtuel (et notamment de spécifier par exemple l'émulateur qemu-system-arm dans le cas d'un système sous architecture armel).

Disque auxiliaire

Dans certains cas il peut être intéressant qu'un système virtuel utilise un second disque virtuel (cf. le réseau ha). VDN permet de spécifié ce second disque virtuel via les variables :

HDB="filename"
HDB_SIZE="50"

Ce second disque virtuel sera créé au démarrage de la machine s'il n'existe pas. A charge au système virtuel de le partitionner.

Ce second disque est accédé de façon “directe” (aucun partage prévu).

Spécifier un CDROM

Les systèmes de type COW ou DIRECT accepte l'emplacement d'une image ISO via la variable CDROM (un fichier spécial du genre /dev/cdrom peut également être précisé). Si vous souhaitez que le système s'amorce sur le CDROM fixez la variable BOOT_CDROM à 1. Dans l'interface graphique il est possible de démarrer sur le cédérom associé au système ou sur tout autre cédérom présent.

Les systèmes de type “LiveCD” ne permettent pas l'usage des variables CDROM et BOOT_CDROM.

Préciser un espace d'échange

Dans le cas d'un réseau composé de nombreuses machines et/ou de machines devant être dotées de beaucoup de RAM il est recommandé (voir indispensable) d'utiliser un espace d'échange (swap). La variable SWAP_SIZE permet de spécifié sa taille (en Mo).

Cet espace d'échange utilise le 4ème disque dans le cas d'un système “DIRECT” ou d'un système “COW”. A charge au système de formater le disque et à ajouter le swap au système. Exemple sous GNU/Linux :

mkswap /dev/sdc
swapon /dev/sdc

Dans le cas d'un système “LiveCD” le swap précisé dans la variable SWAP_SIZE est automatiquement ajouté lors de l'initialisation du système.

Les réseaux

Ce chapitre décrit les deux types de réseaux utilisés par VDN :

Dans VDN la solution retenue, pour les échanges avec l'hôte, est d'utiliser slirp, un émulateur TCP/IP ne nécessitant pas d'être root. En contrepartie le débit ne dépasse pas les 300 KB par seconde, ralentissant notamment le chargement/déchargement de la sauvegarde.

Pour les échanges entre systèmes virtuels VDN utilise ce que proposent tous les émulateurs : le multicast. La technique du multicast à l'avantage d'être très portable entre émulateurs (il sera simple d'intégrer dans un réseau un système autre que Debian, émulé éventuellement par un autre émulateur) et ne nécessite pas non plus d'être root. Enfin, contrairement à d'autres solutions de transport, la technique de la diffusion permet de se passer de switchs virtuels (vde ou autres). Intégrer des switchs virtuels (en mode utilisateur !) serait une extension possible mais compliquerait le code de VDN. La portée d'un réseau virtuel est donc la portée d'une trame multicast (le réseau local réel au moins).

Les réseaux virtuels entre systèmes virtuels

Sur le schéma du réseau apparaissent les connexions entre les machines virtuelles. VDN (via la fonction computeNetworks du script bin/functions.sh) se charge de définir automatiquement un certain nombre de paramètres (comme l'adresse MAC de chaque carte notamment) mais ne prend pas en charge la configuration IP. Les adresse IP apparaissant sur le graphique ne sont là que comme de simples annotations. L'administrateur du système virtuel (vous) devra fixer les adresses IP des interfaces réseau. De même, chaque système doit explicitement fixer son nom d'hôte (sauf si la variables SET_HOSTNAME du fichier de configuration est fixé à 1).

Comment choisir les adresses IP ? Les IP sont libres à l'exception de celles utilisées sur le réseau Internet virtuel. Le réseau Internet virtuel est partagé par toutes les machines virtuelles de tous les hôtes. Pour éviter les conflits d'IP VDN réserve pour chaque machine virtuelle une unique adresse IP (variable PUBLIC_IP) qui peut être affichée via l'action “Infos” du menu ou via la commande vdn-infos. C'est cette adresse que vous devrez utiliser pour connecter la machine virtuelle sur le réseau Internet virtuel.

Le réseau initial, vierge de toute configuration, peut rapidemment obtenir une configuration de base à l'aide de scripts comme ceux présents dans le sous répertoire scripts. Notamment la prise en charge de l'IP publique et du réseau Internet virtuel pour les stations lambda, nomade et societe est effectué dans les scripts *InstallBase.

Pour VDN un réseau est composé des machines qu'il contient. Chaque machine se charge de définir les connexions de ses interfaces réseau aux différents switchs virtuels via sa variable NETWORKS.

NETWORKS contient la suite des connexions des différentes cartes de la machine sous la forme “netEth0 netEth1 … netEth7” ou chaque netEthx indique le switch virtuel sur lequel est connecté la carte ethX (“none” si la carte n'est pas connectée). Après la définition peut-être précisé un # suivi d'un commentaire (sans espace) qui servira d'annotation lors de la génération du graphique associé au réseau via la commande vdn-graph.

Pour clarifier l'ensemble le détail de la configuration du réseau “démo” est décrite ci-dessous.

Etude des connexions des machines du réseau “démo”

Les variables NETWORKS des différentes machines du réseau ont été configurées de la sorte :

     GUEST NETWORKS
    lambda $NET_G#20.X1.Y1.Z1/8
   bigboss $NET_2#192.168.30.2/24
    nomade $NET_G#20.X2.Y2.Z2/8
   societe $NET_G#20.X3.Y3.Z3/8 $NET_1#192.168.1.1/24 $NET_2#192.168.30.1/24
      tiny none $NET_2#192.168.30.16/24
       web $NET_1#192.168.1.2/24

En éliminant les commentaires (#…) utilisés pour l'annotation du graphique, on obtient une description suffisante :

     GUEST NETWORKS
    lambda $NET_G
   bigboss $NET_2
    nomade $NET_G
   societe $NET_G $NET_1 $NET_2
      tiny none $NET_2
       web $NET_1

En clair :

Le réseau entre hôte et machine virtuelle

Une interface cachée (sur le schéma du réseau) permet à une machine virtuelle de sortir vers l'hôte et tout son réseau (éventuellement Internet). Cette interface est utilisée par VDN pour établir des connexion ssh de l'hôte vers le système virtuel. Dans le cas de systèmes VDN cette interface peut être utilisée par la sauvegarde par le réseau des modifications !

L'interface “cachée” peut être “vue” via un ifconfig sur le système virtuel (c'est celle qui suit la dernière utilisée). Son IP doit être 10.0.2.15 (elle est normalement fixée automatiquement). L'hôte est accessible via cette interface à l'adresse IP 10.0.2.2. Si vous souhaitez sortir sur tout le réseau de l'hôte, vous pouvez fixer 10.0.2.2 comme passerelle par défaut. Si le réseau local réel possède un DNS et si vous souhaitez l'utiliser, fixez 10.0.2.3 comme serveur DNS dans /etc/resolv.conf du système virtuel. En fait, toutes ces caractéristiques proviennent du fait que le logiciel slirp est utilisé. Vous pouvez consulter sa documentation ainsi que celles de linux et de qemu qui présentent ce type de réseaux virtuels.

Les redirections de ports

L'interface “cachée” peut également être utilisée pour accéder depuis l'hôte à des services (ports TCP/UDP) d'un système virtuel. C'est implicitement le cas pour les connexions ssh entre l'hôte et les systèmes virtuels VDN. D'autres connexions peuvent être souhaitées. Par exemple, pour tester un serveur Web virtuel il est plus rapide de le tester via un navigateur exécuté par l'hôte que par un navigateur exécuté par nos “petites” machines virtuelles). Dans ce cas vous devrez rendre possible cet accès via une redirection d'un port local du système hôte vers le port 80 du système virtuel. Cette redirection sera prise en charge par VDN grace à la variable REDIRS. Ci dessous le contenu à définir dans le fichier de configuration de la machine virtuelle pour ssh et http.

 ...
 REDIRS="tcp:22:(ssh) tcp:80:(http)"
 ...

VDN cherchera à allouer les mêmes ports aux mêmes services tout en limitant les conflits entre machines virtuelles. Cependant si le port est indisponible, le premier port libre immédiatement supérieur sera utilisé. La commande vdn-infos nomSystème (ou l'item infos du menu de l'interface graphique) affichera les redirections effectuées.

Ne désactivez pas cette interface “cachée” notamment si vous installez un logiciel de type “pare feu” dans vos systèmes virtuels. Si cela arrive vous devrez la rétablir (via la console virtuelle de la station) pour débloquer les connexions ssh.

La représentation graphique du réseau

Un réseau peut être représenté soit par le graphique graph.svg généré automatiquement par la commande vdn-graph soit par le graphique net.svg créé manuellement par Inkscape. Dans ce dernier cas (Inkscape) il est indispensable pour que les systèmes soient détectés par l'interface graphique que chaque nom de système nomDuSystem soit entouré d'un rectangle dont l'étiquette (objet→propriété) sera fixée à #nomDuSystem.

Opérations classiques

Créer un réseau

Copiez le répertoire d'un réseau et adaptez le. Exemple :

cp -a demo demo2
export NET_DIR=$PWD/demo2
vdn-build-network
vdn-show
vdn-graph

Adaptez éventuellement le graphe net.svg (cf. La représentation graphique du réseau).

Modifier un réseau

Modifiez le script build, reconstruisez le réseau (vdn-build-network), vérifiez sa cohérence (vdn-show), et adaptez si nécessaire le graphe (cf. La représentation graphique du réseau).

Supprimer un réseau

Supprimez le répertoire associé au réseau. Si des sauvegardes on été faites, supprimez les également. Exemple :

rm -Rf demo2
rm -Rf ~/vdn-save/demo2

Gérer un disque "DIRECT"

On rappelle que dans le cas d'un disque de type “DIRECT” les opérations de lecture et d'écriture sont effectuées directement sur le disque virtuel. Ce genre de disque sert souvent de disque de base aux systèmes COW et/ou TGZ.

Créer un disque "DIRECT"

Le réseau “zoo” est dédié à la gestion de ces disques et sert en quelque sorte de nurserie. Nous traitons le cas de l'installation d'un système de type “direct” via un cédérom d'installation. Le système SliTaz du script build peut servir d'exemple.

Modifier un disque "DIRECT"

Il suffit de démarrer le système virtuel et d'effectuer les modifications souhaitées.

Modifier un disque virtuel de type “DIRECT” alors que des sauvegarde de type “COW” existent rendra ces dernière invalides !

De même, modifier un disque virtuel de type “DIRECT” alors que des systèmes de type COW ou TGZ sont en train de l'utiliser détruira leur sauvegarde des modifications.

Supprimer un disque "DIRECT"

Supprimez le fichier associé au disque virtuel dans le répertoires disks.

Gérer un disque "COW"

On rappelle que dans le cas d'un disque de type “COW” les opérations d'écritures sont faites dans le fichier de sauvegarde associé (~/vdn-save/nomDuReseau/nomDuSystème par défaut).

Créer un disque "COW"

Le fichier COW est automatiquement créer en cas d'absence au démarrage de la machine virtuelle. Sa taille est à préciser dans la configuration de la machine via la variable HDA_SIZE.

Modifier un disque "COW"

Il suffit de démarrer le système virtuel de type “COW” et d'effectuer les modifications souhaitées (qui seront inscrites dans le fichier de sauvegarde).

Supprimer un disque "COW"

Supprimez le fichier des sauvegardes (~/vdn-save/nomDuReseau/nomDuSystème par défaut).

Gérer les disques "LiveCD"

Opération sur les systèmes virtuels VDN

Les opérations décrites ci-dessous ne s'appliquent qu'aux systèmes VDN.

Activation d'un service

Installation d'un logiciel/service

Le réseau build contient les systèmes permettant de gérer les disques de façon “directe”.

En démarrant un systèle présent dans le réseau “build” vous pourrez ajouter/retirer/configurer les paquets de votre choix.

  • Aucune autre machine virtuelle ne devra utiliser le disque pendant que vous le modifier !
  • La modification d'un disque invalidera tous les systèmes de type “COW” utilisant ce disque !

Portage de l'application

VDN est un petit logiciel (moins de 1 Mo) de programmes bash, ruby (GTK2) avec un peu de python (aucun programme compilé).

Sous Debian stretch ses dépendances (paquets logiciels nécessaires) sont indiquées dans les script bin/vdn-prepare. Debian Stretch est la distribution utilisée pour le développement de VDN (voir Participer au développement du code).

Pour les autres distributions GNU/Linux l'exécution de VDN s'effectue en environnement fakechroot (un peu similaire à une AppImage).

Participer au développement du code

VDN est un logiciel libre sous licence disposant de son propre dépôt git que vous pouvez donc cloner.

Remarque : le fonctionnement dans un environnement fakechroot n'apporte aucune limite à l'utilisation/configuration de VDN mais impose des contraintes pour les développeurs du code source de VDN, notamment dès qu'il faut ajouter un nouveau fichier dans l'environnement fakechroot. Aussi si vous souhaitez facilement modifier VDN travailler sous une Debian stretch.

Performances

Dans les tests suivants nous démarrons simultanément les 6 machines virtuelles du réseau “demo” vierges de toute configuration et chronométrons le temps mis jusqu'à l’obtention d'un prompt sur toutes les machines. Ces tests ont été effectués sur un processeur Intel(R) Core(TM) i7 CPU 920 @ 2.67GHz.

Tests Temps
Avec instructions de virtualisation 0'15''
Sans instructions de virtualisation 2'20''
“nested” avec instructions de virtualisation 1'15''
“nested” sans instructions de virtualisation Pas évalué : trop long (> 60mn)

Foires aux questions

Qu'est ce Virtual Didactic Network (VDN) ?

Virtual Didactic Network (Vdn) est un outil pédagogique permettant l'apprentissage de la configuration de systèmes d'exploitation et notamment des services réseaux sous Unix (voir Présentation).

Sous qu'elle Licence est distribué VDN ?

GPL V3 (voir Licence).

Quel est son stade de maturité ?

VDN est en cours de développement ! tout ne marchera sûrement pas correctement !

Cependant nous l'utilisons en “production” au sein de notre département informatique. Il a été installé dans un répertoire partagé (par NFS) en lecture seule (compte Unix dédié, ou compte Unix d'un enseignant). Les quelques paquets Debian nécessaires à son fonctionnement ont été installés sur les stations des étudiants par l'administrateur via la commande : vdn-prepare-debian.

Cette configuration a été testée avec un démarrage simultané de 3 groupes de TP soit plus d'une centaine de machines virtuelles lancées simultanément et accédant toutes par NFS au même disque virtuel sans saturation notoire du réseau local Ethernet à 100 Mbits.

Nos étudiants désireux de faire ou de continuer leur TP sur leur machine personnelle sous Debian installent en général VDN sans problème particulier.

Comment contacter l'équipe de développement ?

Un mail à : vdn [at] iut [dot] u-clermont1 [dot] fr.

Comment avoir un environnement graphique

Avec le disque virtuel Debian fourni avec VDN est installé l'environnement X11. Les programmes graphiques peuvent être exécutés via un vdn-ssh -X toto@system (toto est l'utilisateur, system est le système virtuel) ou directement dans une console ssh de VDN.

Si un gestionnaire de fenêtres est souhaité, il faut activer la mire de connexion lightdm qui permettra à l'utilisateur de se connecter (avec xfce4 comme gestionnaire de fenêtres).

systemctl start lightdm

Si la mire de connexion doit être activé au boot il faut fixer la cible (runlevel) graphical :

systemctl set-default graphical.target

Pour un retour en arrière (pas de mire de connexion par défaut):

systemctl set-default multi-user.target

L'écran graphique du système virtuel est accessible via une console VNC :

vdn-vnv-viewer system # system est a remplacé par le nom du système virtuel à contacter

L'écran graphique peut être lancé automatiquement et éventuellement intégré à la fenêtre VDN. Pour cela fixez à 1 les variables KVM_VIEWER, KVM_VIEWER_AUTOSTART et KVM_VIEWER_EMBEDDED à 1 dans le fichier de configuration du système.

Solutions aux problèmes connus

VDN ne fonctionne pas sur mon système

Actuellement VDN n'est prévu d'être installé que sur Debian stretch 64 bits et ne permet de faire fonctionner que des réseaux de Debian stretch 64 bits (pour autres distributions voir portages).

Mon processeur ne dispose pas d'instructions de virtualisation

Certaines machines nécessitent d'activer les instructions de virtualisation dans leur BIOS/UEFI.

La commande bin/vdn indique, lors de son lancement, la raison faisant que vous ne bénéficiez pas d'instructions de virtualisation et vous indique comment y remédier si votre processeur en possède.

Si votre processeur ne dispose pas d'instructions de virtualisation cela n'empêchera pas les systèmes virtuels de fonctionner mais cela sera lent, très lent…

vdn : error : Pas de route par défaut !

Les réseaux virtuels utilisés par Vdn utilisent un canal de diffusion (multicast). Le fonctionnement des canaux de diffusion nécessite une route par défaut sur l'une des interfaces réseau du système hôte. Normalement cette route par défaut est fixée au moment de l'initialisation de la carte réseau du système hôte. Vérifiez sa configuration. Une fois l'interfaçe réseau activée, la commande /sbin/route -n doit afficher la route par défaut (destination 0.0.0.0). Exemple :

$ /sbin/route -n
Destination     Passerelle      Genmask         Indic Metric Ref    Use Iface
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
0.0.0.0         192.168.1.3     0.0.0.0         UG    0      0        0 eth0

Si le système hôte ne dispose pas d'interface réseau, vous pouvez autoriser la diffusion sur l'interface lo (loopback) via les commandes (il faut être root) :

ifconfig lo multicast
route add default gw 127.0.0.1

Échec de démarrage d'une machine virtuelle sans aucun message d'erreur

Dans un terminal, exécutez :

export NET_DIR=vdn/networks/demo
vdn-start -d nomDeLaMachine

L' éventuel message d'erreur devrait apparaître.

Masquages indésirables de fichiers

L'ajout d'un service (ou d'un logiciel) dans le système souche après lancement des machines virtuelles peut entraîner des masquages indésirables. Le problème se pose par exemple dans le cas suivant.

  1. le disque virtuel n'intègre pas un service quelconque créant des entrées dans /etc/{passwd,shadow,group}, comme ntp pour ne donner qu'un exemple.
  2. les utilisateurs créent sur certaines machines virtuelles un utilisateur (adduser toto). Les fichiers originaux /etc/{passwd,shadow,group} sont modifiés et sont donc intégrés dans la couche haute (read/write) de l'union de systèmes de fichiers.
  3. l'administrateur du système souche ajoute le service (aptitude install ntp) entrainant l'ajout d'un utilisateur (ntp dans l'exemple) et donc la mise à jour des fichiers /etc/{passwd,shadow,group} du système souche.
  4. l'utilisateur redémarre ses machines virtuelles. Celles qui ont modifié leurs fichiers /etc/{passwd,shadow,group} ne connaitront pas l'utilisateur ntp puisque les fichiers du système souche intégrant l'utilisateur ntp sont masqués par les fichiers de la couche haute de l'union (ceux possédant l'utilisateur toto).

Pour pallier ce problème, les utilisateurs devront ajouter eux-même les lignes manquantes (celles relatives à l'utilisateur ntp dans l'exemple) dans les fichiers de configuration concernés.

Le plus simple pour éviter ce genre de complication est de prévoir à l'avance tous les services nécessaires à une série de TP.

Spécifier le répertoire temporaire

Par défaut VDN utilise le répertoire temporaire classique /tmp pour les fichiers temporaires. Si ce chemin ne vous convient pas vous pouvez ajouter la ligne suivante à votre fichier ~/.vdnrc :

TMPDIR=cheminDeVotreRépertoireTemporaire

Intégration de paquets antagonistes

La stratégie de rassembler l'ensemble des services/logiciels dans un unique disque virtuel peut amener des problèmes d'exclusion de paquets (dépendances antagonistes).

A voir au cas par cas.

Licence

Virtual Didactic Network (VDN) est un logiciel libre ; vous pouvez le redistribuer ou le
modifier suivant les termes de la “GNU General Public License” telle que
publiée par la Free Software Foundation : soit la version 3 de cette
licence, soit (à votre gré) toute version ultérieure. 

Ce programme est distribué dans l’espoir qu’il vous sera utile, mais SANS
AUCUNE GARANTIE : sans même la garantie implicite de COMMERCIALISABILITÉ
ni d’ADÉQUATION À UN OBJECTIF PARTICULIER. Consultez la Licence Générale
Publique GNU pour plus de détails.

Vous devriez avoir reçu une copie de la Licence Générale Publique GNU avec
ce programme ; si ce n’est pas le cas, consultez :

http://www.gnu.org/licenses/.

Liens

Quelques liens vers les parties de code libre utilisées par VDN

Un exemple d'utilisation de VDN

Alternatives à VDN

D'autres logiciels proposent des fonctionnalités similaires à VDN. A notre connaissance aucun n'utilise la très économe sauvegarde des modifications basée sur le principe des LiveCD.