Do que se trata o artigo:

Este artigo aborda a utilização de controle de banda e qualidade de serviço a fim de racionalizar a utilização da banda disponível para o acesso à Internet pelos computadores em uma rede local. Serão expostos tanto os principais conceitos necessários ao entendimento deste tipo de solução quanto os mecanismose técnicas existentes. Ao final, para firmar os conceitos expostos, um tutorial de instalação e configuração da ferramenta MasterShaper será apresentado.

Em que situação o tema é útil:

Muito utilizado em redes locais onde há várias máquinas acessando a Internet ao mesmo tempo, o controle de banda tem como intuito evitar que um usuário consuma toda a banda (ou grande parte dela) disponível para toda a rede. Uma utilização muito comum do controle de banda se dá em provedores de acesso à Internet, onde o cliente recebe a velocidade equivalente ao plano que pagou. A qualidade de serviço desperta maior interesse em empresas e ambientes corporativos, principalmente quando existe a intenção de melhorar os esforços quanto à garantia de um menor atraso às aplicações sensíveis, como são os casos de aplicações de vídeo-conferência e voz sobre IP.

Resumo do DevMan:

Este artigo aborda a premissa de controle de banda com o intuito de preservar a qualidade dos serviços oferecidos sob uma rede baseada no melhor esforço, ou seja, uma rede onde não há garantias em relação ao atraso ou a entrega dos pacotes enviados. A intenção principal deste artigo é que se entendam os principais conceitos que envolvem uma melhor utilização dos recursos de banda disponível na rede e possa, ao final, empregar estes mecanismos em seu ambiente corporativo como auxílio ao ganho de desempenho da rede. Dessa forma, será conceituado este ambiente, assim como o que vem a ser controle de banda, e suas disciplinas mais utilizadas. Também será abordado o que vem a ser qualidade de serviço e o porquê de seu emprego. Neste artigo ainda serão apresentadas as ferramentas mais utilizadas, incluindo a ferramenta MasterShaper, para instalação em um servidor Linux.

Autores: Eduardo Pagani Julio eEdelberto Franco Silva

Os recursos disponíveis à rede, como largura de banda, controle de acesso, priorização de tráfego, entre outros, devem ser observados atentamente pelo seu administrador com a finalidade de se obter a melhora no serviço prestado, aumentando assim a disponibilidade e confiabilidade para as aplicações que os usuários venham a utilizar neste ambiente.

É necessário entender que hoje o enlace de acesso à Internet se mostra como um dos pontos mais críticos dentro desse cenário. O compartilhamento do enlace por vários clientes simultâneos é comumente utilizado tanto nas pequenas quanto nas grandes empresas e ambientes operacionais. A motivação para tal compartilhamento vai desde a falta de endereços IPs (Internet Protocol) válidos disponíveis para todos os computadores (o que normalmente se “soluciona” com a utilização de NAT - Network Address Translation), passando pela utilização do modelo de intranet, bem como a diminuição dos gastos no aluguel de enlaces de acesso à Internet. O cuidado para a não escassez desse recurso deve ser um dos pontos priorizados, junto a outros, como a segurança, por exemplo. Algumas ferramentas, como proxies que realizam cache (armazenamento local) de conteúdo, programas de controle de banda e qualidade de serviço (Quality of Service - QoS), têm como um de seus objetivos auxiliar a otimização do desempenho, principalmente do acesso à Internet.

O controle de banda visa, sobretudo, a utilização da melhor forma possível dos recursos de rede no que diz respeito ao acesso por meio do enlace de rede. Basicamente emprega-se o controle de banda para garantir a certos serviços, ou clientes, velocidade de conexão. Já a qualidade de serviço visa priorizar aqueles serviços que apresentam maior necessidade de recursos, seja em relação à banda disponível ou atraso, por exemplo.

Este artigo apresenta os conceitos básicos de controle de banda e qualidade de serviço. Também apresenta os principais conceitos que envolvem essas técnicas a fim de auxiliar no ganho de desempenho da rede. Ao final, o leitor estará apto a instalar e configurar uma ferramenta que fornece recursos para a empregabilidade das técnicas relacionadas aos conceitos abordados. Essa ferramenta tem o nome de MasterShaper, é gratuita, de código-fonte aberto, e é totalmente configurável por meio de sua interface gráfica. A ferramenta em questão é executada sobre o Sistema Operacional Linux e seu guia disponível neste artigo descreve de forma genérica a sua instalação e configuração, o que facilita ao leitor instalá-la em qualquer distribuição Linux.

Qualidade de Serviço

O princípio fundamental da qualidade de serviço pode ser descrito como a busca pelo respeito a uma faixa de requisitos da aplicação ou da rede, seja ela: a consideração de um atraso mínimo para a entrega de um pacote, uma vazão (throughput) mínima ou uma perda mínima, por exemplo. O requisito de QoS mais comumente utilizado, e mais simples de ser administrado, diz respeito à vazão, ou velocidade do enlace dedicada a uma aplicação ou às aplicações de um computador da rede. Neste ponto, podemos citar o controle de banda, que será explicitado mais à frente neste artigo.

A qualidade de serviço pode ser observada de duas formas: do ponto de vista da aplicação ou da rede. Para uma aplicação, oferecer seus serviços com qualidade significa atender às expectativas do usuário em termos do tempo de resposta e da qualidade, muitas vezes subjetiva, do serviço que está sendo provido, ou seja, fidelidade adequada do som e/ou da imagem sem ruídos nem congelamentos, garantindo neste caso tanto a vazão quanto o atraso mínimo. Já a qualidade de serviço da rede depende das necessidades da aplicação, ou seja, do que ela requisita da rede a fim de que funcione bem e atenda, por sua vez, às necessidades do usuário que a utiliza. Esses requisitos são traduzidos em parâmetros que indicarão o desempenho da rede como, por exemplo, o atraso máximo sofrido pelo tráfego da aplicação entre o computador origem e destino.

Aplicações consideradas avançadas são mais exigentes que as aplicações convencionais. Pode-se considerar como aplicações avançadas: vídeo interativo, voz sobre IP (VoIP), telemedicina, entre outras. Aplicações de vídeo interativas requisitam da rede um limite máximo para o atraso fim a fim e uma baixa perda de pacotes, enquanto que as aplicações de vídeo não interativas toleram melhor uma pequena perda de pacotes e variação do atraso, comuns sobre o meio da Internet.

Outro exemplo de aplicações avançadas são aquelas que utilizam realidade virtual. Através delas os usuários podem interagir, colaborar, compartilhar um ambiente virtual como se estivessem num mesmo local, entre outras possibilidades. Uma aplicação deste tipo é a de torcida virtual, que consiste na transmissão de um vídeo de um jogo de futebol e permite que usuários participem remotamente da torcida, escolhendo um assento em um mapa de um estádio virtual. Para os usuários é dada a sensação de estarem juntos no estádio, participando da partida de futebol.

No modelo de serviço atual da Internet é empregado o melhor esforço (Best Effort), ou seja, não é prometido nada quanto à QoS que uma aplicação receberá. Será concedido à aplicação que utiliza seu meio o nível de desempenho (por exemplo, atraso fim-a-fim e perda de pacotes) que a rede estiver capacitada a dar naquele determinado momento. A Internet atual não diferencia o serviço de forma a dar um tratamento especial a algum tipo de aplicação sensível a atraso, por exemplo, como é o caso das aplicações avançadas já citadas anteriormente. O modelo de melhor esforço utiliza a política de enfileiramento dos pacotes FIFO (First In First Out), ou seja, o primeiro pacote a entrar é o primeiro pacote a sair, não priorizando àqueles mais sensíveis a este aguardo (atraso) em fila.

Mecanismos de Escalonamento e Regulação

A seguir serão detalhados mecanismos que tentam garantir tais necessidades em respeito à QoS, sendo abordados mecanismos de escalonamento de pacotes, assim como a aplicação da regulação da taxa de pacotes injetados na rede.

Mecanismos de Escalonamento

O modo como os pacotes são enfileirados nos buffers associados à saída de um enlace, comumente, roteadores, é chamado de disciplina de escalonamento do enlace e, dependendo da técnica utilizada, será possível auxiliar na garantia de QoS.

A Figura 1 ilustra o mecanismo básico utilizado conhecido como FIFO, e respeita a ordem de chegada dos pacotes não a alterando durante sua permanência no buffer. Neste caso, se o enlace estiver congestionado, os pacotes aguardarão até que o meio seja liberado para enviar os pacotes de sua fila. Como os pacotes podem ficar por tempos demasiadamente grandes em espera no buffer, e como estes não têm espaço infinito, haverá a necessidade de descarte de alguns pacotes conforme uma política adotada para isto, que pode ser, por exemplo, o pacote mais antigo no buffer.

Figura 1. Enfileiramento FIFO, baseada em Kurose (2006).

Outro mecanismo classifica os pacotes por prioridade. É o chamado enfileiramento prioritário, e pode depender de uma marcação no cabeçalho do pacote (por exemplo, no campo ToS – Type of Services – do IPv4), do endereço IP de sua origem ou destino, ou do número da porta de origem ou destino, ou outro critério. Um grande problema desse modelo é a mudança, ou um computador intermediário que forja um cabeçalho com maior prioridade para ter sempre seus pacotes mais bem classificados durante o roteamento. Neste mecanismo é possível imaginar ilustrativamente como se houvessem duas filas em um roteador, conforme a Figura 2, sendo uma de maior e outra de menor prioridade.

Figura 2. Enfileiramento Prioritário, baseada em Kurose (2006).

Há ainda o mecanismo chamado por varredura cíclica, onde os pacotes são classificados como no mecanismo de enfileiramento prioritário, divididos em filas separadas conforme o número de classes. Porém, todas as classes devem ser atendidas da mesma forma. Sua essência se parece com o enfileiramento prioritário por ter várias filas, e não somente uma, como o FIFO. Como exemplo deste mecanismo, pode-se supor que hajam três classes (filas), e será enviado um pacote de cada fila a fim de não deixar o enlace ocioso e compartilhar de forma justa os recursos. Portanto, esse mecanismo irá procurar um pacote de uma dada classe, mas caso não encontre nenhum à espera, verifica imediatamente a classe posterior, realizando a sequência de varredura cíclica.

Uma variação muito importante deste mecanismo é o WFQ (Weighted Fair Queueing – enfileiramento justo ponderado), onde além dos pacotes serem divididos em classes diferentes, essas classes têm pesos diferentes entre si e, com base em uma fórmula de ponderação, é possível estipular tempos de utilização do enlace diferentes para cada fila (classe). O WFQ é disponível em roteadores da empresa Cisco. Intranets que possuem roteadores com esse mecanismo de enfileiramento podem prover QoS ao fluxo interno concorrente da empresa.

Após a introdução dos clássicos mecanismos de enfileiramento, serão abordadas arquiteturas específicas para o provimento de QoS. São elas o Intserv (arquitetura de serviços integrados) e o Diffserv (arquitetura de serviços diferenciados).

Intserv

A arquitetura de serviços integrados se baseia em duas características fundamentais: a reserva de recursos e o estabelecimento de chamadas. Para a reserva de recursos, um roteador tem que saber a quantidade de recursos, como buffer utilizado e largura de banda do enlace, e se estão alocados para as sessões existentes, onde esta reserva de recursos é sinalizada pelo RSVP (ver Nota DevMan 1). Já o estabelecimento de chamadas terá a participação de todos os roteadores no caminho da rede da origem ao destino. É quando os recursos serão reservados para esta conexão. Com base nos pedidos, cada roteador reserva recursos para aquela sessão de comunicação a ser iniciada com base nos recursos disponíveis, respeitando sempre a QoS das sessões em andamento e também daquele que realizou o pedido. Um roteador pode, portanto, aceitar ou negar esse pedido de reserva de recursos realizado pela fonte.

Nota DevMan 1. RSVP

RSVP (ReSerVation Protocol – Protocolo de Reserva de Banda) é o protocolo de sinalização utilizado para avisar que uma aplicação necessitará de uma quantidade determinada de largura de banda reservada e espaço em buffer nos roteadores para sua garantia de QoS.

O Intserv, portanto, realiza uma reserva por fluxo e não é difícil imaginar que isso poderia gerar alguns problemas de escalabilidade, já que é necessário processamento dos roteadores que estão encaminhando o tráfego tanto no momento de reserva dos recursos quanto para manter o estado desse fluxo. Uma enorme sobrecarga extra é então inserida ao roteamento dos pacotes. Problemas como esse levaram ao desenvolvimento do Diffserv.

Diffserv

A ideia principal desta arquitetura é a diferenciação de serviço de forma escalável e flexível a fim de complementar o Intserv, uma vez que visa à manipulação de classes de tráfego de maneira diferente. O Diffserv não é um serviço específico para as classes e, ao invés disto, fornece componentes funcionais para a inclusão de novos serviços.

Dois conjuntos de elementos fundamentais são a base do Diffserv: a função da borda e a função central. Basicamente, o primeiro diz respeito à classificação e condicionamento dos pacotes e o segundo somente a seu envio. Ou seja, toda a complexidade fica na borda da rede, liberando o núcleo do processamento exaustivo, como o existente no Intserv.

Um ponto importante dessas duas arquiteturas é que foram propostas para sistemas fim-a-fim, ou seja, no caso da Internet, o domínio tem dimensões geográficas e econômicas que dificultam sua aplicação, uma vez que todos os ISPs (Internet Service Provider – Provedor de Acesso de Internet) devem estar acordados das configurações a serem utilizadas e as respeitarem.

Controle de Banda

A utilização de controle de banda visa, principalmente, o compartilhamento justo da banda que se tem disponível no ambiente operacional. Como forma de ilustração pode-se imaginar uma rede em que um único enlace de 2 Mbps fornece acesso a 10 computadores. Esse exemplo é facilmente visualizado em uma pequena empresa ou um laboratório de uma escola. Nesse tipo de ambiente, os usuários provavelmente estarão ligados ao mesmo tempo por este único enlace à Internet. Agora, também se pode imaginar como seria desagradável para o presidente desta empresa precisar realizar uma reunião por vídeo-conferência, porém outro funcionário está visualizando vídeos de entretenimento no YouTube e algum outro realizando o download de um arquivo de áudio, ocupando assim toda a banda disponível (ver Nota DevMan 2). Nesse ambiente, deve-se ser o mais justo possível, alocando de forma adequada uma largura de banda para cada cliente e priorizando àqueles que realmente necessitem mais dela.

Nota DevMan 2. Determinação de valor fixo de banda a um IP

É possível, em várias ferramentas, determinar um valor fixo de banda a um IP, ou bloco de IPs, e permitir que, caso o link esteja ocioso, este IP, ou bloco de IPs, utilize um limiar que possa ser configurado como, por exemplo, o valor total do link para a Internet.

Técnicas de controle de banda fazem parte do esforço para a aplicação de QoS em um ambiente controlado. Outro exemplo onde o controle de banda se aplica comumente é em um ISP (Internet Service Provider) que fornecerá ao cliente não toda a banda disponível a ele, mas sim a banda contratada.

Disciplinas de Enfileiramento

As disciplinas de enfileiramento são responsáveis por como o tráfego será tratado. A partir dela é possível estabelecer diretrizes referentes à alocação de banda ou tratamento diferenciado para determinado tipo de pacote.

A ferramenta MasterShaper, abordada no final deste artigo, abrange as disciplinas HTB, HFSC e CBQ, descritas a seguir.

O HTB (Hierarchical Token Bucket) é baseado no conceito de balde de fichas (Token Bucket – ver Nota DevMan 3). É capaz de suportar uma configuração para alocação de banda mínima a uma classe de tráfego. Além disso, permite definir a largura de banda máxima que uma classe pode “pegar emprestado” de outras classes, caso esta largura de banda esteja ociosa. É possível definir o tamanho da rajada, ou seja, o tamanho máximo de pacotes enviados de uma só vez, assim como realizar a priorização das classes. Essa priorização servirá somente no momento em que a banda não utilizada estiver sendo distribuída. Dessa forma, prioridades mais altas ganham mais largura de banda.

Outra disciplina é a HFSC (Hierarchical Fair Service Curve), que é capaz de suportar um atraso máximo garantido de pacotes na rede. O atraso máximo garantido a que se refere essa disciplina é o tempo utilizado como limite máximo para envio de um pacote, onde serão priorizados aqueles pacotes cujo tempo seja menor, e consequentemente, necessitem de maior priorização no momento do encaminhamento. Isso é importante para aplicações em tempo real como Voz sobre IP (VoIP), onde os atrasos e o jitter (variação do atraso) têm um impacto negativo diretamente sobre a qualidade. Também com HFSC pode-se definir uma largura de banda mínima, alocada para cada uma das classes, e uma largura de banda máxima, que pode ser utilizada por esta classe.

Já a disciplina CBQ (Class-Based Queueing) é anterior ao HTB e apresenta menos opções que este último.

Alguns exemplos de ferramentas para manipulação de controle de banda são:

· Traffic Shaper: sistema para controle de banda em Linux, muito utilizada até meados do ano de 2000;

· CBQ: é possível criar classes para controle do tráfego tanto de download quanto de upload. Arquivos separados de configuração são criados para cada classe. Disponível para o sistema operacional Linux;

· HTB: permite que a banda ociosa seja utilizada por classes que necessitem em determinado momento. Uma mesma classe pode comportar vários clientes, diferentemente do CBQ. O HTB ainda apresenta uma interface mais clara que a utilizada pelo CBQ, se tornando em inúmeros casos seu sucessor. O tc é o comando referente à sua chamada no sistema operacional Linux;

· HTB-Tools: permite uma interface para configuração dos arquivos referentes ao HTB mais intuitiva que as linhas de comando padrão;

· MasterShaper: este aplicativo será abordado neste artigo e foi considerado o mais simples para a utilização de controle de banda e QoS em um gateway empregando Linux. Suporta as três disciplinas de enfileiramento descritas: CBQ, HFSC e HTB.

Nota DevMan 3. Token Bucket

Token Bucket tem como função a diminuição dos efeitos causados pelas rajadas. As rajadas representam o número máximo de pacotes enviados consecutivamente, em um período de tempo extremamente curto. A principal funcionalidade do Token Bucket é uniformizar a vazão e a latência (atraso do pacote). Uma rajada será encaminhada conforme um tamanho pré-determinado, conhecido como burst size. Uma quantidade de bps também é associada à técnica, determinando a quantidade de dados em média que podem ser enviados em uma determinada unidade de tempo. Ou seja, o intervalo de tempo referente ao tempo de duração da rajada.

MasterShaper

O MasterShaper é uma interface web para os serviços de controle e gerência de tráfego de rede para o sistema operacional Linux. Sua principal função é fornecer uma interface web de simples manipulação para os recursos de QoS disponíveis em Linux com kernel versões 2.4 e 2.6. Por meio de sua interface, é possível definir seus próprios conjuntos de regras para o tratamento dos fluxos da rede e também visualizar estatísticas sobre a largura de banda de forma gráfica.

A ferramenta MasterShaper realiza, portanto, traffic shaping em redes onde os recursos são conhecidos e é possível modelar seu tráfego, como é o caso de empresas, escolas e outros ambientes corporativos. Suas características visam àqueles administradores que não têm muita experiência com Linux, configuração e criação de scripts e outras ferramentas necessárias para fazer esse trabalho da forma convencional, ou seja, configurando vários arquivos texto. É possível utilizar o MasterShaper tanto em um computador configurado para trabalhar como um roteador como também sobre uma bridge transparente.

Requisitos para a instalação

Os requisitos para a instalação basicamente se fazem mais necessários à interface web, e são eles:

· Qualquer distribuição Linux, desde que rodando a versão 2.4 ou 2.6 do kernel;

· iproute2: contém o comando tc, necessário ao HTB;

· web-Server com suporte a PHP (Apache2, mod_php4, http://httpd.apache.org);

· PHP4 (ou superior) com suporte a JPEG, LibGD e MySQL;

· Base de dados MySQL 4.1 ou superior;

· Módulos PHP DB & Net_IPv4;

· Perl com interface DBD (ou seja, DBI-MySQL);

· PHP Layers Menu (http://phplayersmenu.sourceforge.net);

· JpGraph (http://www.aditus.nu/jpgraph/).

Para o guia de instalação do MasterShaper neste artigo, deve-se levar em consideração que o ambiente respeita a versão do kernel do Linux mencionada anteriormente. Não serão abordados neste artigo a instalação e configuração do servidor web Apache e do banco de dados MySQL, porém esses guias são facilmente encontrados na Internet.

Instalação e Configuração do MasterShaper

O primeiro passo que se deve realizar é a criação do diretório para manipulação da instalação. A Listagem 1 mostra todos os passos para a realização do download e descompactação do arquivo referente ao MasterShaper.

Listagem 1. Salvando e descompactando o MasterShaper.


  mkdir /tmp/shaper
  cd /tmp/shaper
  wget http://www.mastershaper.org/files/mastershaper_0.44.tar.bz2
  tar zxvf mastershaper_0.44.tar.bz2

Feito isso, deve-se copiar o conteúdo de htdocs, da pasta descompactada, para o seu diretório raiz web, que, por padrão, na maioria das distribuições Linux, é o /var/www/, conforme a Listagem 2.

Listagem 2. Copiando a pasta do MasterShaper para ser acessado via web.


  mkdir /var/www/shaper
  cp –r /tmp/shaper/htdocs/ /var/www/shaper/

Agora, cria-se um banco de dados para o MasterShaper. A Listagem 3 mostra como este procedimento é executado. Este artigo não aborda a instalação do phpMyAdmin (http://www.phpmyadmin.net/), mas considera a instalação desta ferramenta para uma maior facilidade de administração dos bancos de dados MySQL.

Listagem 3. Criando o banco de dados do MasterShaper no MySQL.

create database db_shaper; 

O JpGraph é uma biblioteca em PHP consolidada para a geração dinâmica de gráficos. MasterShaper faz utilização desta biblioteca e então deve-se instalá-la. Sua instalação é simples e pode ser seguida conforme a versão do PHP que está sendo utilizada. Caso utilize o PHP4, deve-se seguir a Listagem 4, caso seja a utilizada a versão PHP5, a Listagem 5.

Como o MasterShaper procura a biblioteca JpGraph em uma pasta denominada jpgraph em seu próprio diretório corrente (/var/www/shaper), é interessante criar um link simbólico com o comando ln ao invés de renomear a pasta (o que iria suprimir a versão do JpGraph que estamos utilizando).

Listagem 4. Instalando o JpGraph para o PHP4.

Faça o download da versão 1.27.1 em 
  http://jpgraph.net/download/download.php?p=1.27.1
  salve-o em /var/www/shaper/ e descompacte-o
  cd /var/www/shaper/
  tar xvzf jpgraph-1.27.1.tar.gz
  ln –s /var/www/shaper/jpgraph-1.27.1 /var/www/shaper/jpgraph

Listagem 5. Instalando o JpGraph para o PHP5.

Faça o download da versão 3.0.7 em 
  http://jpgraph.net/download/download.php?p=1
  salve-o em /var/www/shaper/ e descompacte-o
  cd /var/www/shaper/
  tar xvzf jpgraph-3.0.7.tar.gz
  ln –s /var/www/shaper/jpgraph-1.27.1 /var/www/shaper/jpgraph

Como próximo passo, deve-se instalar o PHP Layers Menu, responsável pela geração dinâmica em DHTML dos menus utilizados pelo MasterShaper. A Listagem 6 mostra os passos necessários.

Da mesma forma que a biblioteca JpGraph, o MasterShaper procurará a pasta phplayersmenu em seu próprio diretório corrente (/var/www/shaper), e é interessante criar um link simbólico com o comando ln ao invés de renomear a pasta (o que iria suprimir a versão do PHP Layers Menu que estamos utilizando).

Listagem 6. Instalando o PHP Layers Menu.

Faça o download da última versão em http://phplayersmenu.sourceforge.net/ na aba downloads
  cd /var/www/shaper/
  tar xvzf phplayersmenu-3.2.0-rc.tar.gz
  ln –s /var/www/shaper/phplayersmenu-3.2.0-rc /var     /www/shaper/phplayersmenu

Se ainda não tiver o módulo Net_Ipv4 do PHP-PEAR, um processo de instalação pode ser visto na Listagem 7. Este módulo é utilizado para validar endereços IPv4 e também para calcular informações como endereço de rede e endereço de broadcast.

Listagem 7. Instalando o modulo Net_IPv4 do Pear.

pear install DB Net_IPv4

Caso utilize uma instalação com suporte ao apt-get, por exemplo, Ubuntu ou Debian, pode-se realizar os procedimentos da Listagem 8 como substituição às Listagens 4, 5, 6 e 7.

Listagem 8. Instalando o iproute (tc), JpGraph, PHP-PEAR, sudo e PHP Layers Menu.


  apt-get install iproute
  apt-get install libphp-jpgraph
  apt-get install php-pear
  apt-get install sudo
  apt-get install php-db
  apt-get install php4-mysql
  apt-get install libphp-phplayersmenu
  pear install DB Net_IPv4
  cd /var/www/shaper
  ln -s /usr/share/php/libphp-phplayersmenu phplayersmenu
  ln -s /usr/share/jpgraph jpgraph

A instalação padrão do MasterShaper utilizada neste guia não gera o arquivo onde as configurações realizadas utilizando a interface web deverão ser salvas, sendo assim, antes de iniciar as configurações por meio da interface web da ferramenta, torna-se necessário criar o arquivo que as armazenará. Para isso deve-se executar o comando da Listagem 9.

Listagem 9. Criando o arquivo que armazenará a configuração.

touch /var/www/shaper/config.dat

Após a realização de todos os passos iniciais de instalação do MasterShaper, será necessário acessar a interface web para finalizar a instalação. É possível acessá-la pelo endereço http://localhost/shaper/, ou trocando localhost pelo endereço IP da máquina onde o MasterShaper foi instalado. Feito isso, será exibida uma página conforme a Figura 3, cujos itens serão descritos logo a seguir.

Figura 3. Tela de configuração inicial do MasterShaper.

O MasterShaper não possui suporte à língua portuguesa, portanto, todas as opções são apresentadas em inglês. A Tabela 1 descreve cada uma das opções expostas pela Figura 3.

Opção

Valor

Justificativa

Filesystem path

/var/www/shaper

Caminho da pasta do MasterShaper no sistema.

Web path

/shaper

Caminho da pasta abaixo do diretório web do Apache. Em nosso caso, o diretório web é considerado /var/www.

MySQL host

localhost ou 127.0.0.1 (caso o servidor de banco de dados esteja no mesmo computador que o MasterShaper).

Endereço do servidor de banco de dados

MySQL Database

db_shaper

Nome da base de dados. A base criada na Listagem 3.

MySQL user

root

Usuário com poder de acesso à base db_shaper no banco de dados MySQL.

MySQL pass

sua senha

Senha correspondente ao usuário com acesso ao banco de dados.

sudo

/usr/bin/sudo

Caminho para o comando sudo, que permite a um usuário poderes administrativos (root).

tc

/sbin/tc

Caminho no sistema para o comando tc referente à ferramenta de traffic control

iptables

/sbin/iptables

O caminho no sistema para o comando iptables.

temp-path

/tmp

Caminho referente ao diretório de arquivos temporários do MasterShaper

Marca-se também “port numbers” e “protocol numbers” para que sejam utilizadas as associações de número de portas e nomes de protocolos padronizados pelo IANA – veja a Nota DevMan 4. Por exemplo: a porta 21 é referente ao FTP (File Transfer Protocol).

Tabela 1. Configuração inicial do MasterShaper.

Nota DevMan 4. IANA e seu papel

A Internet Assigned Numbers Authority (IANA) é o órgão responsável pela coordenação de alguns dos elementos-chave necessários para manter a Internet funcionando perfeitamente. Embora a Internet seja conhecida por ser uma rede mundial livre de coordenação central, há uma necessidade técnica para algumas peças-chave da Internet serem coordenadas, e esse papel de coordenação é realizado pela IANA. Por exemplo, os números de portas associados a serviços conhecidos e fornecidos na Internet.

O MasterShaper utiliza o comando sudo para a execução de comandos como o administrador do sistema. Neste caso, já foi configurado anteriormente, a partir da Figura 3, o caminho referente a esse comando, e agora será adicionado o usuário referente ao Apache (esse usuário pode ser encontrado no arquivo de configuração do Apache, normalmente localizado em seu sistema pelo nome de httpd.conf), para que possa executar os comandos configurados pela interface web como usuário administrador do sistema operacional Linux (root). Normalmente esse usuário é o “www-data”, mas pode ser outro como “apache”, por exemplo. Para realização dos procedimentos descritos pela Listagem 10 será preciso estar autenticado no sistema como root, ou outro usuário com o mesmo privilégio deste.

Listagem 10. Configurando o sudo para o usuário do Apache.


  vim /etc/sudoers
  adicione a linha ao final do arquivo
  www-data ALL=NOPASSWD: /var/www/shaper/shaper_loader.sh

A partir deste momento tem-se todo o ambiente de configuração preparado para ser configurado e executado. Porém, se quiser visualizar as estatísticas, como a utilização de banda, é necessário realizar a tarefa da Listagem 11, que corresponde a um script em perl (tc_collector.pl) para a coleta de dados do tc e geração dos gráficos. Este script utiliza as informações armezanada no config.dat (geradas após a configuração da Figura 3) para a coleta dessas estatísticas.

Listagem 11. Rodando o tc_collector.pl.


  cd /var/www/shaper
  ./tc_collector.pl

Caso se deseje que este script rode em background, ou seja, liberando o terminal, utiliza-se o mesmo comando, porém adicionando a flag “–d” ao final, como visto na Listagem 12.

Listagem 12. Rodando o tc_collector.pl como daemon em background.


  cd /var/www/shaper
  ./tc_collector.pl -d

Descrição dos principais termos utilizados pelo MasterShaper

A seguir são listadas as definições dos principais termos utilizados pelo MasterShaper. A intenção desta descrição é servir como um glossário dos termos e opções.

· Bandwidth: velocidade de seu link de conexão. Usa-se a representação do valor em kbits por segundo (kbps);

· Protocols: tipo de protocolo. Dividido em duas classes, tráfego IP (TCP e UDP) e tráfego ICMP (ping, por exemplo);

· Ports: portas da aplicação, associadas ao serviço e ao protocolo;

· Targets: endereço IP, que pode ser puro ou ainda o endereço da rede (por exemplo, 10.0.0.0/8) ou uma faixa de IPs (10.0.0.1-10.0.0.10);

· Service Levels: responsável por determinar um limite de banda a ser alocado para o serviço em questão. É possível utilizar as opções de enfileiramento HTB que permitem delegar valores diferentes para o tráfego de entrada e para o tráfego de saída, criando assim links assimétricos. Ou ainda, utilizar o HFSC, onde é possível configurar o máximo de atraso aceitável (maximum delay) dos pacotes da rede. Nessa opção serão criados os níveis, por exemplo: Diretoria com 1 Mbps, Administrativo com 500 kbps e demais com 500 kbps;

· Filters: filtros servem como padrões de tráfego e portanto serão comparados a um modelo de tráfego pré-definido. Por exemplo, “web-traffic” deve coincidir com HTTP & HTTPS, ou seja, utilizar as portas 80 ou 443 sob o protocolo TCP;

· Chains: é responsável pela atribuição do valor de largura de banda máxima disponível que será utilizada durante toda a configuração do sistema. Se tiver apenas uma chain, este valor normalmente é igual à sua velocidade de conexão. É importante citar que os valores serão sempre expressos em kbps, ou seja, 2048kbps equivale a 2 Mbps e 1024kbps a 1 Mbps. É possível definir chains para um IP ou um bloco de IPs, conforme foi configurado em Targets, dependendo do que ou quem se deseja limitar;

· Pipes: é neste ponto que é definido o controle de banda para cada tipo de serviço, o filtro por serviço. Cada pipe deverá estar associado a uma das Chains criadas anteriormente, o que consequentemente determinará a banda máxima a ser utilizada.

Configuração de um ambiente real

Após conhecer as opções mais importantes a serem notadas no MasterShaper, segue-se ao tutorial que, com poucas configurações, permitirá ter uma visão prática de como configurar a ferramenta a partir de um ambiente de exemplo.

Aqui serão considerados um roteador Linux com duas interfaces de rede, onde uma está conectada à Internet via WAN (Wide Area Network) e outra à rede interna LAN (Local Area Network), onde pacotes considerados pequenos e pacotes de acesso remoto para o SSH (Secure Shell) terão alta prioridade. O enlace de acesso à Internet, neste exemplo, é de 2048 kbps (2 Mbps). E a alocação de banda para o tráfego web, representado por HTTP e HTTPS, será de no máximo 1024 kbps (1 Mbps). Demais tráfegos usarão até, no máximo, 1536 kbps (1,5 Mbps) do enlace. A Figura 4 mostra a topologia de rede para esse tutorial de forma simplificada.

Figura 4. Topologia de rede para o tutorial.

A tela ilustrativa da Figura 5 mostra as opções referentes à configuração da rede, delegando os valores tanto referentes à largura de banda do enlace, quanto o controle do tráfego de entrada do enlace, como do tráfego de saída e a seleção da política de enfileiramento, no caso a HTB.

Figura 5. Configuração inicial da rede em MasterShaper.

A configuração exposta pela Figura 5 se encontra no menu Options, dentro de Settings. O ambiente de avaliação deverá apresentar os valores conforme a Tabela 2.

Opção

Valor

Descrição

Inbound Bandwidth

2048 kbit/s

Largura de banda do enlace de entrada

Outbound Bandwidth

2048 kbit/s

Largura de banda do enlace de saída

Incoming Interface

eth0

Interface de entrada do enlace

Outgoing Interface

eth1

Interface de saída do enlace

IMQ

no (não)

Se utilizará o dispositivo virtual de enfileiramento IMQ

Queueing discipline

HTB

Disciplina de enfileiramento de pacotes

Traffic filter

tc-filter

O tipo de filtro para execução das políticas de controle de banda

Mode

Router

Modo de operação, roteador ou bridge

Authentication

Yes

Autenticação ou não para acesso à administração do MasterShaper

Tabela 2. Configuração inicial da rede em MasterShaper.

O próximo passo a ser realizado é a criação dos níveis de serviço, localizado no menu em Service Levels, dentro de Settings, como pode ser visto na Figura 6.

Figura 6. Configuração de Nível de Serviço no MasterShaper.

Os campos que a Figura 6 dispõe devem ser configurados para cada um dos níveis de serviço escolhidos no início deste exemplo. As Tabelas 3 a 7 apresentam cada um destes campos referentes ao primeiro exemplo de configuração.

Opção

Valor

Descrição

Name

“Mais Alta Pioridade”

Nome do Service Level

In-Bandwidth

32 kbit/s

Largura máxima desejada de banda de entrada

Out-Bandwidth

32 kbit/s

Largura máxima desejada de banda de saída

Priority

Highest (1)

Tipo de prioridade

Tabela 3. Configuração do Nível de Serviço de Mais Alta Prioridade no MasterShaper.

Opção

Valor

Name

“Prioridade Alta”

In-Bandwidth

128 kbit/s

Out-Bandwidth

128 kbit/s

Priority

High (2)

Tabela 4. Configuração do Nível de Serviço de Prioridade Alta no MasterShaper.

Opção

Valor

Name

“Tráfego Normal”

In-Bandwidth

128 kbit/s

In-Bandwidth Ceil

1024 kbit/s

Out-Bandwidth

128 kbit/s

Out-Bandwidth Ceil

1024 kbit/s

Priority

Normal (3)

Tabela 5. Configuração do Nível de Serviço para o Tráfego Normal no MasterShaper.

Opção

Valor

Name

“Baixa Prioridade”

In-Bandwidth

128 kbit/s

In-Bandwidth Ceil

1536 kbit/s

Out-Bandwidth

128 kbit/s

Out-Bandwidth Ceil

1536 kbit/s

Priority

Low (4)

Tabela 6. Configuração do Nível de Serviço de Baixa Prioridade no MasterShaper.

Opção

Valor

Name

“Velocidade da WAN”

In-Bandwidth

2048 kbit/s

Out-Bandwidth

2048 kbit/s

Priority

Ignore

Tabela 7. Configuração Referente à Velocidade da WAN.

Agora pode-se criar os filtros referentes aos tipos de serviços/aplicações que serão tratados no exemplo, ou seja, o tráfego web e o tráfego de pequenos pacotes (ICMP) e de SSH. A Figura 7 exibe a tela referente à configuração dos filtros, que pode ser acessada pelo menu Filters, dentro de Manage.

Figura 7. Configuração de Filtros no MasterShaper.

As configurações referentes à Figura 7 são descritas nas Tabelas 8 a 10, sendo que para a configuração do tráfego web são descritos cada um dos campos. Ainda são configurados os campos SSH, referente ao acesso remoto seguro e o ICMP, para o recebimento de respostas de retorno do protocolo da Internet, o IP.

Opção

Valor

Descrição

Name

“HTTP & HTTPS”

Nome do filtro

Protocols

TCP

Protocolo utilizado pela aplicação

Ports

Seleciona-se e clica-se para mover para a parte de used as opções http e https.

Portas que a aplicação a ser filtrada utiliza

Tabela 8. Configuração de Filtros no MasterShaper.

Opção

Valor

Name

“SSH”

Protocols

TCP

Ports

SSH

Tabela 9. Configuração do Filtro SSH no MasterShaper.

Opção

Valor

Name

"ICMP"

Ports

ICMP

Tabela 10. Configuração do Filtro ICMP no MasterShaper.

Após esses passos, pode-se retornar ao menu Options, dentro da opção Settings, já configurada logo no início, para selecionar a prioridade dos pequenos pacotes. No caso, seleciona-se a configuração de “Mais Alta Prioridade” para a opção “ACK Packets”, cuja tela é a mesma da Figura 5. Pacotes de ACK, como sabemos, são pacotes de confirmação do recebimento de um pacote de dados para controle do remetente.

A Figura 8 exibe a tela referente à criação de uma nova chain. Para configurá-la acesse o menu Chain, localizado dentro de Manage.

Figura 8. Configuração referente à velocidade da conexão à Internet.

Para preenchimento dos campos expostos na Figura 8, utiliza-se os valores apresentados na Tabela 11.

Opção

Valor

Descrição

Name

WAN

Nome da chain

Service Level

“Velocidade da WAN”

Associação do nível de serviço à chain

Fallback

“Baixa Prioridade”

Prioridade do retorno de mensagens de fallback (referentes a, por exemplo, mau funcionamento de um dispositivo)

Affecting

(Source) Any <-> Any (Destination)

Qual o sentido do fluxo que será afetado por esta regra

Tabela 11. Configuração referente à velocidade da conexão à Internet.

O próximo passo a ser executado se refere à criação das Pipes, ou seja, os serviços separados que serão analisados e tratados. Para tanto, deve-se acessar o menu Pipes, dentro de Manage. A Figura 9 exibe a tela referente a esta opção.

Figura 9. Configuração de Pipes, referente aos serviços no MasterShaper.

Os campos das Tabelas 12 a 14 se referem à configuração para cada uma das pipes, sendo exposta a descrição de cada campo para a primeira configuração referente ao Ping.

Opção

Valor

Descrição

Name

Ping

Nome da pipe

Chain

WAN

Chain a ser utilizada

Direction

<->

Direção do tráfego a ser tratado

Filter

ICMP

Qual o filtro associado à pipe

Service Level

“Mais Alta Prioridade”

Nível do serviço a ser associado à pipe

Tabela 12. Configuração de Pipes, referente ao protocolo ICMP no MasterShaper.

Opção

Valor

Name

Acesso Remoto

Chain

WAN

Direction

<->

Filter

SSH

Service Level

“Alta Prioridade”

Tabela 13. Configuração de Pipes, referente ao acesso via SSH no MasterShaper.

Opção

Valor

Name

Tráfego Web

Chain

WAN

Direction

<->

Filter

HTTP & HTTPS

Service Level

“Tráfego Normal”

Tabela 14. Configuração de Pipes, referente ao acesso aos serviços de HTTP e HTTPS no MasterShaper.

Pode-se agora seguir à configuração das targets, que se referem à configuração da rede. Para isso, deve-se acessar o menu Targets, em Settings. Será visualizada uma página conforme a Figura 10, e então deverá ser criada uma nova entrada com a configuração conforme a Tabela 15, respeitando seu IP da rede interna.

Figura 10. Configuração referente ao bloco de IPs da rede interna.

Opção

Valor

Descrição

Name

LAN

Nome da target

IP

192.168.0.24/24

Endereço IP ou bloco de IPs compreendido pela target

Tabela 15. Configuração referente ao bloco de IPs da rede interna.

Usualmente, em ambientes corporativos mais controlados, não se deseja restringir ou controlar o tráfego interno da rede, somente o tráfego que compreende a saída e entrada da Internet. Para isso, é possível configurá-lo de forma que seja totalmente liberado internamente. Para realizar tal configuração deve-se retornar ao menu já configurado Chains, em Manage (mesma tela da Figura 8), e adicionar a configuração da Tabela 16.

Opção

Valor

Name

LAN

Service Level

Ignore

Target

LAN <-> LAN

Tabela 16. Configuração referente à liberação de tráfego na rede interna.

Uma observação que cabe a este ponto é a necessidade de se determinar a opção overview, no topo da interface web do MasterShaper, com a Target com valor LAN. Essa opção se encontra logo acima do valor any <-> any e serve para se ter uma visão geral de suas configurações.

Com todas as configurações realizadas, agora deve-se carregá-las pelo link chamado load Ruleset. Toda vez que houver uma modificação nas configurações do MasterShaper será necessário recarregar essa opção. Este link encontra-se no topo da interface web.

Observa-se do lado esquerdo de sua interface web, caso toda a configuração esteja correta e as regras tenham sido aplicadas com sucesso, a partir da tabela com título Setup (como mostra a Figura 11), o valor Active em Shaper Status. Nessa mesma tabela é possível verificar de forma resumida suas configurações.

Figura 11. Resumo do status do MasterShaper.

Para finalizar, é interessante observar no menu Show, em Rules, todas as configurações em modo texto que o MasterShaper gerou a partir de suas configurações.

Conclusão

Foram apresentados neste artigo os principais conceitos de QoS, assim como uma ferramenta para implantação em um ambiente real, denominada MasterShaper. O MasterShaper é uma interface amigável ao administrador de rede para a configuração de recursos de controle de banda (traffic shaping) e QoS sem a necessidade de profundos conhecimentos das sintaxes de configuração dos módulos do kernel do Linux que realizam tais tarefas. Após a leitura deste artigo, acredita-se que vários conceitos básicos de QoS estão mais claros para o leitor e este pode pensar em como usufruir dessas técnicas para melhorar o desempenho de sua rede em um ambiente de trabalho compartilhado.

Com o MasterShaper é possível também realizar configurações que visam o compartilhamento de banda de forma mais justa, assim como a priorização de tráfegos mais importantes ao funcionamento do ambiente de rede por meio da utilização de QoS.

A exposição de um exemplo utilizando a ferramenta MasterShaper visou, além de ilustrar os conceitos apresentados pelo artigo, servir como uma referência durante a análise e implementação de qualidade de serviço e controle de banda em um ambiente corporativo. Por fim, se mostrou uma excelente ferramenta para o estudo da sintaxe dos módulos do kernel do Linux, uma vez que o código de script pode ser consultado pelo usuário após a conclusão da configuração.

Pensar em QoS é pensar em compartilhar de forma justa e controlada a utilização dos recursos da conexão de sua rede.

Links

Endereço do MasterShaper
http://www.mastershaper.org

Rede Nacional de Pesquisa (RNP)
http://www.rnp.br

Site sobre CBQ
http://www.icir.org/floyd/cbq.html

Site sobre HTB
http://luxik.cdi.cz/~devik/qos/htb/

Site sobre HFSC
http://www.cs.cmu.edu/~hzhang/HFSC/main.html

Site sobre IANA
http://www.iana.org/about/

Referências

Cristina Aurrecoechea, Andrew T. Campbell, Linda Hauw – A survey of QoS architectures, Multimedia Systems, 1998, Springer-verlag.

Kurose, Ross. Redes de Computadores e a Internet, 4ed. Person, 2006.