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