¿Te resulta más fácil leer con fondo crema, un tono de color, más contraste o un texto más grande? Elige tus colores y tu texto una sola vez, para todas las páginas.

Lección gratuita

Escribir flujos con ovs-ofctl

Después de esta lección: Puedo escribir los flujos que dejan hablar a dos equipos y bloquean a un tercero.

Lección de 55 min14 comandosLaboratorio de redes definidas por software: Open vSwitch, Mininet y un controlador OpenFlow en una VM

Cómo escribir un flujo en un switch OpenFlow

Escribir un flujo con ovs-ofctl add-flow es darle a un switch OpenFlow una regla nueva: qué paquetes y qué hacer con ellos. Con pocas reglas puedes dejar que dos equipos hablen y bloquear a un tercero.

En el aula de prácticas hay un servidor, el ordenador de un alumno y otro equipo sin autorizar. El servidor y el alumno deben entenderse. El tercero no debe llegar a nada.

Al final de esta lección

Nota

Puedo escribir los flujos que dejan hablar a dos equipos y bloquean a un tercero.

Palabras clave

PalabraQué significaEjemplo
add-flowla orden de ovs-ofctl que añade un flujo a un switch
Políticalo que se permite y lo que se prohíbe en la red
Sentidouna dirección del tráfico: la ida o la vuelta
ARPel mensaje que pregunta qué MAC tiene una dirección IP
Floodenviar el paquete por todos los demás puertosactions=flood
Dropdescartar el paquete sin responderactions=drop

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Cada regla de la política es una línea

La política del aula cabe en tres reglas. El alumno puede hablar con el servidor, y el servidor con el alumno. El tercer equipo no puede hablar con nadie.

Cada regla es una línea de flujo con la forma de ovs-ofctl: la prioridad, el match y la acción, unidos por comas, sin espacios. Los puertos son 1 el servidor, 2 el alumno y 3 el equipo sin autorizar.

Ejemplo: de la regla a la línea

ReglaLínea de flujo
El alumno habla con el servidorpriority=40,ip,nw_src=172.16.0.20,nw_dst=172.16.0.10,actions=output:1
El tercero no entra por su puertopriority=100,in_port=3,actions=drop

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Crea sw1 con tres puertos

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

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Vacía la tabla de flujos

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

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Un flujo mal escrito se rechaza

Comando
sudo ovs-ofctl -O OpenFlow13 add-flow sw1 priority=5,actions=nowhere

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Deja pasar del alumno al servidor

Comando
sudo ovs-ofctl -O OpenFlow13 add-flow sw1 priority=40,ip,nw_src=172.16.0.20,nw_dst=172.16.0.10,actions=output:1

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Bloquea lo que entra por el puerto 3

Comando
sudo ovs-ofctl -O OpenFlow13 add-flow sw1 priority=100,in_port=3,actions=drop

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Prueba un paquete del alumno al servidor

Comando
sudo ovs-appctl ofproto/trace sw1 in_port=2,ip,nw_src=172.16.0.20,nw_dst=172.16.0.10 | grep -A1 '^ 0\.'

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Prueba un paquete del equipo sin autorizar

Comando
sudo ovs-appctl ofproto/trace sw1 in_port=3,ip,nw_src=172.16.0.30,nw_dst=172.16.0.10 | grep -A1 '^ 0\.'

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Cada sentido del tráfico necesita su propio flujo

Un flujo vale para un sentido. El flujo del alumno al servidor no deja pasar la respuesta del servidor al alumno. Para una conversación hacen falta dos.

Prueba primero la respuesta sin su flujo. Después añádelo y repite la prueba.

Prueba la respuesta del servidor

Comando
sudo ovs-appctl ofproto/trace sw1 in_port=1,ip,nw_src=172.16.0.10,nw_dst=172.16.0.20 | grep -A1 '^ 0\.'

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Deja pasar del servidor al alumno

Comando
sudo ovs-ofctl -O OpenFlow13 add-flow sw1 priority=40,ip,nw_src=172.16.0.10,nw_dst=172.16.0.20,actions=output:2

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Repite la prueba de la respuesta

Comando
sudo ovs-appctl ofproto/trace sw1 in_port=1,ip,nw_src=172.16.0.10,nw_dst=172.16.0.20 | grep -A1 '^ 0\.'

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Un ping empieza con una pregunta ARP

Antes del primer paquete IP, el alumno necesita la MAC del servidor. La pide con ARP, un mensaje que no es IP.

Si ningún flujo deja pasar ARP, el switch lo descarta y el tráfico IP nunca llega a salir. Hace falta una regla de ARP que inunde el mensaje, con la acción flood.

Prueba una pregunta ARP del alumno

Comando
sudo ovs-appctl ofproto/trace sw1 in_port=2,arp | grep -A1 '^ 0\.'

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Deja pasar ARP

Comando
sudo ovs-ofctl -O OpenFlow13 add-flow sw1 priority=50,arp,actions=flood

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Repite la prueba de ARP

Comando
sudo ovs-appctl ofproto/trace sw1 in_port=2,arp | grep -A1 '^ 0\.'

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

ARP desde el equipo sin autorizar

Comando
sudo ovs-appctl ofproto/trace sw1 in_port=3,arp | grep -A1 '^ 0\.'

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Un error frecuente

Advertencia

Mucha gente cree que basta con dejar pasar el tráfico IP para que un ping funcione. No basta: antes del ping va ARP, y el switch lo descarta si ningún flujo lo permite. Incluye siempre una regla para ARP.

Sobre este laboratorio y su código: Laboratorio de redes definidas por software: Open vSwitch, Mininet y un controlador OpenFlow en una VM

¿Enseñas a una clase? Asigna este módulo a tus alumnos con guía del profesor, tareas con corrección automática y un laboratorio para cada alumno.