CBQU - Utilitário para controle de banda de forma fácil e interativa

Publicado por Fábio Melo (última atualização em 22/10/2009)

[ Hits: 5.619 ]

Homepage: http://www.tuxtecnologia.com.br

Download cbqu.sh




Utilitário para controle de banda.

Usa o script "CBQ".

  



Esconder código-fonte

#!/bin/bash
##########################################################################
#
#   Copyright (C) 2009  Fábio Melo (fabio@fabiomelo.net) http://www.fabiomelo.net
#         
#   This program is free software: you can redistribute it and/or modify
#   it under the terms of the GNU General Public License as published by
#   the Free Software Foundation, either version 3 of the License, or
#   (at your option) any later version.
#
#   This program is distributed in the hope that it will be useful,
#   but WITHOUT ANY WARRANTY; without even the implied warranty of
#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#   GNU General Public License for more details.
#
#   You should have received a copy of the GNU General Public License
#   along with this program.  If not, see <http://www.gnu.org/licenses/>.
#
##########################################################################
#
#   Programa usado para cadastrar regras de controle (CBQ) de banda de forma rapida e facil
#   Todos as configuracoes sao salvas no arquivo
#  
#   /etc/clientes
#
#   E os arquivos de classes dentro de
#
#   /etc/cbq/
#
##########################################################################
#
#Inicio
#
#
#
#------------------------------------------
#Checa a presenca do IP-ROUTE2
if [ -e /sbin/tc ]
then
sleep 0
else
echo ""
echo " ip-route2 nao instalado"
echo ""
echo "Abortando!!!"
echo ""
exit
fi
#------------------------------------------
#
#
#
#------------------------------------------
#Checa a presenca do CBQ
if [ -e /etc/init.d/cbq ]
then
sleep 0
else
echo ""
echo " CBQ nao instalado ou nao presente em /etc/init.d/cbq "
echo ""
echo "Abortando!!!"
echo ""
exit
fi
#------------------------------------------
#
#
#
#Apresentacao
echo ""
echo ""
echo ""
echo "Bem vindo ao CBQU, script para adicionar regras de controle de banda de forma rapida e pratica"
echo ""
echo ""
echo ""
echo " Agora faremos algumas perguntas sobre sua nova regra, e ao final suas regras estarao prontas...:-)"
echo ""
echo ""
echo ""
#Pergunta sobre o nome da estacao
echo "Qual o nome da estacao que a regra ira se aplicar?"
read ESTACAO
#------------------------------------------
#
#
#
#------------------------------------------
#Pergunta sobre o ip da estacao
echo ""
echo "Qual o ip da estacao?"
read IP
#------------------------------------------
#
#
#
#------------------------------------------
#Pergunta sobre o valor da taxa de download
echo ""
echo "Qual o valor da conexao --Download--?"
read DOWN
#------------------------------------------
#
#
#
#------------------------------------------
#Pergunta sobre o valor da taxa de upload
echo ""
echo "Qual o valor da conexao --Upload--?"
read UP
#------------------------------------------
#
#
#
#------------------------------------------
#Pergunta sobre a prioridade
echo ""
echo "Qual a prioridade da regra (entre 1 e 8)?"
read PRIO
#------------------------------------------
#
#
#
#------------------------------------------
#Pergunta se ele pode pegar mais banda caso haja excedente
echo ""
echo "Caso haja Banda Excedente na rede, ele pode usa-la? (Responda >sim< ou >nao<)"
read PBOU
#------------------------------------------
#
#
#
#------------------------------------------
#Pergunta se deve emprestar banda caso nao esteja usando
echo ""
echo "Caso esta máquina nao use toda sua Banda, ela pode empresta-la? (Responda >sim< ou >nao<)"
read PISO
#------------------------------------------
#
#
#
#------------------------------------------
#Pergunta sobre a interface externa
echo ""
echo "Qual a sua interface de rede externa? --ex: eth1 "
read PIFACEE
#------------------------------------------
#
#
#
#------------------------------------------
#Pergunta sobre a interface interna
echo ""
echo "Qual a sua interface de rede interna? --ex: eth0 "
read PIFACEI
#------------------------------------------
#
#
#
#------------------------------------------
#Configuracao de isolated
if [ "$PISO" == "nao" ];
then
PISO=no
else
PISO=yes
fi
#------------------------------------------
#
#
#
#Configuracao de bounded
if [ "$PBOU" == "nao" ];
then
PBOU=no
else
PBOU=yes
fi
#------------------------------------------
#
#
#
#------------------------------------------
#Configuracao da taxa Download e Upload
TXD=`expr $DOWN / 8`
TXU=`expr $UP / 8`
#------------------------------------------
#
#
#
#------------------------------------------
# Verifica a existencia do arquivo "/etc/clientes"
if [ -e /etc/clientes ]
then
    ULTIMO=`tail -1 /etc/clientes`
    PCODIGO=`echo $ULTIMO | awk -F "|" '{print $1}'`
    CODIGO=`expr $PCODIGO + 1`
else
    touch /etc/clientes
    CODIGO=10
fi
#----------------------------------------------
#
#
#
#----------------------------------------------
# Adiciona a entrada ao arquivo de configuracao
echo ""00"$CODIGO|$ESTACAO|$IP|$DOWN|$TXD|$UP|$TXU|$PRIO|$PIFACEI|$PIFACEE|$PBOU|$PISO" >> /etc/clientes
#----------------------------------------------
#
#
#
#-----------------------------------------------
#apaga regras antigas ( ele criara todas de novo )
if [ -e /etc/cbq ]
then
   rm -f /etc/cbq/*
else
    mkdir /etc/cbq
fi
#-----------------------------------------------
#
#
#
#-----------------------------------------------
#adiciona os valores lidos no arquivo /etc/clientes aas variaveis usadas na criacao do cbq
LISTA=`cat /etc/clientes`
for CLIENTE in $LISTA; do
CODIGO2=`echo $CLIENTE | awk -F "|" '{print $1}'`
ESTACAO2=`echo $CLIENTE | awk -F "|" '{print $2}'`
IP2=`echo $CLIENTE | awk -F "|" '{print $3}'`
DOWN2=`echo $CLIENTE | awk -F "|" '{print $4}'`
TXD2=`echo $CLIENTE | awk -F "|" '{print $5}'`
UP2=`echo $CLIENTE | awk -F "|" '{print $6}'`
TXU2=`echo $CLIENTE | awk -F "|" '{print $7}'`
PRIO2=`echo $CLIENTE | awk -F "|" '{print $8}'`
IFACEI=`echo $CLIENTE | awk -F "|" '{print $9}'`
IFACEE=`echo $CLIENTE | awk -F "|" '{print $10}'`
BOU=`echo $CLIENTE | awk -F "|" '{print $11}'`
ISO=`echo $CLIENTE | awk -F "|" '{print $12}'`
#----------------------------------------------
#
#
#
#----------------------------------------------
# cria os arquivos usando as variaveis
UPLOAD="/etc/cbq/cbq-"$CODIGO2"."$ESTACAO2"_out"
DOWNLOAD="/etc/cbq/cbq-"$CODIGO2"."$ESTACAO2"_in"
touch $UPLOAD
touch $DOWNLOAD
#----------------------------------------------
#
#
#
#----------------------------------------------
# Da permissao de leitura aos scripts de controle de banda
chown 444 /etc/cbq/*
#----------------------------------------------
#
#
#
#----------------------------------------------
#preenche o arquivo de configuracao de upload
echo "DEVICE=$IFACEE,10Mbit,1Mbit" >> $UPLOAD
echo "RATE=$UP2""kbit" >> $UPLOAD
echo "WEIGHT=$TXU2""kbit" >> $UPLOAD
echo "PRIO=$PRIO2" >> $UPLOAD
echo "RULE=""$IP2""," >> $UPLOAD
echo "BOUNDED=$BOU" >> $UPLOAD
echo "ISOLATED=$ISO" >> $UPLOAD
#----------------------------------------------
#
#
#
#----------------------------------------------
#preenche o arquivo de configuracao de download
echo "DEVICE=$IFACEI,10Mbit,1Mbit" >> $DOWNLOAD
echo "RATE=$DOWN2""kbit" >> $DOWNLOAD
echo "WEIGHT=$TXD2""kbit" >> $DOWNLOAD
echo "PRIO=$PRIO2" >> $DOWNLOAD
echo "RULE=""$IP2" >> $DOWNLOAD
echo "BOUNDED=$BOU" >> $DOWNLOAD
echo "ISOLATED=$ISO" >> $DOWNLOAD
#----------------------------------------------
#
#
#
done
#
#
#
#----------------------------------------------
#Compila as regras
echo ""
echo "Compilando as regras..."
echo ""
sleep 2
/etc/init.d/cbq compile && COMPILE=ok
#----------------------------------------------
#
#
#
#----------------------------------------------
# Verifica erros na compilacao
if [ "$COMPILE" == "ok" ];
then
echo ""
echo "Regras Compiladas com sucesso!"
echo ""
else
echo ""
echo "Erro ao Compilar Regras!"
echo ""
fi
#----------------------------------------------
#
#
#
#----------------------------------------------
#Restarta o CBQ
echo ""
echo "Reiniciando o CBQ..."
echo ""
sleep 2
/etc/init.d/cbq restart && RESTART=ok
#----------------------------------------------
#
#
#
#----------------------------------------------
#Verifica erros no Restart
if [ "$RESTART" == "ok" ];
then
echo ""
echo "CBQ Reiniciado com sucesso!"
else
echo ""
echo "Erro ao Reiniciar CBQ!"
echo ""
fi
#---------------------------------------------- 

Scripts recomendados

Criação de unidades criptografadas

Registar automáticamente o dns de uma maquina no DNS via DHCP

duplex_record: mixando áudio do microfone e saída de áudio de um programa via P

Gerando ISO com o camando dd, e exibindo "barra de progresso".

Servidor HTTP em Bash


  

Comentários
[1] Comentário enviado por marcusburghardt em 29/10/2009 - 12:57h

Olá Fabio!

Legal o artigo. Porém tenho algumas opiniões contra.
Já estudei a fundo os algoritmos de controle de banda e posso lhe garantir que o CBQ não é confiável e preciso.

Não recomendo ninguém usar o CBQ. Foi devido à sua imprecisão que surgiu o HTB, um algoritmo muito mais preciso e muito mais fácil de gerenciar.

Por ser mais antigo e defasado, o CBQ contém vários tutoriais na Internet. O HTB felizmente está se popularizando mais. Acredito que a falta de conhecimento de novos algoritmos seja o maior obstáculo para deixar as tecnologias antigas de lado e adotar as novas.

Agradeço a sua contribuição!
Prometo postar um artigo em breve sobre HTB.

Abraço!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts