Ho dei dubbi su una struttura HTB che sto usando.
Il mio obiettivo è limitare la velocità di download e upload degli utenti in una rete locale. Ogni utente della rete ha un elenco personale di domini con una velocità crescente per il dominio che non può superare.
Significa che l'utente1 può avere l'accesso su slashdot.org limitato a 8 KB per il download e 3 KB per il caricamento, e l'utente2 può avere su slashdot.org un accesso limitato di 4KB in basso e 1 KB in su.
Per ora ho installato una coppia iptables / tc che funziona alla grande, ma su scala molto piccola, usando 2 o 3 host virtuali contemporaneamente (purtroppo non riesco ad eseguire test di dimensioni reali).
Ecco la mia struttura attuale (mostrerò solo quello sull'uscita della LAN, quello per il caricamento è semplicemente una "copia" di questo)
Un qdisc HTB (handle 2 :) collegato all'interfaccia, la classe di traffico predefinita è la classe FFFF.
La classe radice 2: 1 direttamente sotto il qdisc HTB con velocità e limite della capacità DOWNLINK.
La classe predefinita 2: FFFF come figlio di 2: 1, con una velocità di 1kbsp e un ceil di capacità DOWNLINK.
Quindi, ci sono altre classi aggiunte dinamicamente quando c'è una nuova restrizione per un utente da un certo dominio, una nuova classe tc viene aggiunta per controllare la velocità di download dal suo dominio.
Per ora, ecco cosa ho fatto:
Crea una nuova classe tc con un ID univoco (preso da un database, non il punto qui), come genitore la classe 2: 1, il valore di frequenza è 1bps, il valore di ceil è impostato sulla velocità di download limitata.
Ecco i comandi 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 --------------
Tutto il traffico normale (senza limitazione di velocità) dovrebbe passare alla classe predefinita e quello limitato dovrebbe essere inviato alla sua corrispondente classe tc.
Il punto di cui dubito seriamente è l'uso della velocità minima di 1bps per la classe predefinita e la classe limitata. Non riesco a controllare il numero di classi con restrizioni che verranno create e non voglio calcolare la percentuale totale della classe con restrizioni rispetto a quella della classe radice.
Un altro punto, ho aggiunto il valore predefinito prio 0 e la classe limitata il prio 1, quindi nel caso in cui la classe predefinita debba prendere in prestito (quasi sempre in base al suo tasso molto lento), questa classe verrà servita prima dell'altro dominio limitato. Ma quei domini non moriranno di fame se mantengo il ceil della classe predefinita come quello della classe root?
Come posso riuscire a consentire agli utenti di mantenere una discreta interattività e larghezza di banda per un utilizzo non limitato, limitando la velocità per diversi domini / utenti?
Mi chiedo anche se la classe predefinita è utile qui, poiché se non specifico una classe predefinita per htb qdisc, i pacchetti che non corrispondono ai filtri verranno rimossi dalla velocità hardware. (ma qui di nuovo facendo morire di fame la classe ristretta?)
Sono davvero nuovo di QC e di rete, quindi qualsiasi consiglio, critica (costruttiva;)) sarà il benvenuto.
Vincent.