Plus facile à lire avec un fond crème, une teinte, plus de contraste ou un texte plus grand ? Choisissez vos couleurs et votre texte, une fois pour toutes les pages.

Leçon gratuite

Écrire des règles de flux avec ovs-ofctl

Après cette leçon: Je peux écrire des règles qui laissent deux machines se parler et qui en bloquent une troisième.

Leçon de 60 min8 commandesLab de réseaux définis par logiciel : Open vSwitch, Mininet et un contrôleur OpenFlow dans une VM

Comment écrit-on une règle de flux ?

Écrire une règle de flux, c’est dire ce que l’on vise, son importance et ce que l’on en fait. La commande ovs-ofctl add-flow la pose dans un commutateur OpenFlow.

Avec quelques règles, on laisse deux machines se parler et on en bloque une troisième. Dans une bibliothèque universitaire, ce sont ces règles qui séparent les postes du personnel, le serveur et le Wi-Fi des visiteurs.

À la fin de cette leçon

Remarque

Je peux écrire des règles qui laissent deux machines se parler et qui en bloquent une troisième.

Mots-clés

MotCe que ça veut direExemple
ovs-ofctlla commande qui lit et écrit les règles d’un commutateur Open vSwitch
ARPla demande qui cherche l’adresse MAC d’une adresse IP
Inondationenvoyer un paquet sur tous les ports sauf celui d’entréeactions=flood
Abandonjeter le paquetactions=drop
Port d’entréele port par lequel le paquet arrivein_port=3
Politiquece que le réseau doit permettre et interdire

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Une politique se traduit en règles

Une politique est une phrase : « le poste du personnel et le serveur se parlent, et les invités ne parlent à personne ». Chaque morceau devient une règle.

Dans notre exemple, le poste du personnel est sur le port 1, le serveur sur le port 2 et un invité sur le port 3. Le blocage de l’invité est une règle sur in_port=3, avec l’action drop.

Sans ARP, aucun paquet IP ne part

Avant d’envoyer un paquet IP, une machine doit connaître l’adresse MAC de sa cible. Elle la demande par un message ARP envoyé à tout le monde.

Si le commutateur jette cette demande, la machine ne saura jamais où envoyer son paquet. Il faut donc une règle pour l’ARP, par exemple arp,actions=flood, qui renvoie la demande sur tous les autres ports.

Le blocage doit être plus prioritaire

Une règle de blocage ne sert à rien si une règle plus prioritaire laisse passer le même paquet. On donne donc au blocage la priorité la plus haute : ici 300, contre 200 pour l’ARP et 100 pour le reste.

L’ARP d’un invité est ainsi jeté lui aussi. Une règle drop a un autre avantage : elle compte les paquets qu’elle arrête.

Exemple travaillé : de la politique aux règles

Phrase de la politiqueRègle de fluxPriorité
Aucun paquet d’invité ne passein_port=3 actions=drop300
Les demandes ARP circulentarp actions=flood200
Tout ce qui va au serveur y vaip,nw_dst=192.168.5.20 actions=output:2100
Tout ce qui va au poste y vaip,nw_dst=192.168.5.10 actions=output:1100

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Poser les règles sur le commutateur d’essai

On reprend le commutateur demo de la leçon précédente. La première commande le recrée s’il a disparu, sans erreur s’il existe.

replace-flows remplace toute la table par les règles lues sur l’entrée : on repart donc d’une table propre. Ensuite, ofproto/trace dit quelle règle chaque paquet rencontrerait, sans en envoyer un seul.

Créer le commutateur demo

Commande
sudo ovs-vsctl --may-exist add-br demo -- set bridge demo datapath_type=system protocols=OpenFlow13 fail-mode=secure -- --may-exist add-port demo p1 -- set interface p1 type=internal ofport_request=1 -- --may-exist add-port demo p2 -- set interface p2 type=internal ofport_request=2 -- --may-exist add-port demo p3 -- set interface p3 type=internal ofport_request=3

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Poser la politique en quatre règles

Commande
printf 'priority=300,in_port=3,actions=drop\npriority=200,arp,actions=flood\npriority=100,ip,nw_dst=192.168.5.20,actions=output:2\npriority=100,ip,nw_dst=192.168.5.10,actions=output:1\n' | sudo ovs-ofctl -O OpenFlow13 replace-flows demo -

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Le poste du personnel écrit au serveur

Commande
sudo ovs-appctl ofproto/trace demo in_port=1,ip,nw_dst=192.168.5.20 | grep -A 2 "^ 0\."

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

L’invité écrit au serveur

Commande
sudo ovs-appctl ofproto/trace demo in_port=3,ip,nw_dst=192.168.5.20 | grep -A 2 "^ 0\."

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Le poste du personnel demande une adresse

Commande
sudo ovs-appctl ofproto/trace demo in_port=1,arp,arp_op=1 | grep -A 2 "^ 0\."

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

L’invité demande une adresse

Commande
sudo ovs-appctl ofproto/trace demo in_port=3,arp,arp_op=1 | grep -A 2 "^ 0\."

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Le poste du personnel écrit à l’invité

Commande
sudo ovs-appctl ofproto/trace demo in_port=1,ip,nw_dst=192.168.5.30 | grep -A 2 "^ 0\."

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Lire un message d’erreur

Commande
sudo ovs-ofctl -O OpenFlow13 add-flow demo "priority=300,in_port=4,actions=jeter"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Erreur fréquente

Attention

Beaucoup de gens pensent qu’une règle sur les adresses IP suffit pour que deux machines se joignent. Ce n’est pas assez : avant le paquet IP, il y a la demande ARP. Sans règle pour l’ARP, la machine ne connaît pas l’adresse MAC de sa cible, et rien ne part.

À propos de ce labo et de sa source: Lab de réseaux définis par logiciel : Open vSwitch, Mininet et un contrôleur OpenFlow dans une VM

Vous enseignez à une classe ? Proposez ce module à vos étudiants avec un guide de l'enseignant, des devoirs corrigés et un laboratoire pour chaque étudiant.