Controlador POX

O Controlador POX

O principal componente de uma Rede Definida por Software, como já apresentado, é o controlador das Redes Baseadas em Softwares, também chamado de sistema operacional de rede. O controlador é o que define a natureza deste paradigma. É o componente responsável por concentrar a comunicação com todos os elementos programáveis da rede, oferecendo uma visão unificada da rede.

A maneira de como desenvolver aplicações para Redes Baseadas em Softwares depende muito da linguagem de programação em que o controlador foi desenvolvido bem como sua arquitetura e complexidade. Entre todos os controladores destacados é apresentado o POX, um controlador SDN
desenvolvido especificamente para fins de pesquisa e ensino.

Esta postagem apresenta as principais características do POX, os detalhes da sua arquitetura e os elementos principais para a programação de componentes do mesmo de acordo com as especificações encontradas em POX Wiki, abaixo o link.

https://openflow.stanford.edu/display/ONL/POX+Wiki

Capacidades do POX

O POX vêm sendo desenvolvido com o objetivo de substituir o NOX em iniciativas de pesquisa e ensino. Ele é considerado o irmão mais novo do NOX, sua essência é uma plataforma simples para o desenvolvimento e prototipagem rápida de software de controle de rede usando o Python.

O objetivo dos desenvolvedores é que ele a venha substituir o NOX nos casos em que o desempenho não seja um requisito crítico. Como pode-se ver na Figura 1, observamos que o desempenho do NOX sendo executado em C++ é superior ao POX, porém nos casos em que o NOX é executado em Python o POX é mais eficiente oferecendo um melhor desempenho. Além disso o POX traz consigo uma interface mais moderna e uma pilha SDN mais elegante. Por esses motivos é que o POX é considerado para fins de pesquisa e ensino no desenvolvimento de aplicações SDN.

(a) Teste de latência(ms/fluxo)

(b) Teste de vazão(fluxo/seg)

Instalação do POX

Para se executar o POX é necessário ter o Python 2.7 ou superior instalado no seu sistema operacional. O POX é suportado pelos sistemas Windows, Mac OS e Linux, sendo este último o mais recomendado. O POX é distribuído e hospedado no github em https://github.com/noxrepo/pox

Executando o POX

Para se iniciar o POX é necessário executar o módulo pox.py , para isso fazemos "./pox.py" em um terminal. O POX tem algumas opções de inicialização que podem ser usadas na linha de comando, são elas:

−−verbose : Para exibir informações extras, muito útil para a depuração de problemas de inicialização.
−− no-cli : Serve para que não inicialize a interface interativa de comandos (não é muito útil).
−−no-openflowNão inicializará o módulo openflow automaticamente.


Executar o POX sem nenhum módulo não faz muito sentido. O POX funciona a partir de módulos e componentes, no qual o público-alvo são os pesquisadores que queiram desenvolver seus próprios componentes. Dessa forma os pesquisadores tem apenas o trabalho de desenvolver seus componentes e executá-los no POX. Para executar os componentes basta especificá-los na linha de comando após qualquer uma das opções acima ou apenas após a chamada do módulo pox.py dessa forma:

./pox.py --no-cli [meu módulo]

É possível especificar vários componentes na linha de comando. Em geral alguns componentes não funcionam bem em conjunto e alguns componentes dependem de outros componentes, isso dependerá muito do ambiente de trabalho do pesquisador. Dessa forma é possível especificar vários componentes da seguinte maneira:

./pox.py --no-cli [módulo 1] --[opção] [módulo2] --[opção]


No caso em que o pesquisador precise iniciar muitos módulos com muitas opções a linha de comando pode ficar um pouco confusa, para isso basta escrever um componente simples que lança outros componentes.

Componentes do POX

Os componentes do POX são programas que são executados no controlador, em outras palavras os componentes fornecem as funções para que o controlador trabalhe em uma rede SDN de acordo com a política do(s) componente(s). Dessa forma quando se fala em componentes para o POX quer-se dizer o que é possível colocar na linha de comando do POX em sua inicialização.

O POX já traz consigo alguns componentes básicos entre eles há alguns convenientes para testes e há outros que são apenas exemplos, mas a intenção é que o pesquisador possa criar seu próprio componente. Abaixo a uma lista com alguns deles e sua descrição.

Descrição dos Elementos do POX

A seguir é apresentado a descrição dos componentes básicos do POX:

py : Este componente inicializa um interpretador Python para a depuração interativa. Este componente é executado automaticamente se a opção ”−−no−cli ” estiver desabilitada.
forwarding.l2_learning : Este componente faz com que os switches OpenFlow funcionem como switches de aprendizagem de camada dois. No entanto ele instala fluxos extras para conexões com o
mesmo origem/destino, por exemplo, conexões com origens distintas e destinos iguais possuem dois fluxos distintos.

forwarding.l2_pairs : O mesmo que o ”forwarding.l2_learning”, no entanto este é mais simples e mais correto, ele instala regras baseadas puramente em endereços MAC não levando a consideração origem e destino.

forwarding.l3_learning : Este componentes não chega a ser um roteador, mas opera em camada três. Ele é uma espécie de switch de camada três, operando exatamente como um switch de camada dois com a diferença entre os endereçamentos de MAC para IP.

forwarding.l2_multi : Este componente haje como os outros switches de aprendizagem, a diferença está em ambientes com múltiplos switches. Neste componente quando um switch aprende um endereço MAC todos os outros das rede também aprendem, para isso este componente utiliza outro componente, o openflow.discovery .

openflow.spanning_tree : Este componente usa componentes de descoberta para construir uma visão da topologia da rede e transformar esta topologia em uma árvore. Seu objetivo é desativar inundação em portas de switches que não estão nesta árvore. Isso faz com que topologias que tenham laços não realize transmissões inúteis na rede. Este componente assemelha-se ao efeito produzido pelo o Protocolo Spanning Tree(é um protocolo para equipamentos de rede que permite resolver problemas de laços em redes(loops lógicos) comutadas cuja topologia introduza anéis nas ligações), mas realizando isso de uma forma diferente.

web.webcore : Este componente inicia um servidor web dentro do processo do POX. Dessa forma outros componentes podem interagir com ele fornecendo conteúdos estáticos e dinâmicos.

messenger : Este é um componente que fornece o uma interface para o POX realizar conexões por meio de mensagens bidirecionais baseadas em JSON(JavaScript Object Notation, é um formato leve para intercâmbio de dados computacionais que pode ou não utilizar-se de JavaScript. Mais informações em http://www.json.org/ ).

openflow.of_01 : Este é o componente que se comunica com os switches OpenFlow 1.0. Normalmente ele é iniciado por padrão quando não é especificada a opção −−no−openflow. As vezes é necessário chamá-lo manualmente quando se quer modificar suas opções, por exemplo, qual interface ou porta ele está ligado.

openflow.discovery : Este componente descobre qual é a topologia da rede por meio de mensagens de controle entre os switches OpenFlow.

openflow.debug : Este componente analisa as trocas de mensagens OpenFlow entre o controlador e os switches da rede. Assemelha-se as análises do tcpdump ou do WireShark(será discutido melhor depois) sendo mais resumido.

openflow.keepalive : Este componente faz com que o POX envie solicitações periódicas de eco para switches conectados. Alguns switches, após um longo periodo de silêncio, podem assumir que a ligação está inativa ou que houve uma perda de conectividade com o controlador e sendo assim este irá se desligar. Dessa forma este componente evita este problema.

misc.pong : Este componente é um exemplo simples de como se trabalhar com o monitoramento e o envio de pacotes ICMP. Sua execução faz com que todos os pings realizados tenha uma resposta pong.

misc.arp_responder : O mesmo que o anterior com a diferença que responde requisições ARP a partir de uma lista de entradas estáticas.

misc.packet_dump : Um simples componente que exibe informações de pacotes. É como executar um tcpdump em um host.

misc.dns_spy : Este componente monitora as respostas DNS e guarda seus resultados.

misc.of_tutorial : Este componente é um tutorial simples que mostra como transformar um hub em um switch de aprendizagem de camada dois. Este é o tutorial utilizado no OpenFlow Tutorial ( http://www.openflow.org/wk/index.php/OpenFlow_Tutorial ).

misc.mac_blocker : Este componente é feito para ser usado ao lado de outros componentes de encaminhamento. Aparecerá uma interface gráfica que permite bloquear endereços MAC. Este é um exemplo que demonstra o uso de eventos de bloqueio e como criar componentes com interface gráfica.

log : O POX utiliza-se de mensagens de log do Python que por sua vez podem ser configuradas nas das linhas de comando, por exemplo, é possível configurar logs que incluam data e hora.

log.color : Este componente faz com que o log seja exibido com cores de diferenciadas no terminal, muito interessante quando se quer fazer depurações.

samples.pretty_log : Este componente personaliza as saídas do log para uma melhor visualização.

tk : Este componente é utilizado para ajudar na construção de interfaces gráficas baseadas no POX.

Dentre os apresentados podemos destacar o componente "py", que inicializa um interpretador Python para depuração interativa, o componente "forwarding.l2_learning", que faz com que os switches OpenFlow funcionem como switches de autoaprendizagem e o componente "misc.of_tutorial", que trata-se do tutorial OpenFlow para iniciantes.

Pacotes do POX

Por ser um controlador de Redes Baseadas em Softwares, o POX tem que interagir com diversos tipos de pacotes. Para isso o POX tem uma biblioteca exclusiva para a análise e construção de pacotes, a biblioteca pox.lib.packet .

Esta biblioteca tem suporte a uma série de tipos de pacotes, a maioria desses pacotes tem algum tipo de cabeçalho e uma espécie de carga útil (payload) que muitas vezes é outro tipo de pacote. Por exemplo, o POX frequentemente trabalha com pacotes Ethernet, que por sua vez contém pacotes ipv4 e que por sua vez contém pacotes tcp. São alguns tipos de pacotes suportados pelo POX:

• ethernet
• IPv4
• TCP
• DHCP
• LLDP
• ARP
• ICMP
• UDP
• DNS
• VLAN

Esta postagem contou com a ajuda da Monografia de Lucas Rodrigues Costa da UnB, com o título de "OpenFlow e o Paradigma de Redes Definidas por Software". Abaixo um link para download.

Comentários

  1. Ótima matéria !!! Por acaso você sabe como faz para compilar os arquivos .py para Web ? Preciso desenvolver no mestrado uma interface web com as estatísticas de uma rede openflow... Obrigada

    ResponderExcluir
    Respostas
    1. Não sei dizer ao certo...mas vc se refere ao navegador? Obg, abs!

      Excluir
  2. Olá, otima materia! Gostaria de saber se é possível desenvolver uma comunicação entre o controlador Pox e um IDS (Snort) ?

    ResponderExcluir
    Respostas
    1. Não sei dizer amigo... só mesmo estudando a documentação da faculdade de stanford, coloquei em algumas publicações o link. Obg, abs!

      Excluir

Postar um comentário

Postagens mais visitadas