Atelier SysRes SE4 2024/2025 E8
Création et Configuration des Machines Virtuelles sous Xen
1. Introduction
Ce guide décrit le processus de création et de configuration des machines virtuelles sous Xen dans le cadre du TP de virtualisation. L'infrastructure repose sur un système Xen exécuté sur le serveur capbreton.plil.info.
Trois machines sont créées :
- Gyro (Machine de service)
- Gtr (Machine de service)
- Pegase (Machine mandataire)
Les machines de service accèdent à Internet via leur machine mandataire, qui gère la redirection des connexions IPv4 et la configuration réseau.
2. Connexion au serveur Xen
Se connecter au serveur Xen en tant que root :
ssh root@capbreton.plil.info
3. Création des machines virtuelles
Nous utilisons la commande xen-create-image pour générer nos machines virtuelles.
Exemple pour Gyro :
xen-create-image --hostname=SE4.Gyro --dhcp --bridge=alloco_wahran --dir=/usr/local/xen --size=10GB --dist=daedalus --memory=1024M
Nous répétons ce processus pour Gtr et Pegase.
4. Configuration du réseau sur Dom0
Nous modifions le fichier /etc/network/interfaces pour définir le commutateur virtuel du réseau routé :
auto alloco_wahran
iface alloco_wahran inet manual
bridge_ports none
up ip link set $IFACE up
down ip link set $IFACE down
5. Création des partitions LVM
Nous créons deux partitions LVM pour chaque machine de service :
lvcreate -n SE4.Gyro.home -L 10G virtual
lvcreate -n SE4.Gyro.var -L 10G virtual
Nous répétons ces étapes pour Gtr.
6. Lancement des machines virtuelles
Nous lançons nos machines avec :
xen create /etc/xen/SE4.Gyro.cfg
Nous vérifions leur état avec :
xen list
7. Connexion aux machines virtuelles
Nous nous connectons en mode console :
xen console SE4.Gyro
8. Ajout des partitions dans la configuration Xen
Nous modifions la configuration pour ajouter les partitions LVM :
'phy:/dev/virtual/SE4.Gyro.var,xvda3,w', 'phy:/dev/virtual/SE4.Gyro.home,xvdb1,w',
9. Configuration des partitions dans /etc/fstab
Nous ajoutons les partitions dans /etc/fstab :
/dev/xvda3 /var ext4 defaults 0 2
/dev/xvdb1 /home ext4 defaults 0 2
10. Formatage des partitions
Nous formatons les partitions avant de les utiliser :
mkfs -t ext4 /dev/xvda3
mkfs -t ext4 /dev/xvdb1
11. Déplacement du contenu des répertoires
Nous copions le contenu de /var :
mount /dev/xvda3 /mnt
mv /var/* /mnt
umount /mnt
Nous montons ensuite automatiquement les partitions définies dans /etc/fstab :
mount -a
12. Attribution d’une adresse IPv4
Nous configurons une adresse IPv4 statique pour nos machines virtuelles en modifiant /etc/network/interfaces.
Exemple pour Gyro :
auto eth0
iface eth0 inet static
address 192.168.0.3
netmask 255.255.255.0
gateway 192.168.0.1
la gateway étant l'adresse de la machine mandataire (Pegase). Nous modifions également le fichier log de la machine manadataire comme vous pouvez le voir dans l'image ci-dessous.
Ci-dessous vous pouvez voir la configuration des interfaces de la mandataire Pegase.
# The primary network interface
auto eth0
iface eth0 inet static
address 192.168.0.1/24
auto eth1
iface eth1 inet static
address 193.48.57.164/24
gateway 193.48.57.161
iface eth1 inet6 auto
l'adresse gateway étant celle du routeur.
13. Test ping entre les machines
Depuis la machine Gyro nous tentons un ping sur la machine de service Gtr; vous pouvez le voir dans l'image ci-dessous.
Toujours sur Gyro nous tentons un ping sur la machine mandataire Pegase; vous pouvez le voir dans l'image ci-dessous.
conf interface ipV6 dans machine de service
auto lo iface lo inet loopback
- The primary network interface
auto eth0 iface eth0 inet static address 192.168.0.3/24 gateway 192.168.0.1 iface eth0 inet6 auto
- post-up ethtool -K eth0 tx off
auto eth1 iface eth1 inet6 auto
configuration ipv4 sur la mandataire dans le fichier /etc/sysctl.conf on active le forwarding ipv4 en decommanatant la ligne puis on fait sysctl -p puis on fait apt install iptables -persistent ensuite on fait iptables -t nat -A POSTROUTING -j MASQUERADE apres ca nous pouvons faire un ping 8.8.8.8 sur nos machine de services redirection nft add table ip NAT
129 nft add chain NAT PREROUTING { type nat hook prerouting priority 0\; } 130 nft add chain NAT POSTROUTING { type nat hook postrouting priority 100\; } 131 nano /etc/network/interfaces 132 nft add rule NAT PREROUTING tcp dport 2202 dnat to 192.168.0.2:22 133 nft add rule NAT PREROUTING tcp dport 2203 dnat to 192.168.0.3:22
DNS configuration du named.conf.local pour le DNS / // Do any local configuration here //
// Consider adding the 1918 zones here, if they are not used in your // organization //include "/etc/bind/zones.rfc1918";
zone "alloco.online" {
type master; file "/etc/bind/db.alloco.online"; allow-transfer{secondaries;}; // filtrage des secondaires //also-notify{hiddensecondaries;}; // pour les secondaires vicieux notify yes; // notification des secondaires
}; acl "secondaries" {
192.168.0.2; // serveur secondaire 2001:660:4401:60a0:216:3eff:fe32:8fa2; //serveur secondaire IPV6
}; fichier de zone du serveur dns(alloco.zone) présent dans etc/bind/alloco_online/ TTL 400
@ IN SOA ns.alloco.online. postmaster.alloco.online. ( 3600 ; Version 21600 ; Refresh secondary (6h) 3600 ; Retry secondary (1h) 2592000 ; Expire if no refresh (30 jours) 86400 ; Negative cache (24h) )
- Enregistrements des serveurs de noms
@ IN NS ns.alloco.online. @ IN NS ns2.wahran.online.
- Enregistrements AAAA (IPv6)
ns IN AAAA 2001:660:4401:60a0:216:3eff:fe81:abfe
- Enregistrements A (IPv4)
ns IN A 193.48.57.164
- Enregistrements CNAME
www IN CNAME alloco.online
14. Configuration de l'interface IPv6 sur la machine de service
auto eth0
iface eth0 inet static
address 192.168.0.3/24
gateway 192.168.0.1
iface eth0 inet6 auto
# post-up ethtool -K eth0 tx off
auto eth1
iface eth1 inet6 auto
15. Configuration IPv4 sur la machine mandataire
Nous modifions le fichier `/etc/sysctl.conf` en décommentant la ligne suivante :
net.ipv4.ip_forward=1
puis nous appliquons la modification avec :
sysctl -p
Nous installons ensuite iptables-persistent :
apt install iptables-persistent
Ajouter une règle NAT pour masquer l'adresse source :
iptables -t nat -A POSTROUTING -j MASQUERADE
Après cela, un ping vers `8.8.8.8` depuis les machines de service est désormais possible.
16. Redirection de ports avec nftables
nft add table ip NAT
Ajout des chaînes PREROUTING et POSTROUTING :
nft add chain NAT PREROUTING { type nat hook prerouting priority 0; }
nft add chain NAT POSTROUTING { type nat hook postrouting priority 100; }
Ajout des règles de redirection :
nft add rule NAT PREROUTING tcp dport 2202 dnat to 192.168.0.2:22
nft add rule NAT PREROUTING tcp dport 2203 dnat to 192.168.0.3:22
17. Configuration du serveur DNS
Nous modifions le fichier de configuration /etc/bind/named.conf.local de la machine de service Gyro de la façcon suivante:
zone "alloco.online" {
type master;
file "/etc/bind/alloco_online/alloco.online";
allow-transfer { secondaries; }; // Filtrage des secondaires
// also-notify { hiddensecondaries; }; // Notification optionnelle
notify yes; // Notification des secondaires
};
acl "secondaries" {
192.168.0.2; // Serveur secondaire IPv4
2001:660:4401:60a0:216:3eff:fe32:8fa2; // Serveur secondaire IPv6
};
le Fichier de zone `/etc/bind/alloco_online/alloco.zone` est également modifié comme suit:
TTL 400
@ IN SOA ns.alloco.online. postmaster.alloco.online. (
3600 ; Version
21600 ; Refresh secondary (6h)
3600 ; Retry secondary (1h)
2592000 ; Expire if no refresh (30 jours)
86400 ; Negative cache (24h)
)
; Enregistrements des serveurs de noms
@ IN NS ns.alloco.online.
@ IN NS ns2.wahran.online.
; Enregistrements AAAA (IPv6)
ns IN AAAA 2001:660:4401:60a0:216:3eff:fe81:abfe
; Enregistrements A (IPv4)
ns IN A 193.48.57.164
; Enregistrements CNAME
www IN CNAME alloco.online
18. Configuration du serveur DNSSEC
Pour le DNSSEC nous rajoutons quelques lignes au fichier de configuration /etc/bind/named.conf.local de la machine de service Gyro qui se présente désormais comme suit :
zone "alloco.online" {
type master;
file "/etc/bind/alloco_online/alloco.zone";
allow-transfer{secondaries;}; // filtrage des secondaires
//also-notify{hiddensecondaries;}; // pour les secondaires vicieux
notify yes; // notification des secondaires
key-directory "/etc/bind/keys"; //repertoire des keys
dnssec-policy "dnspol"; //utilisation d'une politique DNSSEC
inline-signing yes; //activation de la signature automatique
};
acl "secondaries" {
192.168.0.2; // serveur secondaire
2001:660:4401:60a0:216:3eff:fe32:8fa2; //serveur secondaire IPV6
};
dnssec-policy "dnspol" {
keys {
ksk key-directory lifetime unlimited algorithm 13;
zsk key-directory lifetime unlimited algorithm 13;
};
nsec3param;
};
Nous créons ensuite le repertoire des clés auquel nous accordons les droits d'accès à bind.
mkdir -p /etc/bind/keys
chown bind:bind /etc/bind/keys
chmod 700 /etc/bind/keys
Enfin nous redémarrons le service bind :
service named restart
Après redémarrage du service on peut constater le chargement automatique des clés dans le repertoire /etc/bind/named.conf.local