#!/bin/bash # Colocar en esta variable la capacidad de subida de la linea CAPACIDAD=128 # Calculamos que dejaremos como maximo un 80% de la capacidad para que no se creen # colas en el modem y tenerlas en nuestro Linux. También calculamos un ancho de banda # inferior para las colas menos prioritarias. MAX=$[$CAPACIDAD*80/100] MIN=$[$MAX-20] ### 1) Borramos las colas y las reglas de marcado ### tc qdisc del dev eth0 root 2>/dev/null iptables -t mangle -F ### 2) Definicion de las colas ### echo "Creando disciplinas de cola y clases..." # Creamos una cola padre HTB tc qdisc add dev eth0 root handle 1: htb default 20 # Creamos una clase padre para que pueda repartir el ancho de banda sobrante entre colas tc class add dev eth0 parent 1: classid 1:1 htb rate ${MAX}kbit ceil ${MAX}kbit # Creamos las clases en las que clasificaremos los paquetes. A cada una le asignamos # el ancho de banda que creamos conveniente. La primera clase es para el trafico # interactivo, la segunda para trafico normal y la tercera para trafico p2p. tc class add dev eth0 parent 1:1 classid 1:10 htb rate ${MAX}kbit ceil ${MAX}kbit prio 1 tc class add dev eth0 parent 1:1 classid 1:20 htb rate ${MIN}kbit ceil ${MAX}kbit prio 2 tc class add dev eth0 parent 1:1 classid 1:30 htb rate ${MIN}kbit ceil ${MAX}kbit prio 3 # Añadimos politicas de cola SQF a las clases hoja para hacerlas mas equitativas tc qdisc add dev eth0 parent 1:10 handle 10: sfq perturb 10 tc qdisc add dev eth0 parent 1:20 handle 20: sfq perturb 10 tc qdisc add dev eth0 parent 1:30 handle 30: sfq perturb 10 ### 3) Creacion de los filtros ### echo "Creando clasificadores..." # Dirigimos el trafico marcado con iptables a la clase adecuada tc filter add dev eth0 parent 1: protocol ip prio 1 handle 1 fw classid 1:10 tc filter add dev eth0 parent 1: protocol ip prio 2 handle 3 fw classid 1:30 # El trafico no marcado (trafico normal) ira a la clase por defecto (la 1:20) ### 4) Marcado de paquetes con iptables ### echo "Creando reglas de marcado iptables..." # Marcamos los paquetes con iptables para que sean dirigidos a las colas pertinentes iptables -t mangle -A OUTPUT -p tcp --tcp-flags ACK ACK \ -m length --length 0:64 -j MARK --set-mark 1 iptables -t mangle -A OUTPUT -m tos --tos Minimize-Delay -j MARK --set-mark 1 iptables -t mangle -A OUTPUT -p icmp -j MARK --set-mark 1 iptables -t mangle -A OUTPUT -p tcp --syn -j MARK --set-mark 1 iptables -t mangle -A OUTPUT -m owner --cmd-owner 'amule' -j MARK --set-mark 3 iptables -t mangle -A OUTPUT -m owner --cmd-owner 'eDonkey2000' -j MARK --set-mark 3