tp1 Mininet
tp1 Mininet
tp1 Mininet
1- Introduction et objectif :
Ce TP a pour but de vous présenter Mininet, une solution logicielle, qui vous permettra de
mettre en place des topologies réseau au plus proche des besoins de vos tests, simplement.
Mininet est également une solution de SDN, puisqu’il permet de manipuler des ressources
réseau grâce à une API (une librairie Python dans notre cas).
2- Configuration initiale
- Télécharger mininet-VM : Mininet-VM image (Ubuntu.20.04)
Installer VirtualBox
3- Notions de base
a- Pour une première utilisation de l’outil nous pouvons simplement lancer :
sudo mn
b- A ce stade, si vous obtenez le message suivant :
c- Eteindre le contrôleur SDN de test d’OpenVSwitch avant de continuer :
1
Ecole supérieure privée d’Ingénieurs de Monastir AU : 2021/2022
Starting controller
c0
*** Starting 1 switches
s1 ...
*** Starting CLI:
mininet>
Nous voyons ici que Mininet crée deux “hôtes virtuels” qui sont en réalité des network
namespaces. Mininet utilise cette fonctionnalité du noyau pour permettre à différents
processus de disposer d’interfaces réseau, et de tables de routage distinctes, sur la même
machine.
e- La cli de Mininet nous permet de lister les éléments provisionnés (ou nodes) :
f- Nous pouvons exécuter des commandes sur chaque noeud. Regardons les interfaces
réseau disponibles sur chaque host et interpréter les résultats ( mininet> h1et h2 ip
a)
g- Mininet facilite la communication entre les différents noeuds. Exemple, nous pouvons
pinger directement h2 depuis h1 de cette façon :
h- Il est donc très simple de tester une application web, par exemple. Il suffit pour cela
de lancer le serveur sur l’un des hosts et de lancer des requêtes depuis un autre host
qui jouera le rôle de client :
2
Ecole supérieure privée d’Ingénieurs de Monastir AU : 2021/2022
i- Mininet est également très utile pour tester des applications distribuées, puisqu’il
permet de déployer de nombreux noeuds, au sein d’une topologie que l’on aura
choisie. Voyons justement comment déployer une topologie plus complexe, depuis la
ligne de commande. Mininet dispose de topologies type, que l’on peut utiliser
simplement, exemple avec la topologie linear (n hosts, un switch par host, tous les
switchs sont connectés, le même sous-réseau est utilisé) :
j- Nous avons vu les bases de l’utilisation de Mininet. Voyons maintenant ce qui fait sa
plus-value. Nous pouvons induire de la latence, ou réduire la bande passante des
différents liens, ce qui peut être très pratique pour tester les performances de nos
applications dans un contexte réaliste :
3
Ecole supérieure privée d’Ingénieurs de Monastir AU : 2021/2022
k- Il est également possible de couper les liens entre nos machines, très pratique pour
tester la résilience d’une application distribuée par exemple :
a- Voici un exemple basique, dans lequel nous définissions un noeud routeur, qui aura
une interface dans deux sous-réseaux différents. Chaque réseau comprend un switch
et un host.
#!/usr/bin/python
def flush_nat(self):
self.cmd( 'sysctl -w net.ipv4.ip_forward=0' )
self.cmd( 'iptables -F' )
4
Ecole supérieure privée d’Ingénieurs de Monastir AU : 2021/2022
if __name__ == '__main__':
lg.setLogLevel('info')
net = Mininet(topo=NetworkTopo(), controller=OVSController)
net.start()
for h in net.hosts:
h.cmd("mkdir -p /run/sshd")
h.cmd("/usr/sbin/sshd -D &")
info("\nssh daemons starting")
CLI(net)
for host in net.hosts:
host.cmd( 'kill /usr/sbin/sshd' )
5
Ecole supérieure privée d’Ingénieurs de Monastir AU : 2021/2022
net.stop
c- Vérifions que host1 passe bien par le routeur pour joindre host2 :
d- Dans cet exemple, je m’assure également qu’un agent ssh écoute sur le port 22 pour
chaque host. Vérifions : (host1 ssh host2)
4- Conclusion
Mininet est très utilisé dans le cadre de développement SDN à base d’OpenFlow, puisqu’il
est possible de le piloter à partir d’un contrôleur externe. Dans la pratique, cet outil peut
6
Ecole supérieure privée d’Ingénieurs de Monastir AU : 2021/2022
être très utile dans le cadre d’applications plus classiques, puisqu’il permet de créer
automatiquement et par le code, des topologies personnalisées dans lesquelles on peut
induire des contraintes réseau diverses. Puisque toute l’infrastructure créée par Mininet
tourne sur une seule machine, il est simple de l’utiliser dans le cadre de tests applicatifs via
votre outil de CI préféré. C’est également un très bon outil pour mettre en place des
architectures de test ou de démonstration.