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 au plus tard le mardi à 18h00.
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 Grok …
1. Mise en Réseau Simple
1.1. 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"
1.2. 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 commandeip address add 192.168.1.1/24 dev eth1
. Il ne faut pas utiliser leVagrantfile
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
VM1
etVM2
, 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.
2. Interconnexion de deux Sous-réseaux par un Routeur
2.1. initialisation des VMS
Nous allons maintenant utiliser 3 nouvelles machines virtuelles.
- Modifier (le
Vagrantfile
de) la machine VM1 pour utiliser une configuration réseau au réseau interne de nomLAN1
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
Vagrantfile
de) 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
.
- La carte 1 connectée au réseau de nom
- 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’interfaceeth0
est configurée (c’est celle utilisée parvagrant
, on fera donc comme si elle n’était pas là), mais paseth1
. La table de routage admet comme route par défaut une adresse accessible viaeth0
.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.
2.2. 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.132
et
172.16.2.162
, donc LAN1 sera 172.16.2.128/28
et LAN2 sera
172.16.2.160/28
2.3. 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.131
(resp.172.16.2.163
) 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
?
2.4. 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.132
pour le LAN1 et172.16.2.162
pour 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 ....
- Pour finir, on active nos modification
VM2:~$ sudo sysctl -p /etc/sysctl.conf
2.5. 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
3. 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
.
3.1. 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
.
3.2. 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 deip_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 desalt
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