Probleme QoS

Forum d'assistance et d'échange sur l'installation, la configuration, et l'utilisation des système Linux et BSD. Vous pouvez y poster vos questions concernant ces systèmes d'exploitation en faisant l'effort préalable de rechercher dans le forum, dans les manuels et les documentations que la réponse n'y figure pas.

Modérateur: modos Ixus

Probleme QoS

Messagepar cilo » 21 Avr 2004 16:35

Bonjour tout le monde!

Voilà, j'ai réalisé un script qos qui est censé limiter ma bande passante des que je le lance, mais j'ai un petit problème car celui ci bloque à la fois l'upload et le download alors que je lui bloque seulement le port source (sport dans le script).

Donc si quelqu'un a déjà eu ce problème, ou si c'est un bug connu de tc, merci de me répondre.

Au fait, je passe par un serveur SLIS (c un linux fedora pour l'internet scolaire) pour lancer ma QoS.

Voilà, merci d'avance :wink:
Avatar de l’utilisateur
cilo
Second Maître
Second Maître
 
Messages: 28
Inscrit le: 06 Avr 2004 17:04

Messagepar cilo » 21 Avr 2004 20:43

Personne n'a jamais eu ce problème ???

Aidez moi, svp, il n'y a plus que ca qui ne fonctionne pas sur mon script!!!
Avatar de l’utilisateur
cilo
Second Maître
Second Maître
 
Messages: 28
Inscrit le: 06 Avr 2004 17:04

Script

Messagepar cilo » 22 Avr 2004 08:53

Voici mon script de QoS.
Si vous voyez des erreurs d'où le problème peut venir merci de me répondre :wink:

## Script HTB

#!/bin/bash

DEV=eth1

case $1 in
start)

tc qdisc add dev $DEV root handle 1: htb default 13

###### Definition des classes ######

# Classe parent
tc class add dev $DEV parent 1: classid 1:1 htb rate 1000kbit ceil 1000kbit burst 10k

tc class add dev $DEV parent 1:1 classid 1:10 htb prio 1 rate 40kbit ceil 70kbit burst 10k
tc class add dev $DEV parent 1:1 classid 1:11 htb prio 2 rate 10kbit ceil 70kbit burst 10k
tc class add dev $DEV parent 1:1 classid 1:12 htb prio 3 rate 10kbit ceil 70kbit burst 10k
tc class add dev $DEV parent 1:1 classid 1:13 htb prio 4 rate 10kbit ceil 70kbit burst 10k

###### Mise en place des filtres ######

# Filtrage par rapport au port source
# (HTTP)
tc filter add dev $DEV protocol ip parent 1:0 u32 match ip sport 80 0xffff flowid 1:10

# (FTP)
tc filter add dev $DEV protocol ip parent 1:0 u32 match ip sport 20 0xffff flowid 1:11
tc filter add dev $DEV protocol ip parent 1:0 u32 match ip sport 21 0xffff flowid 1:11

# (SSH)
tc filter add dev $DEV protocol ip parent 1:0 u32 match ip sport 22 0xffff flowid 1:12

# Filtrage par rapport au port destination
#tc filter add dev $DEV protocol ip parent 1:0 u32 match ip dport 80 0xffff flowid 1:11

# Filtrage par rapport a l'adresse source
#tc filter add dev $DEV protocol ip parent 1:0 u32 match ip src 172.16.0.22 flowid 1:11

# Filtrage par rapport a l'adresse destination
#tc filter add dev $DEV protocol ip parent 1:0 u32 match ip dst 172.16.0.20 flowid 1:11
;;

stop)
tc qdisc del dev $DEV root handle 1: htb default 13
;;

restart)
$0 stop
$0 start
;;

status)
tc qdisc ls
;;

*)
echo "usage: htb_qos.sh {start|stop|restart|status}"
;;
esac
Avatar de l’utilisateur
cilo
Second Maître
Second Maître
 
Messages: 28
Inscrit le: 06 Avr 2004 17:04

Messagepar Noxy » 22 Avr 2004 09:01

Salut,

Moi aussi j'ai le même problème que toi à savoir que le script que j'ai fait ne marche pas. Par contre moi il ne limite pas ma bande passante!!! Je vais continuer à faire des recherches et si je trouve je te dis.

A+
Avatar de l’utilisateur
Noxy
Major
Major
 
Messages: 79
Inscrit le: 20 Avr 2004 16:51
Localisation: lyon

Messagepar Noxy » 22 Avr 2004 09:19

j'ai trouvé un site en anglais qui explique un peu comment ca fonctionne :

http://luxik.cdi.cz/~devik/qos/htb/manual/userg.htm mais peut-être que tu l'as déja vu.

Essaye ces commandes pour débuger ton script :

tc -s -d qdisc show dev eth0

tc -s -d class show dev eth0
Avatar de l’utilisateur
Noxy
Major
Major
 
Messages: 79
Inscrit le: 20 Avr 2004 16:51
Localisation: lyon

Messagepar cilo » 22 Avr 2004 09:31

Merci, pour ton aide, je vais regarder mais je doute que ce site m'aide.

Pour moi ce problème est tout a fait illogique, car dans mon script je ne bloque que le port source (sport), et celui ci bloque pourtant a la fois le port source et le port destination.

C tout a fait illogique :cry:
Avatar de l’utilisateur
cilo
Second Maître
Second Maître
 
Messages: 28
Inscrit le: 06 Avr 2004 17:04

Messagepar Noxy » 22 Avr 2004 09:35

essaye plutot de faire ça :

# Filtrage par rapport au port destination
# (HTTP)
tc filter add dev $DEV protocol ip parent 1:0 u32 match ip dport 80 0xffff flowid 1:10

# (FTP)
tc filter add dev $DEV protocol ip parent 1:0 u32 match ip dport 20 0xffff flowid 1:11
tc filter add dev $DEV protocol ip parent 1:0 u32 match ip dport 21 0xffff flowid 1:11

# (SSH)
tc filter add dev $DEV protocol ip parent 1:0 u32 match ip dport 22 0xffff flowid 1:12
Avatar de l’utilisateur
Noxy
Major
Major
 
Messages: 79
Inscrit le: 20 Avr 2004 16:51
Localisation: lyon

Messagepar cilo » 22 Avr 2004 09:50

Je viens d'essayer mais j'obtiens toujours le meme résultat.

Le script me bloque toujours les 2 ports alors qu'un seul est demandé, c'est à dire que ca limite la bande passante à la fois de mon download et de mon upload.

Et moi, je voudrais que ca ne limite soit que mon download soit mon upload en fonction du port que je précise.
Avatar de l’utilisateur
cilo
Second Maître
Second Maître
 
Messages: 28
Inscrit le: 06 Avr 2004 17:04

Messagepar Noxy » 22 Avr 2004 12:00

Tiens voila mon script en exemple et il marche mais j'ai fait la limitation que sur TCP ou UDP donc pas très utile mais si tu sais te servir de iptables ca marchera pour ton cas :

#!/bin/sh

tc qdisc add dev bond0 root handle 1: htb default 12

##marquage des paquets##
iptables -t mangle -A OUTPUT -o bond0 -p tcp -j MARK --set-mark 1
iptables -t mangle -A OUTPUT -o bond0 -p udp -j MARK -- set -mark 2

tc class add dev bond0 parent 1: classid 1:1 htb rate 10kbit ceil 10kbit burst 10k
tc class add dev bond0 parent 1:1 classid 1:10 htb rate 10kbit ceil 10kbit burst 10k
tc class add dev bond0 parent 1:1 classid 1:11 htb rate 10kbit ceil 10kbit burst 10k
tc class add dev bond0 parent 1:1 classid 1:12 htb rate 10kbit ceil 10kbit burst 10k

tc filter add dev bond0 protocol ip handle 1 fw flowid 1:10
tc filter add dev bond0 protocol ip handle 2 fw flowid 1:11

Voila j'espère que ca marchera pour toi
Bye
Avatar de l’utilisateur
Noxy
Major
Major
 
Messages: 79
Inscrit le: 20 Avr 2004 16:51
Localisation: lyon

Messagepar cilo » 22 Avr 2004 13:51

Merci, pour ton script!

Je vais voir si avec iptables ca marche.

Si j'ai des problèmes, je te fait signe :wink:
Avatar de l’utilisateur
cilo
Second Maître
Second Maître
 
Messages: 28
Inscrit le: 06 Avr 2004 17:04

Messagepar cilo » 23 Avr 2004 14:24

Noxy, si tu pouvais me dire comment tu bloques l'upload avec iptables ca serait cool, parce que là j'arrive à limiter le download mais pas l'upload.

Merci d'avance :wink:
Avatar de l’utilisateur
cilo
Second Maître
Second Maître
 
Messages: 28
Inscrit le: 06 Avr 2004 17:04

Messagepar Noxy » 26 Avr 2004 09:07

Eh ben limite les ports sources à la place des ports destinations
8)
Avatar de l’utilisateur
Noxy
Major
Major
 
Messages: 79
Inscrit le: 20 Avr 2004 16:51
Localisation: lyon

Messagepar cilo » 26 Avr 2004 11:01

J'ai deja essayé mais ca mùarche pas :cry:

Tiens, voilà mon script, si tu voies qque chose qui cloche merci de me le dire, parce que là je ne comprends plus rien :


#!/bin/bash

DEV=eth1

case $1 in
start)

###### Iptables ######

# Marquer les paquets HTTP
iptables -t mangle -A OUTPUT -t mangle -p tcp --sport 80 -j MARK --set-mark 2

# Marquer les paquets FTP
iptables -t mangle -A OUTPUT -t mangle -p tcp --sport ftp-data -j MARK --set-mark 3
iptables -t mangle -A OUTPUT -t mangle -p tcp --sport ftp -j MARK --set-mark 4

# Marquer les paquets SSH

iptables -t mangle -A OUTPUT -t mangle -p tcp --sport 22 -j MARK --set-mark 5


###### Création de la classe Root ######
tc qdisc add dev $DEV root handle 1: htb default 13

###### Definition des classes ######

# Classe parent
tc class add dev $DEV parent 1: classid 1:1 htb rate 1000kbit ceil 1000kbit burst 10k

tc class add dev $DEV parent 1:1 classid 1:10 htb prio 1 rate 40kbit ceil 100kbit burst 10k
tc class add dev $DEV parent 1:1 classid 1:11 htb prio 2 rate 40kbit ceil 100kbit burst 10k
tc class add dev $DEV parent 1:1 classid 1:12 htb prio 3 rate 10kbit ceil 100kbit burst 10k
tc class add dev $DEV parent 1:1 classid 1:13 htb prio 4 rate 10kbit ceil 100kbit burst 10k


###### Mise en place des filtres ######

# Filtrage par rapport au port source
# (HTTP)
tc filter add dev $DEV protocol ip handle 2 fw flowid 1:10

# (FTP)
tc filter add dev $DEV protocol ip handle 3 fw flowid 1:11
tc filter add dev $DEV protocol ip handle 4 fw flowid 1:11

# (SSH)
tc filter add dev $DEV protocol ip handle 5 fw flowid 1:12

;;

stop)
tc qdisc del dev $DEV root handle 1: htb default 13

# Suppression iptables HTTP
iptables -t mangle -D OUTPUT -t mangle -p tcp --sport 80 -j MARK --set-mark 2

# Suppression iptables FTP
iptables -t mangle -D OUTPUT -t mangle -p tcp --sport ftp-data -j MARK --set-mark 3
iptables -t mangle -D OUTPUT -t mangle -p tcp --sport ftp -j MARK --set-mark 4

# Suppression iptables SSH
iptables -t mangle -D OUTPUT -t mangle -p tcp --sport 22 -j MARK --set-mark 5
;;

restart)
$0 stop
$0 start
;;

status)
tc qdisc ls
;;

*)
echo "usage: htb_qos.sh {start|stop|restart|status}"
;;
esac
Avatar de l’utilisateur
cilo
Second Maître
Second Maître
 
Messages: 28
Inscrit le: 06 Avr 2004 17:04

Messagepar Noxy » 26 Avr 2004 14:17

Essaye de faire PREROUTING à la place de OUTPUT car il faut marquer les paquets avant qu'ils soient routés et non au moment où ils sortent.
Sinon avec ftp-data t'arrive à limiter les données en ftp?
Autre question pourquoi tu supprimes les règles iptables à la fin de ton script?
Avatar de l’utilisateur
Noxy
Major
Major
 
Messages: 79
Inscrit le: 20 Avr 2004 16:51
Localisation: lyon

Messagepar cilo » 26 Avr 2004 14:46

salut noxy!

Pour le PREROUTING, il faut que je le fasse avant le OUTPUT ou a la place du OUTPUT? Parce que si c'est à la place du OUTPUT j'ai déjà essayé et ca marche pas. J'ai essayé à la fois pour OUTPUT, INPUT, FORWARD, POSROUTING et PREROUTING et il y a rien qui limitait l'upload!!!

Sinon pour ftp-data, c mon maitre de stage qui m'a dit que pour le ftp, il fallait bloquer le port 20 et 21.

Et enfin, je limite les regles d'iptables quand je stoppe l'execution de mon script.


Voilà, tu voies peut etre un peu plus ce que je veux faire.

Sinon mon script est éxécuté sur un SLIS (c'est un serveur linux internet scolaire basé sur une linux fedora car je fait mon stage au rectorat d'amiens) qui sert de serveurs à tous les autres stations connectées dessus.

Et donc, mon script doit permettre de limiter la bande passante en DOWNLOAD et en UPLOAD avec les valeurs que l'on désire ajouter.

Pour le moment, j'arrive bien à limiter le DOWNLOAD mais pas l'UPLOAD, donc si t'as une idée, elle est la bienvenue :wink:
Est ce que ca peut venir du SLIS, ou est ce qu'il manque quelque chose dans le script, je ne sais pas.

ps : la version du script au dessus ne limite que le DOWNLOAD, il n'y a pas les tests que j'ai réalisé dessus pour l'upload

Voilà, merci d'avance 8)
Avatar de l’utilisateur
cilo
Second Maître
Second Maître
 
Messages: 28
Inscrit le: 06 Avr 2004 17:04

Suivant

Retour vers Linux et BSD (forum généraliste)

Qui est en ligne ?

Utilisateur(s) parcourant actuellement ce forum : Aucun utilisateur inscrit et 1 invité