Atelier SysRes SE4 2025/2026 E9
note : si vous voyez des noms entre chevrons, changez-les !
Creation des VMs
se connecter au serveur de promo
Toutes les machines virtuelles sont hébergées sur le serveur capbreton, nous nous y connectons donc:
ssh root@capbreton
Le mot de passe est fourni par l'enseignant.
Attention ! Le serveur est commun à toute la promo et vous êtes en root, donc attention aux rm et mv !
Initialement, on ne pourra se connecter à nos VMs que par capbreton, on corrigera cela lorsque nous exposerons à internet nos VMs.
Creation du commutateur virtuel
Pour que les VMs puissent communiquer entre elles et pour bien séparer les réseaux des binômes, on crée un commutateur virtuel sur le serveur. On crée donc un fichier dans interfaces.d:
vim /etc/nbetwork/interfaces.d/SE4_<login1>_<login2>
dans lequel on écrit:
auto <nom_bridge>
iface <nom_bridge> inet manual
bridge_ports none
up ip link set $IFACE up
down ip link set $IFACE down
On active l'interface virtuelle avec :
ifup <nom_bridge>
initialisation des VMs
pour chacune des 2 VMs de service et la VM mandataire, on crée une image :
xen-create-image --hostname=<nom_VM> --dhcp --bridge=<nom_bridge> --dir=/usr/local/xen --size=10G --dist=excalibur --memory=2048M --force
on démarre les VMs avec :
xen create /etc/xen/<nom_VM>.cfg
et on ouvre le terminal des VMs avec:
xen console <nom_VM>
sur capbreton, vérifiez que vos VMs sont bien toutes présentes :
xen list
mots de passe
vous pouvez simplement afficher le mot de passe de vos VMs avec la commande :
cat /var/log/xen-tools/<nom_VM>.log | grep Password
chaque VM a initialement un mot de passe long et difficile à retenir, mais sûr. Il est recommandé de le laisser tel quel. vous pouvez toutefois le changer avec :
vim /etc/xen/<nom_VM>.cfg
A partir d'ici, vous devriez avoir accès à vos 3 VMs.
montage des partitions
Nous allons ajouter des partions à nos VMs de service, donc pour seulement deux des trois VMs. On crée des volumes virtuels avec :
lvcreate -n <nom_VM>.var -L 10G virtual
lvcreate -n <nom_VM>.home -L 10G virtual
Lorsque on exécute ces commandes, on nous demande où placer ces volumes. Placez-les sur un disque où de l'espace est disponible, "storage" par exemple. Eteignez ensuite les VMs:
xen shutdown <nom_VM>
Editez le fichier de configuration de chaque VM:
vim /etc/xen/<nom_VM>.cfg
ajoutez dans disk :
'phy:/dev/virtual/<nom_VM>.home,xvda3,w',
'phy:/dev/virtual/<nom_VM>.var,xvdb1,w'
ajoutez dans /etc/fstab :
/dev/xvda3 /var ext4 defaults 0 2
/dev/xvdb1 /home ext4 defaults 0 2
formatez avec :
mkfs -t ext4 /dev/xvda3
mkfs -t ext4 /dev/xvdb1
puis montez avec :
mount /dev/xvda3 /mnt
mount /dev/xvdb1 /mnt
mv /var/* /mnt
mv /home/* /mnt
umount /mnt
mount -a
puis relancez les VMs de service avec
xen create
et
xen console
.
Configuration réseau des VMs
Configuration des interfaces
Nous allons maintenant configurer les interfaces des VMs:
vim /etc/network/interfaces
On souhaite une adresse statique en IPv4 et une adresse fournie par DHCP en ipv6.
nous allons donner l'adresse IPv4 avec le format suivant: 192.168.<numéro_binôme>.X avec X prenant une valeur différente pour chaque VM.
ce qui nous donne la configuration des machines de service :
auto lo
iface lo inet loopback
#statique ipv4
auto eth0
iface eth0 inet static
address 192.168.<numéro_binôme>.<numéro_VM_service>/24
gateway 192.168.<numéro_binôme>.<numéro_VM_mandataire>
#dhcp ipv6
auto eth0
iface eth0 inet6 auto
de plus, sur la mandataire, il faut ajouter une seconde interface dans le fichier de configuration pour pouvoir l'exposer au bridge de promotion.
on éteint la machine mandataire et on édite la partie
vif
du fichier
/etc/xen/<nom_VM>.cfg
et on y ajoute:
'mac=00:11:22:33:44:<numéro_binôme>,bridge=SE4'
On redémarre la mandataire et on édite les interface comme il suit: la variable <valeur_unique_au_binôme> est supérieure à 164 et unique pour chaque binôme, n'oubliez pas de la renseigner. (162 VRRP, 163 Routeur1, 164 Routeur2)
auto lo
iface lo inet loopback
#statique ipv4
auto eth0
iface eth0 inet static
address 192.168<numéro_binôme>.<numéro_VM_mandataire>/24
auto eth1
iface eth1 inet static
address 193.48.57.<valeur_unique_au_binôme>/24
gateway 193.48.57.162
#dhcp ipv6
auto eth1
iface eth1 inet6 auto
pour chaque interface configurée, on la redémarre:
ifdown <interface>
ifup <interface>
Configuration du dns
dans
/etc/resolv.conf
sur les 3 machines, ajoutez:
nameserver 8.8.8.8
cela nous donnera un serveur dns par défaut (on pourra vérifier le fonctionnement en faisant
ping google.com
dans le terminal)
Installation des packages
Sur les machines de service on met à jour et on installe:
apt update
apt upgrade
apt install ssh bind9 apache2 iptables dnsutils openssl
pour pouvoir nous connecter en ssh de l'extérieur, il est nécessaire d'éditer
/etc/ssh/sshd_config
: Il faut retrouver le paramètre
PermitRootLogin
et le mettre à
yes
, ou bien on peut l'ajouter en exécutant:
echo "PermitRootLogin = yes" > /etc/ssh/sshd_config
on valide les changements en exécutant:
/etc/init.d/ssh restart
Méthodes de routage IPv4
Mascarade
pour pouvoir router nos VMs de service en IPv4, on va d'abord utiliser la mascarade (si vous perdez accès à internet sur les machine de service avec la méthodes suivante, référez-vous à celle-ci).
iptables -t nat -A POSTROUTING -j MASQUERADE -s 192.168.<numéro_binôme>.<numéro_VM_mandataire>/24
on peut se connecter depuis l'extérieur vers nos machines de service en faisant une chaîne de ssh :pc_personnel -> machine mandataire -> machine de service.
Redirection de port
Cette méthode nous permettra de nous connecter en ssh sur les machines de service depuis la mandataire en nous connectant sur d'autres ports. sur la mandataire on exécute:
iptables -t nat -A PREROUTING -p tcp --dport 2202 -j DNAT --to-destination 192.168.<numéro_binôme>.<numéro_VM1>:22
iptables -t nat -A PREROUTING -p tcp --dport 2203 -j DNAT --to-destination 192.168.<numéro_binôme>.<numéro_VM2>:22
et on active la redirection de port avec:
echo "net.ipv4.ip_forward=1" > /etc/sysctl.conf
sur la mandataire
On peut alors se connecter en ssh sur nos machines de service depuis l'extérieur en changeant le port:
ssh root@193.48.57.168 -p2202
ou
ssh root@193.48.57.168 -p2203
on sauvegarde pour avoir une configuration persistante avec:
iptables-save
Serveurs DNS
Création des noms de domaine
On choisit et achète deux noms de domaine auprès de gandi.net avec les logins fournis par l'enseignant avec un carte prépayée (ne pas prendre de noms de domaine trop cher, 2 euros environ). on prendra domain1.name et domain2.name pour l'exemple.
Création des serveurs dns redondants
Afin que bind(le service de serveur dns) puisse accéder aux fichiers de configuration:
chown bind:bind /etc/bind/
chmod 666 /etc/bind/
nous éditons le fichier de configuration locale de bind
/etc/bind/named.conf.local
sur la première machine de service:
zone "domain1.name" {
type master;
file "/etc/bind/domain1.name";
allow-transfer{secondaries;};
notify yes;
};
acl "secondaries"{
<adresse_ipv4_machine_service_2>;
<adresse_ipv6_machine_service_2>;
};
zone "domain2.name" {
type secondary;
file "/etc/bind/backup/domain2.name";
primaries{<adresse_ipv6_machine_service_2>;};
};
sur la seconde machine de service:
zone "domain2.name" {
type master;
file "/etc/bind/domain2.name";
allow-transfer{secondaries;};
notify yes;
};
acl "secondaries"{
<adresse_ipv4_machine_service_1>;
<adresse_ipv6_machine_service_1>;
};
zone "domain1.name" {
type secondary;
file "/etc/bind/backup/domain1.name";
primaries{<adresse_ipv6_machine_service_1>;};
};
et sur la machine mandataire:
zone "domain1.name" {
type secondary;
file "/etc/bind/backup/domain1.name";
primaries{<adresse_ipv6_machine_service_1>;};
};
zone "domain2.name" {
type secondary;
file "/etc/bind/backup/domain2.name";
primaries{<adresse_ipv6_machine_service_2>;};
};
nous créons maintenant les fichiers de zone dns:
sur la première machine de service dans un fichier
/etc/bind/domain1.name
:
$TTL 400
@ IN SOA ns.domain1.name domain1.name (
4000 ; Numero de version(faire +1 a chaque edition du fichier)
21600 ; Rafraichissement (6h)
3600 ; Re-tentative (1h)
2592000 ; Expiration (30j)
86400 ; Cache negatif (24h)
);
IN NS ns.domain1.name.
IN NS ns.domain2.name.
@ IN A <adresse_ipv4_bridge_SE4_mandataire>
@ IN AAAA <adresse_ipv6_bridge_SE4_mandataire>
ns IN A <adresse_ipv4_bridge_SE4_mandataire>
ns IN AAAA <adresse_ipv6_bridge_SE4_mandataire>
www IN CNAME domain1.name
sur la seconde machine de service, on inversera chaque itération de domain1.name par domain2.name du fichier de zone ci-dessus et on le placera dans
/etc/bind/domain2.name
.
Lorsque la configuration du serveur dns est faite, on redémarre bind avec:
service named restart
sur les trois machines.
glue record
Pour que nos serveurs DNS soient reconnus par les autres serveurs DNS d'internet, il faut créer un glue record. On se rend sur gandi.net et on suit la procédure décrite pour ajouter un glue record. On ajoute alors ns.domain1.name et ns.domain2.name.
On peut alors verifier que notre nom de domaine est bien reconnu par les autres serveurs DNS sur le site dnschecker.org, et aussi en exécutant:
dig domain1.name @8.8.8.8