[technique] Partage de bande passante sur ligne ADSL

Laurent GUERBY laurent at guerby.net
Mer 7 Déc 11:26:05 CET 2011


On Tue, 2011-12-06 at 19:23 +0100, Cyril wrote:
> Ok Drien,
> 
> Et du coup le QoS est appliqué au niveau des IP privées ou des IP 
> publiques ?

Salut Cyril,

La QoS est appliquée sur les IP publiques et qui sortent sur l'interface
tapstg (qui n'a que des IP publiques de toutes façons). A priori le
traffic local entre membres ne devrait pas etre affecté (a valider par
un test de transfert a l'occasion).

Par contre en relisant la doc et mon script je pense que j'ai fait
deux erreurs :

- Il faut preciser un rate et un ceil sur les regles
par IP sinon ca ne marche pas et le rate de la classe parente
est dépassé par la somme des rate des classes filles. Avec un ceil le
rate peut etre minuscule car la regle est automatiquement de prendre de
la ressource jusqu'au ceil disponible, j'ai donc mis 1kbit de rate.

- le "parent" a mettre sur les regles par IP n'est pas bon, il faut
mettre "1:1" et pas "1:" sinon on a pas de ceil global cumulé qui
s'applique.

Ce qui donne :

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:1 classid 1:$IP htb rate 1kbit ceil $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
}

Comme mes premiers tests ne s'appliquaient qu'a une IP je n'ai pas vu
le soucis.

Sur Mones j'ai testé en simultané :

scp -o BindAddress=91.224.148.114 test5M monserveur:/dev/null
scp -o BindAddress=91.224.148.115 test5M monserveur:/dev/null

On arrive bien a ne pas depasser le ceil 96 kbits d'upload de Mones
et les deux flux sont bien equilibrés. De plus quand on
rajoute un troisieme scp simultané sur une IP :

scp -o BindAddress=91.224.148.115 test5M monserveur:/dev/null

L'IP avec deux flux n'est pas privilégiée et obtient toujours
48 kbps total, ce qu'on veut donc.

J'ai appliqué le nouveau script sur gw pour tapmon et tapstg et a Mones,
je te laisse faire l'edit sur la VM Saint-Gaudens et le reboot (au
passage je pense qu'il vaut mieux enlever la regle specifique que tu as
ajouté pour 91.224.148.7 avec la correction en place et laisser
uniformement 700kbit partout).

Merci pour vos tests, en esperant que ça marche bien cette fois :).

Sincerement,

Laurent

> Merci :)
> Cyril
> 
> Le 06/12/2011 18:59, Adrien van den Bossche a écrit :
> > Le 06/12/2011 16:45, Cyril a écrit :
> >> Hello Adrien,
> >>
> >> Comment tu attribue tes IP de ton côté ?
> >> Tu as des IP privées + NAT 1:1 avec les IP publiques ou tu attribue
> >> directement les IP publiques sur les routeurs ?
> >
> > Bonjour,
> >
> > sur Monès, c'est IP privées + NAT 1:1 avec les IP publiques sur le 
> > routeur qui tunnelise sur TTNN.
> >
> > Drien
> >
> >
> >>
> >> Merci
> >> Cyril
> >>
> >> Le 06/12/2011 13:32, Adrien van den Bossche a écrit :
> >>> Hello à tous,
> >>>
> >>> pour ma part, les flux ont l'air bien mieux régulés depuis
> >>> l'application du script. A confirmer sur la durée.
> >>>
> >>> Merci Laurent !
> >>>
> >>> Adrien
> >>>
> >>>
> >>>
> >>> Le 06/12/2011 13:18, Cyril a écrit :
> >>>> Hello !
> >>>>
> >>>> Après une petite journée de test en prod, je remarque dans le iftop 
> >>>> que
> >>>> le débit en upload ne semble pas limité.
> >>>> De plus, le ping continue à atteindre des seuils importants.
> >>>>
> >>>> Dans le script, je fais des appels de ce type :
> >>>> qos_by_ip_add_ip $ID_IP_QOS $ip_public 'src' 'tapstg' '700kbit'
> >>>> (rappel des fonctions en fin de mail)
> >>>>
> >>>> Si je ne me suis pas trompé en modifiant le script, la règle QoS est
> >>>> appliquée à tous le trafic provenant le l'IP publique, vers tapstg.
> >>>>
> >>>> Néanmoins, un NAT 1:1 est en place entre les IP privées 
> >>>> (172.16.X.X) et
> >>>> les IP publiques.
> >>>> Est-ce que je ne devrais pas plutôt appliquer la QoS sur les IP 
> >>>> privées
> >>>> ? Ou c'est pareil ?
> >>>>
> >>>> Merci :)
> >>>> Cyril
> >>>>
> >>>> function qos_by_ip_init {
> >>>> local dev=$1
> >>>> local rate=$2
> >>>>
> >>>> tc qdisc add dev $dev root handle 1: htb default 1
> >>>> tc class add dev $dev parent 1: classid 1:1 htb rate $rate
> >>>> }
> >>>>
> >>>> function qos_by_ip_add_ip {
> >>>> local id_host=$1
> >>>> local ip=$2
> >>>> local dir=$3
> >>>> local dev=$4
> >>>> local rate=$5
> >>>>
> >>>> echo "QoS IP $ip (id : $id_host) : $rate sur $dev";
> >>>> tc class add dev $dev parent 1: classid 1:$id_host htb rate $rate
> >>>> tc filter add dev $dev protocol ip parent 1:0 prio 1 u32 match ip $dir
> >>>> $ip flowid 1:$id_host
> >>>> }
> >>>>
> >>>>
> >>>> Le 05/12/2011 11:50, Laurent GUERBY a écrit :
> >>>>> On Mon, 2011-12-05 at 10:52 +0100, Cyril wrote:
> >>>>>> Bonjour Laurent,
> >>>>> Bonjour Cyril,
> >>>>>
> >>>>>> Merci pour ton travail.
> >>>>>>
> >>>>>> Si je comprend bien :
> >>>>>> * La QoS sur le débit descendant est en place sur Paris car
> >>>>>> c'est le routeur Parisien qui collecte le flux et le renvoi
> >>>>>> par le biais du tunnel VPN ?
> >>>>> Je n'ai pas activé les regles mais oui c'est l'idée. Je vais
> >>>>> activer sur gw pour tapstg d'ici quelques minutes.
> >>>>>
> >>>>>> * La QoS sur le débit descendant n'est pas encore gérée et doit
> >>>>>> être placée sur le serveur de routage local qui envoi le flux
> >>>>>> de données sur le GW à Paris ?
> >>>>> Oui.
> >>>>>
> >>>>>> Dans le cas de St Gaudens, j'ai adapté un chouilla la syntaxe du
> >>>>>> script pour garder une cohérence avec ceux déjà en place.
> >>>>>> Je le met en fin de mail, pour toutes fins utiles.
> >>>>> Je pense qu'il faut mettre dans le script :
> >>>>>
> >>>>> ID_IP_QOS=2
> >>>>>
> >>>>> (plutot que =1)
> >>>>>
> >>>>> La classid 1:1 est definie dans qos_by_ip_init les regles
> >>>>> users doivent commencer a 1:2 sinon le premier user
> >>>>> va partager le classid 1:1 avec le traffic non identifié.
> >>>>>
> >>>>> Pour le '700kbit' je n'ai pas mesuré j'ai mis au pif,
> >>>>> l'idée est de se placer plutot en dessous (par tatonnement) : si ça
> >>>>> marche on devrait avoir un ping qui redevient normal même
> >>>>> en charge.
> >>>>>
> >>>>>> Sinon, est-t-il possible de flusher toutes les règles TC ?
> >>>>>> Ce serait intéressant pour mon script.
> >>>>> Pour voir les regles dans le detail :
> >>>>>
> >>>>> tc -s -d qdisc show dev $DEV
> >>>>> tc -s -d class show dev $DEV
> >>>>> tc -s -d filter show dev $DEV
> >>>>>
> >>>>> Pour supprimer :
> >>>>>
> >>>>> tc qdisc del dev $DEV root
> >>>>>
> >>>>>> Petite remarque :
> >>>>>> Pour tapstg tu as mis "RATE=11000kbit" et pour les autres
> >>>>>> "DOWN=5500kbit", sans doute une erreur ?
> >>>>> Oui j'ai changé "DOWN" en "RATE" quand je me suis aperçu
> >>>>> que les regles etaient les memes pour Paris et en local.
> >>>>>
> >>>>> Merci pour ta revue !
> >>>>>
> >>>>> Laurent
> >>>>>
> >>>>>
> >>>> _______________________________________________
> >>>> technique mailing list
> >>>> technique at lists.tetaneutral.net
> >>>> http://lists.tetaneutral.net/listinfo/technique
> >>>





Plus d'informations sur la liste de diffusion technique