Controle de banda individual com shaper

Publicado por Denilson Martins (última atualização em 24/10/2014)

[ Hits: 4.903 ]

Homepage: www.vivaolinux.com.br

Download controleBanda.sh




Script para implementação de controle de banda utilizando o programa shaper, para derivados Debian.

  



Esconder código-fonte

#!/bin/bash

dir_controle=/etc/shaper
arq_dhcp=dhcpd.conf

faixa=192.168.50

menu() {
    clear
    echo "#########################################"
    echo "#         CONTROLE DE BANDA:            #"
    echo "# ------------------------------------- #"
    echo "#  1-> ADICIONAR CONTROLE A UM IP:      #"
    echo "#  2-> REMOVER CONTROLE DE UM IP:       #"
    echo "#  3-> LISTAR IPS CONTROLADOS:          #"
    echo "#  0-> APLICAR CONFIGURACOES:           #"
    echo "#  QUALQUER TECLA DIFERENTE PARA SAIR:  #"
    echo "# ------------------------------------- #"
    echo "#  DIGITE UMA OPCAO:                    #"
    echo "#########################################"
    read op
    case $op in
        1) adicionar ;;
        2) remover ;;
        3) listar ;;
        0) aplicar ;;
        *) exit ;;
    esac
}

#---------------------------CRIACAO DE ARQUIVOS---------------------------------
adicionar()
{
    clear
    echo "DIGITE O IP PARA SER ADICIONADO AO CONTROLE (Final do IP)."
    read ip
    echo "DIGITE A BANDA EM [kbps] (1Mbps = 128 KBps)."
    read banda
    bandabps=`expr $banda / 8`

    ls -las $dir_controle/*down | grep $faixa.$ip >> /dev/null

    if [ "$?" == '1' ] ; then
        nome_arquivo
        cria_down
        cria_up
        echo "CONTROLE AO IP [$faixa.$ip] COM [$bandabps]KBps ADICIONADO"
    else
        echo "IP [$faixa.$ip] JA CONTROLADO";
    fi
    echo "ENTER PARA VOLTAR AO MENU"
    read

    menu
}

nome_arquivo()
{

    if [ -e $dir_controle/cbq-0010-XXX.XXX.XXX.XXX-down ]; then
        echo "[OK]"
    else
        > $dir_controle/cbq-0010-XXX.XXX.XXX.XXX-down # Apaga o default
    fi

    ls $dir_controle/*down | awk -F "-" '{ print $2}' >> temp
    num=`tail -1 temp`
    rm -rf temp
    num=`expr $num + 1`
    num=`printf "%04d\n" $num` # completa zeros a esquerda
    arquivo_down=$dir_controle/cbq-$num-$faixa.$ip-down
    arquivo_up=$dir_controle/cbq-$num-$faixa.$ip-up
}

cria_down()
{
    echo "DEVICE=eth0,100Mbit,10Mbit" >> $arquivo_down
    echo "RATE="$banda"Kbit" >> $arquivo_down
    echo "WEIGHT="$bandabps"Kbit" >> $arquivo_down
    echo "PRIO=5" >> $arquivo_down
    echo "" >> $arquivo_down
    echo "RULE=$faixa.$ip" >> $arquivo_down
    echo "" >> $arquivo_down
    echo "BOUNDED=yes" >> $arquivo_down
    echo "ISOLATED=yes" >> $arquivo_down
}

cria_up()
{
    echo "DEVICE=eth0,100Mbit,10Mbit" >> $arquivo_up
    echo "RATE="$banda"Kbit" >> $arquivo_up
    echo "WEIGHT="$bandabps"Kbit" >> $arquivo_up
    echo "PRIO=5" >> $arquivo_up
    echo "" >> $arquivo_up
    echo "RULE="$faixa.$ip"," >> $arquivo_up
    echo "" >> $arquivo_up
    echo "BOUNDED=yes" >> $arquivo_up
    echo "ISOLATED=yes" >> $arquivo_up
}
#---------------------------CRIACAO DE ARQUIVOS---------------------------------

#---------------------------REMOCAO DE ARQUIVOS---------------------------------

remover()
{
    clear
    echo "DIGITE O IP QUE PODERA SER REMOVIDO DO CONTROLE"
    read ip
    remover_down=`ls $dir_controle/*down | grep $faixa.$ip`
    remover_up=`ls $dir_controle/*up | grep $faixa.$ip`

    if [ "$?" == '0' ] ; then

        echo "-------------------------------------------"
        echo "          CONTROLES ENCONTRADOS"
        echo "$remover_down"
        echo "$remover_up"
        echo "-------------------------------------------"
        echo "REMOVER CONTROLE DO IP [$faixa.$ip]? (s/n) "
        read resp
        if [ "$resp" == 's' ] ; then

            rm -rf $remover_down
            rm -rf $remover_up
            echo "CONTROLE DO IP [$faixa.$ip] FOI REMOVIDO!"
        else
            echo "CONTROLE DO IP [$faixa.$ip] NAO FOI REMOVIDO!"
        fi
    else
        echo "O IP [$faixa.$ip] NAO FOI ENCONTRADO!"
    fi
    echo "ENTER PARA VOLTAR AO MENU"
    read

    menu
}

#---------------------------REMOCAO DE ARQUIVOS---------------------------------



#---------------------------LISTAR DE ARQUIVOS---------------------------------

listar()
{
    if [ -e $dir_controle/cbq-0010-XXX.XXX.XXX.XXX-down ]; then
        rm -rf $dir_controle/cbq-0010-XXX.XXX.XXX.XXX-down # Apaga o default
    fi

    clear
    echo "LISTA DE USUARIOS COM CONTROLE DE BANDA ATIVADO"
    echo "-----------------------------------------------"
    ls $dir_controle/*down >> tmp

    while read tmp;
    do
        ip=`echo $tmp | awk -F "-" '{ print $3 }'`
        banda=`cat $tmp | grep WEI | awk -F "=" '{ print $2 }'`
        nome=`cat $arq_dhcp | grep $ip -B 2 | head -n 1 | awk '{ print $2 }'`
        mac=`cat $arq_dhcp | grep $ip -B 1 | head -n 1 | awk '{ print $3 }'`
        printf "Usuario -> $nome \t MAC -> $mac\n"
        printf "IP-> $ip\tBANDA -> $banda \n"
    done < tmp

    rm -rf tmp
    echo "-----------------------------------------------"
    echo "PRESSIONE ENTER PARA RETORNAR AO MENU"
    read
    menu
}

#---------------------------LISTAR DE ARQUIVOS---------------------------------

#---------------------------APLICAR CONFIGURACOES------------------------------
aplicar()
{

    echo "DESEJA APLICAR AS CONFIGURACOES? (s/n) "
    read resp
    if [ "$resp" == 's' ] ; then
        if [ -e $dir_controle/cbq-0010-XXX.XXX.XXX.XXX-down ]; then
            rm -rf $dir_controle/cbq-0010-XXX.XXX.XXX.XXX-down # Apaga o default
        fi

        echo "--------------------------"
        echo "APLICANDO NOVAS DEFINICOES"
        sleep 1
        /etc/init.d/shaper restart
        echo "--------------------------"
        echo "NOVAS DEFINICOES APLICADAS "
        echo "ENTER PARA RETORNAR MENU"
        read
        menu
    else
        echo "--------------------------"
        echo "ENTER PARA RETORNAR MENU"
        read
        menu
    fi
}
#---------------------------APLICAR CONFIGURACOES------------------------------
menu

Scripts recomendados

Firewall ideal para Servidor de Arquivos (iptables).

Script que busca IP Livres em uma rede

Converter animes em .mp4 para .avi (e outros) com qualidade perfeita

List 1.0

cdmp3.sh


  

Comentários
[1] Comentário enviado por drc em 24/10/2014 - 11:09h

Grande Denilson,
Uma dúvida, tenho um link de 10 megas, ao utilizar o shapper para controlar a banda para um determinado ip com 1 mega, ele irá reservar 1 mega do meu link principal disponibilizando 9 megas para o restante da rede ou irá simplesmente limitar o up/down em 1 mega?

[2] Comentário enviado por denilsoneskas em 24/10/2014 - 11:53h


[1] Comentário enviado por drc em 24/10/2014 - 11:09h:

Grande Denilson,
Uma dúvida, tenho um link de 10 megas, ao utilizar o shapper para controlar a banda para um determinado ip com 1 mega, ele irá reservar 1 mega do meu link principal disponibilizando 9 megas para o restante da rede ou irá simplesmente limitar o up/down em 1 mega?


Obrigado por comentar.

Eu criei este script para poder limitar a velocidade para os usuários de onde trabalho, em determinados momentos os usuários "sugavam" a banda disponível e impossibilitando acesso dos demais IPs. Pelo que pesquisei, o shaper limita toda comunicação entre o IP e quem estiver limitando a velocidade estabelecida, inclusive outros serviços como por exemplo o compartilhamento de arquivos. Então todos os pacotes que trafegarem entre o limitador e o IP não irá ultrapassar o limite estabelecido, pelo menos da forma em que fiz o script. Como o trafego entre o meu limitador e os IPs que limitei são praticamente só de Internet, fiz o controle de banda desta forma.

Portanto a resposta de sua pergunta é sim somente a limitação, lembrando que é limitada toda comunicação entre o limitador e o IP.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts