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
| Begriff | Was er bedeutet | Beispiel |
|---|---|---|
| add-flow | der Befehl, der einen Flow in die Tabelle schreibt | |
| del-flows | der Befehl, der Flows aus der Tabelle löscht | |
| drop | die Aktion, die ein Paket verwirft | |
| flood | die Aktion, die ein Paket an alle Ports außer dem Eingangsport schickt | |
| ARP | ein Protokoll, das zu einer IP-Adresse die MAC-Adresse erfragt | Wer hat 10.0.1.4? |
| Richtlinie | eine 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
| Schreibweise | Bedeutung | Beispiel |
|---|---|---|
| in_port=N | Das Paket kommt an Port N an | in_port=3 |
| arp | Nur ARP-Pakete | arp |
| ip | Nur IP-Pakete | ip |
| nw_dst=A | Die IP-Zieladresse ist A (nach ip) | nw_dst=10.0.1.4 |
| arp_tpa=A | Die ARP-Anfrage fragt nach der Adresse A (nach arp) | arp_tpa=10.0.1.4 |
| actions=output:N | An Port N hinausschicken | actions=output:4 |
| actions=drop, flood | Verwerfen, an alle anderen Ports | actions=flood |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Von der Richtlinie zum Flow
| Richtlinie in Worten | Flow |
|---|---|
| ARP darf überall hin | priority=10,arp,actions=flood |
| Der Gast an Port 3 wird gesperrt | priority=20,in_port=3,actions=drop |
| Ausnahme: Der Gast darf zum Router | priority=30,in_port=3,ip,nw_dst=10.0.1.4,actions=output:4 |
| Der Dozentenrechner darf zum Drucker | priority=30,in_port=1,ip,nw_dst=10.0.1.2,actions=output:2 |
| Alles andere wird verworfen | priority=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
sudo ovs-ofctl -O OpenFlow13 del-flows sw1Hier 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
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
sudo ovs-ofctl -O OpenFlow13 --no-stats dump-flows sw1 | sortHier 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
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
sudo ovs-ofctl -O OpenFlow13 add-flow sw1 priority=25,in_port=3,arp,arp_tpa=10.0.1.4,actions=output:4Hier 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
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
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
sudo ovs-ofctl -O OpenFlow13 del-flows sw1 in_port=3Hier 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
sudo ovs-ofctl -O OpenFlow13 --no-stats dump-flows sw1 | sortHier 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.