Вы находитесь на странице: 1из 7

Curso de Openflow para ClaraTech Cuenca, Ecuador 13-15/Nov/2012

Ejercicio: Creacin de Topologa y Regla Bsica


1) Inicie el mininet con el comando sudo mn para criar una topologa formada de 2 hosts, 1 switch e
1 controlador. Esta es la topologa default si no especifica otra.
Ahora use el comando dpctl para insertar una regla para el swich hacer una inundacin en todas sus
puertas (flood), simulando el comportamiento de un HUB (man dpctl)
Intente usar tambin el comando IPERF para hacer un test en la banda entre los hosts (iperf h2 h3)

2) Ahora intente crear una nueva topologa con 3 hosts ligados a un switch y un controlador y
insiera una regla para hacer que todos puedan conectar con todos (teste con ping). Repita el test con
IPERF entre ellos.

Curso de Openflow para ClaraTech Cuenca, Ecuador 13-15/Nov/2012


Ejercicio: Redes Sobrepuestas


El Escenario:
El escenario consta de 5 estaciones de trabajo (H5, H6, H7, H8 y H9) y 4 switches (S1, S2, S3 y
S4). Aunque todos los nodos estn en la misma red nivel 3, esta funcionalidad exige que se dividen
en dos redes distintas separadas (que no se hablan).
La primera red consiste H5, H7 y H9.
La segunda est formado por H6, H8 y H9.
Como se puede ver H9 es parte de las dos redes, sin embargo los otros nodos deben ser
aislados de acuerdo a su red.


LA TOPOLOGA
Para crear este escenario en MiniNet primero tiene que crear la topologa. Dentro de la carpeta
mininet puede encontrar otra carpeta llamada custom. Dentro de ella debe ser colocado todas las
topologas criadas en MiniNet. La topologa personalizada son creadas a partir de scripts escritos en
Python que son interpretados por MiniNet.

INICIANDO UNA TOPOLOGIA PESSONALIZADA


La topologa de este ejercicio est lista en /home/openflow/mininet/custom/mytopo.py . Mira el
archivo para ver como esta programada
openflow@openflowvm:~$ less /home/openflow/mininet/custom/mytopo.py

Para ejecutar su propia topologa personalizada en MiniNet slo necesita acrecentar --custom
[nombre-de-la-topologa] cuando ejecuta al mininet.
Opcionalmente se puede cargar secuencias de comandos para ejecutar en MiniNet luego que el
inicia su ejecucin. En general puede hacerlo comando a comando directamente en mininet, pero a
cada vez que ejectalo necesita hacerlo nuevamente. Por eso se prefiere utilizarse scripts que hacen
la configuracin final de la topologa, como por ejemplo configurar las direcciones IP y alguna ruta
default para las estaciones de trabajo. En este ejemplo hay un script en
/home/openflow/mininet/custom/mytopo-cli.py que hace esta segunda parte de la configuracin.
Este script puede ser accionado de dos forma: Por la directiva --pre de mininet a por el comando
mininet> source cuando ya est ejecutando mininet.
El mininet necesita ser ejecutado como superusuario (es un requisito). Con los parmetros correctos
invoca la topologa (mytopo.py) y su configuracin de direcciones y rutas (mytopo-cli.py)
openflow@openflowvm:~$ sudo mn --custom ./mininet/custom/mytopo.py --topo mytopo --switch
ovsk --controller remote --mac --pre ./mininet/custom/mytopo-cli
En la carpeta /home/openflow existe un script llamado mininet.txt, que inicia el mininet con esa
topologa. Puedes usarlo para facilitar la ejecucin sin necesitar digitar todos los comandos.
#sh x mininet.txt
OBS: estos scripts no hacen parte de la VM original de NOX, solo estn ah para dejar mas sencillo
el ejercicio.

CONFIGURANDO LOS SWITCHES COM DPCTL


Con la topologa creada y la configuraciones de las estaciones de trabajo echas, ahora puedes a
empezar la configuracin de los equipos de red. Ahora solo tiene que poblar las tablas de flujo en
los conmutadores para que se comporten de acuerdo con las expectativas. Esto puede hacerse de dos
maneras: a partir de la programacin del controlador o por la insercin de reglas o por el comando
DPCTL. En este ejercicio vamos a usar solo el comando DPCTL.
Pero antes vea y teste los siguientes comandos en el mininet para ver para que sirven! O lea en el
manual del mininet (man mn)
mininet> help
Documented commands (type help <topic>):
========================================
EOF dump gterm intfs iperfudp net noecho pingpair quit source
dpctl exit help iperf link
nodes pingall py
sh xterm
Es importante decir que cada elemento (host o switch) que fue programado en la topologa tiene su
propia puerta TCP para comunicacin con mininet esta es la manera como mininet hace su
virtualizacion leve! Como el controlador por default ejecuta en la puerta 6633, todos los switches
siguen en las puertas subsecuentes (6634, 6635, etc.) as como van sendo creados (S1, S2, etc.). El
numero de la puerta es la manera como DPCTL enva sus comandos para programar cada un de los
switches:

mininet> nodes
available nodes are:
h5 h6 h7 h8 h9 s1 s2 s3 s4 c0
openflow@openflowvm:~$ netstat -a
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address
Foreign Address
tcp
0 0 *:6634
*:*
LISTEN
tcp
0 0 *:6635
*:*
LISTEN
tcp
0 0 *:6636
*:*
LISTEN
tcp
0 0 *:6637
*:*
LISTEN
tcp
0 0 *:ssh
*:*
LISTEN
tcp
0 0 localhost:6010
*:*
LISTEN
tcp
0 0 localhost:6011
*:*
LISTEN

State

Fijemos ahora en la figura del ejercicio, lo qu pide y cual es el algoritmo a ser usado.
En la figura podemos ver que los flujos originados por H5 deben entrar por una puerta (la puerta1
del S1) y que sale por el puerto del switch S1 (la puerta 3 del S1). Fija te que existen flujos de
retorno a la inversa.
Un patrn muy similar se observa en H6, que utiliza sin embargo la puerta 2 y 4. As podemos
comenzar a insertar los flujos.
OBS: Si tiene dudas de las puertas mira la configuracin en mininet y numera la figura del ejercicio
con las puertas de cada switch cmo fue programado en la topologa! (mininet> dump)
Para insertar un flujo en la tabla de flujos del Switch S1 se usa el siguiente comando:
dpctl add-flow tcp:127.0.0.1:6634 in_port=1,idle_timeout=0,actions=output:3
Este flujo indica que todos los paquetes que llegan a travs de la primera puerta debe ser enrutado a
travs de la puerta 3. De manera inversa vamos a poner el flujo para el paquete poder volver:
dpctl add-flow tcp:127.0.0.1:6634 in_port=3,idle_timeout=0,actions=output:1
De la misma manera podemos ahora implementar los flujos de H6 (Host 6) en el S1 (Switch 1)
dpctl add-flow tcp:127.0.0.1:6634 in_port=2,idle_timeout=0,actions=output:4
dpctl add-flow tcp:127.0.0.1:6634 in_port=4,idle_timeout=0,actions=output:2
Todos los flujos de switch 1 que llega en la puerta 2 deben ser encaminados a travs de la puerta 4 y
todos que llegaren al puerta 4 se envan a travs de la puerta 2.
Mediante el anlisis de la figura es de nuevo posible verificar que los conmutadores 2 y 3 tiene un
comportamiento similar al que lo aplicamos antes, pues enva todos los paquetes entrantes en el
puerto 1 al puerto 2 y viceversa. Entonces en el switch S2 se lo hace la siguiente configuracin
dpctl add-flow tcp:127.0.0.1:6635 in_port=1,idle_timeout=0,actions=output:2
dpctl add-flow tcp:127.0.0.1:6635 in_port=2,idle_timeout=0,actions=output:1
dpctl add-flow tcp:127.0.0.1:6636 in_port=1,idle_timeout=0,actions=output:2
dpctl add-flow tcp:127.0.0.1:6636 in_port=2,idle_timeout=0,actions=output:1

Al llegar a switch S4 podemos ver que las cosas se ponen un poco ms complejas. La primera cosa
que todos tienen en comn es que todos los que quieran comunicarse con H9 debe enviar un
paquete al puerto 5.
dpctl add-flow tcp:127.0.0.1:6637 ip,nw_dst=10.0.0.9,idle_timeout=0,actions=output:5
Hummm, entonces si H5 desea comunicarse con H7 el switch S4 debe encaminar los paquetes
que llegan en la puerta 1 al la puerta 3, correcto? S, pero generara un conflicto. Si H5 desea
enviar un paquete para H9 a cul de las dos reglas el switch S4 debe utilizar?
Encaminar los paquetes para el Host H9 por la puerta 5 o
Encaminar todos los paquetes que llegan por la puerta 1 para la puerta 3?
Para nosotros sera fcil de elegir, entretanto es necesario aplicar esta regla en la tabla de flujo,
dando una prioridad ms grande o menor para un flujo. En este caso poner una prioridad menor
para los flujos que llegan a la puerta uno (1) del switch S4.
dpctl add-flow tcp:127.0.0.1:6637
in_port=1,idle_timeout=0,priority=1,idle_timeout=0,actions=output:3
La misma lgica el puede ser aplicada en el Switch S4 cuando H7 se comunica con H5, H6 con H8
y H8 con H9.
dpctl add-flow tcp:127.0.0.1:6637
in_port=3,idle_timeout=0,priority=1,idle_timeout=0,actions=output:1
dpctl add-flow tcp:127.0.0.1:6637 in_port=2,idle_timeout=0,priority=1,actions=output:4
dpctl add-flow tcp:127.0.0.1:6637 in_port=4,idle_timeout=0,priority=1,actions=output:2
Ahora solo hace falta insertar los flujos que salen de H9!
Si H9 enva un paquete para H5 podramos decir que lo que llega en S4 por la puerta 5 o con la
direccin IP de H9 y destino al IP de H5 debe ser encaminado por la puerta 1. La misma idea puede
ser aplicada a los otros destinos de H9.
Para insertar una entrada en la tabla de flujo con un flujo IP, la especificacin dice que debemos
insertar el protocol ETHERNET, que en nuestro caso iba a ser dl_type=0x0800, o podemos
simplemente decir que ele un flujo IP! Entonces, basta poner en el switch S4:
dpctl add-flow tcp:127.0.0.1:6637
ip,nw_src=10.0.0.9,nw_dst=10.0.0.5,priority=10,idle_timeout=0,actions=output:1
dpctl add-flow tcp:127.0.0.1:6637
ip,nw_src=10.0.0.9,nw_dst=10.0.0.6,priority=10,idle_timeout=0,actions=output:2
dpctl add-flow tcp:127.0.0.1:6637
ip,nw_src=10.0.0.9,nw_dst=10.0.0.7,priority=10,idle_timeout=0,actions=output:3
dpctl add-flow tcp:127.0.0.1:6637
ip,nw_src=10.0.0.9,nw_dst=10.0.0.8,priority=10,idle_timeout=0,actions=output:4
Listo!!!!
Ahora tenemos todos los flujos necesarios y solo necesario poner la arquitectura en practica.
Intente usar el comando pingall del mininet en cada host y vea lo que ocurre!

Hubo algo errado?


He funcionado como esperado?
Lo que ocurre es que cuando hicimos la definicin que los flujos de H9 eran IP nos
olvidamos del protocolo ARP. Bueno, entonces es solos definir en el switch S4 las mismas reglas
de IP para ARP, recordando que para los flujos ARP el cdigo Ethernet es 0x0806.
dpctl add-flow tcp:127.0.0.1:6637 priority=1,idle_timeout=0,arp,nw_dst=10.0.0.9,actions=output:5
dpctl add-flow tcp:127.0.0.1:6637 priority=1,idle_timeout=0,arp,in_port=5,actions=flood
Pero, al contrario de hacer una definicin de flujo para cada accin de H9, podemos decir para H9
encaminar para todas las otras puertas (flood o broadcast).

PISTAS:
Experimente ver los flujos que est instalados en las tablas de los switches
dpctl dump-flows tcp:127.0.0.1:6634
Ejecute el wireshark para ver los paquetes de control de OpenFlow en la interface lo0
Sudo wireshark &

Curso de Openflow para ClaraTech Cuenca, Ecuador 13-15/Nov/2012


Ejercicio: Enrutamiento con Openflow
Crear una topologa de rbol en MiniNet con anchura y profundidad 2 (como la figura).
Los hosts conectados a S6 debe pertenecer a 10.0.0.0/25 red y los conectado a S7 deben pertenecer
a la red 10.0.0.128/25. Fija te que es esperado que los equipos implementen el enrutamiento como
se fuera una red con switches y enrutadores normales. Pero ahora vas a hacerlo solamente com el
manose de flujos en openflow.
Despus de configurar las direcciones de los hosts y la topologa, crea las tablas de flujo utilizando
el comando DPCTL, de manera que cada uno de todos los hosts pueden comunicarse entre s.

Вам также может понравиться