[eside-ghost] QoS en linux para andar por casa

Ender eduvedder en terra.es
Mar Nov 16 17:59:37 CET 2004


Aupa!!

<AVISO: TXAPA DE EMAIL />
<;-) />

He montado en el servidor de correo de mi empresa una mini-solución QoS para 
que el servidor no se chupe TODA la frame relay que tenemos. En realidad lo 
único que hago es limitar el ancho de banda de salida por servicios y tal.

Lo he hecho con iptables (mangle) + unos cuantos comandos tc y usando el 
algoritmo htb para gestionar las colas, que he leido que está bastante bien. 
He partido para aprender del script wondershaper.

Funciona todo de puta madre, pero el problema es que quiero que cuando el 
destino del paquete es de la red interna no haga NADA de QoS, vamos que se 
salte todo.... y si algo viene de la red interna lo mismo... ¿ideas?

seguro que se puede hacer con algún comandillo, os lo mando por si sabeis... 
es que todavía no controlo mucho el tc.. :-S

Os mando mis comandos tc por si quereis echarle un vistazo: he definido 3 
colas (esto es SOLO para controlar el ancho de banda de salida (upload).
bueno, lo que decia... 3 colas:
1:10 --> 700Kbps
1:20 --> 490 Kbps
1:30 --> 210 Kbps

+ DOWNLINK=700
+ UPLINK=700
+ DEV=eth0
+ NOPRIOHOSTSRC=
+ NOPRIOHOSTDST=
+ NOPRIOPORTSRC=
+ NOPRIOPORTDST=
+ tc qdisc del dev eth0 root
+ tc qdisc del dev eth0 ingress

# por defecto se va a la 30
+ tc qdisc add dev eth0 root handle 1: htb default 30

# se definen las colas
+ tc class add dev eth0 parent 1: classid 1:1 htb rate 700kbit burst 6k
+ tc class add dev eth0 parent 1:1 classid 1:10 htb rate 700kbit burst 6k prio 
0
+ tc class add dev eth0 parent 1:1 classid 1:20 htb rate 490kbit burst 6k prio 
1
+ tc class add dev eth0 parent 1:1 classid 1:30 htb rate 210kbit burst 6k prio 
2

# esto ni idea :-? si alguien lo explica al pelo!
+ 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

# mis reglas para comunicarse con el mangle de iptables...
+ tc filter add dev eth0 parent 1: protocol ip prio 0 handle 1 fw classid 1:10
+ tc filter add dev eth0 parent 1: protocol ip prio 1 handle 2 fw classid 1:20
+ tc filter add dev eth0 parent 1: protocol ip prio 2 handle 3 fw classid 1:30

# control de trafico de entrada... se utiliza ingress.
+ tc qdisc add dev eth0 handle ffff: ingress
+ tc filter add dev eth0 parent ffff: protocol ip prio 50 u32 match ip src 
0.0.0.0/0 police rate 700kbit burst 10k drop flowid :1


luego en iptables he definido que todo lo que salga a puertos 25 o desde el 
puerto 25 del fw esté en la cola lenta (30), en cambio http, pop, e imap en 
la 20 (rapida). Tambien he definido que lo que salga del fw a la red interna 
vaya por la 10 (la más rapida), pero claro, le da los 700kbps definidos...

+ DOWNLINK=700
+ UPLINK=700

Una solucion sería definir algo como...
+ DOWNLINK=100000
+ UPLINK=100000
(velocidad de la red ethernet)
pero me parece un poco tano hacer esto. no se que os parecerá...

lo que me gustaría saber es si hay alguna forma de definir que determinados 
paquetes (ya vengan del iptables o no) no se les haga ningun tipo de "traffic 
control"....

Si pensais que la solucion esa de poner a 100.000 y luego hacer los calculos 
es buena me decis....

<SIENTO LA TXAPA />
<;-) />


Saludos,
    Ender


Más información sobre la lista de distribución eside-ghost