Email: pacolinux arroba inicia punto es
Web: http://aldarias.es/pacodebian
Con Linux Debian. En Valencia (España)
El documento tiene version .html, y .pdf, cambiando en el navegador la parte final podrás acceder a ambos.
Este documento es de libre reproducción siempre que se cite su fuente.
Realizado con: LATEX
Vamos ver como podemos controlar el ancho de banda, por servicio o por ips.
Traffic Shaper.
1.- Compilar el kernel con soporte de NETLINK y NETRTLINK y con estos módulos:
Module Size Used by Tainted: P cls_u32 4484 1 sch_prio 2240 0 (unused) sch_sfq 3328 0 (unused) sch_tbf 2272 1 sch_cbq 11552 1 sch_gred 4448 0 (unused) sch_red 2240 0 (unused) sch_teql 3328 0 (unused) sch_dsmark 3712 0 (unused) netlink_dev 1728 0 (unused) ip_queue 5140 0 (unused)
(y las opciones de kernel necesarias para poder marcarlos, como QoS y demás).
2.- Instalar el paquete SHAPER de debian, así como iproute:
apt-get install shaper iproute
3.- Crear el fichero /etc/shaper/cbq-10.http.network con este contenido:
DEVICE=eth1,300Kbit,30Kbit RATE=80Kbit WEIGHT=8Kbit PRIO=4 RULE=AQUI_MI_IP:80,
4.- Reiniciar shaper (/etc/init.d/shaper restart) y comprobar que va la web.
Como véis, de los 300Kbit que tengo le asigno 80Kbit (10KB/seg) al tráfico Web. Lo he probado y funciona perfectamente (más o menos). Si descargo yo un fichero voy a 10KB/seg. Si otra persona lo descarga simul- táneamente ambos bajamos a aprox 5KB/seg . Esto me deja libre otro ancho de banda para otros servicios :-)
Además se pueden poner reglas según la hora con TIME (en el fichero).
cat shaper.sh
for l in \
cls_u32 \
sch_prio \
sch_sfq \
sch_tbf \
sch_cbq \
sch_gred \
sch_red \
sch_teql \
sch_dsmark \
netlink_dev \
ip_queue
do
/sbin/modprobe $l
done
#Saber la ip externa de Ono
INET_IP=`/sbin/ifconfig eth0 | grep "inet addr:" | awk '{print $2}' | cut -c 6-`
#Fichero Destino
f=/etc/shaper/cbq-10.http.network
#Contenido
echo DEVICE=eth0,600Kbit,30Kbit >$f
echo RATE=80Kbit >>$f
echo WEIGHT=8Kbit >>$f
echo PRIO=4 >>$f
echo RULE=$INET_IP:80, >>$f
/etc/init.d/shaper restart
/etc/init.d/shaper status
/etc/init.d/shaper compile
/sbin/tc qdisc del dev eth0 root /sbin/tc qdisc add dev eth0 root handle 1 cbq bandwidth 600Kbit avpkt 1000 cell 8 /sbin/tc class change dev eth0 root cbq weight 30Kbit allot 1514 /sbin/tc class add dev eth0 parent 1: classid 1:10 cbq bandwidth 600Kbit rate 80Kbit weight 8Kbit prio 4 allot 1514 cell 8maxburst 20 avpkt 1000 bounded /sbin/tc qdisc add dev eth0 parent 1:10 handle 10 tbf rate 80Kbit buffer 10Kb/8 limit 15Kb mtu 1500 /sbin/tc filter add dev eth0 parent 1:0 protocol ip prio 100 u32 match ip src 81.202.240.62 match ip sport 80 0xffff classid 1:10
Para la gente que se encuentra con el siguiente error "RTNETLINK answers: File exists ".Esto se da por que estan queriendo ingresar una banda ya ingresada. Deben borrar todo ,con el siguiente comando "tc qdisc del dev ethX root", donde X es la interfaz.
cat netfilter.sh
#!/bin/bash -x # http://bulma.net/body.phtml?nIdNoticia=1727 # Creación del árbol de bandas KbTotal=600 Kbssh=400 Kbresto=200 tc qdisc del dev eth0 root tc qdisc add dev eth0 root handle 1: htb default 1 # Por defecto toda la información irá a la banda 1:1 tc class add dev eth0 parent 1: classid 1:1 htb rate 600kbps ceil 600kbps tc class add dev eth0 parent 1:1 classid 1:10 htb rate 400kbps ceil 600kbps tc class add dev eth0 parent 1:1 classid 1:20 htb rate 200kbps ceil 600kbps prio 1 # Esta banda tiene menor prioridad y me$ # Asociación de colas sfq con bandas tc qdisc add dev eth0 parent 1:10 handle 10: sfq tc qdisc add dev eth0 parent 1:20 handle 20: sfq # Se asocia la marca 1 con la banda 10 tc filter add dev eth0 protocol ip parent 1: handle 1 fw classid 1:10 tc filter add dev eth0 protocol ip parent 1: handle 1 fw classid 1:20 # Reglas de filtrado (se marca con un 1 a todos los paquetes destinados a un ftp) iptables -A FORWARD -i eth0 -o eth0 -p tcp --dport 22 -t mangle -j MARK --set-mark 1 iptables -A FORWARD -i eth0 -o eth0 -p tcp --dport 1:100 -t mangle -j MARK --set-mark 2 # Se marca con 1 todos los paquete$ #iptables -A FORWARD -s 192.168.0.1 -i $DEV -t mangle -j MARK --set-mark 5
#!/bin/bash
#minilancontrol
#scrip para la gestion del ancho de banda en una minilan(256/128) por wless
#http://bulma.net/body.phtml?nIdNoticia=1727
DEV=eth1
RATEUP=160
case "$1" in
start)
#creaciuon del arbol de bandas
tc qdisc add dev $DEV root handle 2: htb default 60
tc class add dev $DEV parent 2: classid 2:1 htb rate 120kbps ceil ${RATEUP}kbps
tc class add dev $DEV parent 2:5 classid 2:50 htb rate $[50*$RATEUP/100]kbps ceil ${RATEUP}kbps
tc class add dev $DEV parent 2:6 classid 2:60 htb rate $[50*$RATEUP/100]kbps ceil ${RATEUP}kbps prio 1
#tc class add dev $DEV parent 2:7 classid 2:70 htb rate $[4*$RATEUP/100]kbps ceil ${RATEUP}kbps prio 2
#asociacion de colas sfq con bandas
tc qdisc add dev $DEV parent 2:50 handle 50: sfq
tc qdisc add dev $DEV parent 2:60 handle 60: sfq
#tc qdisc add dev $DEV parent 3:70 handle 70: sfq
#se asocian marcas con bandas
tc filter add dev $DEV protocol ip parent 2: handle 5 fw classid 2:50
tc filter add dev $DEV protocol ip parent 2: handle 6 fw classid 2:60
#tc filter add dev $DEV protocol ip parent 3: handle 7 fw classid 3:70
#reglas de filtrado
iptables -A FORWARD -s 192.168.0.1 -i $DEV -t mangle -j MARK --set-mark 5
iptables -A FORWARD -s 192.168.0.2 -i $DEV -t mangle -j MARK --set-mark 6
#iptables -A FORWARD -s 192.168.1.0/24 -i $DEV -t mangle -j MARK --set-mark 7
echo "MiniLanControl started"
;;
stop)
# borro la reglas de filtrado
iptables -t mangle -F FORWARD 2> /dev/null > /dev/null
iptables -t mangle -X FORWARD 2> /dev/null > /dev/null
# borro las bandas
tc qdisc del dev $DEV root 2> /dev/null > /dev/null
tc qdisc del dev $DEV ingress 2> /dev/null > /dev/null
tc qdisc del dev $DEV root 2> /dev/null > /dev/null
echo "MiniLanControl stoped"
;;
restart)
$0 stop
$0 start
;;
status)
# muestro datos interesantes
echo "[qdisc]"
tc -s qdisc show dev $DEV
echo "[class]"
tc -s class show dev $DEV
echo "[filter]"
tc -s filter show dev $DEV
echo " "
echo "[iptables]"
iptables -t mangle -L FORWARD -xnv
exit
;;
*)
echo "Use: $0 {start|stop|restart|status}"
;;
esac
#fin
This document was generated using the LaTeX2HTML translator Version 2002-2-1 (1.70)
Copyright © 1993, 1994, 1995, 1996,
Nikos Drakos,
Computer Based Learning Unit, University of Leeds.
Copyright © 1997, 1998, 1999,
Ross Moore,
Mathematics Department, Macquarie University, Sydney.
The command line arguments were:
latex2html anchobanda -split 0 -local_icons 1 -show_section_numbers -no_auto_link -no_navigation
The translation was initiated by on 2005-03-20