Préliminaires
Les TPs sont évalués par un contrôle continu, ie par des rendus de TP (en début d'année) ainsi qu'un projet (ensuite en novembre et décembre). Vous devez rendre votre compte-rendu pour ce TP sur AMETICE.
Ces TPs sont longs, prenez des notes mais ne faites pas votre rapport
pendant le TP. En outre, lisez toutes les indications. L'énoncé
s'efforce d'être très complet. Il est en général plus judicieux, en
cas de problème, de relire vos cours et TDs, puis, éventuellement,
interroger votre chargé de TP plutôt que d'aller à la "pêche" aux
renseignements sur google Qwant ChatGPT Deepseek ...
Mise en Réseau Simple
Nouvelles VMs
On rappelle qu'une VM est simplement constituée d'un répertoire
contenant un ficher Vagrantfile.
Si vous ne l'aviez pas déjà fait, créez deux VMs VM1 et VM2 avec
vagrant : voir ici.
Lancer VM1 (resp. VM2). Ces machines communique via le réseau LAN
configuré dans le Vagrantfile par cette ligne :
config.vm.network "private_network", ip:"0.0.0.0", auto_config: false, virtualbox__intnet: "LAN"
Observation du Trafic Réseau
- On va considérer que les machines sont reliées par un réseau privé
en
/24. Mettre comme adresse192.168.1.1(resp.192.168.1.2) pourVM1(resp.VM2) en utilisant la connexion nommée "Connexion Filaire 1" ("Wired Connection 1") de l'appletNetworkManager(en haut à droite), ou avec la commande
ip address add 192.168.1.1/24 dev eth1. Il ne faut pas utiliser le
Vagrantfile pour configurer le réseau.
- Vérifier que les VMs se voient par des
ping - Démarrer le logiciel d'écoute réseau
wireshark. - A partir du trafic réseau intercepté entre
VM1etVM2, mettre en évidence le protocole ARP. Il pourra être nécessaire de vider les caches ARP en désactivant les interfaces puis en les réactivant.
Interconnexion de deux Sous-réseaux par un Routeur
initialisation des VMS
Nous allons maintenant utiliser 3 nouvelles machines virtuelles.

- Modifier (le
Vagrantfilede) la machine VM1
pour utiliser une configuration réseau au réseau interne de nom LAN1
avec :
config.vm.network "private_network", ip:"0.0.0.0", auto_config: false, virtualbox__intnet: "LAN1"
- Créer une nouvelle machine VM3
Cette machine aura une carte connectée à un autre réseau interne, de
nom LAN2.
- Modifier (le
Vagrantfilede) la machine VM2 pour qu'elle ait
deux cartes en réseau interne:
- La carte 1 connectée au réseau de nom
LAN1. -
La carte 2 connectée au réseau de nom
LAN2. -
Démarrer les trois VMs
Astuce: pour afficher seulement l'interface ethX désirée dans le
terminal, faire
$ ip addr show ethX
- Vérifier que la table de routage initiale de chaque machine est
vide Par exemple sur VM1, regardons plus précisément le contexte réseau :
VM1 $ ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 08:00:27:63:f8:24 brd ff:ff:ff:ff:ff:ff
inet 10.0.2.15/24 brd 10.0.2.255 scope global eth0
inet6 fe80::a00:27ff:fe63:f824/64 scope link
valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 08:00:27:69:c2:c1 brd ff:ff:ff:ff:ff:ff
inet6 fe80::a00:27ff:fe69:c2c1/64 scope link
valid_lft forever preferred_lft forever
L'interface eth0 est configurée (c'est celle utilisée par vagrant,
on fera donc comme si elle n'était pas là), mais pas eth1. La table de
routage admet comme route par défaut une adresse accessible via eth0.
VM1 $ ip route
default via 10.0.2.2 dev eth0
10.0.2.0/24 dev eth0 proto kernel scope link src 10.0.2.15
- Désactiver la route par défaut. Pour cela, faire en
root:
VM1 $ sudo -s
VM1 # ip route delete default
VM1 # ip route
- Effectuer la même manipulation pour désactiver la route par
défaut de VM3 et VM2.
Plan d'adressage
Afin de répartir les adresses entre les différents sous-réseaux, nous
allons établir un plan d'adressage. Pour cela on subdivisera la plage
d'adresses privées 172.16.2.128/25 (``172.16.2.128`` à
172.16.2.255) avec 4 bits pour les numéros de machine.
Il reste donc 3 bits pour les sous-réseaux, nous disposerons donc de 8
sous-réseaux avec comme masque de réseau /28. Finalement, on donne
comme adresses IP à VM2 172.16.2.eth2g et 172.16.2.eth2d, donc LAN1
sera 172.16.2.128/28 et LAN2 sera 172.16.2.160/28
Configuration des machines VM1 et VM3
Pour que VM1 et VM3 puissent accéder à l'autre LAN, il faut :
-
Leur donner une adresse dans leur LAN. On prendra
172.16.2.eth1d(resp.172.16.2.eth3g) pour VM1 (resp. VM3). -
Indiquer à VM1 et VM3 que VM2 est la passerelle (remplir avec NetworkManager le champ passerelle ou gateway de la connexion avec l'adresse IP de VM2 sur le même LAN).
Comment cela peut-il se faire avec
ip route add?
Configuration de VM2 comme un routeur entre LAN1 et LAN2
- Si ce n'est pas encore fait, configurer les deux interfaces de VM2
avec
172.16.2.eth2gpour le LAN1 et172.16.2.eth2dpour le LAN2.
Lorsque l'on configure les deux interfaces avec NetworkManager, celui-ci crée automatiquement les routes de sorties vers les deux interfaces :
VM2 $ ip route
10.0.2.0/24 dev eth0 proto kernel scope link src 10.0.2.15
172.16.2.128/28 dev eth1 proto kernel scope link src 172.16.2.132
172.16.2.160/28 dev eth2 proto kernel scope link src 172.16.2.162
- Par défaut, les machines Linux ne routent pas d'une interface
vers l'autre. Pour cela, il faut activer le drapeau de
routage
ip_forward:
VM2:~$ sudo sysctl -w net.ipv4.ip_forward=1
Cependant cela ne sera pas mémorisé pour le prochain boot. Pour cela utiliser la méthode suivante :
- Modification du fichier de configuration réseau
VM2:~$ sudoedit /etc/sysctl.conf
# Sous Debian, on décommente la ligne suivante et on sauvegarde fichier
....
#net.ipv4.ip_forward=1 <==== décommenter et sauver
....
- Sous Centos, on met à
1la ligne suivante
....
net.ipv4.ip_forward = 0 <==== Mettre à 1 et sauver
....
- Pour finir, on active nos modification
VM2:~$ sudo sysctl -p /etc/sysctl.conf
Vérifications
- Vérifier qu'on a bien accès à toutes les autres machines depuis
chacune en utilisant
ping.
Vérifier bien vos routes si le ping ne passe pas.
- Faire une capture du trafic sur VM2 et proposer une interprétation
Automatisation de la configuration
Certaines des manipulations précédentes ne sont pas identiques sous Debian et sous d'autres OS (même pour des distributions Linux comme CentOS). En outre, certaines ont été faites avec une interface graphique, ce qui n'est pas possible en général sur un serveur.
Nous allons donc utiliser un outil de gestion de configuration
salt.
Exemple de mise en oeuvre
Le logiciel salt nécessite deux fichiers top.sls et
config.sls. Le premier doit toujours porter ce nom
et être déposé dans le répertoire de la VM (et ainsi apparaître dans
/vagrant dans la VM). Le second est obtenu par indirection. Vous
pouvez donc en utiliser plusieurs, en modifiant le fichier top.sls.
Nous allons considérer VM1. Si les fichiers top.sls
et config.sls apparaissent bien dans /vagrant,
vous pouvez appliquer la configuration, en tant que root :
VM1 $ sudo -s
VM1 # salt-call state.apply
Il est possible de voir des informations supplémentaires lors de l'appel avec
VM1 # salt-call state.apply -l debug
Cette commande applique les configurations indiquées dans config.sls
(pointé par top.sls). La syntaxe est très
simple.
Une documentation complète se trouve sur
https://docs.saltproject.io/en/latest/contents.html. Voir notamment
les exemples de la partie
réseaux.
Vérifier que cette opération a correctement redéfini les paramètres
réseaux de VM1.
Mini-Réseau
- Considérer l'ensemble du réseau constitué de VM1, VM2 et VM3.
Préparer un fichier config.sls pour chacune de ces machines. Vérifier
que la connectivité obtenue est bien celle attendue.
Noter que la configuration de ip_forward s'obtient par
# enable ipv4 forwarding
net.ipv4.ip_forward:
sysctl:
- present
- value: 1
Noter également qu'il est toujours possible d'effectuer une commande shell arbitraire avec
# commande shell arbitraire, ici ip route
ip route delete default:
cmd:
- run
Cependant il est toujours préférable, lorsque c'est possible, d'utiliser
les commandes spécialisées de CONFIG car elles sont
idempotentes.
- Comparer cette méthode de configuration avec celle utilisée précédemment.
Pour conclure, comparer cette méthode de configuration avec celle utilisée précédemment.
Nettoyage
N'oubliez pas de stopper vos VMs avec
$ vagrant halt
Et avant de partir, dans chaque répertoire de VM, détruire les VMs.
Les informations utiles (``Vagrantfile``, config.yml) sont
copiés dans les répertoires de l'hôte
$ vagrant destroy
Par ailleurs, il existe une VM maîtresse qui est aussi à supprimer, vagrant ne fait pas le nettoyage automatiquement, donc il faut également faire
$ rm ~/.vagrant.d/boxes/m1reseaux/0/virtualbox/master_id