Lab für Software-defined Networking: Open vSwitch, Mininet und ein OpenFlow-Controller in einer VM
Dieses Lab gibt jeder lernenden Person einen Switch, den sie programmieren kann. Open vSwitch, ein echter Software-Switch, und drei kleine Hosts werden in der einen Ubuntu-VM der lernenden Person aufgebaut, zusammen mit Mininet und einer Bibliothek zum Schreiben eines OpenFlow-Controllers. Am Anfang ist die Flow-Tabelle des Switches leer, er leitet also nichts weiter. Die Lernenden schreiben die Flows von Hand und vollenden dann einen Controller, der den Switch lernen lässt.
Auf dem Rechner der Lernenden wird nichts installiert, und es ist keine Netzwerkhardware nötig. Die Hosts sind Netzwerk-Namespaces, der Switch ist Open vSwitch mit dem Kernel-Datapath, und die Befehle sind die echten: ovs-ofctl, ovs-vsctl und mn.
Was die Lernenden lernen
Was Software-defined Networking ändert: Die Regeln für die Weiterleitung sind Daten in einer Flow-Tabelle, geschrieben von einem Menschen oder einem Programm. In drei Teilen. Zuerst Mininet, ein Werkzeug, das ein ganzes Testnetz aufbaut, mit dem Test pingall. Dann eine von Hand mit ovs-ofctl geschriebene Flow-Tabelle in OpenFlow 1.3: je Flow eine Bedingung und eine Aktion, ARP ebenso wie IP, und ein Flow, der einen Host absichtlich verwirft. Zuletzt ein Controller, eine Anwendung auf der Bibliothek os-ken, die so vervollständigt wird, dass sie lernt, an welchem Port jede MAC-Adresse hängt, und dafür einen Flow einträgt, den die Lernenden mit ovs-ofctl dump-flows zurücklesen.
Die Topologie
Der Switch br0 hat drei Ports. Die Hosts h1, h2 und h3 haben die Adressen 10.0.0.1, 10.0.0.2 und 10.0.0.3 und MAC-Adressen, die auf 01, 02 und 03 enden, sodass sich ein Flow aus der README schreiben lässt. Der Switch steht auf fail-mode secure: Ohne Flow verwirft er jedes Paket, was ein gewöhnlicher Switch nie tut. Die Arbeit der Lernenden steht in zwei Dateien, einer für die Flow-Tabelle und einer für den Controller, die bei jedem Start des Labs geladen werden.
Im Browser ausführen
VM-Labs werden als Lab-Aufgabe in einem Modul gestellt, und das Beispiel liegt auf der Seite des Labs. Die Maschine ist klein: eine CPU, 1 GB Arbeitsspeicher und 10 GB Festplatte. Switch, Datenbank und Controller zusammen brauchen etwa ein Zehntel dieses Speichers.
- Lab hinzufügen. Fügen Sie in einem Modul, das Sie unterrichten, eine Aufgabe hinzu und wählen Sie die Karte für das Ubuntu-VM-Lab. Die Seite zeigt statt einer Compose-Datei eine kurze Beschreibung der Maschine.
- Mit dem Beispiel beginnen. Die Seite bietet fertige Labs zum Einstieg an. Wählen Sie Software-defined networking. Ein Beispiel ersetzt den Text, und Rückgängig holt Ihren zurück.
- Veröffentlichen und eigene Kopie starten. Veröffentlichen Sie und klicken Sie dann auf Starten. Beim ersten Start der VM installiert das Setup-Skript Open vSwitch, Mininet und die Controller-Bibliothek os-ken aus dem Ubuntu-Archiv und schreibt den Befehl sdnlab, die beiden Dateien zum Bearbeiten und die README, in wenigen Minuten.
- Terminal öffnen. Öffnen Sie das Terminal und lesen Sie README.md im Home-Ordner: Sie sagt in drei Teilen, was zu tun ist, und verrät keine Lösung.
Eine Basics-Lektion zu diesem Lab
SDN Basics ist eine kleine Lektion, die in diesem Lab, einer Ubuntu-VM, durchgeführt wird. Sie hat einen Einstieg, ein Ziel mit „Ich kann“, Schlüsselwörter, eine Startfrage, eine Prüfung nach jeder Idee, einen häufigen Fehler und eine abschließende Prüfung, und jeder Schritt hat eine Schaltfläche Ausführen, die den Befehl ins Terminal der Maschine tippt. Die Lernenden lesen die leere Flow-Tabelle, sehen einen Ping scheitern, weil nichts passt, führen das pingall von Mininet aus und starten den Controller des Labs so, wie er geliefert wird, um den einen Flow zu sehen, den er hinterlässt.
Die Lektion schaut sich nur um und überlässt die eigentliche Aufgabe des Labs, die Flows und den Learning Switch, den Lernenden, sie verrät also keine Lösung.
Wie bewertet wird
Das Lab hat eine Prüfung. Sie läuft auf einer Kopie der gespeicherten Maschine nach einem frischen Start und lädt die beiden Dateien der Lernenden selbst: Ein von Hand getippter und nie gespeicherter Flow zählt nicht. Allein mit der Flow-Datei und ohne Controller müssen h1 und h2 einander erreichen, h3 darf niemanden erreichen und niemand h3, und ein Flow, der auf h3 passt, muss es verwerfen und von Paketen von h3 getroffen worden sein. Die Aktion NORMAL besteht nicht. Danach startet die Prüfung den Controller der Lernenden, gibt h2 eine MAC-Adresse, die noch niemand gesehen hat, sodass eine vorab geschriebene Tabelle nichts nützt, und pingt zwischen allen Paaren. Der Controller muss jede Adresse gelernt und einen Flow mit dem richtigen Ausgangsport eingetragen haben, ohne einen flutenden Flow. Die erste Zeile der Ausgabe sagt, warum.
- Zuweisen. Weisen Sie das Lab wie jede Aufgabe zu, auf Wunsch mit Abgabetermin. Jede lernende Person bekommt eine eigene VM, die zwischen den Sitzungen erhalten bleibt.
- Prüfung ausführen. Klicken Sie in der Klassenliste in der Zeile einer lernenden Person auf Prüfung ausführen. Sie startet eine Kopie der gespeicherten Maschine, die nicht zurückgespeichert wird, führt das Prüfskript des Labs als root aus und zeigt, ob es bestanden wurde, was es ausgegeben hat und wann. Die lernende Person erfährt das Ergebnis nicht.
- Bewerten. Lesen Sie die erste Zeile der Ausgabe: Sie nennt, was nicht stimmt, etwa einen Host, der mit den Flows aus der Datei einen anderen nicht erreicht, oder einen fehlenden gelernten Flow. Geben Sie die Arbeit mit einer Begründung zurück, wenn mehr nötig ist.
Die Definition auf GitHub
Die Datei ist die ganze Lab-Definition, derselbe Text, den die Plattform ausführt: Größe, Setup-Skript, das Werkzeug sdnlab, der Controller-Starter, README und Prüfung. Kopieren Sie sie und ändern Sie Flows, Hosts oder die Controller-Aufgabe, um ein längeres Lab zu bauen.
Dieses Lab ausprobieren, und was es kostet
Mit einem kostenlosen persönlichen Konto können Sie die Grundlagenlektionen in diesem Lab durcharbeiten, mit genug kostenlosem Guthaben pro Monat für die meisten Lektionen und ohne Karte. Für eine Klasse sind die ersten 365 Tage für eine Schule kostenlos, für bis zu 50 Lernende; danach zahlt sie je lernender Person und Jahr, alle Labs inklusive und Lehrkräfte kostenlos.
Häufige Fragen
- Braucht das Lab einen OpenFlow-Switch oder eine Lizenz?
- Nein. Der Switch ist Open vSwitch, quelloffen und im Ubuntu-Archiv, und Mininet und die Controller-Bibliothek stammen aus demselben Archiv. Sie werden beim Start der VM der lernenden Person installiert, und wir verteilen nichts davon.
- Warum bringt das Lab einen eigenen Controller-Starter mit?
- Das Ubuntu-Paket os-ken ist nur eine Bibliothek, ohne Befehl zum Ausführen einer Anwendung. Das Lab fügt einen kurzen Starter hinzu, ctl.py, der in der Definition lesbar ist. os-ken hängt von eventlet ab, das veraltet ist und einen Hinweis im Log des Controllers ausgibt. Deshalb lehrt das Lab zuerst ovs-ofctl und Mininet: Diese Teile hängen nicht davon ab.
- Können die Lernenden etwas kaputt machen?
- Nur ihre eigene Kopie. Das Netz zwischen den Hosts ist virtuell und liegt in der VM, die das Ubuntu-Archiv, PyPI, npm und GitHub erreicht und sonst nichts. Wenn jemand das Lab kaputt macht, stellt sdnlab reset beide Dateien wieder her.
- Wurde das Lab in einer echten VM der Lernenden getestet?
- Das Setup, die Befehle der Lektion und die Prüfung liefen in einem echten Ubuntu 26.04 mit dem Open-vSwitch-Datapath des Kernels, in einem Container als Ersatz für die VM. Eine gestartete VM, die das Lab aus einer systemd-Unit startet und das Kernelmodul von Ubuntu lädt, sollten Sie vor einer Unterrichtsstunde einmal ausprobieren.