Professional Documents
Culture Documents
Libro de Simulación-Redes Definida Por Software Con Mininet
Libro de Simulación-Redes Definida Por Software Con Mininet
INDICE
2.6 Miniedit
2.6.1 Activación del MiniEdit
2.6.2 Simulación con MiniEdit
2.6.3 Wireshark con MiniEdit
2.6.4 Almacenamiento de la red simulada
2.7 Clonación de Máquina Virtual
Bibliografía
CAPÍTULO 1
REDES DEFINIDAS
POR SOFTWARE:
Marco teórico
Capítulo 1 REDES DEFINIDAS POR SOFTWARE: Marco teórico
1.1 INTRODUCCIÓN
Entre las características de la actual Internet está que sus dispositivos de
interconexión, routers y conmutadores, tienen ambos planos de control y datos en
el mismo equipo, generando un control descentralizado, donde los datos son
enrutados principalmente considerando el contenido de su tabla de enrutamiento,
basado en el prefijo de red del destino, sin considerar aspectos de congestión; esto
hace que sea poco flexible cuando se desea modificar parámetro en el más breve
tiempo. Por otro lado, en Bagaa et al (2020) se indica que con la llegada de 5G se
van a generar nuevos servicios con requisitos estrictos; donde la red 5G consta de
tres partes: red de acceso de radio (Radio Access Network, RAN), red central y red
de transporte. Es esta última red la que conecta la RAN (nuevas tecnologías de
radio, MIMO, etc.) con la red central (basada en software y haciendo uso de la nube),
facilitando nuevos servicios y aplicaciones con valor agregado ubicados en
diferentes servidores. Es aquí donde la red central debe ofrecer servicios
optimizando las rutas entre extremos (End-to-End, E2E), reflejando menores
retardos y uso adecuado de cada enlace. Una manera de ofrecer QoS en esta red
es sobre provisionando sus recursos considerando las demandas máximas;
relacionando estrictamente los recursos en los enlaces y nodos de la red de
transporte subyacente. Esta solución de asignación excesiva de recursos se vuelve
ineficiente cuando surgen nuevas aplicaciones y servicios exigiendo grandes
demandas. Esto genera que la red móvil no pueda adquirir o modificar los recursos
del medio de transporte asignado, debido a que la ruta definida no considera la
movilidad del usuario. Una alternativa es la identificación de rutas con baja
congestión para mejorar la QoS de la red de transporte.
Para obtener una red flexible, un nuevo modelo de red está casi madura, consiste
en la separación de los planos de control y datos, originando un control centralizado.
El control se ubica en servidor o servidores externos denominado controlador
logrando que SDN sea flexible debido principalmente que el controlador o
controladores tienen una visión completa de su red. Facilitando la implementación
de diferentes tipos de políticas de enrutamiento, seguridad, monitoreo del tráfico de
información en tiempo real y gestión de SDN con solo programar al controlador. En
este nuevo modelo es necesario un protocolo que permita al controlador y a los
conmutadores intercambiar mensaje y datos; este protocolo es el OpenFlow.
1.2 ARQUITECTURA DE LA RED DEFINIDA POR SOFTWARE
La consolidación de una red con control centralizado se inicia en el 2007, en la
Universidad de Stanford. En el artículo de Casado, M. et al (2007) se propone una
nueva red denominada Ethane basado en dos principios: El primero, control
Capítulo 1 REDES DEFINIDAS POR SOFTWARE: Marco teórico
centralizado que gestiona la entrada y el envío de los flujos que ingresan en los
conmutadores. Es decir, el controlador central contiene las políticas de red global
para determinar el destino de los flujos, previa admisión de ellos. Para ello el
controlador conoce la topología de red global y realiza el cálculo de ruta para los
flujos permitidos. El segundo, los conmutadores son simples sin inteligencia basada
en una tabla de flujo y con un canal seguro de comunicación con el controlador
centralizado. Cuando un flujo llega al conmutador y no existe información en la tabla
de flujos para su conmutación, el conmutador envía el flujo al controlador para su
análisis y toma de decisión; para posteriormente informar a los conmutadores de las
acciones a tomar. En el artículo de Casado, M. et al (2019) se analiza la evolución
de Ethane a SDN, siendo SDN una red adecuada para la innovación; para ello se
debe cumplir con definir interfaces abiertas e impulsando nuevos algoritmos
implementados en el controlador de SDN.
En el documento ONF (2016) se actualiza SDN y se considera como entidad central
al controlador SDN, modelando a esta entidad como una relación cliente-servidor.
El controlador SDN como servidor puede ofrecer servicios a cualquier número de
clientes, mientras un cliente puede solicitar servicios. En SDN se plantea tres
principios y la definición de interfaces abiertas para SDN. El primer principio, el
desacoplo de reenvío y procesamiento del tráfico de control, permite implementar de
manera independiente los procesos de reenvío, gestión del tráfico de información y
los procesos de control. Este desacoplo es una condición para implementar el control
centralizado y facilitar la optimización separada de la tecnología de la plataforma y
el desarrollo del software de control. Este principio genera una entidad llamada
controlador SDN que tiene la responsabilidad de control y gestión de los recursos
ubicados en el plano de datos. El administrador de la red tiene acceso al control de
la gestión de un conjunto real y/o virtual de recursos y servicios creados y expuestos
por el controlador SDN, sin que el administrador tenga la necesidad de conocer la
tecnología utilizada en su implementación. El segundo principio, control lógicamente
centralizado, faculta la implementación del control de manera distribuida, pero
comportándose como una sola entidad; es decir, dentro de la arquitectura SDN los
controladores SDN pueden asociarse con otros controladores SDN. Este principio
de control centralizado permite, a través del controlador SDN, tener una perspectiva
global de la red y que trae como consecuencia que los recursos se pueden usar de
manera más eficiente. Un controlador SDN puede orquestar recursos que abarcan
un conjunto de entidades subordinadas, y de ese modo ofrecer mejores
abstracciones a sus clientes. El tercer principio, la programabilidad de los servicios
de red, se basa sobre la premisa que las aplicaciones están habilitadas para
especificar requisitos y solicitar cambios en sus servicios de red. Es decir, permite
que un cliente intercambie información con un controlador SDN antes del
Capítulo 1 REDES DEFINIDAS POR SOFTWARE: Marco teórico
1
https://www.sdxcentral.com/sdn/definitions/north-bound-interfaces-api/
Capítulo 1 REDES DEFINIDAS POR SOFTWARE: Marco teórico
802.1q; en general los datos que forman un flujo deben corresponder con los valores
de campos definidos en los protocolos de capa 2, 3 y 4. Por ejemplo: una dirección
MAC de origen en particular, una dirección IP específico, el mismo valor de campo
protocolo de IP y un determinado valor del puerto de origen de la capa de transporte.
Los conmutadores en SDN, manejan flujos y son los responsables del re-envío de
flujos desde un puerto de este dispositivo a otro puerto. En el artículo de McKeown,
N. et al (2008) se fundamenta el modelo de un Conmutador constituido por tres
elementos. Una tabla de flujo, donde se define una acción a realizar por cada flujo
de entrada y ordena al Conmutador como procesar al flujo; por ejemplo, un flujo que
ingresa por un puerto del Conmutador y cumple ciertas condiciones son reenviados
a uno de los puertos de salida de este conmutador, en caso contrario son eliminados
o enviados a controlador SDN. Un canal seguro, que conecta el Conmutador con
el controlador SDN por donde circulan comandos y paquetes de los flujos entre
ambos dispositivos. El protocolo OpenFlow que provee un estándar abierto para la
comunicación entre el Conmutador y el controlador SDN, es través de este protocolo
que las entradas en la Tabla de Flujo pueden ser definidas externamente. Este
protocolo permite la programación del Conmutador externamente, materializando el
concepto de separación del plano de control del plano de datos.
Figura 1.4 Arquitectura pipeline de las tablas de flujo [Elaboración propia, adaptada de ONF (2015)]
de las aplicaciones de gestión de la red una comunicación con los datos y los
usuarios que hacen uso de las aplicaciones finales. Sintetizando, un NOS en SDN
es un elemento crítico e indispensable porque contiene toda la lógica del
funcionamiento de la red que ofrecerá políticas definidas por el administrador de la
red de manera simple.
NOS en SDN pueden ser desarrollado en software libre o propietario. ONF impulsa
una arquitectura SDN basada en software libre. En la actualidad existen varios NOS
en software libre, siendo los más populares, según Mamushiane et al (2018) y Arun
et al (2019): Ryu, OpenDayLight, Floodlight y ONOS.
Un análisis de los más populares de los controladores se da en Mamushiane et al
(2018), este consiste en medir la latencia y el rendimiento con diversas cargas de
trabajo. La evaluación se realizó utilizando el programa Cbench, que es una
herramienta de medición del rendimiento de controladores compatibles con
OpenFlow; para ello genera eventos de entrada PACKET_IN para nuevos flujos
emulando un grupo de conmutadores que se conectan al controlador y contando el
número de respuestas PACKET_OUT recibidos por segundo, así como su latencia.
En la figura 1.6 se muestra un escenario de prueba para los controladores.
Figura 1.7 Número promedio de respuestas por segundo con un número variable de
conmutadores, MAC = 1000 [Mamushiane et al (2018), figura 2]
BIBLIOGRAFÍA
Arun, A., Neethu, S., Ravish, A. (2019). Performance Analysis of Various SDN Controllers
In
Mininet Emulator. 2019 4th International Conference on Recent Trends on
Electronics, Information, Communication & Technology (RTEICT-2019), MAY 17th &
18th 2019. DOI: 10.1109/RTEICT46194.2019.9016693.
Bagaa, M., Dutra, D., Taleb, T., Samdanis, K. (2020). On SDN-driven Network
Optimization and QoS aware Routing using Multiple Paths. IEEE Transactions on
Wireless Communications (Volume: 19, Issue: 7, July 2020).
DOI: 10.1109/TWC.2020.2986408
Benzekki, K., Fergougui, A., Elalaoui, A. E., (2017). Software-defined networking (SDN): a
survey. DOI: 10.1002/sec.1737
Hamdan, M., Hassan, E., Abdelaziz, A., Elhigazi, A., Mohammed, B., Khan, S., Vasilakos,
A., Marsono, M. (2020). A Comprehensive Survey of Load Balancing Techniques in
Software-Defined Network. Journal of Network and Computer Applications, DOI:
https://doi.org/10.1016/j.jnca.2020.102856
Khorsandroo, S., Gallego, A., Saman, A., Arco, JM., Doriguzzi-Corin, D. (2021). Hybrid
SDN evolution: A comprehensive survey of state-of.art. Computer Networks 192
(2021) 107981. DOI: https://doi.org/10.1016/j.comnet.2021.107981
Kreutz, D., Ramos, F. M., Veríssimo, P.E., Rothenberg, C. E., Azodolmolky, S., Steve
Uhlig, U. (2015). Software-Defined Networking: A Comprehensive Survey.
Proceedings of the IEEE. (Vol. 103). DOI: 10.1109/JPROC.2014.2371999
CAPÍTULO 2
MÁQUINAS VIRTUALES
CON UBUNTU Y MININET
Capítulo 2. MÁQUINAS VIRTUALES CON UBUNTU Y MININET
2.1 INTRODUCCIÓN
El sistema operativo de software libre Ubuntu, de código libre, se ha convertido en
el sistema operativo indispensable para estudiar el funcionamiento de redes de
datos emergentes como es el caso de SDN, SD-IoT, cloud, entre otros. A la par de
la evolución de la tecnología en telecomunicaciones, los sistemas operativos son
más confiables y ha contribuido a su adopción casi inmediata por parte de los
usuarios finales.
Ubuntu es un sistema operativo (SO) Linux basado en Debian de código abierto
gratuito, con licencia GNU-General Public License. El sistema operativo Ubuntu
tiene varias versiones, como la versión de escritorio, la versión del servidor y la
versión móvil. La versión última de Ubuntu de escritorio al momento de escribir este
libro es el Ubuntu 22.04. Aún así, se instala la Ubuntu 20.04.4 LTS para ser utilizado
con el simulador Mininet para las Redes Definidas por Software-SDN; para luego
ser utilizado, como máquinas virtuales, desde el GNS3; de esta manera se dispondrá
GNS3 con máquinas virtuales conteniendo el sistema operativo de SDN Ryu,
OpenDayLight y ONOS.
2.2 DESCARGA DE LA IMAGEN ISO DE UBUNTU
Para obtener el Ubuntu Desktop versión 20.04.4 LTS se debe ingresar a la dirección
Web: https://releases.ubuntu.com/focal/; como se ilustra en la figura 2.1 y acceder a
la opción 64-bit PC (AMD64) desktop image ; obteniendo el
archivo ejecutable ubuntu-20.04.4-desktop-amd64.
El proceso para configurar una nueva máquina virtual conteniendo el Ubuntu 20.04.4
en el VirtualBox se indica en las figuras 2.4a, b, c, d, e, f, g y h. Se debe ingresar el
nombre de la máquina virtual; en la figura 2.4b se colocó ubuntu-20.04.4; así mismo
seleccionar el directorio o carpeta donde se instalará el Ubuntu.
Es importante considerar el tamaño del disco duro virtual. Se recomienda 50GB para
instalar Ubuntu, el simulador SDN denominado Mininet, controlador de red Ryu,
OpenDayLight o ONOS, entre otras aplicaciones. En la figura 2.4g se instaló 50GB
de disco duro virtual.
Capítulo 2. MÁQUINAS VIRTUALES CON UBUNTU Y MININET
(a) (b)
(c) (d)
(e) (f)
Capítulo 2. MÁQUINAS VIRTUALES CON UBUNTU Y MININET
(g) (h)
Figura 2.4 Nueva máquina virtual conteniendo el Ubuntu 20.04.4 en el VirtualBox
(a) (b)
(c) (d)
Figura 2.6 Selección de ISO del Ubuntu 20.04.4 en el VirtualBox
Capítulo 2. MÁQUINAS VIRTUALES CON UBUNTU Y MININET
Observación:
Para continuar con una adecuada configuración se debe seleccionar el controlador gráfico de
pantalla VBoxSVGA, previa selección de la opción Configuración , como se ilustra en la figura
2.7. De esta manera se tendrá más control en las dimensiones de la pantalla en los siguientes
pasos de la configuración.
Figura 2.7
Si una vez finalizado con la configuración e ingresando al Ubuntu la pantalla se coloca en un color
fijo (por lo general negro) se debe regresar a la configuración del controlador gráfico en VMSVGA.
(a)
Capítulo 2. MÁQUINAS VIRTUALES CON UBUNTU Y MININET
(b) (c)
(d) (e)
(f) (g)
Capítulo 2. MÁQUINAS VIRTUALES CON UBUNTU Y MININET
(h) (i)
(j) (k)
(l)
Figura 2.8 Instalación del Ubuntu 20.04.4 en el VirtualBox
Capítulo 2. MÁQUINAS VIRTUALES CON UBUNTU Y MININET
(a) (b)
(c) (d)
Figura 2.9 Actualización del Ubuntu 20.04.4
Ahora queda activar el terminal del ubuntu; para realizar se debe seleccionar el ícono
, ubicado en la parte inferior izquierda, y en la nueva ventana ingresar la palabra
“terminal” , para activar un terminal del Ubuntu seleccionado el
ícono , inmediatamente surge el terminal como se ilustra en la figura 2.10a.
Finalmente, en este terminal ingrese el comando ping 8.8.8.8 para probar acceso a
Internet desde la máquina virtual que contiene Ubuntu 20.04.4 como se ilustra en la
figura 2.10b.
ping 8.8.8.8
Capítulo 2. MÁQUINAS VIRTUALES CON UBUNTU Y MININET
(a) (b)
Figura 2.10 Acceso de Internet desde el Ubuntu 20.04.4 en el VirtualBox
(a) (b)
Figura 2.11 Modo NAT de configuración por defecto del Ubuntu 20.04.4 en el VirtualBox
Para instalar ifconfig primero se debe actualizar los programas del Ubuntu con el
comando sudo apt update (figura 2.13) y luego instalar las herramientas que
permiten ver las configuraciones de red con el comando sudo apt install net-tools
(figura 2.14).
Figura 2.17
Como se observa en la figura 2.17 las direcciones web son repositorios que
contienen software; casi al final se muestra el mensaje “Leyendo lista de paquetes…
Hecho” para indicar que la computadora siguió adelante y leyó todo el software
disponible en los repositorios y los comparó con la versión presente y descubrió que
están actualizados.
Capítulo 2. MÁQUINAS VIRTUALES CON UBUNTU Y MININET
Figura 2.18
Como se puede observar en la figura 2.19, desde el directorio de trabajo (en este
caso fiee) no existe algún directorio referido a Mininet.
ls
Figura 2.19
Figura 2.20
Una vez obtenida el código fuente del mininet, esta se ubica en el nuevo directorio
creado denominado mininet; como se muestra en la figura 2.21.
ls
Figura 2.21
Ahora se debe conocer las diversas versiones de Mininet; para ello se debe Ingresar
al directorio mininet y con el comando git tag observar las versiones disponibles;
como se ilustra en la figura 2.22.
cd mininet
git config --global --add safe.directory /home/unmsm/mininet
git tag
Capítulo 2. MÁQUINAS VIRTUALES CON UBUNTU Y MININET
Figura 2.22
Figura 2.23
Capítulo 2. MÁQUINAS VIRTUALES CON UBUNTU Y MININET
Para iniciar con la instalación de mininet, desde el directorio inicial fiee, instalar
mininet con el comando install.sh; en la figura 2.24 se indica el inicio de la
instalación.
cd ..
sudo mininet/util/install.sh
Figura 2.24
Al final del proceso de instalación del Mininet se tiene el mensaje: Enjoy Mininet!,
indicando que la instalación fue satisfactoria, como se observa en la figura 2.25.
Mininet contiene diversas topologías implementadas en SDN y permite probar
conectividad entre todos sus hosts con el comando pingall disponible desde Mininet.
Figura 2.25
Figura 2.26
Para invocar a esta topología simple y probar conectividad desde el host h1 al host
h2 y desde el host h2 al host h1 se debe ingresar el comando sudo mn --test
pingall, como se ilustra en la figura 2.27.
Figura 2.27
Capítulo 2. MÁQUINAS VIRTUALES CON UBUNTU Y MININET
sudo mn --help
Capítulo 2. MÁQUINAS VIRTUALES CON UBUNTU Y MININET
Figura 2.28
b.- Para limpiar los registros del Mininet, ingrese el comando sudo mn -c, como
se ilustra en la figura 2.29.
sudo mn -c
Esta opción se debe realizar cada vez que se inicia una nueva simulación
Capítulo 2. MÁQUINAS VIRTUALES CON UBUNTU Y MININET
Figura 2.29
sudo mn
Figura 2.30
Capítulo 2. MÁQUINAS VIRTUALES CON UBUNTU Y MININET
Para comprobar que existe conexión desde el host h1 al host h2 y desde el host h2
al host h1 se debe ingresar el comando pingall desde el Mininet, como se ilustra en
la figura 2.31.
pingall
Figura 2.31
En el mensaje:
*** Ping: testing ping reachability
h1 -> h2
h2 -> h1
*** Results: 0% dropped (2/2 received)
exit
Figura 2.32
Capítulo 2. MÁQUINAS VIRTUALES CON UBUNTU Y MININET
Figura 2.33
sudo mn --topo=linear,k=3,n=4
En la figura 2.34 se observa el comando ingresado para activar esta topología lineal
y las pruebas de conectividad entre todos los hosts con el comando pingall.
Figura 2.34
Capítulo 2. MÁQUINAS VIRTUALES CON UBUNTU Y MININET
Figura 2.35
El comando para activar una topología simple con k=5 hosts conectado a un
conmutador SDN es sudo mn --topo=single,k=5, como se ilustra en la figura 2.36.
sudo mn --topo=single,k=5
Figura 2.36
La prueba de conectividad entre los cinco (5) host se realiza con el comando pingall
como se ilustra en la figura 2.37. Recordar que para salir de Mininet el comando es
exit.
Capítulo 2. MÁQUINAS VIRTUALES CON UBUNTU Y MININET
Figura 2.37
Figura 2.38
El comando para activar esta topología tipo árbol que genera en total de 15
conmutadores SDN y 16 hosts es sudo mn --topo=tree,depth=4,fanout=2 como
se ilustra en la figura 2.39.
sudo mn --topo=tree,depth=4,fanout=2
Figura 2.39
Las pruebas de conectividad entre todos los hosts se realizan con el comando
pingall. Al final de la figura 2.39 se observa el mensaje de 0% de paquetes
eliminados: “0% dropped (240/240 received)”.
Para probar conectividad entre dos hosts de cualquier topología en el Mininet (por
ejemplo, host h1 con host h3) se debe ingresar el comando h1 ping h3 como se
ilustra en la figura 2.40. Para finalizar el envío de paquetes ICMP pulsar Control y la
tecla C en simultaneo.
h1 ping h3
Capítulo 2. MÁQUINAS VIRTUALES CON UBUNTU Y MININET
Figura 2.40
Recordar que para limpiar los registros del Mininet se debe ingresa el comando sudo mn -c
2.6 MINIEDIT
2.6.1 Activación del MiniEdit
MiniEdit es una plataforma que presenta una interfaz gráfica para el diseño de la
topología de una red definida por software. Presenta servidores conteniendo el
sistema operativo de la red definida por software, denominados controladores (c) y
conmutadores SDN o OpenFlow (s). De manera remota se puede asociar a la SDN
diversos tipos de sistemas operativos de red como Ryu, OpenDayLight y ONOS.
Amplia información del MiniEdit en: http://www.brianlinkletter.com/how-to-use-
miniedit-mininets-graphical-user-interface/ .
MiniEdit está desarrollado en Python y Ubuntu 20.04.4 contiene el Python en su
versión 3 (y también la versión 2). Para verificar la versión del Ubuntu debe leer el
archivo os-release ubicado en el directorio /etc; como se observa en la figura 4.41.
cat /etc/os-release
Figura 2.41
Capítulo 2. MÁQUINAS VIRTUALES CON UBUNTU Y MININET
python3 --version
Figura 2.42
cd mininet
cd mininet
cd examples
sudo python3 ./miniedit.py
Figura 2.43
Al ejecutar este comando se obtiene el área de trabajo del MiniEdit como se observa
en la figura 2.44. Para formar una red coloque el cursor encima del ícono de
dispositivo de interconexión a utilizar y hacer un click encima; luego ubique el cursor
en el área en blanco de trabajo y hacer un click para que este dispositivo de
interconexión sea parte de su red a simular.
Figura 2.44
Figura 2.45
Capítulo 2. MÁQUINAS VIRTUALES CON UBUNTU Y MININET
Una vez defina la red a simular, el siguiente paso es ejecutar la simulación, Para ello
pulsar el indicar Run que se ubica en la parte inferior izquierda del MiniEdit, como
se observa en la figura 2.46.
Figura 2.46
Cada host en el MiniEdit tiene su propio terminal donde se puede ejecutar comandos
o activar aplicaciones como el Wireshark. Para abrir el terminal de un host, primero
se debe iniciar la simulación pulsando Run, hacer un click derecho encima del host
(por ejemplo, el host h1); y luego seleccionar “Terminal”, como se observa en las
figuras 2.47.
Figura 2.47
Figura 2.48
ifconfig
Figura 2.49
Es importante observar que la interfaz del host h1 es h1-eth0, para el host h2 es h2-
eth0, así sucesivamente.
Para mostrar una lista resumida de la interfaz activa, ingrese el comando ifconfig -
s, como se observa en la figura 2.50.
Ifconfig -s
Capítulo 2. MÁQUINAS VIRTUALES CON UBUNTU Y MININET
Figura 2.50
Figura 2.51
Para verificar que existe conexión entre los hosts se utiliza el comando ping. Por
ejemplo, para probar conexión desde el host h4 hacia el host h1, desde el terminal
del host h4 se debe ingresar el comando ping 50.60.70.1, como observa en la figura
2.52.
Recordar que para detener el envío de paquetes IP con el comando ping debe pulsar en simultaneo
CONTROL y la tecla C.
Capítulo 2. MÁQUINAS VIRTUALES CON UBUNTU Y MININET
Figura 2.52
Figura 2.53a
Figura 2.53b
Capítulo 2. MÁQUINAS VIRTUALES CON UBUNTU Y MININET
Figura 2.53c
Figura 2.54
Figura 2.55
Figura 2.56a
Capítulo 2. MÁQUINAS VIRTUALES CON UBUNTU Y MININET
Figura 2.56b
Figura 2.56c
Figura 2.57
Figura 2.58a
Capítulo 2. MÁQUINAS VIRTUALES CON UBUNTU Y MININET
Figura 2.58b
Figura 2.59
Figura 2.60
Figura 2.61a
Figura 2.61b
Figura 2.62
CAPÍTULO 3
CONTROLADOR RYU
Capítulo 3. CONTROLADOR RYU
Figura 3.2a
Figura 3.2b
Capítulo 3. CONTROLADOR RYU
Figura 3.3
Para iniciar la instalación de Ryu, primero ingresar al directorio ryu; notar que en
este directorio existe el archivo setup.py, luego ingresar el siguiente comando sudo
python3 ./setup.py install, como se observa en las figuras 3.4a y 3.4b.
cd ryu
ls
sudo python3 ./setup.py install
Figura 3.4a
Figura 3.4b
Capítulo 3. CONTROLADOR RYU
Figura 3.5a
Figura 3.5b
cd ryu
cd app
ls
Figura 3.6
Figura 3.7
Active otro terminal donde se debe ejecutar mininet con una topología simple de un
(01) switch SDN, tres (03) hosts y un (01) controlador Ryu (controller remote), en
Capítulo 3. CONTROLADOR RYU
este nuevo terminal ingresar el comando sudo mn --topo single,3 --mac --switch
ovsk --controller remote. Con el comando pingall se verifica las conexiones entre
los tres (03) hosts. Se debe observar que en el primer terminal empieza a generarse
los mensajes PACK_IN al controlador Ryu, como se observa en la figura 3.8.
Figura 3.8
Para salir del mininet ingresar el comando quit; finalmente, desde el primer terminal
(ryu/ryu/app) pulsar la tecla Control y la tecla C en simultaneo.
Importante limpiar los registros internos del mininet con el comando sudo mn -c
Figura 3.8
Figura 3.9
Capítulo 3. CONTROLADOR RYU
Figura 3.10
Esta selección origina una nueva ventana emergente, como se observa en la figura
3.11a, donde se debe activar “Start CLI”, desactivar “OpenFlow 1.0” y activar
“OpenFlow 1.3”, luego pulsar “OK”, como se observa en la figura 3.11b.
Figura 3.11a
Figura 3.11b
Capítulo 3. CONTROLADOR RYU
Figura 3.12
Figura 3.14
Figura 3.15
Figura 3.16
Capítulo 3. CONTROLADOR RYU
Figura 3.17
Capítulo 3. CONTROLADOR RYU
Para activar el gestor de flujo conjuntamente con el controlador Ryu se debe ingresar
el comando sudo ryu-manager --observe-links ~/flowmanager/flowmanager.py
ryu.app.simple_switch_stp_13 dentro del directorio ryu/ryu/app como se observa
en la figura 3.18
cd ryu
cd ryu
cd app
sudo ryu-manager --observe-links ~/flowmanager/flowmanager.py ryu.app.simple_switch_stp_13
Siempre que se inicie una nueva simulación limpiar mininet con sudo mn -c
Figura 3.18
cd mininet
cd mininet
cd examples
sudo python3 ./miniedit.py
Figura 3.19
Capítulo 3. CONTROLADOR RYU
Figura 3.20
localhost:8080/home/index.html
Figura 3.21a
Capítulo 3. CONTROLADOR RYU
Figura 3.21b
1er terminal
2do terminal
Figura 3.22
Capítulo 3. CONTROLADOR RYU
Ahora, en el miniedit se debe de activar el OpenFlow 1.3 que soporta IPv6 como se
detalló en la figura 3.11 y configurar el controlador para que remotamente acceda al
controlador Ryu como se detalló en la figura 3.13. En la figura 3.23 se muestra la
red SDN considerada con OpenFlow 1.3 y controlador Ryu. Para verificar
conectividad entre todos los hosts utilizar el comando pingall.
Figura 3.23
Las direcciones IPv6 de la red dual stack se indica a continuación y la red dual stack
se observa en la figura 3.23.
• Host h1 → 2001:abc9:20cd::1001/64
• Host h2 → 2001:abc9:20cd::1002/64
• Host h3 → 2001:abc9:20cd::1003/64
• Host h4 → 2001:abc9:20cd::1004/64
• Host h5 → 2001:abc9:20cd::1005/64
• Host h6 → 2001:abc9:20cd::1006/64
Para configurar las direcciones IPv6 a cada host, desde el segundo terminal de
Ubuntu, se ingresa el comando <nombre del host> ifconfig <nombre de interfaz>
inet6 add <dirección IPv6>; por ejemplo, para colocar en el host 1 la dirección IPv6
2001:abc9:20cd::1001/64 se debe ingresar después del indicador de mininet> el
Capítulo 3. CONTROLADOR RYU
Dirección en IPv4
Dirección en IPv6
Figura 3.24
De manera similar se asigna las direcciones IPv6 en los host h2, h3, h4, h5 y h6 con
las direcciones indicadas en la figura 3.23. Esta configuración se observa en la figura
3.25.
Capítulo 3. CONTROLADOR RYU
Figura 3.25
Para verificar la conectividad entre los hosts en IPv6 se usa el comando ping; por
ejemplo, entre el host h1 y el host h6 el comando completo es h1 ping
2001:abc9:20cd::1006 y entre el host h1 y el host h4 el comando completo es h1
ping 2001:abc9:20cd::1004, como se observa en la figura 2.26.
Figura 3.26
xterm h1 h2
Capítulo 3. CONTROLADOR RYU
Figura 3.27
Figura 3.28
Capítulo 3. CONTROLADOR RYU
Figura 3.29
Figura 3.30
Capítulo 3. CONTROLADOR RYU
BIBLIOGRAFÍA
[Shozi-2019] T. Shozi, S. Dlamini, P. Mudali and M. O. Adigun, "An SDN Solution for
Performance Improvement in Dedicated Wide-Area Networks", 2019 Conference on
Information Communications Technology and Society (ICTAS), 2019, pp. 1-6, doi:
10.1109/ICTAS.2019.8703613.
[Ryu] “Ryu SDN Framework: Using OpenFlow 1.3”
Capítulo 4. CONTROLADOR OPENDAYLIGHT
CAPÍTULO 4
CONTROLADOR OPENDAYLIGHT
Capítulo 4. CONTROLADOR OPENDAYLIGHT
Figura 4.1
Figura 4.2a
Capítulo 4. CONTROLADOR OPENDAYLIGHT
Figura 4.2b
cd ..
cd ..
cd etc
Figura 4.3
cd /etc
Capítulo 4. CONTROLADOR OPENDAYLIGHT
Figura 4.4
En ambos casos, se debe leer el contenido del archivo environment con el comando
cat environment, como se muestra en la figura 4.5.
Figura 4.5
cd /home/unmsm
Figura 4.6
Figura 4.7a
Figura 4.7b
Figura 4.8
Capítulo 4. CONTROLADOR OPENDAYLIGHT
ls /usr/lib/jvm/java-8-openjdk-amd64/jre
Figura 4.9
Figura 4.10
Figura 4.11
Figura 4.12
source /etc/environment
Capítulo 4. CONTROLADOR OPENDAYLIGHT
Figura 4.13
Luego, para verificar que está definido la variable de entorno ingresar el comando
echo, como se observa en la figura 4.14.
echo $JAVA_HOME
Figura 4.14
Figura 4.15
Para conocer todas las versiones de java instalados se debe ingresar el comando
sudo update-alternatives –config java. Como se observa en la figura 4.16 sólo
existe uno, la versión 8.
Figura 4.16
Capítulo 4. CONTROLADOR OPENDAYLIGHT
Figura 4.17
Figura 4.18a
Capítulo 4. CONTROLADOR OPENDAYLIGHT
Figura 4.18b
Para conocer las versiones de java instaladas se debe ingresar el comando sudo
update-alternatives –config java. Como se observa en la figura 4.19 ahora existen
dos versiones, la versión 11 y la 8.
Figura 4.19
Por defecto se tiene activado java en la versión 11 en modo automático (el asterisco
en la primera fila así lo indica). Si se desea activar java en la versión 8 colocar el
número 2 y pulsar ENTER.
Como se observa en la figura 4.14 la variable JAVA_HOME tiene el valor
/usr/lib/jvm/java-8-openjdk-amd64/jre que corresponde a java en la versión 8. De
la figura 4.19 se observa la ruta para java en la versión 11, /usr/lib/jvm/java-11-
openjdk-amd64/bin/java. Todas las herramientas de java en la versión 11 está
indica en el nuevo valor de la variable JAVA_HOME=“/usr/lib/jvm/java-8-openjdk-
amd64/”.
Nuevamente, para definir la variable de entorno JAVA_HOME para java versión 11
se debe modificar el archivo environment como se observa en la figura 4.20.
Figura 4.20
Figura 4.21
source /etc/environment
Figura 4.22
Luego, para verificar que está definido la variable de entorno ingresar el comando
echo $JAVA_HOME, como se observa en la figura 4.23.
Capítulo 4. CONTROLADOR OPENDAYLIGHT
echo $JAVA_HOME
Figura 4.23
Figura 4.24
Figura 4.25
Para acceder a las diversiones versiones del OpenDayLight seleccionar Learn More
, como se observa en la figura 4.26.
Capítulo 4. CONTROLADOR OPENDAYLIGHT
Figura 4.26
Figura 4.27
Capítulo 4. CONTROLADOR OPENDAYLIGHT
Figura 4.28
Figura 4.29
Capítulo 4. CONTROLADOR OPENDAYLIGHT
Figura 4.30
Figura 4.31
Figura 4.32
Capítulo 4. CONTROLADOR OPENDAYLIGHT
ls
mkdir opendaylight
ls
cd opendaylight
Figura 4.33
cp /home/unmsm/Descargas/karaf-0.8.4.tar.gz karaf-0.8.4.tar.gz
ls
Figura 4.34
Figura 4.35
ls
cd karaf-0.8.4
ls
Figura 4.36
Capítulo 4. CONTROLADOR OPENDAYLIGHT
cd bin
sudo ./karaf
Figura 4.37
feature:install odl-restconf
feature:install odl-mdsal-apidocs
feature:install odl-dluxapps-applications
feature:install odl-dluxapps-topology
feature:install odl-dluxapps-nodes
feature:install odl-l2switch-all → Si existe un error continue con la instalación
feature:install odl-l2switch-switch-ui
feature:install odl-l2switch-switch
feature:install odl-l2switch-all → Volver a ejecutar la función
Capítulo 4. CONTROLADOR OPENDAYLIGHT
Una vez finalizado con la instalación de las funciones en OpenDayLight salir del
terminal donde está ejecutando el controlador con el comando logout. Luego
desde el terminal de Ubuntu borrar los registros internos del mininet con sudo
mn -c
b.- Cada vez que inicia una simulación, debe previamente limpiar todos los registros
internos del mininet con el comando sudo mn -c .
Capítulo 4. CONTROLADOR OPENDAYLIGHT
RESUMEN
1.- Verificar que el mininet esté funcionando correctamente con el comando
sudo mn --test pingall
2.- Antes de iniciar una simulación en mininet, se debe limpiar los registros
internos del simulador con el comando sudo mn -c
4.- Activar otro terminal para Ingresar al miniedit con el comando sudo python3
./miniedit.py y realizar la topología a simular, previamente configurar el
controlador remoto y habilitar los comandos CLI y el protocolo OpenFlow
versión 1.3
BIBLIOGRAFÍA
1. Install OpenDaylight on Ubuntu 20.04 LTS (All Features, Any Version)
https://john.soban.ski/install-opendaylight-ubuntu-lts-fast.html
CAPÍTULO 5
CONTROLADOR ONOS
Capítulo 5. CONTROLADOR ONOS
Figura 5.1a
Figura 5.1b
Figura 5.2
Figura 5.3
Figura 5.4
java -version
Figura 5.5
Figura 5.6
Ahora se tiene instalado Java y para conocer la versión instalada se usa el comando
java -version; como se observa en la figura 5.7 la versión es 11.0.15.
java -version
Figura 5.7
Figura 5.8
echo $JAVA_HOME
Figura 5.9
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
Figura 5.10
echo $JAVA_HOME
Figura 5.11
Figura 5.12
Capítulo 6. SCRIPT DE MININET EN PYTHON
Para instalar Maven se debe ingresar el comando sudo apt install maven, como
se observa en la figura 5.13.
Figura 5.13
mvn -version
Figura 5.14
Figura 5.15
Figura 5.16
ls
Figura 5.17
Figura 5.18
ls
Figura 5.19
Capítulo 5. CONTROLADOR ONOS
cd ..
cd Descargas
sudo wget http://apt.puppetlabs.com/puppetlabs-release-precise.deb
Figura 5.20
Figura 5.21
Figura 5.22
Figura 5.23
cd ..
cd onos
sudo apt-get install git-core
Capítulo 5. CONTROLADOR ONOS
Figura 5.24
Por otro lado, la herramienta net-tools facilita el control del subsistema de red del
kernel de Linux; incluye arp, ifconfig, netstat, rarp, nameif, route y aspectos
avanzados de configuración de IP (iptunnel, ipmaddr). El comando sudo apt-get
install net-tools habilita esta herramienta como se observa en la figura 5.25.
Figura 5.25
Figura 5.26
Figura 5.27
Capítulo 5. CONTROLADOR ONOS
Figura 5.28
Figura 5.29
Capítulo 6. SCRIPT DE MININET EN PYTHON
Figura 5.30
cd onos-2.7.0
cd bin
ls
Figura 5.31
Figura 5.32
Figura 5.33
El indicativo que todo está correcto es el mensaje que aparece en la última línea:
Update nodo 10.0.2.15 state to READY, como se observa en la figura 5.34.
Figura 5.34
ifconfig
Capítulo 6. SCRIPT DE MININET EN PYTHON
Figura 5.35
Figura 5.36
Capítulo 5. CONTROLADOR ONOS
Mostrando una interfaz gráfica donde se mostrará todos los detalles de la red SDN
a simular, como se observa en la figura 5.37.
Figura 5.37
Figura 5.38
Capítulo 6. SCRIPT DE MININET EN PYTHON
Figura 5.39
Figura 5.40
Figura 5.41
Figura 5.42
Figura 5.43
Luego se debe correr la red simulada en MiniEdit pulsando la opción Run ubicado
en la parte inferior izquierda, como se muestra en la figura 5.45.
Capítulo 6. SCRIPT DE MININET EN PYTHON
Figura 5.45
Desde el terminal del Mininet se comprueba conexión entre todos los hosts de la
red con el comando pingall, como se muestra en la figura 5.46.
Figura 5.46
Figura 5.47
Figura 5.48
Capítulo 6. SCRIPT DE MININET EN PYTHON
Figura 5.49
Instalación de Maven
====================
sudo apt update
sudo apt install maven
mvn -version
-->Ver la versión instalada
cd onos
sudo wget https://archive.apache.org/dist/karaf/3.0.5/apache-karaf-3.0.5-src.tar.gz
-->Verificar en el directorio onos la existencia del archivo apache-karaf-3.0.5-
src.tar.gz
tar -zxvf apache-karaf-3.0.5-src.tar.gz
-->Verificar en el directorio onos la existencia del archivo descomprimido
apache-karaf-3.0.5
Por buenas costumbres ir al directorio Descargas:
++++++++++++++++++++++++++++++++++++++++++++++++
sudo wget http://apt.puppetlabs.com/puppetlabs-release-precise.deb
-->Verificar en el directorio onos la existencia del archivo puppetlabs-release-
precise.deb
sudo dpkg -i puppetlabs-release-precise.deb
sudo apt-get install gcc g++ make libpcre3-dev libssl-dev tmux emacs libncurses5-
dev libreadline-dev libffi-dev libyaml-dev valgrind git-core libxml2-dev libxslt-dev ntp
sqlite3 libsqlite3-dev
++++++++++++++++++++++++++++++++++++++++++++++++
Instalación del repositorio git-core
====================================
Desde el directorio onos:
sudo apt-get install git-core
sudo apt-get install net-tools
BIBLIOGRAFÍA
[Debian] Debian, “El manual del administrador de Debian”, https://debian-
handbook.info/browse/es-ES/stable/sect.manipulating-packages-with-dpkg.html
[Hogan-2020] B. Hogan-2020, “Cómo instalar Java con Apt en Ubuntu 20.04”,
https://www.digitalocean.com/community/tutorials/how-to-install-java-with-apt-on-
ubuntu-20-04-es
[Koshibe 2016] A. Koshibe and E. Olkhovskaya, “ONOS: An Overview.”
https://wiki.onosproject.org/display/ONOS/ONOS+ %3A+An+Overview
[Maven] Apache Maven Project, https://maven.apache.org/
[Koshibe] Koshibe, A., Installing and Running ONOS,
https://wiki.onosproject.org/display/ONOS15/Installing+and+Running+ONOS
[Koshibe 2017] A. Koshibe, Wiki de ONOS, “Administrator Guide - ONOS - Wiki
(onosproject.org)”, https://wiki.onosproject.org/display/ONOS/Administrator+Guide
[Youtube] Onos sdn controller Instalación. https://youtu.be/WZHfkMK1XUI
[Indermitte 2020] ONOS, https://wiki.onosproject.org/display/ONOS/