QoS a la FONERA a la SSID compartida als usuaris de FON

Després de veure com la gent abusa de les coses, cosa que ja sabia, m’he vist obligat a crear un script per controlar l’ample de banda assignat aquest tipus d’usuaris.

Com sempre és molt millorable i es pot complicar tot el què es vulgui. Però per a mi ja fa el que vull. Els deixo 1mbit de baixada i 100kbit de pujada.

Aquí us poso l’script per si algú el vol aprofitar.

#!/bin/sh

SERVEI=QoS
USER=root

DEV=eth0
UPLINK=102400kbit

DEV2=tun0
DWLINK=54000kbit

MAXUPLOAD=128kbit
MAXDWLOAD=1024kbit

LANFON=192.168.182.0/24

case "$1" in
start)
echo "Arrancant el servei $SERVEI ... "

# Carreguem els mòduls necessaris
insmod sch_htb
insmod sch_sfq
insmod cls_fw

# TRANSIT DE PUJADA

# Creem la cua arrel. Per defecte enviarà els paquets a la classe 1:10
tc qdisc add dev $DEV root handle 1: htb default 1
# Creem una banda dependent de root limitant velocitat CEIL=màxim possible de transfer. RATE=mínim garantitzat
tc class add dev $DEV parent 1: classid 1:1 htb rate $UPLINK ceil $UPLINK
# Creem 1 grup 1:10 un només 100k garantits
tc class add dev $DEV parent 1:1 classid 1:10 htb rate 100kbit ceil $MAXUPLOAD
# Iguala oportunitat de conexio de xarxa per tots els ordinadors
tc qdisc add dev $DEV parent 1:10 handle 10: sfq perturb 10
# Associem la taula mangle IPTABLES amb la classe
tc filter add dev $DEV protocol ip parent 1: handle 10 fw classid 1:10
# Regla IPTABLES que marca el paquet
iptables -t mangle -I FORWARD -s $LANFON -j RETURN
iptables -t mangle -I FORWARD -s $LANFON -j MARK --set-mark 10

# TRANSIT DE BAIXADA

# Creem la cua arrel. Per defecte enviarà els paquets a la classe 1:10
tc qdisc add dev $DEV2 root handle 1: htb default 1
# Creem una banda dependent de root limitant velocitat CEIL=màxim possible de transfer. RATE=mínim garantitzat
tc class add dev $DEV2 parent 1: classid 1:1 htb rate $DWLINK ceil $DWLINK
# Creem 1 grup 1:10 té menys prioritat un només 50k garantits
tc class add dev $DEV2 parent 1:1 classid 1:10 htb rate 50kbit ceil $MAXDWLOAD
# Iguala oportunitat de conexio de xarxa per tots els ordinadors
tc qdisc add dev $DEV2 parent 1:10 handle 10: sfq perturb 10
# Associem la taula mangle IPTABLES amb la classe
tc filter add dev $DEV2 protocol ip parent 1: handle 20 fw classid 1:10
# Regla IPTABLES que marca el paquet
iptables -t mangle -I FORWARD -d $LANFON -j RETURN
iptables -t mangle -I FORWARD -d $LANFON -j MARK --set-mark 20
;;
stop)

echo "Aturant el servei $SERVEI ..."
tc filter del dev $DEV protocol ip parent 1: handle 10 fw classid 1:10
tc qdisc del dev $DEV parent 1:10 handle 10: sfq perturb 10
tc class del dev $DEV parent 1:1 classid 1:10 htb rate 50kbit ceil $MAXUPLOAD prio 1
tc class del dev $DEV parent 1: classid 1:1 htb rate $UPLINK ceil $UPLINK
tc qdisc del dev $DEV root handle 1: htb default 1
iptables -t mangle -D FORWARD -s $LANFON -j MARK --set-mark 10
iptables -t mangle -D FORWARD -s $LANFON -j RETURN
iptables -t mangle -D FORWARD -d $LANFON -j RETURN
iptables -t mangle -D FORWARD -d $LANFON -j MARK --set-mark 20
tc filter del dev $DEV2 protocol ip parent 1: handle 20 fw classid 1:10
tc qdisc del dev $DEV2 parent 1:10 handle 10: sfq perturb 20
tc class del dev $DEV2 parent 1:1 classid 1:10 htb rate 50kbit ceil $MAXDWLOAD
tc class del dev $DEV2 parent 1: classid 1:1 htb rate $DWLINK ceil $DWLINK
tc qdisc del dev $DEV2 root handle 1: htb default 1

rmmod sch_sfq
rmmod sch_htb
rmmod cls_fw
;;
restart)
$0 stop
$0 start
;;
reload)
echo -n "Recarregant el servei $SERVEI ..."
killall -HUP $BAR_BIN
;;
status)
echo -n "Comprovant el servei $SERVEI ..."
# Return value is slightly different for the status command:
# 0 - service up and running
# 1 - service dead, but /var/run/  pid  file exists
# 2 - service dead, but /var/lock/ lock file exists
# 3 - service not running (unused)
# 4 - service status unknown :-(
# 5--199 reserved (5--99 LSB, 100--149 distro, 150--199 appl.)

;;
*)
echo "Us: $0 {start|stop|status|restart|reload}"
exit 1
;;
esac