Limiter la bande passante d'une ip par "tc"

salut,

Qu’est ce qui ne vas pas dans mon script
J’ai trouvé ce petit exemple dans un site et je l’ai modifié selon mes règles

**************VOICI LE SCRIPT *******************************
#!/bin/bash
TC=/bin/tc;
IF=“eth1”;
DNLD=“20kbps”;
UPLD=“5kbps”;
IP=“192.168.1.30”;
MASK=“24”;
U32=$TC filter add dev IF protocol ip parent 1:0 prio 1 u32;
$TC qdisc add dev $IF root handle 1: htb default 30;
$TC class add dev $IF parent 1: classid 1:1 htb rate $DNLD;
$TC class add dev $IF parent 1: classid 1:2 htb rate $UPLD;
U32 match ip dst $IP/$MAS flowid 1:1;
U32 match ip src $IP/$MAS flowid 1:2;


ET VOILA LE RESULTAT**********************
bash -x shapping

  • TC=/bin/tc
  • IF=eth1
  • DNLD=20kbps
  • UPLD=5kbps
  • IP=192.168.1.30
  • MASK=24
  • U32=tc
  • filter add dev IF protocol ip parent 1:0 prio 1 u32
    shapping: line 11: filter : commande introuvable
  • TC qdisc add dev eth1 root handle 1: htb default 30
    shapping: line 14: TC : commande introuvable
  • TC class add dev eth1 parent 1: classid 1:1 htb rate 20kbps
    shapping: line 15: TC : commande introuvable
  • TC class add dev eth1 parent 1: classid 1:2 htb rate 5kbps
    shapping: line 16: TC : commande introuvable
  • U32 match ip dst 192.168.1.30/ flowid 1:1
    shapping: line 17: U32 : commande introuvable
  • U32 match ip src 192.168.1.30/ flowid 1:2
    shapping: line 18: U32 : commande introuvable

JE VOUS remercie de vos réponses vu que je me débute dans les scripts

Salut,
Je ne suis pas un spécialiste mais quand même il y a quelques erreurs.

Essaie déjà avec ça :

# !/bin/bash TC=/bin/tc; IF="eth1"; DNLD="20kbps"; UPLD="5kbps"; IP="192.168.1.30"; MASK="24"; U32=; $TC filter add dev $IF protocol ip parent 1:0 prio 1 $U32; $TC qdisc add dev $IF root handle 1: htb default 30; $TC class add dev $IF parent 1: classid 1:1 htb rate $DNLD; $TC class add dev $IF parent 1: classid 1:2 htb rate $UPLD; $U32 match ip dst $IP/$MASK flowid 1:1; $U32 match ip src $IP/$MASK flowid 1:2;

Mais tu ne définis pas U32.
T’as indiqué $MAS au lieu de $MASK…
Tu oublie les $ à $U32 (dans les 2 dernières lignes) et à $IF (ligne 9)

Merci Isam,
j’ai porté changement su la variable de TC="/bin/tc" en TC="/sbin/tc" et j’ai suivi tes instructions
Mais j’ai d’autres erreurs maintenant


  • TC=/sbin/tc
  • IF=eth1
  • DNLD=20kbps
  • UPLD=5kbps
  • IP=192.168.1.30
  • MASK=24
  • U32=
  • /sbin/tc filter add dev eth1 protocol ip parent 1:0 prio 1 u32
  • /sbin/tc qdisc add dev eth1 root handle 1: htb default 30
    RTNETLINK answers: File exists
  • /sbin/tc class add dev eth1 parent 1: classid 1:1 htb rate 20kbps
    RTNETLINK answers: File exists
  • /sbin/tc class add dev eth1 parent 1: classid 1:2 htb rate 5kbps
    RTNETLINK answers: File exists
  • match ip dst 192.168.1.30/24 flowid 1:1
    shapping: line 18: match : commande introuvable
  • match ip src 192.168.1.30/24 flowid 1:2
    shapping: line 19: match : commande introuvable

Qui a d’autres idées,
En même temps, j’essai de le résoudre

Lut, l’idée de base est la bonne …tes variables sont mal définies… un petit man tc aurai pu t’aider pour le coup…

Donc dans le script d’origine (à adapter si tu as fait des changements)

remplace

par

Pour info une règle tc filter ressemble à ça :

Voila fait nous un retour en cas de problème mais tu n’es pas loin ^ ^

Je me permets juste une petite correction sur les compléments de jackall, qui a oublié le $ à IF dans

mais qui a certainement résolu ton problème avec U32.

Donc au final, on devrait avoir :

# !/bin/bash TC=/sbin/tc; IF="eth1"; DNLD="20kbps"; UPLD="5kbps"; IP="192.168.1.30"; MASK="24"; U32="$TC filter add dev $IF protocol ip parent 1:0 prio 1 u32"; $TC qdisc add dev $IF root handle 1: htb default 30; $TC class add dev $IF parent 1: classid 1:1 htb rate $DNLD; $TC class add dev $IF parent 1: classid 1:2 htb rate $UPLD; $U32 match ip dst $IP/$MASK flowid 1:1; $U32 match ip src $IP/$MASK flowid 1:2;

Sur la forme on devrait être bon, pour le reste je suis incompétent.

[code]+ U32=’/sbin/tc filter add dev eth1 protocol ip parent 1:0 prio 1 u32’

  • /sbin/tc qdisc add dev eth1 root handle 1: htb default 30
    RTNETLINK answers: File exists
  • /sbin/tc class add dev eth1 parent 1: classid 1:1 htb rate 20kbps
    RTNETLINK answers: File exists
  • /sbin/tc class add dev eth1 parent 1: classid 1:2 htb rate 5kbps
    RTNETLINK answers: File exists
  • /sbin/tc filter add dev eth1 protocol ip parent 1:0 prio 1 u32 match ip dst 192.168.1.30/24 flowid 1:1
  • /sbin/tc filter add dev eth1 protocol ip parent 1:0 prio 1 u32 match ip src 192.168.1.30/24 flowid 1:2
    [/code]

ça a marché du coté de la variable $U32, mais le RTNETLINK je ne comprend pas

J’ai finalement trouver la solution de RTNETLINK. j’ai fais ça

tc qdisc del dev eth1 root

Il ne me reste plus qu’à changer l’IP en une plage d’adresse
Merci de vos aides
:041

Euh une plage un réseau ou une plage un range?

Pour un réseau c’est déjà bon…
Pour un range je ne sais pas si c’est possible…

Pour info voici un script qui à marché pour moi pour simuler une liaison type dégradé (upload download latence) avec un bridge.
Désolé c’est un peu long mais si ça peut t’aider…

[code]#!/bin/bash

satellite_ok.sh

Nom des interfaces ou l’on doit faire la simulation

IF1=em1
IF2=em2
BR0=br0

################### em1 ######################

Debit

BP0=748kbit

Délai de transit

DELAI0=500ms

gigue

GIGUE0=100ms

% de paquets perdus

PERTE0=1.00%

################### em2 ######################

Debit

BP1=1Mbit

Délai de transit

DELAI1=500ms

gigue

GIGUE1=100ms

% de paquets perdus

PERTE1=1.00%

start() {

suppression des anciens paramètres

#tc qdisc del dev em1 root
#tc qdisc del dev em2 root

configuration de em1

tc qdisc add dev em1 root handle 1: htb default 11
#DOWN (from BO point of view) class
tc class add dev em1 parent 1 classid 1:7 htb rate $BP0 ceil $BP0 prio 1
#UP CLASS
tc class add dev em1 parent 1:1 classid 1:10 htb rate $BP1 ceil $BP1 prio 1
tc class add dev em1 parent 1:1 classid 0:11 htb rate 100mbit ceil 100mbit prio 1
tc qdisc add dev em1 parent 1:7 netem delay $DELAI0 $GIGUE0 distribution normal loss $PERTE0 25%

tc qdisc add dev em1 parent 1:10 netem delay $DELAI0 $GIGUE0 distribution normal loss $PERTE0 25%

#tc qdisc add dev em1 parent 1:1 netem delay $DELAI0 $GIGUE0 distribution normal loss $PERTE0 25%

configuration de em2

tc qdisc add dev em2 root handle 2: htb default 11
#DOWN (from BO point of view) class
tc class add dev em2 parent 2 classid 2:7 htb rate $BP0 ceil $BP0 prio 1
#UP CLASS
tc class add dev em2 parent 2 classid 2:10 htb rate $BP1 ceil $BP1 prio 1
tc class add dev em2 parent 2 classid 2:11 htb rate 100Mbit ceil 100Mbit prio 1
tc qdisc add dev em2 parent 2:7 netem delay $DELAI1 $GIGUE1 distribution normal loss $PERTE1 25%

tc qdisc add dev em2 parent 2:10 netem delay $DELAI1 $GIGUE1 distribution normal loss $PERTE1 25%

#tc qdisc add dev em2 parent 2:1 netem delay $DELAI1 $GIGUE1 distribution normal loss $PERTE1 25%

#filter

tc filter add dev em1 parent 1:0 protocol ip prio 1 u32 match ip dst 10.72.222.0/25 flowid 1:7
tc filter add dev em1 parent 1:0 protocol ip prio 1 u32 match ip dst 10.4.0.0/16 flowid 1:10

tc filter add dev em2 parent 2:0 protocol ip prio 1 u32 match ip dst 10.72.222.0/25 flowid 2:7
tc filter add dev em2 parent 2:0 protocol ip prio 1 u32 match ip dst 10.4.0.0/16 flowid 2:10

}

stop() {

tc qdisc del dev em1 root

tc qdisc del dev em2 root

}

restart() {

stop
sleep 1
start

}

show() {

echo “====em1======”

tc -s qdisc ls dev em1

echo “====em2======”

tc -s qdisc ls dev em2

}

case “$1” in

start)

echo -n "Demarrage de WAN simul: "
start
echo “done”
;;

stop)

echo -n "Demarrage de WAN simul: "
stop
echo “done”
;;

restart)

echo -n "Redemarrage de WAN simul: "
restart
echo “done”
;;

show)

echo "Statut de WAN simul pour em1 et em2:"
show
echo “”
;;

*)

echo “Usage: $0 {start|stop|restart|show}”
;;

esac

exit 0
[/code]

Ok, merci de ta part sinon
J’ai une seule petite question à propos de ton code
Que fait cette ligne?

Cette chaine permets de définir le RTT (en fait RTT/2) la gigue et la perte de paquet lors du transit dans l’interface.

Cela permet de vraiment simuler des liens WAN sur du lan…