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.379 ]

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


Estruturando a rede com Mininet



Iniciamos atualizando a lista de pacotes (apt-get update) e em seguida instalando o Mininet na pasta home do usuário corrente no Linux-Ubuntu-22-4-Desktop (https://ubuntu.com/download). A instalação pode ser feita de duas formas, são elas:

Baixar o mininet (https://mininet.org/download/) na pasta home do usuário clicando na opção 2: instalação do código nativo (Option 2: Native Installation from Source), em seguida utilizar o comando:

git clone https://github.com/mininet/mininet

Não esqueça de instalar a ferramenta git antes ( sudo apt install git).

Em seguida basta entrar na pasta mininet/util e executar o script install.sh com o comando ./install.sh com permissão de root.

Utilizar o gerenciador de pacotes apt-get e instalar o pacote mininet por meio do comando apt-get install mininet. Ao finalizar basta listar o diretório do usuário e verá que as pastas mininet, pox, openflow, oflops, oftest e snap estarão disponíveis para o usuário.


Depois de escolher uma das opções, crie seu arquivo com rede customizada. Para efeito criei o arquivo: redeCristofe.py e execute o comando de acordo com a Tabela 1.

Customizando minha Topologia

Acesso por duas direções:

host --- switch --- switch --- host

Adding the 'topos' dict with a key/value pair to generate our newly defined

topology enables one to pass in '--topo=mytopo' from the command line.

Arquivo: redeCristofe.py:

#importando a biblioteca mininet.top
from mininet.topo import Topo

class RedeCristofe ( Topo ):
    #"redeCristofe de topologia simples."

    def build( self ):
        #"Criando a rede customizada"

        # Adicionando os Hosts e Switchs
        Host1 = self.addHost( 'maquina1' )
        Host2 = self.addHost( 'maquina2' )
        Host3 = self.addHost( 'maquina3' )
        Host4 = self.addHost( 'maquina4' )
        Switch1 = self.addSwitch( 'switch1' )

        # Adicionando os links, portas do switch onde as máquinas estão plugadas
        self.addLink( Host1, Switch1 )
        self.addLink( Host2, Switch1 )
        self.addLink( Host3, Switch1 )
        self.addLink( Host4, Switch1 )


topos = { 'redecristofe': ( lambda: RedeCristofe() ) }


De acordo com a Tabela 1. O mininet criou a rede que foi programada no arquivo customizado redeCristofe.py , foi utilizado o comando:

sudo mn --custom redeCristofe.py --topo redecristofe --controller=remote,ip=10.211.55.4/24,port=6633

Detalhamento do comando:
  • mn - Comando mininet para criar a rede
  • --custom - parâmetro para criar uma topologia customizada (arquivo redeCristofe.py)
  • --topo - setando a topologia criada no arquivo (redecristofe)
  • --controller=remote,ip=10.211.55.4/24,port=6633 - seta o controlador remoto


De acordo com o arquivo redeCristofe.py o mininet cria as 4 máquinas (maquina1, maquina2, maquina3, maquina4 ), 1 switch (switch1) e 1 controlador (c0), além disso estabelece os links configurados no arquivo e em seguida deixa uma CLI de comando para interação. Caso ache necessário pode criar uma rede sem a necessidade de customizar por meio de arquivo com o comando: sudo mn --topo Single,4,1 --controller=remote,ip=10.211.55.4/24,port=6633


Utilizando a CLI do mininet executando o comando: links podemos observar os links criados no arquivo redeCristofe.py. Entretanto, quando testamos o ping entre as máquinas com o comando pingall, o resultado é 100% dropado. Abra um novo terminal e vamos verificar a tabela de fluxo do switch1 executando o comando: sudo ovs-ofctl dump-flows switch1 . Observamos que não retorna nada, exatamente por que nada foi populado na tabela de fluxo, ou seja não há regras de repasse do tráfego e por isso o switch1 não repassou os pacotes de ping conforme comando pingall da Tabela 2.


Utilizando o comando:

sudo ovs-ofctl show switch1

Podemos verificar a conectividade do switch1 conforme arquivo redeCristofe.py. Ele possui 4 portas ligadas com cada uma das máquinas criadas com 10 GB cada. Entretanto, as regras ainda não foram configuradas. O comando descrito na Tabela 3 somente pode ser executado em um Open V-switch, pois eles suportam a configuração remota da tabela de fluxo com protocolo OpenFlow.

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

Fingerprint: Conhecimento TCP

Alta disponibilidade com CARP

Esgotando os recursos

Melhorando o nível de segurança com chflags

Leitura recomendada

Monitorando produtos no ML com Python 3 via BeautifulSoup

Scikit Learn: Projetando o futuro de suas APIs e aplicativos usando machine learning

Python + ADB

Python para pesquisadores: material didático

Python - Uma linguagem orientada a objetos

  
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