Академический Документы
Профессиональный Документы
Культура Документы
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.
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.
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.
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!
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 &