<%include ../../partials/head%>
<%include ../../partials/header%>
howto

Practicas para realizar en el cluster de Raspberry Pi

1- Basic Trafic Engineering

El objetivo de esta practica es entender el concepto de las redes definidas por software y sus ventajas, asi como mostrar como el controlador SDN puede decirle a los OVS que se comporten de una manera u otra, enviando el trafico deseado de un sitio a otro.

-Creacion de topologia

Para empezar, vamos a crear una topologia de 3 switches y 3 hosts, conectados como se muestra en la siguiente figura. Posteriormente vamos a iniciar el controlador con la aplicacion Switching.

 

Observe y asegurese que los flowtable de los switches estan por defecto. Una vez visto esto, el objetivo es simplemente obtener conectividad entre h1 y h2, modificando estos flow entry mediante una API REST haciendo peticiones al controlador SDN.

- Configuracion de los OVS mediante peticiones al controlador SDN

Para esto, nos dirijimos a la consola de la Raspberry principal (rpi1) y en la carpeta scripts ejecutamos el codigo basicflow.sh, el cual se tiene una muestra mas abajo, y no es mas que realizar POST al controlador con los parametros que deseamos configurar. En esta peticion se envia el DPID del switch deseado, y los respectivos campos de OpenFlow, tales como el match y los actions.

Notese que la idea es limpiar todo lo que tenga el switch en ese momento, y decirle basicamente "Todo el trafico recivido por el puerto 1 sacalo por el puerto 2". Siguiendo esta logica, se crea un camino por el cual fluye el trafico, en nuestro ejemplo, conectividad entre h1 y h2.

Una vez ejecutado, compruebe que se actualizaron los flows de los switches 1 y 2, ademas de que existe conectividad entre h1 y h2 haciendo ping.

Compruebe que no existe conectividad entre h1 y h3, debido a que no existe ninguna ruta especificada.

2- Enrutamiento estatico con API REST

El objetivo de esta practica consiste en crear una topologia serial de 3 switches y 3 host, como se muestra en la siguiente imagen. Asi, solo se debe tener conectividad entre todas las redes de h1,h2 y h3.

Para esto, mediante la pagina web cree la topologia, inicie el controlador con la aplicacion REST Router , confirme que en el controlador se muestra que los switches fueron reconocidos y proceda a configurar las direcciones IP de los hosts.

-Configuracion de direcciones IP a los hosts virtuales

Para configurar estas direcciones IP, utilice los comandos h[x] ip addr del 10.0.0.[x]/8 dev h[x]-eth0 para eliminar la IP por defecto, siendo [x] el host deseado, y asimismo con el comando ip addr add configure las demas direcciones. Asi mismo, configure los gateway necesarios con el comando ip route add default via [direccion_ip_gateway].

Entendemos que este proceso puede ser algo tedioso, por lo cual hemos creado un script, el cual se encuentra en la carpeta scripts de la Raspberry principal. Para ejecutarlo, simplemente ejecutelo con ./hostadress.sh.

Compruebe mediante la web que se realizaron las configuraciones con el comando h[x] ifconfig h[x]-eth0

-Programar el controlador para que los switches conozcan las redes

Par este paso, necesita hacer uso del API REST de la aplicacion de RYU.

Entendemos que esto puede ser un poco tedioso, por lo cual hemos creado un script que se encuentra en la carpeta scripts que realiza estas configuraciones de manera automatica, solo ejecutandolo con ./routerflows.sh. Mas abajo se muestra un fragmento del script, para que se entienda que es lo que esta ocurriendo.

Una vez ejecutado, mediante la pagina web, compruebe que cada switch tiene seteado sus flow entrys correctamente en el apartado flow tables.

Compruebe que existe conectividad entre h1 y h2 ejecutando el comando h1 ping -c 4 h2. Para ver el camino recorrido, ejecute h1 traceroute h2.

Si desea eliminar todos los flowentry de los switches, y simplemente dejarlos con su flow por defecto, en la pagina web presione el boton Reset flows del apartado Flow Tables.

3- Creando un micro web server

El objetivo de esta practica es la de comprobar conectividad entre dos host virtuales, por ejemplo h1 y h2, ejecutando un servicio web.

Preparando archivos

Para poder hacer una pequna web que podamos navegar vamos a hacer lo siguiente: Necesitamos crear un archivo, el cual sera un script en bash con lo que deseamos ver en el cliente. Para crear esto en un host especifico, escribimos h[x] echo "[pegar texto de abajo]" > test.sh , donde x es el id del host deseado.

Iniciando el servidor

En el host que funcionara como servidor corremos el comando h[x] while true; do { echo -e 'HTTP/1.1 200 OK\r\n'; sh test.sh; } | nc -l 1234 -q 1; done &, donde x es el id del host deseado.

Accediendo al servidor

En cualquier otro host que tenga conectividad con el server solo tienes que realizar h[x] curl -X GET http://_ipdelserver_:124 , siendo x el id de cualquier host. Asi podras ver tu web servida En caso de acceder desde una consola se puede instalar el software w3m y con este navegador par aconsola acceder a la web.