Contents Next

1   Description générale du projet

1.1   Objectif

L'objectif du projet est de réaliser des réseaux privés en lancant des commutateurs virtuels sur toutes les machines à relier, en connectant les machines à leurs commutateurs en utilisant des interfaces Ethernet virtuelles (TAP) et en interconnectant les commutateurs entre eux par des connexions TCP (sockets classiques). Il suffit alors de réaliser la configuration IP des interfaces Ethernet virtuelles; des VPN (Virtual Private Network) sont alors constitués.

1.2   Architecture générale de l'application

L'application est constituée de 2 exécutables : le commutateur virtuel et le client d'administration. Pour permettre de traiter simultanément plusieurs ports ainsi que les requêtes de l'administrateur, le commutateur doit être multi-threadé. Un processus léger (thread) est lancé pour chaque port connecté à une interface Ethernet virtuelle et pour chaque port connecté à un autre commutateur virtuel. Ces processus légers sont chargés de récupérer les paquets Ethernet arrivant sur les ports et de les propager aux bons ports cibles.

De même, un processus léger est chargé de traiter d'éventuelles requêtes de l'administrateur. Pour chacune de ses requêtes, l'administrateur lance un client d'administration. Celui-ci communique avec le commutateur par IPC (files de messages).

Enfin un processus léger est chargé de purger les mémoires associées aux ports. Ces mémoires stockent les adresses Ethernet des stations connectées aux ports. Les adresses sont trouvées dans le champ adresse source des paquets arrivant sur les ports. Chaque adresse est mémorisée avec la date d'arrivée du paquet. Les adresses expirent au bout d'un certain temps et c'est au processus léger de purge de retirer les adresses expirées.

1.3   Exemple d'utilisation

Prenons comme exemple d'utilisation du commutateur virtuel, une création de réseaux privés entre machines personnelles connectées à Internet par des boites ADSL quelconques (marquées box sur le schéma). Il est courant que les ordinateurs derrière ces boites ne puissent que se connecter vers Internet et non être accédées en provenance d'Internet. On suppose tout de même que la boite d'adresse IP IPbox0 est configurée pour rediriger son port 4000 vers la machine d'adresse IP IPpc0. C'est à dire, vers le port du commutateur virtuel tournant sur cette machine. Prenons aussi l'hypothèse que l'on réalise les configurations de commutateurs virtuels décrites dans le schéma ci-dessous. Dans ce schéma, la notation PxVy signifie une connexion au port x du commutateur virtuel, port qui se trouve dans le VLAN y.


Du coup, alors que les ordinateurs 0, 1 et 2 ne peuvent pas se contacter par les adresses IP de leurs interfaces Ethernet (ou de leurs boites ADSL) ils peuvent le faire en utilisant les adresses des interfaces virtuelles dans le réseau IP 192.168.100.0/24. C'est aussi vrai pour les ordinateurs 3 et 4 dans le même réseau IP. C'est enfin vrai pour les ordinateurs 0, 5 et 6 dans le réseau IP 192.168.200.0/24. Accessoirement, on se rend compte que l'on peut utiliser les mêmes réseaux IP pour des groupes différents de machines du moment que les groupes se trouvent dans des VLAN différents.

Vous allez pouvoir tester votre commutateur dans une situation similaire en constituant des VPNs entre des machines du réseau de TP de l'école et des machines des salles de projets informatiques. En effet, si les machines de TP peuvent contacter les machines de projets, l'inverse n'est pas vrai à cause des règles de filtrage implantées sur le routeur de l'école. Les machines de projets ne peuvent contacter, comme machine de TP, que le seul serveur weppes (et encore que sur les ports 22 et 4200 à 4242). Pour vos tests, il vous est donc suggéré de lancer un commutateur virtuel sur weppes et d'autres commutateurs sur des machines de TP et de projets. Reliez les commutateurs au commutateur central sur weppes et vérifiez que dans vos VPNs les machines de projets peuvent accéder aux machines de TP.

1.4   Le commutateur virtuel

Le fonctionnement de base du commutateur est de lire des paquets Ethernet sur ses ports et de les transmettre sur les bons ports. Le principe est de gérer une liste d'adresses Ethernet associée à chaque port. Si l'on trouve l'adresse de destination du paquet dans la liste d'un port, le paquet est transmis sur cet unique port. Dans le cas contraire ou si l'adresse Ethernet est une adresse de diffusion (bit de poid faible de l'octet de poids fort à 1), le paquet est transmis sur tous les ports sauf le port d'origine. Pour remplir les listes, il suffit d'ajouter (ou de rafraîchir) l'adresse Ethernet source dans la liste à chaque fois qu'un paquet se présente sur un port.

Il est prévu d'implanter aussi la notion de VLAN (Virtual LAN); à chaque port est associé un numéro de VLAN. Seuls les ports dans le même VLAN peuvent communiquer; cela permet de réaliser des VPN différents en utilisant une même instance de commutateur virtuel.

La structure de données principale est celle d'un port de commutateur qui contient principalement la liste des adresses Ethernet apprises, le numéro de VLAN et le descripteur de connexion (un descripteur de fichier pour les interfaces Ethernet virtuelles et un descripteur de socket pour les connexions inter-commutateurs). Un tableau de taille fixe de ces structures représente un commutateur virtuel.

Pour chaque port connecté, un processus léger scrute le descripteur de connexion associé. A chaque arrivée de paquet, le processus léger détermine les ports de destination et écrit les paquets sur ces ports. Pour éviter que les paquets à destination d'un port soient corrompus, il faut absolument considérer l'écriture sur un port comme une section critique.

1.5   Connexion entre deux commutateurs

Lorsqu'un commutateur A reçoit l'ordre du client d'administration de se connecter sur un autre commutateur virtuel B les actions suivantes sont exécutées ; Lorsque l'un des deux commutateurs souhaite terminer la connexion, il arrête simplement la connexion TCP sans envoyer de message particulier. Le correspondant doit savoir repérer l'arrêt de la connexion. Il faut prendre soin de repasser les ports concernés dans l'état déconnecté et d'arrêter le processus léger correspondant.

1.6   Les requêtes administrateur

L'administrateur lance le client d'administration à chaque fois qu'il veut effectuer une requête (la requête est fournie en argument). L'administrateur peut envoyer plusieurs requêtes simultanément, c'est à dire exécuter plusieurs instances du client d'administration simultanément. Les requêtes à disposition de l'administrateur sont les suivantes :
aide :
obtenir la liste des requêtes possibles ;
lister :
lister tous les ports d'un commutateur en indiquant si le port est connecté ou non ;
afficher <n° de port> :
afficher le type d'un port connecté (interface Ethernet virtuelle ou connexion TCP vers un autre commutateur), la caractéristique de la connexion (nom de l'interface virtuelle ou adresse IP du commutateur virtuel et numéro du port distant) et enfin le numéro de VLAN du port ;
adresses <n° de port> :
lister les adresses Ethernet liées à un port avec leurs âges ;
connecter_tap <n° de port> :
connecter un port à une interface Ethernet virtuelle, l'interface virtuelle doit être créée par le commutateur et son nom doit être retourné ;
connecter_tcp <n° de port local>:[<port TCP>@]<nom machine>:<n° port distant> :
connecter un port local à un port d'un commutateur distant, indiquer la raison d'un éventuel échec ;
vlan <n° de port>:<n° de VLAN> :
affecter un numéro de VLAN à un port local ;
deconnecter <n° de port> :
déconnecter un port local de son interface Ethernet virtuelle ou de son commutateur distant et donc arrêter le processus léger correspondant ;
stats <n° de port> :
afficher les statistiques d'un port, c'est à dire le nombre d'octets reçus sur le port et le nombre d'octets envoyés du port ;
scruter :
scruter les événements de configuration du commutateur, principalement les connexions et déconnexions de ports ;
sniffer <n° de port> :
afficher les paquets arrivant ou partant d'un port, plusieurs gestionnaires doivent pouvoir être lancés pour surveiller plusieurs ports ;
stopper :
arrêter le commutateur virtuel.
Tout dialogue entre le commutateur et le client d'administration est réalisé par des communications IPC (envoi et réception de messages). Pour permettre l'exécution simultanée de plusieurs clients d'administration il faut créer une file de messages de réponse par client et envoyer le descripteur de cette file dans les requêtes. Pour implanter les commandes scruter et sniffer, il est recommandé de définir, au niveau du commutateur virtuel, un tableau des clients d'administration en attente d'informations. Ainsi à chaque nouvelle information à leur transmettre, il suffit de parcourir ce tableau et de les contacter sur leur file de messages de réponse. Prenez soin de protéger les accès au tableau des clients d'administration.


Contents Next