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.