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: 2.266 ]

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

Melhorando o nível de segurança com chflags

Varredura bruta com NMAP

Um dia depois da inundação

Festa com SQL injection

Alta disponibilidade com CARP

Leitura recomendada

Python Flask Básico

Como criar um bot para curtir e comentar perfis do Instagram

Pydev - Preparando o Eclipse para o Python

Gerar senhas seguras com Python

Integração do ChatGPT em uma API 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