No contexto de redes de computadores, bem como em outros ramos ligados à computação, é comum a necessidade de ter que lidar a todo momento com componentes lógicos (softwares de monitoramento e gerência, de segurança, serviços de rede, etc) e componentes físicos (switches, roteadores, cabeamento, dentre outros). Por conta disso, em muitos casos, há certa dificuldade ao projetar ou desenvolver novos recursos (de hardware ou software) para redes, já que nem sempre se tem a disposição um ambiente real para desempenhar tal atividade.
Alguns exemplos podem envolver tarefas, como testar configurações de rede, projetar topologias de redes que atendem casos específicos (como Data Centers), desenvolver novos algoritmos de rede (roteamento, balanceamento de carga, etc.), além de muitas outras possibilidades.
Uma forma interessante de suprir necessidades dessa natureza, é fazer o uso de softwares que fornecem meios de construir ambientes virtuais similares aos reais, onde se pode explorar à vontade, de modo que as experiências obtidas de forma virtual, possam ser aplicadas no mundo real.
O
Mininet é, sem dúvidas, uma ótima ferramenta para essa e outras finalidades!
O que é o Mininet
Mininet é um emulador de redes de código aberto (escrito em Python), desenvolvido inicialmente por alunos e professores da Universidade Stanford e atualmente mantido por uma comunidade de desenvolvedores.
O primeiro ponto importante para compreender o Mininet, é ter em mente que ele não é um simulador, mas sim um emulador. Na prática, isso significa que componentes da rede emulada podem executar aplicações reais e até se comunicar com redes reais. É possível, por exemplo, executar scripts, códigos (programas) próprios ou mesmo aplicações prontas (servidor Web, DNS, Firewall, etc.) nos hosts da rede emulada.
Outro aspecto relevante, é que ele constrói ambientes SDN (Redes Definidas por Software). De maneira resumida, SDN é uma nova abordagem para planejar, construir e gerenciar redes, separando o "plano de dados" do "plano de controle". Em outras palavras, em SDN, os elementos da rede se resumem a simples comutadores genéricos que são sabem tomar decisões (definir por conta própria para onde cada dado deve ser direcionado), sabem apenas encaminhar dados seguindo as regras de fluxo que são repassadas pelo(s) controlador(es) da rede.
Isso possibilita uma enorme liberdade para criar topologias e comportamentos das mais variadas formas, já que, por exemplo, um comutador genérico pode se comportar como um switch de camada 2 ou se portar como um roteador (camada 3), de acordo com as regras que o controlador da rede ditar.
Existem três formas de operar o Mininet:
- Interface gráfica
- Linha de comando
- Codificação em Python
Na realidade, elas são complementares. A interface gráfica é provida pelo MiniEdit (um arquivo Python que vem junto à instalação do Mininet), que fornece alguns recursos que possibilitam a criação de topologias de rede de uma forma visual (semelhante ao simulado Cisco Packet Tracker). A linha de comando oferece uma gama ainda maior de funcionalidades e normalmente é utilizada em conjunto com códigos Python.
Talvez o ponto chave do Mininet é sua programabilidade, ou seja, fornecer meios de construir topologias de redes emuladas de forma rápida e automatizada. Por exemplo, é totalmente possível e viável criar cenários manualmente com algumas unidades ou dezenas de elementos (hosts, switches, etc.) utilizando a interface gráfica do MiniEdit, porém é muito trabalhoso e até inviável usar o mesmo método para topologias com centenas ou milhares de elementos. Para escalas maiores (e pequenas também), esse trabalho pode ser feito por scripts Python que fazem tudo de forma automatizada.
Por conta de todas essas características, o Mininet é excelente para pesquisa, desenvolvimento e aprendizagem de redes.
Recursos e Possibilidades
Segue uma pequena lista do que o Mininet suporta:
- Oferece suporte a vários controladores SDN como POX, Ryu e NOX.
- Os hosts são Linux "reais" que podem executar, potencialmente, qualquer programa que rode em Linux.
- Possibilita análise de tráfego através da captura de pacotes usando, por exemplo, o Wireshark ou TCPDUMP.
- Permite testes de conectividade com ping ou de medidas de desempenho com iperf.
- É possível criar links com largura de banda (bandwidth) específicos, além de desativar e ativar os links.
- Configurar diretórios individuais para cada host usar como se fosse seu armazenamento secundário (HD).
Exemplos de algumas tarefas que se pode fazer com Mininet:
- Criar pequenas topologias para compreender o funcionamento de SDN e aprender a trabalhar com o protocolo OpenFlow.
- Configurar, por exemplo, um servidor WEB em um determinado host da rede emulada e, em outro host, "chamar" pelo terminal um navegador WEB (Firefox, Google Chrome, etc.) e usá-lo para acessar seu host com o serviço WEB.
- Montar um cenário com vários elementos de rede e capturar o tráfego que passa por cada um deles para entender como funciona a comunicação em rede.
- Elaborar cenários para implementar algoritmos de roteamento existentes ou mesmo criar seus próprios.
Na verdade, esses são apenas alguns exemplos do que dá para fazer com o Mininet, de acordo com suas necessidades e imaginação, é possível explorar muitos outros casos de uso.
Veja aqui, outros exemplos de uso do Mininet (incluindo códigos):
Limitações
Atualmente, existem duas principais limitações no Mininet, apresentadas em sua própria página oficial:
- As redes baseadas em Mininet não podem exceder a CPU ou a largura de banda disponível em seu host real.
- Não é possível executar switches ou aplicativos OpenFlow não compatíveis com Linux.
São limitações aceitáveis, já que uma é dependente de hardware e a outra está relacionada à plataforma Linux. Além disso, na prática, isso não tem sido um grande problema.
Pode existir ainda outras limitações em casos de uso específicos, mas que normalmente estão mais relacionadas a outras tecnologias (hardware, aplicações, padrões, etc.), do que ao próprio Mininet.
Conclusão
Esse artigo apresentou apenas uma visão geral do emulador de redes Mininet. Espera-se com isso, disseminar informações e colaborar com o despertar de interesse pela ferramenta.
Caso tenha mais informações, ou sugestões interessantes sobre o assunto, sinta-se à vontade para compartilhar com a gente nos comentários!
Referências