Redes definidas por Software com Mininet e POX - Criando meu primeiro Controlador

A proposta deste estudo é servir como guia básico para iniciantes com redes SDN. O propósito não é esgotar o assunto, e sim traçar um passo a passo na arte de redes de computadores e de sensores utilizando controladores. Para desenvolvimento deste estudo foi considerado que o leitor tem conhecimento básico em protocolos de rede e sistemas operacionais.

[ Hits: 1.931 ]

Por: cristofe coelho lopes da rocha em 01/01/2024


Colocando o POX em ação



POX é um controlador SDN que utiliza o protocolo OpenFlow e é desenvolvido na linguagem python. Dependendo da versão que estiver utilizando da linguagem, ela poderá apresentar alguns problemas na execução. Portanto, sugiro acompanhar os logs que definir ao executar o POX (tail -f /tmp/mylog.log).

Para instalar o controlador POX você deve baixar por meio do comando:
git clone http://github.com/noxrepo/pox

E, em seguida, entre na pasta POX e coloque o arquivo do controlador na pasta EXT. Para efeito didático foi criado o arquivo mycontroller\.py , embora o arquivo tenha a extensão .py, no momento de iniciar o POX você deve chamar apenas o nome do controlador, no caso o mycontroller, pois o controlador foi mapeado pelo POX.

Arquivo: mycontroller.py
	
#importando as bibliotecas
import pox.openflow.libopenflow_01 as of
from pox.core import core
from pox.lib.revent import *

#chamando o modulo para log
log = core.getLogger()


class mycontroller(EventMixin):    
switches = {}
    def __init__(self):
        self.listenTo(core.openflow)

    def _handle_ConnectionUp(self, event):
        log.debug("Connection UP from %s", event.dpid)
        mycontroller.switches[event.dpid] = event.connection

    def _handle_PacketIn(self, event):
        # Implemente a lógica para lidar com pacotes aqui
        pass

def launch():
    core.openflow.miss_send_len = 1024
    core.registerNew(mycontroller)


De acordo com a Tabela 4. O POX foi iniciado com o comando:

sudo python3 pox.py --verbose mycontroller py log --no-default --file=/tmp/mylog.log

Detalhamento do comando:
  • python3 pox.py - Execução do POX
  • --verbose - Inicia o POX expandindo os log da execução
  • mycontroller - Nome do controlador sem a extensão .py
  • py - solicitando o CLI do python
  • log - logando a execução
  • --file=/tmp/mylog.log - definindo o arquivo de log


Como falado anteriormente, a tabela de fluxo do V-switch criado pelo mininet com o nome de switch1, não retornou nada, pois não definimos nenhuma regra. No arquivo mycontroller\.py a linha: def _handle_PacketIn define as regras, como podemos observar nenhuma regra foi definida.


Podemos observar que as regras foram atribuídas para as máquinas que estavam na porta 1 e 3. Como as demais não foram configuradas, o repasse do tráfego se deu apenas nas maquinas1 e maquina3. O mesmo teste pode ser realizado utilizando o comando: maquina1 ping maquina3 ou maquina3 ping maquina1 . O ping vai retornar porque as regras foram adicionadas.


Dropando os pacotes

Arquivo: mycontrollerDROP.py
import pox.openflow.libopenflow_01 as of
from pox.core import core
from pox.lib.revent import *
from pox.lib.addresses import EthAddr, IPAddr
from pox.lib.util import dpidToStr
log = core.getLogger()

class mycontroller(EventMixin):
    switches = {}
    def __init__(self):
        self.listenTo(core.openflow)

    def _handle_ConnectionUp(self, event):
        log.debug("Connection UP from %s", event.dpid)
        mycontroller.switches[event.dpid] = event.connection

    def _handle_PacketIn(self, event):
        packet = event.parsed
        #Drop packetpass
        msg = of.ofp_flow_mod()
        msg.match.in_port = event.port
        msg.match.dl_src = packet.src
        msg.match.dl_dst = packet.dst
        event.connection.send(msg)
        log.debug(" Drop packet sw=%s in_port=%s src=%s dst=%s" % (event.dpid, event.port, packet.src, packet.dst))

def launch():
    core.openflow.miss_send_len = 1024
    core.registerNew(mycontroller)


Subindo o controlador com as novas regras podemos observar que os pacotes estão sendo dropados.

Página anterior     Próxima página

Páginas do artigo
   1. Entendendo o quebra-cabeças
   2. Estruturando a rede com Mininet
   3. Colocando o POX em ação
   4. Considerações e Agradecimentos
Outros artigos deste autor

Festa com SQL injection

Melhorando o nível de segurança com chflags

Backups com TAR e DUMP

Fingerprint: Conhecimento TCP

Um dia depois da inundação

Leitura recomendada

Sockets em Python

Python - Usando requests anônimos através da rede Tor

rwd - Restart When Down

Breve Estudo Sobre Ransomwares e Análise Estática/Dinâmica do WannaCry

Interagindo com servidores HTTP com Python

  
Comentários
[1] Comentário enviado por maurixnovatrento em 14/01/2024 - 13:07h


Ótimo artigo.

___________________________________________________________
https://www.youtube.com/@LinuxDicasPro
https://github.com/mxnt10


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts