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

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

Varredura bruta com NMAP

Festa com SQL injection

Melhorando o nível de segurança com chflags

Backups com TAR e DUMP

Esgotando os recursos

Leitura recomendada

Como baixar fotos e vídeos do Instagram com Python

Construindo um portscanner TCP com Python

Programe em Python no jogo Minecraft com seu filho ou sozinho

Como baixar vídeos do Facebook via terminal

Embutindo imagens nos scripts Python para aplicações Tkinter

  
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