Laboratorio virtual de SDN

Es necesario poner el practica los conceptos aprendidos en la publicación anterior y realizar alguna prueba de concepto. Para ello he creado un proyecto en Vagrant el cual instala y configura un laboratorio de Software-Defined Network (SDN). A lo largo de esta publicación explicare los pasos del proceso de instalación para las distintas herramientas utilizadas y el como ejecutar una serie de ejercicios a modo de ejemplo.

El primer conjunto de instrucciones hace referencia a la instalación de Mininet. Esta aplicación nos permite emular una red virtual mediante la creación y conexión de hosts y switches. Existen tres maneras de obtener Mininet:

  1. Descargando una máquina virtual que previamente fue configurada desde su catalogo oficial.
  2. Mediante la instalación desde paquetes binarios (Ubuntu Trusty). Esto se logra mediante la ejecución del siguiente comando:
  3. # apt-get install -y mininet
    
    
  4. Por ultimo, mediante la instalación desde el código fuente. Este es el proceso utilizado en nuestro laboratorio, y se realiza con los siguientes comandos:
  5. 
    # apt-get install -y git
    # git clone https://github.com/mininet/mininet
    # bash mininet/util/install.sh
    
    

Una vez que tenemos instalado Mininet, el cual necesitaremos para la emulación de nuestra infraestructura, pasaremos a la instalación de un controlador. En este caso utilizaremos OpenDayLight (ODL), el cual ofrece una plataforma funcional de SDN. Distintas versiones de OpenDayLight son ofrecidas desde su repositorio oficial, por lo tanto solo es necesario realizar dos acciones:

  1. Instalar la maquina virtual de java
    
    # apt-get update -y
    # apt-get install -y software-properties-common
    # add-apt-repository -y ppa:openjdk-r/ppa
    # apt-get update -y
    # apt-get install -y openjdk-8-jdk
    
    
  2. Descargar, descomprimir e inicar la version de OpenDayLight deseada
    
    $ odl_release=0.6.0-Carbon
    $ odl_distribution=distribution-karaf
    $ wget https://nexus.opendaylight.org/content/groups/public/org/opendaylight/integration/$odl_distribution/$odl_release/$odl_distribution-$odl_release.tar.gz
    $ tar xf $odl_distribution-$odl_release.tar.gz
    $ cd $odl_distribution-$odl_release
    $ export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/jre
    $ ./bin/start
    
    

Una vez iniciado el servicio de karaf, necesitaremos agregar mas funcionalidades que nos ayudaran a visualizar y conectar nuestro infraestructura virtual. Esto se logra a traves de la instalación de features desde el servicio.


./bin/client feature:install odl-dlux-core odl-dluxapps-topology odl-restconf odl-l2switch-switch

Dado que Mininet fue escrito en python es posible crear una aplicación que nos genere una infraestructura virtual dinámicamente, el siguiente ejemplo muestra como utilizar clases y modulos para generar una infraestructura virtual con Mininet.

from mininet.topo import Topo

class MyTopo( Topo ):
    "Simple topology example."

    def __init__( self ):
        "Create custom topo."

        # Initialize topology
        Topo.__init__( self )

        # Add hosts and switches
        leftHost = self.addHost( 'h1' )
        rightHost = self.addHost( 'h2' )
        leftSwitch = self.addSwitch( 's3' )
        rightSwitch = self.addSwitch( 's4' )

        # Add links
        self.addLink( leftHost, leftSwitch )
        self.addLink( leftSwitch, rightSwitch )
        self.addLink( rightSwitch, rightHost )


topos = { 'mytopo': ( lambda: MyTopo() ) }"

Por ultimo es necesario especificar la URL de la API del Controlador(OpenDayLight), en nuestro ejemplo este servicio se encuentra instalado en la misma máquina por lo que se utilizara la dirección del localhost. Los siguientes dos comandos nos permitirán capturar información necesaria para mostrar los componentes, el primero es para generar y conectar la infraestructura virtual con el controlador y el segundo solo que generará trafico.

# mn --custom ~/topologies/example01.py --topo mytopo --controller=remote,ip=127.0.0.1,port=6633
*** Creating network
*** Adding controller
*** Adding hosts:
h1 h2
*** Adding switches:
s3 s4
*** Adding links:
(h1, s3) (s3, s4) (s4, h2)
*** Configuring hosts
h1 h2
*** Starting controller
c0
*** Starting 2 switches
s3 s4 ...
*** Starting CLI:
mininet> pingall
*** Ping: testing ping reachability
h1 -> h2
h2 -> h1
*** Results: 0% dropped (2/2 received)

Uno de los features instalados (DLUX para ser mas precisos) en el Controlador nos permite acceder mediante un portal a ODL. Escribiendo la URL http://10.0.0.2:8181/index.html en cualquier navegador de internet y especificando las credenciales del usuario «admin» con la contraseña «admin«.