CAPÍTULO 2. DESARROLLO DE LABORATORIOS
2.9 Laboratorio #2 Emulación de un servidor HTTP y mediciones de ancho de banda.
El siguiente proyecto propone simular 3 escenarios, uno con 2 usuarios y otro con 3 usuarios conectados a un nodo en el cual se realizan mediciones de ancho de banda y el otro con un usuario y un host funcionando como servidor HTTP en el que se muestra cómo se accede al mismo. Para la emulación de los dos escenarios se utiliza un controlador ODL.
Objetivo General.
Configurar topologías SDN donde se configuren host como clientes y como servidor web y medir el ancho de banda requerido para el acceso.
Objetivos específicos
1. Realizar mediciones de ancho de banda usando la herramienta de Ubuntu iperf.
2. Establecer sesiones tcp y http entre servidor y cliente.
3. Desarrollar topologías personalizadas usando script de Python.
Preparación previa.
Entrenarse con la herramienta Mininet para emular redes SDN usando como controlar el ODL
Habilidades:
1. Configurar host como servidores web.
2. Aprender a usar herramientas como iperf para medir el ancho de banda requerido para la transferencia de archivos html.
3. Usar script de Python para generar topologías de redes personalizadas.
Técnica operatoria
Usando la herramienta Mininet se simulan 3 escenarios que usan topologías singles, y topologías personalizadas usando script de Python prediseñados. Para ambos escenarios se instala un servidor iperf para medir el ancho de banda de las transacciones http.
Pasos a seguir:
1. Iniciar el controlador ODL
Para iniciar el controlador se abre una nueva ventana de terminal y se ejecuta desde la ubicación donde se encuentre que en este caso sería mediante la CLI:
./Boron-SR4/bin/karaf
Esta línea ejecuta la versión Boron del controlador Open Day Light. 1. Creación del primer escenario
La herramienta Mininet establece en los enlaces un ancho de banda al azar cuando se crean topologías sin especificación. Aplicando conocimientos obtenidos en el laboratorio 1, para iniciar una topología SINGLE con dos usuarios y un controlador remoto sin especificación de ancho de banda como la que se muestra en la Figura 2.9, se ejecuta la CLI:
$ sudo mn --topo single,2 --
controller=remote,ip=127.0.0.1,port=6633 -–switch
Figura 2.9. Topología single visualizada en el DLUX ODL. Fuente: Autor. 2. Análisis de ancho de banda en el escenario 1
Para configurar los hosts para la realización de la transferencia y el análisis del ancho de banda se ejecuta dentro de Mininet la CLI:
mininet> xterm h1 h2
Esta línea abrirá dos nuevas ventanas de terminal para el trabajo con el host 1 y el host 2 como se muestra en la Figura 2.10.
En la ventana de terminal “Node: h2” se utiliza la herramienta de Ubuntu iperf mediante la CLI:
root@ubuntu:~# iperf –s
Y en la ventana de terminal “Node: h1”, para acceder al host 2 se ejecuta la CLI:
Figura 2.10. Ventanas xterm del host1 y host 2. Fuente: Autor.
Con la utilización de la herramienta iperf se realiza una transferencia TCP entre el host 1 y el host 2 y se mide el ancho de banda de transmisión que Mininet estableció.
3. Creación del segundo escenario
Para iniciar una topología SINGLE con 3 host definiendo el ancho de banda de los enlaces a 100Mbps se ejecuta la siguiente CLI:
$ sudo mn --topo single,3 --link=tc,bw=100 --
controller=remote,ip=127.0.0.1,port=6633 –switch
ovs,protocols=OpenFlow13
4. Análisis de ancho de banda en el escenario 2
Para realizar el análisis de ancho de banda en el escenario 2 se siguen los mismos pasos que para el escenario 1.
5. Creación del tercer escenario
Para el trabajo en el escenario 3 se utiliza la misma topología que en el escenario 1. 6. Configuración de los hosts
En el escenario 2 cambia la configuración de los hosts. Para ello se abren las ventanas de terminal correspondiente a cada uno mediante la CLI:
mininet> xterm h1 h2
El host 2 en la ventana de terminal “Node: h2” se configura como un servidor HTTP accesible por el puerto 80 como se muestra en la Figura 2.11, mediante la CLI:
Figura 2.11. Host 2 como servidor HTTP. Fuente: Autor.
Desde el host 1 se accede al servidor creado en el host 2 utilizando la herramienta wget mediante la CLI:
root@ubuntu:~# wget http://10.0.0.2
7. Escenarios custom
Para crear una topología de red personalizada una herramienta muy poderosa y simple a utilizar es Python. Por medio de un script es viable ejecutar una serie de comandos que generan la red deseada.
Para ejecutar el script de Python que puede ser utilizado como plantilla para generar cualquier topología de red deseada se utiliza la CLI:
$ sudo mn --controller=remote,ip=127.0.0.1,port=6633 --custom lab.py --topo mytopo2
Esta línea crea una topología de red personalizada cuyas características se encuentran definidas dentro del script llamado lab.py que se muestra en el Anexo 2.1 Figura 9.
2.10 Laboratorio #3. Balance de carga
El esquema topológico que se muestra en el proyecto describe una red compuesta por 7
host, de los cuales dos se configuran como servidores HTTP y los restantes cinco funcionan como clientes, 1 conmutador y un controlador. En el controlador POX se configura un balanceador de carga para los servidores ubicados en el host 1 y host 2 que equilibra la carga de peticiones recibidas en dichos servidores. El proyecto se desarrolla con la utilización de MiniNAM visualizando los flujos de paquetes en el proceso de acceso a los servidores.
Objetivo General.
Objetivos específicos
1. Aprender a usar POX como controlador SDN para crear topologías SDN. 2. Configurar las estaciones para usar balance de carga.
3. Implementar el balance de carga en el controlador.
4. Visualizar los flujos de paquetes con el uso del MiniNAM. 5. Analizar las tablas de flujo usando la herramienta Wireshark.
Preparación previa.
Arquitectura y principios del balance de carga en redes SDN. Estructura y funcionamiento del protocolo OpenFlow.
Habilidades
1. Aprender las particularidades del uso del controlador POX y como se usa para el balance de carga.
2. Aprender a usar los comandos cURL y Wget para transferir y recuperar archivos html.
3. Analizar los paquetes OpenFlow generados en las transacciones web.
Técnica operatoria
Para desarrollar el laboratorio y configurar el controlador POX en Mininet y para conseguir balance de carga y observar los flujos de paquetes en MiniNAM es necesario seguir los siguientes pasos:
1. Iniciar el controlador POX para el balance de carga
Para iniciar el controlador se abre una nueva ventana de terminal y se ejecuta desde la ubicación donde se encuentre que en este caso sería mediante la CLI:
$ cd ~/pox
peter@ubuntu:~/pox$ ./pox.py log.level –DEBUG misc.ip_loadbalancer --ip=10.0.2.2 --servers=10.0.0.1,10.0.0.2
Como se muestra en la Figura 2.12, esta línea ejecuta un controlador POX implementando en la red creada una aplicación de balance de carga en la dirección IP 10.0.2.2 para equilibrar el tráfico recibido en los servidores HTTP que se encuentran en las direcciones IP 10.0.0.1 y 10.0.0.2.
Figura 2.12. Aplicación SDN que realiza balance de carga en el acceso a servidores. Fuente: Autor.
2. Crear topología de red
Para iniciar la topología single con la utilización de un controlador POX y MiniNAM se ejecuta, como se muestra en la Figura 2.13, la CLI:
$ sudo python MiniNAM.py --topo single,7 --controller remote
Figura 2.13. Topología single con controlador POX. Fuente: Autor.
Esta línea inicia MiniNAM como se muestra en la Figura 2.14 y una topología SDN con versión de OpenFlow 1.3 y compuesta por 1 conmutador, siete hosts y un controlador remoto creada en Mininet. El puerto del controlador es el 6633 y la dirección IP es 127.0.0.1 puesto que se encuentra dentro de la misma máquina donde se está ejecutando el emulador.
Figura 2.14. Red single visualizada en MiniNAM. Fuente: Autor. 3. Configuración de los hosts
Para la utilización de los hosts para la emulación del balance de carga se ejecuta dentro de Mininet la CLI:
mininet> xterm h1 h2 h3 h4 h5 h6 h7
Esta línea abre siete nuevas ventanas de terminal para el trabajo con los hosts del 1 al host
7.
En la ventana de terminal “Node: h1” y “Node: h2” se utiliza la CLI:
root@ubuntu:~# python -m SimpleHTTPServer 80
Con la utilización de esta línea se configuran a los hosts 1 y 2 como servidores HTTP, como se muestra en la Figura 2.15.
4. Acceso a los servidores HTTP
Desde los restantes hosts de la red (h3, h4, h5, h6, h7) se accede al servidor HTTP ubicado en la dirección 10.0.2.2 como se muestra en la Figura 2.16, a través de la ventana de terminal correspondiente a cada uno usando la CLI:
root@ubuntu:~# curl 10.0.2.2
Figura 2.16. Acceso a servidor con la utilización de cURL. Fuente: Autor.
Con la ejecución de esta línea se realiza la solicitud al servidor HTTP de mostrar la página web contenida en él. En los xterm correspondientes a los servidores HTTP se observa como la carga es balanceada puesto que el acceso de los hosts se va equilibrando de manera que la mitad de las peticiones acceden a un servidor y la otra mitad al otro.
5. Análisis de los flujos de paquetes en MiniNAM
Con la utilización de MiniNAM se puede visualizar los flujos de paquetes, filtrando solo los que se desee observar seleccionando en Edit, Filters, como se muestra en la Figura 2.17.
Figura 2.17. Selección de paquetes mediante el filtro de MiniNAM. Fuente: Autor. Además, se puede seleccionar también el color de cada tipo de paquete, la velocidad de estos en el MiniNAM y otras preferencias más como se muestra en la Figura 2.18.
Figura 2.18. Selección de preferencias para visualizar los paquetes en MiniNAM. 6. Análisis de paquetes OpenFlow en el Wireshark
Se crea la misma topología single de siete hosts, pero esta vez solo con el uso del Mininet y se repiten los mismos pasos que en el ejemplo anterior para el trabajo con los hosts. Luego se ejecuta el Wireshark aplicando contenidos aprendidos en el laboratorio 1 mediante la CLI:
$sudo wireshark
Se hace un análisis de los paquetes OpenFlow al realizarse las peticiones al servidor HTTP.
2.11 Conclusiones del capítulo
En este capítulo se realiza una introducción al emulador de red Mininet y se crean las guías de los tres proyectos de laboratorio propuestos:
1. Introducción al uso de Mininet y el controlador ODL. Creación de las topologías SDN básicas.
2. Emulación de un servidor HTTP y mediciones de ancho de banda. 3. Balance de carga.
Se describen sus esquemas topológicos, las CLI necesarias y los pasos a seguir para su desarrollo.