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