Laboratorio de redes definidas por software: Open vSwitch, Mininet y un controlador OpenFlow en una VM

Este laboratorio da a cada alumno un conmutador que puede programar. Open vSwitch, un conmutador de software real, y tres equipos pequeños se montan dentro de la única VM Ubuntu del alumno, junto con Mininet y una biblioteca para escribir un controlador OpenFlow. Al empezar, la tabla de flujos del conmutador está vacía, así que no reenvía nada. El alumno escribe los flujos a mano y después termina un controlador que hace que el conmutador aprenda.

No se instala nada en el ordenador del alumno ni hace falta equipo de red. Los equipos son espacios de nombres de red, el conmutador es Open vSwitch con el datapath del kernel, y los comandos son los reales: ovs-ofctl, ovs-vsctl y mn.

Qué aprenden los alumnos

Qué cambia el SDN: las reglas de reenvío son datos en una tabla de flujos, escrita por una persona o por un programa. En tres partes. Primero Mininet, una herramienta que construye una red de prueba completa, con su prueba pingall. Después una tabla de flujos escrita a mano con ovs-ofctl, en OpenFlow 1.3: una condición y una acción por flujo, ARP además de IP, y un flujo que descarta a propósito un equipo. Por último un controlador, una aplicación sobre la biblioteca os-ken, que se termina para que aprenda en qué puerto está cada dirección MAC e instale un flujo, que los alumnos releen con ovs-ofctl dump-flows.

La topología

El conmutador br0 tiene tres puertos. Los equipos h1, h2 y h3 tienen las direcciones 10.0.0.1, 10.0.0.2 y 10.0.0.3 y direcciones MAC que acaban en 01, 02 y 03, así que un flujo se puede escribir a partir del README. El conmutador está en fail-mode secure: sin flujos descarta todos los paquetes, algo que un conmutador normal nunca hace. El trabajo del alumno va en dos archivos, uno para la tabla de flujos y otro para el controlador, que se cargan cada vez que arranca el laboratorio.

Ejecútalo en tu navegador

Los laboratorios de VM se ponen como tarea de laboratorio en un módulo, y el ejemplo está en la página del laboratorio. La máquina es pequeña: una CPU, 1 GB de memoria y 10 GB de disco. El conmutador, su base de datos y el controlador usan juntos más o menos una décima parte de esa memoria.

  1. Añade el laboratorio. En un módulo que impartes, añade una tarea y elige la tarjeta de laboratorio de VM Ubuntu. La página muestra una descripción corta de la máquina en lugar de un archivo compose.
  2. Empieza desde el ejemplo. La página ofrece laboratorios ya hechos para empezar. Elige Software-defined networking. Usar un ejemplo sustituye el texto, y Deshacer recupera el tuyo.
  3. Publica e inicia tu propia copia. Publica y pulsa Iniciar. El script setup del laboratorio instala Open vSwitch, Mininet y la biblioteca de controlador os-ken desde el archivo de Ubuntu, y escribe el comando sdnlab, los dos archivos que se editan y el README, la primera vez que arranca la VM, en unos minutos.
  4. Abre el terminal. Abre su terminal y lee README.md en la carpeta personal: dice qué hacer en tres partes y no da ninguna respuesta.

Una lección básica en este laboratorio

SDN Basics es una lección pequeña que se trabaja en este laboratorio, una VM Ubuntu. Tiene un gancho, un objetivo «Puedo», palabras clave, un inicio, una comprobación tras cada idea, un error común y una comprobación final, y cada paso tiene un botón Ejecutar que escribe su comando en el terminal de la máquina. El alumno lee la tabla de flujos vacía, ve fallar un ping porque nada coincide, ejecuta el pingall de Mininet y arranca el controlador del laboratorio tal como se entrega para ver el único flujo que deja.

La lección mira alrededor y deja al alumno la tarea propia del laboratorio, los flujos y el conmutador con aprendizaje, así que no entrega ninguna respuesta.

Cómo se califica

El laboratorio tiene una comprobación. Se ejecuta sobre una copia de la máquina guardada tras un arranque limpio y carga ella misma los dos archivos del alumno: un flujo escrito a mano y nunca guardado no cuenta. Solo con el archivo de flujos y sin controlador, h1 y h2 deben alcanzarse, h3 no debe alcanzar a nadie ni nadie a h3, y un flujo que coincida con h3 debe descartarlo y haber recibido paquetes de h3. La acción NORMAL no pasa. Después la comprobación arranca el controlador del alumno, da a h2 una dirección MAC que nadie ha visto, de modo que una tabla escrita de antemano no sirve, y hace ping entre cada pareja. El controlador debe haber aprendido cada dirección e instalado un flujo con el puerto de salida correcto, sin ningún flujo que inunde. La primera línea de lo que imprimió la comprobación dice por qué.

  1. Repártelo. Asigna el laboratorio como cualquier tarea, con fecha de entrega si quieres. Cada alumno recibe una VM propia, que se conserva entre sesiones.
  2. Ejecuta la comprobación. En la fila de un alumno en la lista de la clase, pulsa Ejecutar la comprobación. Inicia una copia de su máquina guardada que no se vuelve a guardar, ejecuta como root el script de comprobación del laboratorio y muestra si pasó, qué imprimió y cuándo. Al alumno no se le dice el resultado.
  3. Califícalo. Lee la primera línea de lo que imprimió la comprobación: dice qué no está bien, por ejemplo un equipo que no alcanza a otro con los flujos del archivo, o un flujo aprendido que falta. Devuelve el trabajo con un motivo si necesita más.

La definición en GitHub

El archivo es toda la definición del laboratorio, el mismo texto que ejecuta la plataforma: tamaño, script setup, la herramienta sdnlab, el lanzador del controlador, README y comprobación. Cópialo y cambia los flujos, los equipos o la tarea del controlador para hacer un laboratorio más largo.

Prueba este laboratorio, y lo que cuesta

Con una cuenta personal gratuita puedes seguir las lecciones básicas de este laboratorio, con crédito gratuito suficiente cada mes para seguir la mayoría de las lecciones y sin tarjeta. Para una clase, un centro tiene gratis sus primeros 365 días, hasta 50 alumnos, y después paga por alumno y año, con todos los laboratorios incluidos y el profesorado gratis.

Preguntas frecuentes

¿Necesita el laboratorio un conmutador OpenFlow o una licencia?
No. El conmutador es Open vSwitch, de código abierto y en el archivo de Ubuntu, y Mininet y la biblioteca de controlador salen del mismo archivo. Se instalan cuando arranca la VM del alumno, y nosotros no distribuimos nada de ellos.
¿Por qué el laboratorio trae su propio lanzador de controlador?
El paquete os-ken de Ubuntu es solo una biblioteca, sin comando para ejecutar una aplicación. El laboratorio añade un lanzador corto, ctl.py, que se puede leer en la definición. os-ken depende de eventlet, que está obsoleto y muestra un aviso en el registro del controlador. Por eso el laboratorio enseña primero ovs-ofctl y Mininet: esas partes no dependen de él.
¿Pueden los alumnos dañar algo?
Solo su propia copia. La red entre los equipos es virtual y está dentro de la VM, que alcanza el archivo de Ubuntu, PyPI, npm y GitHub y nada más. Si un alumno rompe el laboratorio, sdnlab reset devuelve los dos archivos a su estado inicial.
¿Se probó el laboratorio en una VM de alumno real?
El script setup, los comandos de la lección y la comprobación se ejecutaron en un Ubuntu 26.04 real con el datapath de Open vSwitch del kernel, en un contenedor que hace de VM. Una VM de alumno arrancada, que inicia el laboratorio desde una unidad systemd y carga el módulo del kernel de Ubuntu, merece una prueba antes de una clase.