[technique] Partage de bande passante sur ligne ADSL

Laurent GUERBY laurent at guerby.net
Dim 4 Déc 22:12:33 CET 2011


Bonsoir,

Comme expliqué ici :

http://lists.tetalab.org/pipermail/tetaneutral/2011-April/000129.html

L'algorithme de gestion de file d'attente par défaut va equitablement
repartir la bande passante par flux. Lors du partage d'une ligne ADSL
par plusieurs utilisateurs un utilisateur ouvrant plus de connexions
simultanées aura plus de flux et donc plus de bande passante, ce qui
n'est pas tres "juste". 

De plus sur une ligne ADSL dépasser la capacité en bande passante va
entrainer un ping tres elevé a cause des buffer des modems et routeurs,
il est donc plus judicieux de limiter a la source le debit a une valeur
legerement inferieure a la capacité de la ligne. 

Sur une ligne ADSL normale l'utilisateur va pouvoir controler facilement
le debit montant mais plus difficilement le débit descendant qui depends
de la politique de son FAI. Dans le cas de tetaneutral.net l'integralité
du traffic descendant passe par notre routeur a Paris qui l'envoie dans
un tunnel openvpn tap vers l'ADSL, nous pouvons donc le controler
finement.

J'ai mis quelques liens ici :

http://chiliproject.tetaneutral.net/projects/tetaneutral/wiki/Buffer_Bloat

Je propose d'appliquer le script suivant sur gw a Paris sur les trois
tunnels (tapstg = Saint-Gaudens, tapthd = trebons.net, tapmon = Mones),
et en changeant DIR et RATE sur les machines locales (upload
a determiner).

La seule astuce est l'utilisation du dernier octet de l'IP pour le
classid (un nombre incrémenté aurait aussi fonctionné). Le script
est relativement simple car la qdisc s'applique dans les deux
sens sur les IP publiques directement (sauf erreur).

<<
function do_qos {
  tc qdisc add dev $DEV root handle 1: htb default 1
  tc class add dev $DEV parent 1: classid 1:1 htb rate $RATE
  for IP in $IP_LIST; do
    tc class add dev $DEV parent 1: classid 1:$IP htb rate $RATE
    tc filter add dev $DEV protocol ip parent 1:0 prio 1 u32 match ip $DIR 91.224.148.$IP flowid 1:$IP
  done
}

DIR=dst #on gw then RATE= ADSL download speed
#DIR=src #on local machine then RATE= ADSL upload speed

DEV=tapstg
RATE=11000kbit
IP_LIST=$(seq 129 144)
do_qos

DEV=tapthd
DOWN=5500kbit
IP_LIST=$(seq 194 207)
do_qos

DEV=tapmon
DOWN=600kbit
IP_LIST=$(seq 114 115)
do_qos
>>

Commentaires et suggestions bienvenus,

Sincèrement,

Laurent





Plus d'informations sur la liste de diffusion technique