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 (en novembre). 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 …
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
.
Créer deux nouvelle VMs VM1
et VM2
avec vagrant
cette fois.
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 par vagrant), 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
- Établir un plan de configuration de ces sous-réseaux et machines.
Pour cela on subdivisera les 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. - De combien de sous-réseaux disposera-t-on ?
- Combien peut-on mettre effectivement de machines sur chaque sous-réseau ?
On donne comme adresses IP à VM2
172.16.2.132
et172.16.2.162
- Donner le masque réseau et l’adresse de broadcast pour
LAN1
etLAN2
.
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 ....
- Sous Debian, on décommente la ligne suivante et on sauvegarde fichier
- 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
ansible
.
3.1. Exemple de mise en oeuvre
Nous allons reprendre les VMs VM1
et VM2
, toujours reliées
sur LAN1
.
Le logiciel ansible
nécessite un fichier de configuration en YAML.
Ce fichier doit être déposé dans le
répertoire de la VM (et ainsi apparaître dans /vagrant
dans la
VM).
Le fichier de configuration YAML peut intégrer des commandes shell arbitraires mais également des commandes plus évoluées
(cf ci-dessous); et est donc plus avantageux qu’un simple script shell.
A noter que nous allons directement modifier les connexions accessibles
avec nmcli
(CLI pour NetworkManager).
Il faudra préalablement supprimer votre connexion “Wired connexion 1”, à la main ou bien avec
$ nmcli connection del "Wired connection 1"
Les commandes suivantes appliquent les configurations indiquées dans
le fichier config.yml
.
VM1 $ cd /vagrant VM1 $ sudo ansible-playbook -c local -v config.yml
Nous allons détailler. L’entête du fichier détermine que nous allons
travailler uniquement en local (il s’agit en effet d’une utilisation
simplifiée de ansible
)
# Configuration eth1 / Ansible playbook # RAPPEL: eth0 est à vagrant, ne pas y toucher - hosts: localhost remote_user: root tasks:
Chaque tâche ansible
est ensuite décrite. Toutes comportent un champ name
et utilise un module spécifique, par exemple shell
.
Ici, on applique la commande shell de suppression de la route par défaut.
- name: Suppression de la passerelle par défaut shell: ip route del default
Avec le module nmcli
, on définit une configuration réseau “eth1 via ansible”
- name: Configuration de VM1/eth1 nmcli: type: ethernet conn_name: eth1 via ansible ifname: eth1 state: present autoconnect: true ip4: 172.16.2.131/28
que l’on doit ensuite activer explicitement (comme avec l’interface graphique …)
- name: Activation explicite de cette configuration shell: nmcli con up "eth1 via ansible"
On termine par la définition de la route vers LAN2, avec le
module nmcli
étendu dans la version “community”
- name: Configuration de la route vers LAN2 via VM2 community.general.nmcli: type: ethernet conn_name: eth1 via ansible ifname: eth1 # syntaxe simple : plage passerelle routes4: 172.16.2.160/28 172.16.2.132 state: present
Vérifier que cette suite d’opérations a correctement défini les paramètres
réseaux de VM1
. Vous pouvez également activer cette nouvelle connexion avec
l’interface graphique.
Comment adapter config.yml
pour configurer la première interface de VM2
?
3.2. Mini-Réseau
Reprendre tout le réseau constitué de VM1, VM2 et VM3.
Préparer les fichiers config.yml
pour chacune de ces machines.
Vérifier que la connectivité obtenue est bien celle attendue.
Noter que la configuration ip_forward
s’obtient par le module sysctl
avec
# Activer le routage - name: Activation du routage IPv4 sysctl: name: net.ipv4.ip_forward value: '1' sysctl_set: yes
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