Ceci est une ancienne révision du document !
Kathará est un Framework de l’Université de Rome qui succède à Netkit en utilisant Docker et Python. Cette solution permet de créer de concevoir et de tester des architectures de réseaux locaux en implémentant ma-chines virtuelles légères sous la forme de conteneur Docker reliés ensemble par un réseau virtuel indépendant du réseau de la machine d'accueil. Il est ainsi possible de tester une configuration réseau complexe sans la nécessité de droits spéciaux sur l'ordinateur hôte.
La réalisation d’infrastructure réseau est de nos jour de plus en plus complexe car cela met en œuvre :
Cela se traduit par des topologies réseaux variées en plus d’être complexes.
Dans un cadre d’enseignement, où l’on ne dispose pas des matériels nécessaires pour implémenter les topolo-gies réseaux afin de les étudier et les tester, il est possible d’utiliser des logiciels de simulation comme Cisco Paquet Tracer. Mais ce logiciel qui permet l’étude d’infrastructure réseau est moins adapté à la mise en place de services réseaux. Il permet de reproduire un certain nombre de fonctionnalités sans en reproduire le comporte-ment réel en termes de performance.
Kathará permet de mettre en œuvre des protocoles récents permettant la virtualisation des fonctions de réseau (NFV) et la mise en réseau définie par logiciel (SDN). Cela va modifier la manière de mettre en réseau des ser-vices, en permettant la programmation des infrastructures réseaux dans le but de séparer la logique de l’infrastructure à réaliser du matériel qui va la mettre en œuvre. Ensemble, ils présentent plusieurs avantages, principalement en termes d'évolutivité et de flexibilité, pour déployer des fonctions de réseau virtuel (VNF)
Kathará permet d’émuler des réseaux d’ordinateurs de type Linux en utilisant Docker. Chaque équipement ré-seau (serveur, client, routeur, switch) est un conteneur Docker. La souplesse de Docker permet d’avoir des conteneurs basés sur des images personnalisée permettant la mise en œuvre de :
Dans le cours ne sera pas abordé que ces fonctionnalités de l’utilisation de Kathara permettant de maquetter des infrastructures réseaux offrant des services de base.
Lien vers le site officiel de Kathara de l’Université de Rome : http://www.kathara.org/
Avec Kathara, chaque équipement réseau qui sera créé dans un conteneur Docker possède :
Voici un exemple d’équipement réseau qui correspond à un client :
En utilisant Docker, Kathara permet :
Netkit fournit deux groupes de commandes :
Si vous souhaitez travailler avec une seule VM, utilisez les vcommandes. Sinon, pour travailler avec plusieurs VMs, il est préférable et bien plus pratique de créer un laboratoire (Lab) et d’utiliser alors les lcommandes.
Commande | Action |
---|---|
vstart | |
vlist | → donner la liste des VMs actives |
vconfig | → configurer à la volée une VM comme par exemple affecter une interface à la volée. |
vclean | → arrêter une VM et nettoyer les processus, configurations et fichiers temporaires créés |
Pour s’assurer du bon fonctionnement de Kathara, vous pouvez créer depuis un terminal une première machine virtuelle avec le nom sta1. Création d’une VM avec vstart
btssio@ubuntudocker:~$ vstart --eth=0:HubDCA sta1
Explications :
Voici votre première VM Netkit avec la session root automatiquement ouverte :
Pour cette VM sta1, aucune adresse IP n’a été définie. C’est le bridge Docker créé par Kathara qui a fourni la configuration IP 172.20.0.2/16 dans le réseau 172.20.0.0/16. La passerelle est 172.20.0.1/16 et la VM accède à Internet
Pour visualiser le bridge créé par Kathara, tapez la commande suivante dans le terminal de votre serveur Debian/Ubuntu :
btssio@ubuntudocker:~$ ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 08:00:27:af:88:bf brd ff:ff:ff:ff:ff:ff inet 192.168.1.199/24 brd 192.168.1.255 scope global dynamic enp0s3 valid_lft 82586sec preferred_lft 82586sec inet6 fe80::a00:27ff:feaf:88bf/64 scope link valid_lft forever preferred_lft forever 3: br-8edf20a49895: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc no-queue state DOWN group default link/ether 02:42:64:3d:be:51 brd ff:ff:ff:ff:ff:ff inet 172.20.0.1/16 brd 172.20.255.255 scope global br-8edf20a49895 valid_lft forever preferred_lft forever 4: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default link/ether 02:42:1d:98:0e:31 brd ff:ff:ff:ff:ff:ff inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0 valid_lft forever preferred_lft forever btssio@ubuntudocker:~$
INFORMATION
Le sous-réseau 172.0.0.0/8 est réservé pour l’utilisation de Kathara. Il ne faut donc pas l’utiliser pour défi-nir des plans d’adressage de vos sous-réseaux. Lors de la création de VMs autonomes ou dans des labs comme vous le verrez ensuite, Kathara va créer autant de bridges que vous définissez de domaine de colli-sion en leur associant un sous-réseau différent basé sur ce sous-réseau 172.0.0.0/8. Le premier de ces sous-réseaux est 172.19.0.0/16, le dernier est 172.255.0.0/16.
Visualisation de la VM créée avec vlist
btssio@ubuntudocker:~$ vlist CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS 8ceba73bfb3f netkit_1000_sta1 0.00% 2.16MiB/1.419GiB 0.15% 6.58kB/0B 12.2MB/0B 2 NETWORK ID NAME DRIVER SCOPE f332c80a9dbd bridge bridge local c28efeb7848e host host local 2877cae4fa72 netkit_1000_H bridge local 708458e85954 none null local btssio@ubuntudocker:~$
Vous pouvez visualiser :
Le commande Docker montre le conteneur 8ceba73bfb3f qui correspond à sta1 et l’image kathara/netkit_base qui a été utilisée.
btssio@ubuntudocker:~$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8ceba73bfb3f kathara/netkit_base "/bin/bash" 3 m… Up 3 m… netkit_1000_sta1 …
Cette autre commande permet également de visualiser le container Docker créé et vous pouvez le visualiser avec la commande suivante :
btssio@ubuntudocker:~$ docker container ls CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8ceba73bfb3f kathara/netkit_base "/bin/bash" 4 m… Up 4 m… netkit_1000_sta1 btssio@ubuntudocker:~$
Pour arrêter la VM avec une commande Kathara ; le container est alors supprimé :
INFORMATION
La commande vconfig semble actuellement ne pas fonctionner convenablement
Arrêter une VM avec vclean Le container est alors supprimé :
btssio@ubuntudocker:~$ vclean sta1 Any network still in use by another machine will not be deleted (and will raise an error instead) Containers will be deleted netkit_1000_sta1 netkit_1000_H btssio@ubuntudocker:~$ docker container ls CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES btssio@ubuntudocker:~$
Quand vous avez à créer et gérer une seule VM, vous utilisez les v-commandes. Pour des infrastructures utilisant plusieurs VMs, il est préférable de créer un laboratoire ou lab et de manipuler ce lab avec les l-commandes. Ces labs permettent de concevoir mais aussi de conserver une architecture réseau complexe ou que l'on souhaite pouvoir réutiliser et cela d’autant plus facilement qu’un lab se traduit par une arborescence de dossiers contenant des fichiers de configuration. Un lab occupe très peu de place et est facile à sauvegarder et à échanger. Vous trouverez sur Internet des ressources et des exemples de labs.
Voici des liens vers les labs proposés par l’équipe de Kathara :
Sur ce site, vous trouverez de la documentation ainsi que des exemples de simulations qui peuvent être très complexes.
Un Lab minimaliste consiste en une arborescence comprenant :
Les l-commandes
Les l-commandes sont utilisables dans le répertoire du lab qui doit contenir au minimum le fichier lab.conf, ex-ception faire de la commande lwipe.
Commande | Action |
---|---|
lstart | → pour lancer un lab. |
lclean | → arrêter les VMs et nettoyer les processus, configurations et fi-chiers temporaires créés |
linfo | → information sur le laboratoire. |
ltest | → vérification du bon fonctionnement du laboratoire. |
lwipe | → arrêter les VMs des labs de Kathara et arrêter une VM et nettoyer les processus, configurations et fichiers temporaires créés. |
Dans l'activité sur les infrastructures réseaux avec Kathara sera abordé la création des labs :
Lorsque Kathara crée une VM, avec une v-commande ou une l-commande, c’est un conteneur qui est créé par Docker à partir de l’image kathara/netkit_base.
L’équipe de développement de Kathara a intégré à cette image un certain nombre de paquets logiciels de telle sorte que les VMs créées puissent les utiliser. Cependant, si dans la réalisation de votre maquette vous avez besoin d’un paquet logiciel qui n’est pas présent dans les VMs, vous pouvez l’ajouter à l’image kathara/netkit_base afin que toutes les VMs qui seront ensuite créées puissent l’utiliser.
La démarche qu’il faut suivre est la suivante :
btssio@ubuntudocker:~$ docker run -itd --name kathara_btssio kathara/netkit_base
INFORMATION
Le conteneur est créé en lui associant un nom à votre convenance, ce qui sera plus facile pour l’identifier.
btssio@ubuntudocker:~$ docker exec -it kathara_btssio bash root@93e38cf2c65:/#
root@93e38cf2c65:/#apt-get update && apt-get upgrade
root@93e38cf2c65:/#apt-get install scapy
root@93e38cf2c65:/#apt-get clean && exit
btssio@ubuntudocker:~$ docker commit kathara_btssio kathara/netkit_base
btssio@ubuntudocker:~$ docker commit kathara_btssio kathara/netkit_btssio
Il est nécessaire de modifier la directive IMAGE_NAME de Kathara en modifiant à ligne 15 du fichier /opt/Kathara/bin/python/netkit_commons.py :
btssio@ubuntudocker:~$ nano /opt/Kathara/bin/python/netkit_commons.py
Il suffit d’indiquer dans le fichier lab.conf un paramètre supplémentaire précisant l’image à utiliser :
Routeur[image]=netkit_btssio
Vous disposez maintenant de deux images pour les VMs de Kathara :