Eu tenho um script aqui que faz essa função ...
pode lhe interessar ...
até
On 02-11-2010 18:39, Keppler wrote:
Olá pessoal.
Estou fazendo uma grande confusão para fazer um controle de banda com
o HTB
Li uns tutoriais que achei na Net, mas não está funcionando (quer
dizer, não estou conseguindo adaptar para minha necessidade)....está
ficando lento demais nas estações!!!
Aqui segue a configuração da minha rede:
--> 4 computadores + o servidor Linux
--> eth0: Interface LAN
--> eth1: Interface WAN (onde está o Speedy)
--> Velocidade do Speedy: Speedy de 2Megas que medido pelo velocímetro
da Beltronica
(http://www.abeltronica.com/velocimetro/pt/?idioma=pt&newlang=pt)
obtive a velocidade aproximada de 1854 kbps (ou 232 KBps)
Gostaria de dividir o link igualmente para as 4 estações, ou seja,
garantir _*NO MÍNIMO*_ 58 KBps (232KBps / 4) por máquina!
Gostaria de saber também se dá pra "emprestar" banda entre as
máquinas, ou seja, supondo que tivesse somente uma máquina ligada,
esta máquina teria a banda toda para ela. Mas se a segunda máquina
entrasse na rede, a banda seria AUTOMATICAMENTE dividida por 2. Se
entrasse a terceira máquina a banda seria dividida automaticamente por
3 e assim por diante.
Dá pra fazer este "empréstimo" de banda entre as máquinas?
Se não puder fazer este "empréstimo", como poderia configurar os
arquivos para que cada máquina ficasse com pelo menos os 58KBps (232 /
4) ???
grato,
Keppler --
GUS-BR - Grupo de Usuários de Slackware Brasil
http://www.slackwarebrasil.org/
http://groups.google.com/group/slack-users-br
Antes de perguntar:
http://www.istf.com.br/perguntas/
Para sair da lista envie um e-mail para:
[email protected]
--
GUS-BR - Grupo de Usuários de Slackware Brasil
http://www.slackwarebrasil.org/
http://groups.google.com/group/slack-users-br
Antes de perguntar:
http://www.istf.com.br/perguntas/
Para sair da lista envie um e-mail para:
[email protected]
#!/bin/bash
##############################################################################
# UnderLinux BandLimit #
# ============================================ #
# #
# Copyright (c) 2003 by Marcus Maciel(ScOrP|On) [email protected] #
# http://www.underlinux.com.br #
# #
# 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 2 of the License. #
##############################################################################
# Dependencias
# Ipchains ou Iptables , iproute2 , modulos do kernel de CBQ QoS e compania...
hehehe :)
# Iptables: necessita de iptable_mangle e ipt_MARK
# Ipchains: nenhuma
##################
#INSTALACAO
# crie o diretorio bandlimit dentro do seu /etc
# mkdir /etc/bandlimit
# dentro deste diretorio crie os arquivos ips e interfaces
# touch /etc/bandlimit/ips
# touch /etc/bandlimit/interfaces
# depois edite o ips e o interfaces
# colocando dentro do ips
# os ips que vc deseja limitar 1 por linha no seguinte formato
# ip:ratein:rateout ex: 10.0.1.2:97:33
# e no interfaces as interfaces que vc usa na sua maquina
# no formato ethx ex: eth0
# 1 por linha tambem :)))
#
# Para rodar coloque o script dentro do seu rc.local
# Para remover as regras digite rc.bandlimit stop
#
##################
####
# IMPORTANTE!!!! USAMOS OS COMANDO
# iptables -F -t mangle
# ipchains -F input
# ipchains -F output
# Isso fara com que se voce tem alguma regra no seu mangle no iptables
# ou alguma regra no input ou output no seu ipchains esta regra sera apagada
# Para que voce nao perca suas regras de Firewall do iptables/ipchains
# Caso use alguma coisa no mangle do iptables ou alguma coisa no input/output
# no ipchains sete seu script de regras abaixo abaixo
#Lembrando que usamos o mangle apartir do mark 2 e este vai gerando um mark novo
#ate acabar seus ips ou seja se voce fizer pra 250 ips o ultimo mark sera o 252
#Caso use o Mark tente comecar apartir do 1000 para evitar Marks Iguais
#script=/path/seuscript.sh
script=0
##########################################################################################################
#Inicio da Configuracao
#Arquivos de Configuracao
ips=/etc/bandlimit/ips
#ips2=/etc/bandlimit/ips2
interfaces=/etc/bandlimit/interfaces
#########################
#Firewall's Suportados ipchains e Iptables # Padrao IPTABLES
#firewall=ipchains
firewall=iptables
###################################
#############
# Interfaces
redelocal=eth0
#redelocal2=eth0
redelocal2=inexistente
internet=eth1
#############
#Fim da configuracao
##########################################################################################################
#ifacenum=0
###Contando o numero de Interaces####
#for iface in `cat $interfaces`
#do
# ifacenum=`expr $ifacenum + 1`
#done
if [ $firewall == "iptables" ]
then
modprobe iptable_mangle
modprobe ipt_MARK
fi
#inicio do markador :)
mark=2
if [ "$1" = "stop" ]; then
################################
echo "Removendo Regras"
for iface in `cat $interfaces`
do
tc qdisc del dev $iface root
done
if [ $firewall == "iptables" ]
then
iptables -F -t mangle
if [ $script != "0" ]
then
$script
fi
else
ipchains -F input
ipchains -F output
if [ $script != "0" ]
then
$script
fi
fi
################################
else # Se nao tem "stop" entao assume start :)
#Limpar Regras antes de rodar o script ):)
iptables -F -t mangle
if [ $firewall == "iptables" ]
then
iptables -F -t mangle
if [ $script != "0" ]
then
$script
fi
else
ipchains -F input
ipchains -F output
if [ $script != "0" ]
then
$script
fi
fi
#adicionado interfaces
for iface in `cat $interfaces`
do
tc qdisc del dev $iface root
tc qdisc add dev $iface root handle 1 cbq
bandwidth 10Mbit avpkt 1000 cell 8
tc class change dev $iface root cbq weight
1Mbit allot 1514
done
####
for ip in `cat $ips`
do
ratein=`echo $ip | cut -d ":" -f 2`
rateout=`echo $ip | cut -d ":" -f 3`
ip=`echo $ip | cut -d ":" -f 1`
#entrada
tc class add dev $redelocal parent 1: classid 1:$mark
cbq bandwidth 10Mbit rate "$ratein"Kbit weight `expr $ratein / 10`Kbit prio 5
allot 1514 cell 8 maxburst 20 avpkt 1000 bounded
tc qdisc add dev $redelocal parent 1:$mark handle $mark
sfq perturb 10
tc filter add dev $redelocal parent 1:0 protocol ip
prio 200 handle $mark fw classid 1:$mark
if [ $firewall == "iptables" ]
then
iptables -t mangle -A POSTROUTING -d $ip -j
MARK --set-mark $mark
else
ipchains -A output -d $ip --mark $mark
fi
#Saida
tc class add dev $internet parent 1: classid 1:$mark
cbq bandwidth 10Mbit rate "$rateout"Kbit weight `expr $rateout / 10`Kbit prio 5
allot 1514 cell 8 maxburst 20 avpkt 1000 bounded
tc qdisc add dev $internet parent 1:$mark handle $mark
sfq perturb 10
tc filter add dev $internet parent 1:0 protocol ip prio
200 handle $mark fw classid 1:$mark
if [ $firewall == "iptables" ]
then
iptables -t mangle -A FORWARD -s $ip -j MARK
--set-mark $mark
else
ipchains -A input -s $ip --mark $mark
fi
#################################################################
mark=`expr $mark + 1`
done
if [ $redelocal2 != "inexistente" ]
then
for ip in `cat $ips2`
do
ratein=`echo $ip | cut -d ":" -f 2`
rateout=`echo $ip | cut -d ":" -f 3`
ip=`echo $ip | cut -d ":" -f 1`
#entrada
tc class add dev $redelocal2 parent 1: classid
1:$mark cbq bandwidth 10Mbit rate "$ratein"Kbit weight `expr $rateout / 10`Kbit
prio 5 allot 1514 cell 8 maxburst 20 avpkt 1000 bounded
tc qdisc add dev $redelocal2 parent 1:$mark
handle $mark sfq perturb 10
tc filter add dev $redelocal2 parent 1:0
protocol ip prio 200 handle $mark fw classid 1:$mark
if [ $firewall == "iptables" ]
then
iptables -t mangle -A POSTROUTING -d
$ip -j MARK --set-mark $mark
else
ipchains -A output -d $ip --mark $mark
fi
#Saida
tc class add dev $internet parent 1: classid
1:$mark cbq bandwidth 10Mbit rate "$rateout"Kbit weight `expr $rateout /
10`Kbit prio 5 allot 1514 cell 8 maxburst 20 avpkt 1000 bounded
tc qdisc add dev $internet parent 1:$mark
handle $mark sfq perturb 10
tc filter add dev $internet parent 1:0 protocol
ip prio 200 handle $mark fw classid 1:$mark
if [ $firewall == "iptables" ]
then
iptables -t mangle -A FORWARD -s $ip -j
MARK --set-mark $mark
else
ipchains -A input -s $ip --mark $mark
fi
#################################################################
mark=`expr $mark + 1`
done
fi
fi # fim do script