Requisitos previos respecto a POX, por única vez, copiar del repositorio a la carpeta original de POX en la computadora:
- Firewall: copiar del repositorio
pox/ext/firewall.py
a POX:pox/ext/
. - Reglas para el firewall: copiar del repositorio
pox/ext/rules.rules
a POX:pox/ext
. - Opcional: Bug fix ("ERROR:packet:(dns) parsing questions: ord() expected string of length 1, but int found..."): copiar del repositorio
pox/pox/lib/packet/dns.py
a POX:pox/pox/lib/packet/
.
Explicación para Linux Ubuntu.
-
Abrir una terminal.
-
Entrar en la carpeta de POX
cd path/to/pox
. -
Ejecutar
./pox.py log.level --DEBUG firewall
opython2 ./pox.py log.level --DEBUG firewall
.
-
-
Abrir otra terminal, para Mininet.
-
Entrar en la carpeta del repositorio:
cd path/to/SDN
. -
Ejecutar
sudo mn --custom topo.py --topo customTopo,num_switches=4 --mac --arp --switch ovsk --controller remote,ip=127.0.0.1,port=6633
(se puede cambiar la cantidad de switches).
-
-
Ejecutar en la terminal de mininet:
-
xterm host_1 host_2
. Esto abrirá 2 terminales, tienen que estar en modo root, sino a los comandos deiperf
les falta permisos. -
El archivo
rules.rules
es un json que tiene las reglas, se puede cambiar para probar con otros switches. Se pueden agregar reglas al gusto agregando otro objeto a la lista de reglas.
-
-
Pruebas:
-
Descartar mensajes del puerto 80:
- En host_1:
iperf -s -p 80
(servidor) - En host_2:
iperf -c 10.0.0.1 -p 80
(cliente)
- En host_1:
-
Descartar mensajes de UDP con puerto destino 5001 del host 1:
- En host_2:
iperf -s -u -p 5001
(servidor) - En host_1:
iperf -c 10.0.0.2 -u -p 5001
(cliente)
- En host_2:
-
Descartar mensajes de 2 hosts cualquiera: (o sino con pingall es mas directa la prueba)
-
En host_2:
iperf -s -u -p 6969
(servidor) -
En host_3:
iperf -c 10.0.0.2 -u -p 6969
(cliente) -
En host_3:
iperf -s -u -p 6969
(servidor) -
En host_2: (primero interrumpir servidor)
iperf -c 10.0.0.3 -u -p 6969
(cliente)
-
-
-
Notas: para obtener el dpid (datapath id) de un switch y poder aplicarle reglas a este específicamente, se puede correr en mininet
dpctl show
lo cuál muestra mucha información de cada siwtch, la primer fila de respuesta de cada siwtch, contiene el dpid.