Tengo algunas dudas sobre una estructura HTB que estoy usando.
Mi objetivo es limitar la velocidad de descarga y carga de los usuarios en una red local. Cada usuario de la red tiene una lista personal de dominios con una velocidad hacia arriba y hacia abajo para el dominio que no puede superar.
Significa que el usuario1 puede tener su acceso en slashdot.org restringido a 8 KB en la descarga y 3 KB para cargar, y el usuario 2 puede tener en slashdot.org un acceso restringido de 4KB hacia abajo y 1KB hacia arriba.
Por ahora configuro una pareja iptables / tc que funciona muy bien, pero a muy poca escala, usando 2 o 3 hosts virtuales al mismo tiempo (Desafortunadamente, no puedo realizar una prueba de tamaño real).
Aquí está mi estructura actual (solo mostraré la que está en la salida de la LAN, la de la carga es simplemente una "copia" de esta)
Un qdisc HTB (manejador 2 :) conectado a la interfaz, la clase de tráfico predeterminada es la clase FFFF.
La raíz de la clase 2: 1 directamente debajo de la qdisc HTB que tiene la velocidad y el límite de la capacidad de DESCARGA.
La clase predeterminada 2: FFFF como hijo de 2: 1, con una tasa de 1kbsp y un límite máximo de capacidad de DESCARGA.
Luego, hay otras clases agregadas dinámicamente cuando hay una nueva restricción para un usuario de un determinado dominio, se agrega una nueva clase tc para controlar la velocidad de descarga de su dominio.
Por ahora, esto es lo que hice:
Cree una nueva clase tc con una identificación única (tomada de una base de datos, no el punto aquí), como padre, la clase 2: 1, el valor de velocidad es 1bps, el valor de límite máximo se establece en la velocidad de descarga limitada.
Aquí están los comandos tc:
-------------- BEGIN SCRIPT --------------
DOWNLINK=800
## Setting up the static tc qdisc and class
$tc qdisc add dev $LAN_IFACE root handle 2: htb default 0xFFFF
# Main class so the default class can borrow bandwith from the others
$tc class replace dev $LAN_IFACE parent 0x2: classid 0x2:0x1 htb rate $DOWNLINK ceil $DOWNLINKkbps
# add the default class of class id 2:a under the main class of classid 2:1
$tc class replace dev $LAN_IFACE parent 0x2:0x1 classid 0x2:0xFFFF htb rate 1kbps ceil $DOWNLINKkbps prio 0
# add to the leaf class 2:10 for default traffic a sfq qdisc
$tc qdisc add dev $LAN_IFACE parent 0x2:0xFFFF handle 0xFFFF: sfq perturb 10
## The dynamic part called each time a new restriction for a couple domain/user is added
$tc class replace dev $LAN_IFACE parent 0x2:0x1 classid 0x2:0x$idHex htb rate 1bps ceil $speedDownkbps prio 1
# Add the sfq at the leaf class 2:1$id
$tc qdisc add dev $LAN_IFACE parent 0x2:0x$idHex handle 0x$idHex: sfq perturb 10
# $id is the mark added by iptables for this couple domain/user
$tc filter replace dev $LAN_IFACE parent 0x2:0 protocol ip prio 3 handle 0x$id fw flowid 0x2:0x$idHex
-------------- END SCRIPT --------------
Todo el tráfico normal (sin restricción de velocidad) debe ir a la clase predeterminada, y el restringido debe enviarse a su clase tc correspondiente.
El punto que dudo seriamente es el uso de la velocidad mínima de 1bps para la clase predeterminada y la clase restringida. No puedo controlar el número de clases restringidas que se crearán, y no quiero que la tasa total de la clase restringida sea superior a la de la clase raíz.
Otro punto, agregué por defecto el prio 0, y la clase restringida el prio 1, por lo que en caso de que la clase predeterminada tome prestado (casi siempre de acuerdo con su tasa muy lenta), esta clase se servirá antes que el otro dominio restringido. ¿Pero esos dominios no morirán de hambre si mantengo el límite máximo de la clase predeterminada como el de la clase raíz?
¿Cómo puedo permitir que los usuarios mantengan una interactividad y un ancho de banda decentes para un uso no restringido, al tiempo que limito la velocidad de varios dominios / usuarios?
También me pregunto si la clase predeterminada es útil aquí, ya que si no especifico una clase predeterminada para htb qdisc, los paquetes que no coincidan con los filtros se eliminarán a la velocidad del hardware. (¿Pero aquí de nuevo haciendo que la clase restringida se muera de hambre?)
Soy realmente nuevo en tc y QoS de red, por lo que cualquier consejo, crítica (constructiva) será bienvenida.
Vincent
fuente