Updated Modifié

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

  1. On va considérer que les machines sont reliées par un réseau privé en /24. Mettre comme adresse 192.168.1.1 (resp. 192.168.1.2) pour VM1 (resp. VM2) en utilisant la connexion nommée “Connexion Filaire 1” (“Wired Connection 1”) de l’applet NetworkManager (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.
  2. Vérifier que les VMs se voient par des ping
  3. Démarrer le logiciel d’écoute réseau wireshark.
  4. A partir du trafic réseau intercepté entre VM1 et VM2, 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.

  1. Modifier (le Vagrantfile de) 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"  
    

  2. Créer une nouvelle machine VM3 Cette machine aura une carte connectée à un autre réseau interne, de nom LAN2.

  3. 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.
  4. Démarrer les trois VMs

Astuce: pour afficher seulement l’interface ethX désirée dans le terminal, faire

$ ip addr show ethX
  1. 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 
    
  2. Désactiver la route par défaut. Pour cela, faire en root:
    VM1 $ sudo -s
    VM1 # ip route delete default
    VM1 # ip route
    
  3. 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 :

  1. Leur donner une adresse dans leur LAN. On prendra 172.16.2.131 (resp. 172.16.2.163) pour VM1 (resp. VM3).

  2. 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

  1. Si ce n’est pas encore fait, configurer les deux interfaces de VM2 avec 172.16.2.132 pour le LAN1 et 172.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 
    

  2. 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

  1. 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 salt car elles sont idempotentes.

  2. 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