<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
<chapter>
  <title>Machines virtuelles distantes</title>

  <sect1 id="vrde">
    <title>Affichage distant (VRDP support)</title>

    <para>VirtualBox peut afficher les machines virtuelles à distance, ce qui
    signifie qu'une machine virtuelle peut s'exécuter sur un ordinateur alors que
    la machine sera affichée sur un deuxième ordinateur, et la machine sera
    contrôlée également à partir de là, comme si la machine virtuelle fonctionnait
    sur ce deuxième ordinateur.</para>

    <para>Pour une flexibilité maximum, à partir de VirtualBox 4.0, VirtualBox
    implémente l'affichage distant d'une machine par une interface d'extension
    générique, le VirtualBox Remote Desktop Extension (VRDE). Le paquet libre
    de base VirtualBox ne fournit pas cette interface, tandis que les implémentations
    peuvent être offerts par des tiers avec les paquets d'extension de VirtualBox
    qui doivent être installés séparément du paquet. Voir <xref
    linkend="intro-installing" /> pour plus d'informations.</para>

    <para>Oracle fournit un support pour le <emphasis role="bold">VirtualBox
    Remote Display Protocol (VRDP)</emphasis> dans ce paquet d'extension de
    VirtualBox. Quand on installe ce paquet, les versions de VirtualBox et
    4.0 et supérieur supportent VRDP de la même façon que les versions binaires
    (non libre)) de VirtualBox avant 4.0.</para>

    <para>VRDP est une extension rétro-compatible au Remote
    Desktop Protocol (RDP) de Microsoft. Dès lors, vous pouvez utiliser n'importe
    quel client RDP standard pour contrôler la VM distante.</para>

    <para>Même quand l'extension est installée, le serveur VRDP est désactivé par
    défaut. On peut l'activer facilement pour chaque VM, soit dans le gestionnaire
    VirtualBox des paramètres d'"Affichage" (voir <xref
    linkend="settings-display" />), soit avec 
   )s <computeroutput>VBoxManage</computeroutput>:<screen>VBoxManage modifyvm "nom VM" --vrde on</screen></para>

    <para>Si vous utilisez <computeroutput>VBoxHeadless</computeroutput> (décrit
    plus loin en détails), le support VRDP sera automatiquement activé puisque
    VBoxHeadless n'a aucun autre moyen de sortie.</para>

    <para>Par défaut, le serveur VRDP utilise  le port TCP
    <computeroutput>3389</computeroutput>. Vous devrez modifier le port par
    défaut si vous exécutez plus d'un serveur VRDP, vu que le port ne peut être
    utilisé que par un serveur à la fois. Il se pourrait aussi que vous deviez
    le modifier sur les hôtes Windows car le port par défaut pourrait être
    déjà utilisé par le serveur RDP
    intégré à Windows lui-même. Les ports 5000 à 5050 sont le plus souvent
    inusités et pourraient être un bon choix.</para>

    <para>Vous pouvez modifier le port soit dans les paramètres "Affichage" de
    l'interface graphique, soit via l'option <computeroutput>--vrdeport</computeroutput>
    de la commande <computeroutput>VBoxManage modifyvm</computeroutput>. Vous
    pouvez indiquer une liste séparée par des virgules de ports ou de plages de
    ports. Utilisez un tiret entre deux numéros de ports pour indiquer une plage.
    Le serveur VRDP s'appuiera sur <emphasis role="bold">un</emphasis> des
    ports disponibles au sein de la liste spécifiée. Par exemple, <computeroutput>VBoxManage modifyvm "nom
    VM" --vrdeport 5000,5010-5012</computeroutput> configurera le
    serveur pour s'appuyer sur un des ports parmi le 5000, 5010, 5011 ou 5012.
    Voir <xref
    linkend="vboxmanage-modifyvm-vrde" /> pour des détails.</para>

    <para>Vous pouvez savoir le port utilisé au final par une VM en fonction
    avec la commande <computeroutput>VBoxManage showvminfo</computeroutput>,
    vous pouvez aussi le voir dans l'interface graphique sous l'onglet "En cours
    d'exécution" de la "Boîte de dialogue d'informations sur la session", accessible
    depuis le menu "Machine" de la fenêtre de la VM.</para>

    <para>Le support d'IPv6 a été implémenté dans VirtualBox 4.3. Si l'OS hôte
    supporte l'IPv6, le serveur VRDP écoutera automatiquement les connexions IPv6
    en plus de celles IPv4.</para>

    <sect2 id="rdp-viewers">
      <title>Visualiseurs RDP tiers classiques</title>

      <para>Comme VRDP est rétro-compatible avec RDP, vous pouvez utiliser n'importe
      quel visualiseur RDP standard pour vous connecter à une machine virtuelle
      distante (des exemples figurent ci-dessous). Pour que cela fonctionne, vous
      devez spécifier <emphasis role="bold">l'adresse IP</emphasis> de votre
      système <emphasis>hôte</emphasis> (pas celle de la machine virtuelle&#xA0;!)
      l'adresse du serveur auquel se connecter, ainsi que le 
      <emphasis role="bold">numéro du port</emphasis> qu'utilise le serveur RDP.</para>

      <para>Voici des exemples de visualiseurs RDP les plus courants&#xA0;:<itemizedlist>
          <listitem>
            <para>Sur Windows, vous pouvez utiliser le Microsoft Terminal Services
            Connector (<computeroutput>mstsc.exe</computeroutput>) inclu dans
            Windows. Vous pouvez le lancer depuis la boîte de dialogue "Exécuter"
            (appuyez sur la touche Windows et "R") en tapant "mstsc". Vous pouvez
            également le trouver dans "Démarrer" -&gt; "Tous les Programmes" -&gt; "Accessoires"
            -&gt; "Connexion bureau distant". Si vous utilisez la boîte de dialogue
            "Exécuter", vous pouvez y entrer des options directement&#xA0;:<screen>mstsc 1.2.3.4:3389</screen></para>

            <para>Remplacez <computeroutput>1.2.3.4</computeroutput> par l'adresse IP de l'hôte et 
            <computeroutput>3389</computeroutput> par un
            autre port si nécessaire.</para>

            <note>
              <para>Il faut entourer les adresses IPv6 de crochets pour spécifier
              un port. Par exemple, <computeroutput>mstsc [fe80::1:2:3:4]:3389</computeroutput></para>
            </note>
            
            <note>  
              <para>Lors d'une connexion à localhost pour tester la connexion, les
              adresses <computeroutput>localhost</computeroutput> et
              <computeroutput>127.0.0.1</computeroutput> pourraient ne pas
              fonctionner en utilisant 
              <computeroutput>mstsc.exe</computeroutput>. L'adresse
              <computeroutput>127.0.0.2[:3389]</computeroutput> doit être utilisée à la place.</para>
            </note>
          </listitem>

          <listitem>
            <para>Sur les autres systèmes, vous pouvez utiliser  le programme 
            libre standard <computeroutput>rdesktop</computeroutput>. Celui-ci
            est inclu avec la plupart des distributions Linux, mais VirtualBox
            est fourni avec une variante modifiée de rdesktop pour un support de
            l'USB à distance (voir <xref
            linkend="usb-over-rdp" /> ci-dessous).</para>

            <para>Avec rdesktop, utilisez une ligne telle que celle-ci&#xA0;:<screen>rdesktop -a 16 -N 1.2.3.4:3389</screen></para>

            <para>Comme indiqué pour le visualiseur Microsoft ci-dessus, remplacez <computeroutput>1.2.3.4</computeroutput>
            par l'adresse IP de l'hôte et <computeroutput>3389</computeroutput> par un autre port si nécessaire.
            L'option <computeroutput>-a 16</computeroutput> demande que la résolution
            soit de 16 bits par pixel, ce qui est recommandé.
            (Pour de meilleures performances, après l'installation du système
            d'exploitation invité, vous devriez définir sa profondeur d'affichage
            des couleurs à la même valeur).
            L'option <computeroutput>-N</computeroutput> permet d'utiliser
            les touches du pavé numérique.</para>
          </listitem>

          <listitem>
            <para>Si vous lancez le bureau KDE, vous pourriez préférer
            <computeroutput>krdc</computeroutput>, le visualiseur RDP de KDE.
            La ligne de commande ressemblerait à ceci&#xA0;:<screen>krdc rdp://1.2.3.4:3389</screen></para>

            <para>De nouveau, remplacez <computeroutput>1.2.3.4</computeroutput>
            par l'adresse IP de l'hôte et <computeroutput>3389</computeroutput> par un port différent si nécessaire. Le champ "rdp://" est
            requis avec krdc pour qu'il passe en mode RDP.</para>
          </listitem>

          <listitem>
            <para>Avec les clients Sun Ray thin, vous pouvez utiliser 
            <computeroutput>uttsc</computeroutput>,  qui fait partie du paquet
            Sun Ray Windows Connector. Voir la documentation correspondante pour
            des détails.</para>
          </listitem>
        </itemizedlist></para>
    </sect2>

    <sect2 id="vboxheadless">
      <title>VBoxHeadless, le serveur de bureau distant</title>

      <para>Si toutes les VM lancées dans le gestionnaire VirtualBox sont capables
      de lancer des machines virtuelles à distance, ce n'est pas pratique de
      lancer l'interface graphique full-fledged si vous ne voulez jamais avoir
      de VMs affichées en local au premier plan. En particulier, si vous lancez
      un serveur matériel dont le seul objectif est d'héberger des VMs et où
      toutes les VMs sont supposées se lancer à distance via VRDP, il est inutile
      d'avoir une interface graphique quelconque sur le serveur -- surtout
      que sur un hôte Linux ou Solaris, le gestionnaire VirtualBox est fourni
      avec les dépendances des bibliothèques Qt et SDL. C'est un inconvénient si
      ne voulez pas du tout avoir de système X Window sur votre serveur.</para>

      <para>VirtualBox est donc fourni avec une autre interface appelée
      <computeroutput>VBoxHeadless</computeroutput>, qui ne produit aucune
      sortie visible sur l'hôte, mais qui produit des données VRDP. Cette interface
      n'a aucune dépendance du système X Window sur Linux et des hôtes
      Solaris.<footnote>
          <para>Avant VirtualBox 1.6, le serveur headless s'appelait
          <computeroutput>VBoxVRDP</computeroutput>. Toujours pour des raisons de
          rétro-compatibilité, l'installation de VirtualBox installe toujours un
          exécutable avec ce nom.</para>
        </footnote></para>

      <para>Pour démarrer une machine virtuelle avec <computeroutput>VBoxHeadless</computeroutput>, 
      vous avez trois options&#xA0;:</para>

      <itemizedlist>
        <listitem>
          <para>Vous pouvez utiliser <screen>VBoxManage startvm "nom VM" --type headless</screen>L'option
          supplémentaire <computeroutput>--type</computeroutput> amène VirtualBox
          à utiliser <computeroutput>VBoxHeadless</computeroutput> en tant qu'interface
          avec le moteur de virtualisation interne plutôt que l'interface Qt.</para>
        </listitem>

        <listitem>
          <para>Une alternative est d'utiliser 
          <computeroutput>VBoxHeadless</computeroutput> directement, comme
          suit&#xA0;:<screen>VBoxHeadless --startvm &lt;uuid|name&gt;</screen></para>

          <para>Cette manière de démarrer la VM aide au dépannage des problèmes
          signalés par <computeroutput>VBoxManage startvm ...</computeroutput>
          car vous pouvez voir parfois des messages d'erreur plus détaillés,
          surtout pour les échecs imtervenant avant que l'exécution de la VM
          ne commence. Dans des situations normales, on préfère
          <computeroutput>VBoxManage startvm</computeroutput> car il lance la VM
          directement comme tâche de fond, ce qui doit se faire explicitement lors
          du démarrage direct de
          <computeroutput>VBoxHeadless</computeroutput>.</para>
        </listitem>
        <listitem>
          <para>L'autre alternative est de démarrer <computeroutput>VBoxHeadless</computeroutput>
          à partir de l'interface graphique du gestionnaire de VirtualBox, en
          maintenant appuyée la touche Majuscule au démarrage de la machine.</para>
        </listitem>
      </itemizedlist>

      <para>Remarquez que quand vous utilisez
      <computeroutput>VBoxHeadless</computeroutput> pour démarrer une VM, comme
      le serveur headless n'a aucun autre moyen d'affichage, le serveur VRDP
      sera <emphasis>toujours</emphasis> activé, indépendamment du fait que vous
      ayez activé le serveur VRDP dans les paramètres de la VM ou pas. Si vous
      n'en voulez pas (par exemple parce que vous voulez accéder à la VM via
      <computeroutput>ssh</computeroutput> only), démarrez la VM comme
      ceci&#xA0;:<screen>VBoxHeadless --startvm &lt;uuid|name&gt; --vrde off</screen>Pour
      activer le serveur VRDP en fonction de la configuration de la VM, comme le
      feraient les autres interfaces, utilisez ceci&#xA0;:<screen>VBoxHeadless --startvm &lt;uuid|name&gt; --vrde config</screen></para>

      <para>Si vous démarrez la VM avec <computeroutput>VBoxManage startvm ...</computeroutput>,
      les paramètres de configuration de la VM sont toujours utilisés.</para>
    </sect2>

    <sect2>
      <title>Pas à pas&#xA0;: créer une machine virtuelle sur un serveur headless</title>

      <para>Les instructions suivantes peuvent vous donner une idée de la façon
      de créer une machine virtuelle sur un serveur headless via une connexion
      réseau. Nous allons créer une machine virtuelle, établir une connexion RDP
      et installer un système d'exploitation invité -- tout ceci sans devoir
      toucher au serveur headless. Tout ce dont vous avez besoin est ce qui suit&#xA0;:</para>

      <para><orderedlist>
          <listitem>
            <para>VirtualBox sur une machine serveur avec un système d'exploitation
            hôte supporté. La pack d'extension de VirtualBox du serveur VRDP doit
            être installé (voir la section précédente). Pour l'exemple suivant,
            nous supposerons un serveur Linux.</para>
          </listitem>

          <listitem>
            <para>Un fichier ISO accessible depuis le serveur, contenant les
            données d'installation du système invité pour installer (nous supposons
            que c'est Windows XP dans l'exemple suivant).</para>
          </listitem>

          <listitem>
            <para>Une connexion en terminal à l'hôte par lequel vous pouvez accéder
            à une ligne de commande (par exemple via 
            <computeroutput>ssh</computeroutput>).</para>
          </listitem>

          <listitem>
            <para>Un visualiseur RDP sur le client distant&#xA0;; voir <xref
            linkend="rdp-viewers" /> ci-dessus pour des exemples.</para>
          </listitem>
        </orderedlist>Remarquez encore que sur la machine serveur, comme nous
        n'allons utiliser que le serveur headless, ni Qt ni SDL ni le système
        X Window ne seront nécessaires.</para>

      <para><orderedlist>
          <listitem>
            <para>Sur le serveur headless, créez une nouvelle machine virtuelle&#xA0;:</para>

            <screen>VBoxManage createvm --name "Windows XP" --ostype WindowsXP --register</screen>

            <para>Remarquez que si vous ne spécifiez pas 
            <computeroutput>--register</computeroutput>, vous devrez utiliser
            manuellement la commande <computeroutput>registervm</computeroutput>
            plus tard.</para>

            <para>Remarquez aussi que vous n'avez pas besoin de spécifier
            <computeroutput>--ostype</computeroutput>, mais en le faisant, cela
            sélectionne des valeurs par défaut apropriées pour certains paramètres
            de la VM, par exemple la taille de la RAM et le type de périphérique
            réseau virtuel. Pour avoir la liste complète des systèmes d'exploitation
            supportés, vous pouvez utiliser</para>

            <screen>VBoxManage list ostypes</screen>
          </listitem>

          <listitem>
            <para>Assurez-vous que les paramètres de la VM sont adaptés au système
            d'exploitation invité que nous allons installer. Par exemple&#xA0;:<screen>VBoxManage modifyvm "Windows XP" --memory 256 --acpi on --boot1 dvd --nic1 nat</screen></para>
          </listitem>

          <listitem>
            <para>Créez un disque dur virtuel pour la VM (dans ce cas, 10Go de
            taille)&#xA0;:<screen>VBoxManage createhd --filename "WinXP.vdi" --size 10000</screen></para>
          </listitem>

          <listitem>
            <para>Ajoutez un contrôleur IDE à la nouvelle VM&#xA0;:<screen>VBoxManage storagectl "Windows XP" --name "IDE Controller"
      --add ide --controller PIIX4</screen></para>
          </listitem>

          <listitem>
            <para>Mettez le fichier VDI créé ci-dessus comme premier disque dur
            virtuel de la nouvelle VM&#xA0;:<screen>VBoxManage storageattach "Windows XP" --storagectl "IDE Controller"
      --port 0 --device 0 --type hdd --medium "WinXP.vdi"</screen></para>
          </listitem>

          <listitem>
            <para>Attachez le fichier ISO contenant l'installeur du système 
            d'exploitation que vous voudrez installer plus tard sur la
            machine virtuelle, pour que la machine puisse démarrer dessus&#xA0;:<screen>VBoxManage storageattach "Windows XP" --storagectl "IDE Controller"
      --port 0 --device 1 --type dvddrive --medium /full/path/to/iso.iso</screen></para>
          </listitem>

          <listitem>
            <para>Démarrez la machine virtuelle en utilisant VBoxHeadless:<screen>VBoxHeadless --startvm "Windows XP"</screen></para>

            <para>Si tout s'est bien passé, vous devriez voir un message de
            copyright. Si vous êtes renvoyé en ligne de commande, quelque chose
            n'a pas fonctionné.</para>
          </listitem>

          <listitem>
            <para>Sur la machine client, ouvrez le visualiseur RDP et essayez
            de vous connecter au serveur (voir <xref linkend="rdp-viewers" /> 
            ci-dessus pour voir comment utiliser les divers visualiseurs RDP
            classiques).</para>

            <para>Vous devriez voir maintenant le processus d'installation 
            de votre système d'exploitation invité, à distance dans le visualiseur RDP.</para>
          </listitem>
        </orderedlist></para>
    </sect2>

    <sect2 id="usb-over-rdp">
      <title>USB distant</title>

      <para>Une fonction très spéciale du support VRDP de VirtualBox est qu'il
      supporte les périphériques USB distants également via le réseau. C'est-à-dire que 
      l'invité de VirtualBox en fonction sur l'ordinateur peut accéder à des
      périphériques USB de l'ordinateur distant sur lequel sont affichées les données
      VRDP de la même manière que des périphériques USB connectés à l'hôte actuel.
      Cela permet d'exécuter des machines virtuelles sur un hôte VirtualBox qui
      agit comme serveur, où un client peut se connecter de n'importe où avec 
      simplement un adaptateur réseau et un dispositif d'affichage capable de
      lancer un visualiseur RDP. Quand on branche des périphériques USB
      dans le client, le serveur VirtualBox distant peut y accéder.</para>

      <para>Pour ces périphériques USB distants, les mêmes règles de filtres
      s'appliquent, comme pour d'autres périphériques USB, comme décrit au
      <xref linkend="settings-usb" />. Tout ce que vous devez faire est de spécifier
      "Remote" (ou "Any") en définissant ces règles.</para>

      <para>L'accès à des périphériques USB n'est possible que si le client RDP
      supporte cette extension. Sur les hôtes Linux et Solaris, l'installation
      de VirtualBox fournit un client VRDP convenable appelé 
      <computeroutput>rdesktop-vrdp</computeroutput>. Les versions récentes de
      <computeroutput>uttsc</computeroutput>, un client taillé pour être utilisé
      avec des clients Sun Ray thin et qui supporte l'accès aux périphériques 
      USB distants. Les clients RDP pour d'autres plateformes seront fournis dans de
      futures versions de VirtualBox.</para>

      <para>Pour rendre disponible un périphérique USB distant pour une VM, vous
      devriez démarrer <computeroutput>rdesktop-vrdp</computeroutput> comme
      suit :<screen>rdesktop-vrdp -r usb -a 16 -N my.host.address</screen>
      Merci de vous reporter au <xref linkend="ts_usb-linux" /> pour des
      détails supplémentaires sur la manière de régler correctement les droits
      des périphériques USB. De plus, il est conseillé de désactiver le chargement automatique d'un pilote
      de l'hôte, depuis l'hôte distant qui serait lu sur des périphériques
      USB, pour vous assurer que les périphériques seront accessibles au client
      RDP. Si vous avez bien fait le paramétrage sur l'hôte distant, les
      événements de branchement/débranchement sont visibles dans le fichier
      VBox.log de la VM.</para>
    </sect2>

    <sect2 id="vbox-auth">
      <title>Authentification RDP</title>

      <para>Pour chaque machine virtuelle accessible à distance via RDP, vous
      pouvez déterminer individuellement si les connexions du client sont
      authentifiées et comment. Pour cela, utilisez la commande
      <computeroutput>VBoxManage modifyvm</computeroutput> avec l'option
      <computeroutput>--vrdeauthtype</computeroutput>&#xA0;; voir <xref
      linkend="vboxmanage-modifyvm" /> pour une présentation générale. Trois
      méthodes d'authentification sont disponibles&#xA0;:<itemizedlist>
          <listitem>
            <para>La méthode "null" signifie qu'il n'y a pas d'authentification
            du tout&#xA0;; n'importe quel client peut se connecter au serveur
            VRDP et, ainsi, à la machine virtuelle. C'est, bien sûr, très peu
            sécurisé et cela ne doit être recommandé que sur des réseaux privés.</para>
          </listitem>

          <listitem>
            <para>La méthode "external" fournit une authentification externe via
            une bibliothèque d'authentification spéciale. VirtualBox inclut
            deux bibliothèques d'authentification&#xA0;:<orderedlist>
                <listitem>
                  <para>La bibliothèque d'authentification par défaut,
                  <computeroutput>VBoxAuth</computeroutput>, authentifie en fonction
                  des droits de l'utilisateur sur l'hôte. Selon la plateforme hôte,
                  cela signifie&#xA0;:<itemizedlist>
                      <listitem>
                        <para>Sur les hôtes Linux, 
                        <computeroutput>VBoxAuth.so</computeroutput>
                        authentifie les utilisateurs à partir du système PAM de
                        l'hôte.</para>
                      </listitem>

                      <listitem>
                        <para>Sur les hôtes Windows,
                        <computeroutput>VBoxAuth.dll</computeroutput>
                        authentifie les utilisateurs à partir du système WinLogon
                        de l'hôte.</para>
                      </listitem>

                      <listitem>
                        <para>Sur les hôtes Mac OS X, 
                        <computeroutput>VBoxAuth.dylib</computeroutput>
                        authentifie les utilisateurs à partir du service répertoire
                        de l'hôte.<footnote>
                            <para>Le support pour Mac OS X a été ajouté dans
                            la version
                            3.2.</para>
                          </footnote></para>
                      </listitem>
                    </itemizedlist></para>

                  <para>En d'autres termes, la méthode "external" par défaut
                  réalise l'authentification par les comptes utilisateurs existant
                  sur le système hôte. Tout utilisateur ayant des autorisations
                  d'authentification valides est accepté, c'est-à-dire que le nom
                  d'utilisateur n'a pas besoin de correspondre à l'utilisateur
                  qui lance la VM.</para>
                </listitem>

                <listitem>
                  <para>Une bibliothèque supplémentaire qui s'appelle
                  <computeroutput>VBoxAuthSimple</computeroutput> réalise
                  l'authentification à partir des autorisations configurées
                  dans la section "extradata" du fichier XML des paramètres d'une machine
                  virtuelle. C'est probablement la méthode la plus simple pour
                  s'authentifier, qui ne dépend pas d'un invité en fonction et
                  supporté (voir ci-dessous). Les étapes suivantes sont
                  nécessaires&#xA0;:<orderedlist>
                      <listitem>
                        <para>Activer
                        <computeroutput>VBoxAuthSimple</computeroutput> avec la
                        commande suivante&#xA0;:</para>

                        <para><screen>VBoxManage setproperty vrdeauthlibrary "VBoxAuthSimple"</screen></para>
                      </listitem>

                      <listitem>
                        <para>Pour activer la bibliothèque pour une VM en particulier,
                        vous devez passer en authentification externe&#xA0;:<screen>VBoxManage modifyvm "nom VM" --vrdeauthtype external</screen></para>

                        <para>Remplacez
                        <computeroutput>"nom VM"</computeroutput> par le nom
                        ou l'UUID de la VM.</para>
                      </listitem>

                      <listitem>
                        <para>Vous devrez alors configurer les utilisateurs et 
                        les mots de passe en écrivant ces éléments dans les
                        extradata de la machine. Comme le fichier XML des paramètres
                        de la machine, dans lequel il faut écrire le mot de
                        passe à la section "extradata", est un fichier en texte
                        brut, VirtualBox utilise le hachage pour chiffrer les
                        mots de passe. Il faut utiliser la commande suivante&#xA0;:<screen>VBoxManage setextradata "nom VM" "VBoxAuthSimple/users/&lt;utilisateur&gt;" &lt;hash&gt;</screen></para>

                        <para>Remplacez
                        <computeroutput>&lt;vm&gt;</computeroutput> par le nom
                        ou l'UUID de la VM,
                        <computeroutput>&lt;utilisateur&gt;</computeroutput> par
                        le nom d'utilisateur qui devrait être autorisé à se connecter
                        et 
                        <computeroutput>&lt;hash&gt;</computeroutput> par le mot
                        de passe chiffré. Par exemple, pour avoir la valeur
                        hachée du mot de passe "secret", vous pouvez utiliser la
                        commande suivante&#xA0;:<screen>VBoxManage internalcommands passwordhash "secret"</screen></para>

                        <para>Ceci affichera
                        <screen>2bb80d537b1da3e38bd30361aa855686bde0eacd7162fef6a25fe97bf527a25b</screen>
                        Vous pouvez alors utiliser VBoxManage setextradata pour
                        stocker cette valeur dans la section "extradata" de la
                        machine.</para>

                        <para>Un exemple des deux ensemble, pour définir le mot
                        de passe de l'utilisateur "john" sur la machine "Ma VM"
                        en "secret", utilisez cette commande&#xA0;:<screen>VBoxManage setextradata "Ma VM" "VBoxAuthSimple/users/john"
    2bb80d537b1da3e38bd30361aa855686bde0eacd7162fef6a25fe97bf527a25b</screen></para>
                      </listitem>
                    </orderedlist></para>
                </listitem>
              </orderedlist></para>
          </listitem>

          <listitem>
            <para>Enfin, la méthode d'authentification "guest" réalise
            l'authentification par un composant spécial fourni avec les suppléments
            invité&#xA0;; il s'en suit que l'authentification ne s'effectue pas
            sur l'hôte mais via les comptes utilisateurs
            <emphasis>de l'invité</emphasis>.</para>

            <para>Cette méthode est actuellement en test et pas encore
            supportée.</para>
          </listitem>
        </itemizedlist></para>

      <para>Outre les méthodes décrites ci-dessus, vous pouvez remplacer la méthode
      d'authentification "external" par défaut par n'importe quel autre module.
      Pour cela, VirtualBox offre une interface claire qui vous permet d'écrire
      votre propre module d'authentification. Ceci est décrit en détails dans
      le manuel de référence du Kit de développement logiciel de VirtualBox&#xA0;;
      merci de voir <xref
      linkend="VirtualBoxAPI" /> pour des détails.</para>
    </sect2>

    <sect2 id="vrde-crypt">
      <title>Chiffrement RDP</title>

      <para>Le chiffrement du flux de données des fonctions RDP se base sur le
      chiffrage symétrique RC4 (avec des clés jusqu'à 128bit). Les clés RC4 
      sont remplacées à intervalles réguliers (tous les 4096 paquets).</para>

      <para>RDP fournit différentes méthodes d'authentification&#xA0;:<orderedlist>
          <listitem>
            <para>Historiquement, on utilisait l'authentification RDP4, avec
            laquelle le client RDP ne réalise aucun contrôle pour vérifier
            l'identité du serveur auquel il se connecte. Comme on peut obtenir les
            autorisations de l'utilisateur en utilisant une attaque "man in the
            middle" (MITM) (personne initiée), l'authentification RDP4 n'est pas
            sécurisée et vous ne devriez en général pas l'utiliser.</para>
          </listitem>

          <listitem>
            <para>L'authentification RDP5.1 utilise un certificat serveur pour
            lequel le client possède la clé publique. De cette façon, vous avez la
            garantie que le serveur possède la clé privée correspondante. Cependant,
            comme cette clé privée codée en dur a été publiée il y a quelques
            années, l'authentification RDP5.1 n'est pas sécurisée.</para>
          </listitem>

          <listitem>
            <para>L'authentification RDP5.2 utilise la sécurité RDP améliorée,
            ce qui veut dire qu'un protocole de sécurité externe est utilisé pour
            sécuriser la connexion. RDP4 et RDP5.1 utilisent la sécurité RDP
            Standard. Le serveur VRDP supporte la sécurité renforcée RDP avec
            le protocole TLS et, faisant partie du handshake TLS, il envoie
            le certificat du serveur au client.</para>

            <para>La propriété VRDE <computeroutput>Security/Method</computeroutput>
            définit la méthode de sécurité souhaitée qui est utilisée pour une
            connexion. Les valeurs valides sont&#xA0;:<itemizedlist>
              <listitem>
                <para>
                  <computeroutput>Negotiate</computeroutput> - les connexions 
                  sécurisées améliorées (TLS) et RDP standards sont autorisées.
                  La méthode de sécurité se négocie avec le client. C'est le réglage
                  par défaut. 
                </para>
              </listitem>

              <listitem>
                <para>
                  <computeroutput>RDP</computeroutput> - seule la sécurité QDP
                  Standard est acceptée.</para>
              </listitem>

              <listitem>
                <para>
                  <computeroutput>TLS</computeroutput> - seule la sécurité RDP
                  améliorée est acceptée. Le client doit supporter TLS.</para>
                </listitem>
            </itemizedlist>
            Par exemple la commande suivante autorise un client à utiliser une
            connexion sécurisée soit par RDP Standard, soit par RDP améliorée&#xA0;:
            <screen>vboxmanage modifyvm "nom VM" --vrdeproperty "Security/Method=negotiate"</screen>
            </para>

            <para>Si la propriété <computeroutput>Security/Method</computeroutput>
            est réglée sur <computeroutput>Negotiate</computeroutput> ou
            <computeroutput>TLS</computeroutput>, le protocole TLS sera automatiquement
            utilisé par le serveur si le client supporte TLS. Cependant, pour
            utiliser TLS, le serveur doit posséder le certificat du serveur, la
            clé privée du serveur et l'autorité du certificat (Certificate 
            Authority (CA)). L'exemple suivant montre comment générer un
            certificat de serveur.<orderedlist>
                <listitem>
                Créez un certificat CA auto-signé&#xA0;:
                <screen>openssl req -new -x509 -days 365 -extensions v3_ca \
  -keyout ca_key_private.pem -out ca_cert.pem</screen>
                </listitem>

                <listitem>
                Générez une clé privée du serveur et une demande de signature&#xA0;:
                <screen>openssl genrsa -out server_key_private.pem
openssl req -new -key server_key_private.pem -out server_req.pem</screen>
                </listitem>

                <listitem>
                Générez le certificat du serveur&#xA0;:
                <screen>openssl x509 -req -days 365 -in server_req.pem \
  -CA ca_cert.pem -CAkey ca_key_private.pem -set_serial 01 -out server_cert.pem</screen>
                </listitem>
            </orderedlist>
            Le serveur doit être configuré pour accéder aux fichiers requis&#xA0;:
            <screen>vboxmanage modifyvm "nom VM" \
  --vrdeproperty "Security/CACertificate=path/ca_cert.pem"</screen>
            <screen>vboxmanage modifyvm "nom VM" \
  --vrdeproperty "Security/ServerCertificate=path/server_cert.pem"</screen>
            <screen>vboxmanage modifyvm "nom VM" \
  --vrdeproperty "Security/ServerPrivateKey=path/server_key_private.pem"</screen>
            </para>
          </listitem>
        </orderedlist></para>

      <para>Comme le client qui se connecte au serveur détermine le type de chiffrement
      qui sera utilisé, avec rdesktop, le visualiseur RDP de Linux, utilisez
      les options <computeroutput>-4</computeroutput> ou
      <computeroutput>-5</computeroutput>.</para>
    </sect2>

    <sect2 id="vrde-multiconnection">
      <title>Connexions multiples au serveur VRDP</title>

      <para>Le serveur VRDP de VirtualBox supporte plusieurs connexions simultanées
      à une VM en fonction à partir de différents clients. Tous les clients
      connectés voient la même sortie d'écran et partagent le pointeur de souris
      et le focus du clavier. Cela revient à ce que plusieurs personnes utilisent
      le même ordinateur en même temps, chacun leur tour devant le clavier.</para>

      <para>La commande suivante active le mode connexions multiples&#xA0;: <screen>VBoxManage modifyvm "nom VM" --vrdemulticon on</screen></para>
    </sect2>

    <sect2 id="vrde-multimonitor">
      <title>Avoir plusieurs moniteurs distants</title>

      <para>Pour accéder à deux ou plusieurs moniteurs de VM distants, vous
      devez activer le mode multiconnexion VRDP (voir la <xref
      linkend="vrde-multiconnection" />).</para>

      <para>Le client RDP peut sélectionner le numéro du moniteur virtuel auquel
      se connecter en utilisant le paramètre d'identification <computeroutput>domain</computeroutput>
      (<computeroutput>-d</computeroutput>). Si le paramètre se termine par 
      <computeroutput>@</computeroutput> suivi d'un numéro, VirtualBox
      interprète ce numéro comme l'index des écrans. On sélectionne l'écran invité 
      primaire  avec <computeroutput>@1</computeroutput>, le premier écran secondaire
      avec <computeroutput>@2</computeroutput>, etc.</para>

      <para>Le client Microsoft RDP6 ne pous permet pas de sécifier un nom de
      domaine distinct. Utilisez plutôt
      <computeroutput>domaine\nom_utilisateur</computeroutput> dans le champ
      <computeroutput>Nom d'utilisateur :</computeroutput> -- par exemple, 
      <computeroutput>@2\name</computeroutput>.
      <computeroutput>nom</computeroutput> doit être renseigné et il doit être
      le nom utilisé pour vous identifier si le serveur VRDP est configuré pour
      demander une autorisation. Sinon, vous pouvez utiliser n'importe quel texte 
      comme nom d'utilisateur.</para>
    </sect2>

    <sect2 id="vrde-videochannel">
      <title>Redirection graphique VRDP</title>

      <para>À partir de VirtualBox 3.2, le serveur VRDP peut rediriger les flux
      graphiques de l'hôte vers le client RDP. Les frames graphiques sont 
      compressés en utilisant l'algorithme JPEG, ce qui permet un ratio de compression
      plus fort que les méthodes de compression bitmap RDP standards. Il est
      possible d'augmenter le ratio de compression en diminuant la qualité de l'image.</para>

      <para>Le serveur VRDP détecte automatiquement les flux vidéos dans un 
      invité au fur et à mesure que les zones rectangulaires se mettent à jour
      fréquemment. Il s'en suit que cette méthode fonctionne avec n'importe quel
      système d'exploitation invité, sans devoir installer de logiciels supplémentaires
      dans l'invité&#xA0;; en particulier, les suppléments invité ne sont pas 
      requis.</para>

      <para>Par contre, côté client, seul le client de connexion Connexion bureau
      à distance de Windows 7 supporte actuellement cette fonctionnalité. Si un 
      client ne supporte pas la redirection graphique, le serveur VRDP se rabat
      sur le rafraîchissement régulier des bitmap.</para>

      <para>La commande suivante active la redirection graphique&#xA0;: <screen>VBoxManage modifyvm "nom VM" --vrdevideochannel on</screen></para>

      <para>La qualité de l'image se définit par une valeur entre 10 et 100
      pour cent, ce qui représente un niveau de compression JPEG (où les nombres
      les plus bas signifient une qualité plus faibles mais une compression plus
      forte). Vous pouvez modifier la qualité en utilisant la commande suivante&#xA0;:
      <screen>VBoxManage modifyvm "nom VM" --vrdevideochannelquality 75</screen></para>
    </sect2>

    <sect2 id="vrde-customization">
      <title>Personnalisation du VRDP</title>

      <para>Avec VirtualBox 4.0, il est possible de désactiver l'affichage,
      l'entrée souris et clavier, le son, l'USB distant ou le presse-papier,
      de façon individuelle dans le serveur VRDP.</para>

      <para>Les commandes suivantes modifient les paramètres correspondant du
      serveur&#xA0;:</para>

      <screen>VBoxManage modifyvm "nom VM" --vrdeproperty Client/DisableDisplay=1
VBoxManage modifyvm "nom VM" --vrdeproperty Client/DisableInput=1
VBoxManage modifyvm "nom VM" --vrdeproperty Client/DisableUSB=1
VBoxManage modifyvm "nom VM" --vrdeproperty Client/DisableAudio=1
VBoxManage modifyvm "nom VM" --vrdeproperty Client/DisableClipboard=1
VBoxManage modifyvm "nom VM" --vrdeproperty Client/DisableUpstreamAudio=1</screen>

      <para>Pour réactiver une fonction, utilisez une commande identique sans
      l'argument 1. Par example&#xA0;: <screen>VBoxManage modifyvm "nom VM" --vrdeproperty Client/DisableDisplay=</screen></para>

      <para>Ces propriétés ont été ajoutées avec VirtualBox 3.2.10. Cependant,
      dans la série 3.2.x, il était nécessaire d'utiliser les commandes
      suivantes pour modifier les paramètres&#xA0;:</para>

      <screen>VBoxManage setextradata "nom VM" "VRDP/Feature/Client/DisableDisplay" 1
VBoxManage setextradata "nom VM" "VRDP/Feature/Client/DisableInput" 1
VBoxManage setextradata "nom VM" "VRDP/Feature/Client/DisableUSB" 1
VBoxManage setextradata "nom VM" "VRDP/Feature/Client/DisableAudio" 1
VBoxManage setextradata "nom VM" "VRDP/Feature/Client/DisableClipboard" 1</screen>

      <para>Pour réactiver une fonction, utilisez une commande identique 
      sans l'argument 1. Par exemple&#xA0;: <screen>VBoxManage setextradata "nom VM" "VRDP/Feature/Client/DisableDisplay"</screen></para>
    </sect2>
  </sect1>

  <sect1 id="teleporting">
    <title>Téléportation</title>

    <para>À partir de la version 3.1, VirtualBox supporte la "téléportation" -- 
    à savoir qu'il peut déplacer une machine sur un réseau d'un hôte VirtualBox
    à l'autre, pendant que la machine est en fonction. Cela fonctionne indépendamment
    du système d'exploitation hôte&#xA0;: vous pouvez téléporter des machines
    virtuelles entre, par exemple, des hôtes Solaris et Mac.</para>

    <para>La téléportation exige qu'une machine soit en fonction sur un
    hôte, qu'on appelle alors la <emphasis role="bold">"source"</emphasis>.
    L'hôte sur lequel la machine virtuelle sera téléportée s'appellera alors la
    <emphasis role="bold">"cible"</emphasis>&#xA0;; la machine sur la cible est
    alors configurée pour attendre que la source la contacte.
    L'état en fonction de la machine sera transféré de la source à la cible en
    un temps nimimum.</para>

    <para>La téléportation est possible sur n'importe quel réseau TCP/IP&#xA0;;
    la source et la cible n'ont besoin que de s'entendre sur un port TCP/IP 
    spécifié dans les paramètres de téléportation.</para>

    <para>Cependant, pour l'instant, il y a quelques prérequis pour que cela 
    fonctionne&#xA0;:<orderedlist>
        <listitem>
          <para>Sur l'hôte cible, vous devez configurer une machine virtuelle dans
          VirtualBox avec exactement les mêmes paramètres matériels que la machine
          sur la source que vous voulez téléporter. Cela ne s'applique pas aux 
          paramètres purement descriptifs tels que le nom de la VM, mais bien sûr,
          pour que la téléportation fonctionne, la machine cible doit avoir la
          même quantité de mémoire et les autres paramètres matériels. Sans cela,
          la téléportation échouera avec un message d'erreur.</para>
        </listitem>

        <listitem>
          <para>Les deux machines virtuelles sur la source et la cible doivent
          partager le même stockage (images de disques durs et de lecteur amovible
          et CD/DVD). Cel signifie qu'elles utilisent soit la même cible iSCSI,
          soit le stockage se trouve quelque part sur le réseau et les deux hôtes
          y ont accès via NFS ou SMB/CIFS.</para>

          <para>Cela veut dire aussi que ni la machine source ni la machine
          cible ne peuvent avoir d'instantanés.</para>
        </listitem>
      </orderedlist></para>

    <para>Puis, suivez les étapes suivantes&#xA0;:<orderedlist>
        <listitem>
          <para>Sur l'hôte <emphasis>cible</emphasis>, configurez la machine 
          virtuelle pour attendre qu'une demande de téléportation arrive quand
          elle sera démarrée, plutôt que d'essayer de démarrer réellement la machine.
          Cela se fait avec la commande VBoxManage suivante&#xA0;:<screen>VBoxManage modifyvm &lt;nomvmcible&gt; --teleporter on --teleporterport &lt;port&gt;</screen></para>

          <para>où <computeroutput>&lt;nomvmcible&gt;</computeroutput> est le
          nom de la machine virtuelle de l'hôte cible et
          <computeroutput>&lt;port&gt;</computeroutput> est un numéro de port
          TCP/IP à utiliser sur les hôtes source et cible. Par
          exemple, utilisez le 6000. Pour les détails, voir <xref
          linkend="vboxmanage-modifyvm-teleport" />.</para>
        </listitem>

        <listitem>
          <para>Démarrez la VM sur l'hôte cible. Vous verrez qu'au lieu de démarrer,
          elle affichera une boîte de dialogue de progression indiquant qu'elle
          attend une demande de téléportation.</para>
        </listitem>

        <listitem>
          <para>Démarrez la machine sur l'hôte <emphasis>source</emphasis> comme
          d'habitude. Quand elle est en fonction et quand vous voulez la téléporter, lancez
          la commande suivante sur l'hôte source&#xA0;:<screen>VBoxManage controlvm &lt;nomvmsource&gt; teleport --host &lt;hôtecible&gt; --port &lt;port&gt;</screen></para>

          <para>où <computeroutput>&lt;nomvmsource&gt;</computeroutput> est le
          nom de la machine (irtuelle sur l'hôte source (la machine actuellement en
          fonction) et <computeroutput>&lt;hôtecible&gt;</computeroutput> est
          le nom ou l'IP de l'hôte cible où une demande de téléportation par la
          machine est attendue, et <computeroutput>&lt;port&gt;</computeroutput>
          doit être le même numéro que celui spécifié dans la commande sur l'hôte
          cible. Pour les détails, voir <xref
          linkend="vboxmanage-controlvm" />.</para>
        </listitem>
      </orderedlist></para>

    <para>Pour tester, vous pouvez aussi téléporter des machines sur le même hôte&#xA0;;
    dans ce cas, utilisez "localhost" comme nom d'hôte sur l'hôte source et
    cible.<note>
        <para>Dans de rares cas, si les processeurs de la source et de la cible
        sont très différents, la téléportation peut échouer avec un message d'erreur
        ou la cible peut planter. Cela peut arriver surtout si la VM exécute des
        logiciels très optimisés pour fonctionner sur un processeur particulier 
        sans vérifier correctement que certaines fonctions du processeur sont
        bien présentes. VirtualBox filtre les capacités du processeur présenté 
        au système d'exploitation invité. Les utilisateurs avancés peuvent essayer de
        restreindre les possibilités de ces processeurs virtuels avec la commande
        <computeroutput>VBoxManage --modifyvm
        --cpuid</computeroutput>&#xA0;; voir <xref
        linkend="vboxmanage-modifyvm-teleport" />.</para>
      </note></para>
  </sect1>
</chapter>
