Préparation

Dans ce TP nous utiliserons vde_switch, un simulateur de switch gérant les VLAN, et Netkit, un environnement de simulation réseau qui permet de déployer des réseaux virtuels de serveurs Debian GNU/Linux reliés par des switchs. Netkit est déjà installé sur les postes de travail. Il faut par contre récupérer l'archive vlan.tar.gz fournie avec cette planche et l'extraire dans le répertoire /tmp (attention, c'est important si vous ne voulez pas dépasser le quota de votre compte utilisateur).

$ cd /tmp
$ tar xvzf ~/Téléchargements/vlan.tar.gz
$ cd vlan

1. Netkit et vde

Commencer par parcourir la documentation de VDE et la page de manuel de vde_switch.

$ man man/vde_switch.1.gz

La commande ./vswitch blop invoque la commande vde_switch -F -sock suivie d'un nom de socket qui convienne à Netkit. Une fois le switch démarré, sauter une ligne pour passer sur sa console de configuration (identifiable par un prompt vde$). En cas de difficulté à lancer un switch la commande ./vkillswitch blop permet de nettoyer les traces d'un ancien switch nommé blop qui aurait été arrêté brutalement.

Dans un terminal, créer un switch nommé sw :

$ ./vswitch sw

Dans un autre terminal, démarrer trois machines virtuelles reliées aux ports 1 à 3 de ce switch :

$ cd /tmp/vlan
$ ./vstart --eth0=vde,sw,1 alice
$ ./vstart --eth0=vde,sw,2 bob
$ ./vstart --eth0=vde,sw,3 oscar

Dans un premier temps, oscar se contente d'écouter le trafic :

oscar# ifconfig eth0 up
oscar# tcpdump -i eth0 -vvv

Configurer alice à l'aide des commandes ifconfig et route pour lui attribuer l'adresse IP 10.0.1.1/24 et la passerelle 10.0.1.254.

Configurer bob à l'aide des commandes ifconfig et route pour lui attribuer l'adresse IP 10.0.1.2/24 et la passerelle 10.0.1.254.

À l'aide de la commande ping, vérifier qu'alice communique bien avec bob. Que voit oscar ? Pourquoi ?

Configurer maintenant oscar pour lui attribuer l'adresse IP 10.0.2.1/24 et la passerelle 10.0.2.254.

À l'aide de la commande ping, vérifier qu'alice ne communique pas avec oscar. Pourquoi ?

À l'aide de la commande route, sur chacune des machines alice et oscar, faire le nécessaire pour que la commande ping ci-dessus fonctionne. Que peut-on conclure quand à la sécurité apporté par l'utilisation de réseaux IP différents sur un même réseau local ?

2. VLANs

Dans la console du switch, associer le VLAN 10 aux ports 1, 2, 5 et 7 et le VLAN 20 aux ports 3, 4 et 6 en prenant soin que sur ces ports ces VLAN ne soient pas étiquetés (untagged).

Vérifier qu'alice communique toujours avec bob mais qu'elle ne communique plus avec oscar.

Supprimer les routes devenues inutiles des configurations d'alice et oscar.

Créer une nouvelle machine virtuelle rt connectée au switch sur le port 5 via eth0 et sur le port 4 via eth1.

Configurer rt pour qu'il serve de routeur entre les deux VLAN. Vérifier alors que bob peut communiquer avec oscar.

Détruire la machine rt puis la redémarrer avec une unique interface eth0 connectée au port 10 du switch.

Configurer le port 10 du switch comme un port trunk pour les VLAN 10 et 20 : ces deux VLANs sont associés au port et sont étiquetés (tagged).

Lire la page de manuel de la commande vconfig puis à l'aide de cette commande, associer les VLAN 10 et 20 à l'interface eth0 de rt créant ainsi deux sous-interfaces eth0.10 et eth0.20.

Configurer les interfaces eth0.10 et eth0.20. Lancer sur rt la commande tcpdump -i eth0 -vvv. Vérifier que bob peut communiquer avec oscar. Qu'observe-t-on sur rt ? Identifier les étiquettes 802.1Q des trames.

La sécurité des VLANs est toute relative. Il suffit par exemple de relier deux ports par un câble pour créer un unique LAN ! À l'aide de la commande ./cable sw 6 sw 7, relier les ports 6 et 7. Vérifier qu'alors, avec la même astuce que précédemment, alice et oscar peuvent à nouveau communiquer sans passer par rt.

3. (R)STP

Au niveau Ethernet, il n'existe pas de mécanisme type TTL pour éviter les problèmes d'engorgement dus à des trames qui bouclent : toute boucle dans un réseau local peut être mortel en l'absence de mécanisme de gestion adapté.

Créer un switch à l'aide de ./vswitch loop et sur ce switch désactiver le protocole STP avec la commande fstp/setfstp 0.

Créer alors deux machines virtuelles pc1 et pc2 reliés à ce switch :

$ ./vstart --eth0=vde,loop pc1
$ ./vstart --eth0=vde,loop pc2

Sur pc1, écouter le trafic :

pc1# ifconfig eth0 up
pc1# tcpdump -i eth0 -vvv

Relier alors à l'aide de ./cable loop 2 loop 3 deux ports du switch loop entre eux.

Activer alors l'interface eth0 de pc2 et observer le déluge provoqué par l'envoi d'une simple trame IPv6. Couper le câble !

Détruire les machines pc1 et pc2 puis réactiver le protocole STP avec fstp/setfstp 1. Recommencer l'expérience et observer la différence. Que se passe-t-il ? Les commandes fstp/showinfo et fstp/print donnent de plus amples informations. Quels sont ses paquets que pc1 voit circuler ?

À l'aide des commandes ./vswitch et ./cable (sans utiliser vstart), créer un réseau de 6 switchs contenant plusieurs cycles. Observer comment un arbre couvrant est choisi à l'aide des commandes fstp/showinfo et fstp/print. Couper un câble d'un cycle qui appartient à l'arbre et observer comment le réseau élit un nouveau chemin rapidement.

4. Bonus : brctl

Linux possède un mécanisme qui lui permet de se comporter comme un switch : brctl. Lire la page de manuel de brctl puis parcourir la BRIDGE-STP-HOWTO.

Créer deux switchs vde sw1 et sw2 et créer une machine virtuelle pont reliée à sw1 par eth0 et à sw2 par eth1. Établir un pont entre les interfaces eth0 et eth1 de pont et le configurer de sorte que la machine pont soit élue racine de l'arbre STP.

Références

Dernière modification le 05 February 2015