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.pya POX:pox/ext/. - Reglas para el firewall: copiar del repositorio
pox/ext/rules.rulesa 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.pya 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 firewallopython2 ./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 deiperfles falta permisos.El archivo
rules.ruleses 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 showlo cuál muestra mucha información de cada siwtch, la primer fila de respuesta de cada siwtch, contiene el dpid.