Lässt es sich mit cremefarbenem Papier, einer Tönung, mehr Kontrast oder größerer Schrift besser lesen? Wählen Sie Ihre Farben und Ihre Schrift, einmalig für alle Seiten.

Kostenlose Lektion

OpenFlow-Flows mit ovs-ofctl schreiben

Nach dieser Lektion: Ich kann Flows schreiben, die zwei Geräte verbinden und ein drittes sperren.

Lektion, 50 Min.9 BefehleLab für Software-defined Networking: Open vSwitch, Mininet und ein OpenFlow-Controller in einer VM

Eine Richtlinie wird zu Flow-Zeilen

Mit dem Befehl ovs-ofctl add-flow schreiben Sie einen Flow in die Tabelle eines Open-vSwitch-Switches. So legen Sie fest, welche Geräte miteinander sprechen dürfen und welche gesperrt werden.

Eine Richtlinie wie „Gäste erreichen nur den Router“ wird dabei zu wenigen Zeilen Text. Diese Lektion zeigt, wie.

Am Ende dieser Lektion

Notiz

Ich kann Flows schreiben, die zwei Geräte verbinden und ein drittes sperren.

Schlüsselwörter

BegriffWas er bedeutetBeispiel
add-flowder Befehl, der einen Flow in die Tabelle schreibt
del-flowsder Befehl, der Flows aus der Tabelle löscht
dropdie Aktion, die ein Paket verwirft
flooddie Aktion, die ein Paket an alle Ports außer dem Eingangsport schickt
ARPein Protokoll, das zu einer IP-Adresse die MAC-Adresse erfragtWer hat 10.0.1.4?
Richtlinieeine Regel in Worten, die man in Flows übersetzt

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

So ist ein Aufruf von add-flow aufgebaut

Der Aufruf hat vier Teile: den Befehl, die OpenFlow-Version, den Namen des Switches und den Flow. Im Flow steht zuerst das Match, dann hinter actions= die Aktion.

Eine Zeile wie priority=30,in_port=1,ip,nw_dst=10.0.1.2,actions=output:2 heißt: Pakete von Port 1 an diese Adresse gehen an Port 2. Das Wort ip vor nw_dst ist nötig, denn nur IP-Pakete haben eine Zieladresse.

Die wichtigsten Schreibweisen

SchreibweiseBedeutungBeispiel
in_port=NDas Paket kommt an Port N anin_port=3
arpNur ARP-Paketearp
ipNur IP-Paketeip
nw_dst=ADie IP-Zieladresse ist A (nach ip)nw_dst=10.0.1.4
arp_tpa=ADie ARP-Anfrage fragt nach der Adresse A (nach arp)arp_tpa=10.0.1.4
actions=output:NAn Port N hinausschickenactions=output:4
actions=drop, floodVerwerfen, an alle anderen Portsactions=flood

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Von der Richtlinie zum Flow

Richtlinie in WortenFlow
ARP darf überall hinpriority=10,arp,actions=flood
Der Gast an Port 3 wird gesperrtpriority=20,in_port=3,actions=drop
Ausnahme: Der Gast darf zum Routerpriority=30,in_port=3,ip,nw_dst=10.0.1.4,actions=output:4
Der Dozentenrechner darf zum Druckerpriority=30,in_port=1,ip,nw_dst=10.0.1.2,actions=output:2
Alles andere wird verworfenpriority=0,actions=drop

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Eine Ausnahme braucht eine höhere Priorität

Die Sperre für den Gast hat Priorität 20. Der Flow, der dem Gast den Router erlaubt, braucht eine höhere Zahl, hier 30. Sonst gewinnt die Sperre.

Auch ARP gehört dazu. Bevor der Gast ein IP-Paket schickt, fragt er per ARP nach der MAC-Adresse des Routers. Trifft diese Anfrage die Sperre, kommt nie ein IP-Paket an. Im Lab sehen Sie genau das.

Alte Flows von sw1 löschen

Befehl
sudo ovs-ofctl -O OpenFlow13 del-flows sw1

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Sieben Flows auf einmal schreiben

Befehl
printf 'priority=0,actions=drop\npriority=10,arp,actions=flood\npriority=20,in_port=3,actions=drop\npriority=30,in_port=1,ip,nw_dst=10.0.1.2,actions=output:2\npriority=30,in_port=2,ip,nw_dst=10.0.1.1,actions=output:1\npriority=30,in_port=3,ip,nw_dst=10.0.1.4,actions=output:4\npriority=30,in_port=4,ip,nw_dst=10.0.1.3,actions=output:3\n' | sudo ovs-ofctl -O OpenFlow13 add-flows sw1 -

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Die Flow-Tabelle lesen

Befehl
sudo ovs-ofctl -O OpenFlow13 --no-stats dump-flows sw1 | sort

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Die ARP-Anfrage des Gastes verfolgen

Befehl
sudo ovs-appctl ofproto/trace sw1 arp,in_port=3,arp_tpa=10.0.1.4 | grep -A1 "^ 0\."

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Eine Ausnahme für ARP an den Router

Befehl
sudo ovs-ofctl -O OpenFlow13 add-flow sw1 priority=25,in_port=3,arp,arp_tpa=10.0.1.4,actions=output:4

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Dieselbe ARP-Anfrage noch einmal verfolgen

Befehl
sudo ovs-appctl ofproto/trace sw1 arp,in_port=3,arp_tpa=10.0.1.4 | grep -A1 "^ 0\."

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Der Gast will zum Drucker

Befehl
sudo ovs-appctl ofproto/trace sw1 ip,in_port=3,nw_dst=10.0.1.2 | grep -A1 "^ 0\."

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Löschen mit Match löscht alles, was es abdeckt

Mit del-flows sw1 in_port=3 löschen Sie jeden Flow, der den Eingangsport 3 nennt. Das sind hier drei: die Sperre, die ARP-Ausnahme und die Erlaubnis für den Router.

Ein einzelner Flow lässt sich nur mit der Option --strict und genau seiner Priorität löschen. Ohne Match löscht del-flows die ganze Tabelle.

Alle Flows löschen, die Port 3 nennen

Befehl
sudo ovs-ofctl -O OpenFlow13 del-flows sw1 in_port=3

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Was von der Tabelle übrig ist

Befehl
sudo ovs-ofctl -O OpenFlow13 --no-stats dump-flows sw1 | sort

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Ein häufiger Fehler

Warnung

Wer nw_dst ohne das Wort ip davor schreibt, bekommt keinen Fehler. Open vSwitch meldet nur eine Infozeile normalization changed ofp_match und lässt die Bedingung weg. Aus Ihrem Flow wird ein Flow, der auf alles passt. Prüfen Sie jede Zeile nach dem Schreiben mit dump-flows.

Über dieses Lab und seinen Quellcode: Lab für Software-defined Networking: Open vSwitch, Mininet und ein OpenFlow-Controller in einer VM

Sie unterrichten eine Gruppe? Weisen Sie dieses Modul Ihren Studierenden zu, mit Handbuch für Lehrende, automatisch geprüften Aufgaben und einem Lab für jede Person.