Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

QoS

5 réponses
Avatar
BERTRAND Joël
Bonjour à tous,

Considérons un serveur connecté à deux interfaces WAN (eth1 et
eth2, le LAN est sur eth0).

Les adresses IP sont les suivantes :
eth1 : 192.168.254.1
eth1:1 : 192.168.254.81
...
eth1:6 : 192.168.254.86

eth2 : 192.168.253.1

Tourne sur cette machine un proxy qui tire au hasard une
adresse entre eth1:1 et eth1:6 pour se connecter sur les serveurs
distants. Ça fonctionne.

Je veux rajouter une QoS sur cette machine. Pour cela, j'ai
tagué les différents paquets comme suit :

[0:0] -A POSTROUTING -p icmp -o eth1 -j MARK --set-mark 10
[0:0] -A POSTROUTING -p icmp -o eth2 -j MARK --set-mark 10
[0:0] -A POSTROUTING -p udp --dport domain -o eth1 -j MARK --set-mark 20
[0:0] -A POSTROUTING -p udp --sport domain -o eth1 -j MARK --set-mark 20
[0:0] -A POSTROUTING -p udp --sport domain -o eth2 -j MARK --set-mark 20
[0:0] -A POSTROUTING -p udp --dport ntp -o eth1 -j MARK --set-mark 20
[0:0] -A POSTROUTING -p udp --sport ntp -o eth1 -j MARK --set-mark 20
[0:0] -A POSTROUTING -p udp --sport ntp -o eth2 -j MARK --set-mark 20
[0:0] -A POSTROUTING -p tcp --sport 3128 -o eth2 -j MARK --set-mark 30
[0:0] -A POSTROUTING -p tcp --sport ssh -o eth1 -j MARK --set-mark 40
[0:0] -A POSTROUTING -p tcp --sport ssh -o eth2 -j MARK --set-mark 40

tc qdisc add dev eth1 root handle 1: htb default 100
tc qdisc add dev eth2 root handle 2: htb default 100

tc class add dev eth1 parent 1:0 classid 1:1 htb \
rate 1100kbit mtu 1500
tc class add dev eth2 parent 2:0 classid 2:1 htb \
rate 3mbit mtu 1500

tc class add dev eth1 parent 1:1 classid 1:10 htb \
rate 10kbit ceil 1100kbit prio 1
tc class add dev eth1 parent 1:1 classid 1:20 htb \
rate 200kbit ceil 1100kbit prio 2
tc class add dev eth1 parent 1:1 classid 1:40 htb \
rate 500kbit ceil 1100kbit prio 4
tc class add dev eth2 parent 2:1 classid 2:10 htb \
rate 10kbit ceil 3mbit prio 1
tc class add dev eth2 parent 2:1 classid 2:20 htb \
rate 200kbit ceil 3mbit prio 2
tc class add dev eth2 parent 2:1 classid 2:30 htb \
rate 1mbit ceil 2mbit prio 3
tc class add dev eth2 parent 2:1 classid 2:40 htb rate \
500kbit ceil 3mbit prio 4

tc filter add dev eth1 parent 1: protocol ip prio 1 handle 10 \
fw flowid 1:10
tc filter add dev eth1 parent 1: protocol ip prio 2 handle 20 \
fw flowid 1:20
tc filter add dev eth1 parent 1: protocol ip prio 4 handle 40 \
fw flowid 1:40
tc filter add dev eth2 parent 2: protocol ip prio 1 handle 10 \
fw flowid 2:10
tc filter add dev eth2 parent 2: protocol ip prio 2 handle 20 \
fw flowid 2:20
tc filter add dev eth2 parent 2: protocol ip prio 3 handle 30 \
fw flowid 2:30
tc filter add dev eth2 parent 2: protocol ip prio 4 handle 40 \
fw flowid 2:40

J'aimerais avec cela que les l'ICMP, le ssh et certains autres
protocoles aient un débit minimal réservé et que le reste utilise la
bande passante restante. Visiblement, j'ai raté quelque chose
puisque cela ne fonctionne pas. Une requête sur le serveur apache
est capable de monopoliser toute la bande disponible au détriment
des autres protocoles.

Une idée ?

Cordialement,

JKB

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers debian-user-french-REQUEST@lists.debian.org
En cas de soucis, contactez EN ANGLAIS listmaster@lists.debian.org
Archive: https://lists.debian.org/54AFD6DA.3010608@systella.fr

5 réponses

Avatar
Samuel
Bonjour,

Plusieurs remarques (désolé si c'est à côté de la plaque) :

- Ne voyant pas le début des commandes, le marquage se fait-il bien dans
la table "mangle" ?
iptables -t mangle -A POSTROUTING -p icmp -o eth1 -j MARK --set-mark 10

- Je ne vois pas la restauration de l'état en début de script :
iptables -t mangle -A PREROUTING -j CONNMARK --restore-mark

- Je ne vois pas non plus la sauvegarde en sortie de chaine :
iptables -t mangle -A POSTROUTING -o $DEV_SORTIE -m state --state NEW -j
CONNMARK --save-mark

Samuel.

Le 09/01/2015 14:25, BERTRAND Joël a écrit :
Bonjour à tous,

Considérons un serveur connecté à deux interfaces WAN (eth1 et
eth2, le LAN est sur eth0).

Les adresses IP sont les suivantes :
eth1 : 192.168.254.1
eth1:1 : 192.168.254.81
...
eth1:6 : 192.168.254.86

eth2 : 192.168.253.1

Tourne sur cette machine un proxy qui tire au hasard une
adresse entre eth1:1 et eth1:6 pour se connecter sur les serveurs
distants. Ça fonctionne.

Je veux rajouter une QoS sur cette machine. Pour cela, j'ai
tagué les différents paquets comme suit :

[0:0] -A POSTROUTING -p icmp -o eth1 -j MARK --set-mark 10
[0:0] -A POSTROUTING -p icmp -o eth2 -j MARK --set-mark 10
[0:0] -A POSTROUTING -p udp --dport domain -o eth1 -j MARK --set-mark 20
[0:0] -A POSTROUTING -p udp --sport domain -o eth1 -j MARK --set-mark 20
[0:0] -A POSTROUTING -p udp --sport domain -o eth2 -j MARK --set-mark 20
[0:0] -A POSTROUTING -p udp --dport ntp -o eth1 -j MARK --set-mark 20
[0:0] -A POSTROUTING -p udp --sport ntp -o eth1 -j MARK --set-mark 20
[0:0] -A POSTROUTING -p udp --sport ntp -o eth2 -j MARK --set-mark 20
[0:0] -A POSTROUTING -p tcp --sport 3128 -o eth2 -j MARK --set-mark 30
[0:0] -A POSTROUTING -p tcp --sport ssh -o eth1 -j MARK --set-mark 40
[0:0] -A POSTROUTING -p tcp --sport ssh -o eth2 -j MARK --set-mark 40

tc qdisc add dev eth1 root handle 1: htb default 100
tc qdisc add dev eth2 root handle 2: htb default 100

tc class add dev eth1 parent 1:0 classid 1:1 htb
rate 1100kbit mtu 1500
tc class add dev eth2 parent 2:0 classid 2:1 htb
rate 3mbit mtu 1500

tc class add dev eth1 parent 1:1 classid 1:10 htb
rate 10kbit ceil 1100kbit prio 1
tc class add dev eth1 parent 1:1 classid 1:20 htb
rate 200kbit ceil 1100kbit prio 2
tc class add dev eth1 parent 1:1 classid 1:40 htb
rate 500kbit ceil 1100kbit prio 4
tc class add dev eth2 parent 2:1 classid 2:10 htb
rate 10kbit ceil 3mbit prio 1
tc class add dev eth2 parent 2:1 classid 2:20 htb
rate 200kbit ceil 3mbit prio 2
tc class add dev eth2 parent 2:1 classid 2:30 htb
rate 1mbit ceil 2mbit prio 3
tc class add dev eth2 parent 2:1 classid 2:40 htb rate
500kbit ceil 3mbit prio 4

tc filter add dev eth1 parent 1: protocol ip prio 1 handle 10
fw flowid 1:10
tc filter add dev eth1 parent 1: protocol ip prio 2 handle 20
fw flowid 1:20
tc filter add dev eth1 parent 1: protocol ip prio 4 handle 40
fw flowid 1:40
tc filter add dev eth2 parent 2: protocol ip prio 1 handle 10
fw flowid 2:10
tc filter add dev eth2 parent 2: protocol ip prio 2 handle 20
fw flowid 2:20
tc filter add dev eth2 parent 2: protocol ip prio 3 handle 30
fw flowid 2:30
tc filter add dev eth2 parent 2: protocol ip prio 4 handle 40
fw flowid 2:40

J'aimerais avec cela que les l'ICMP, le ssh et certains autres
protocoles aient un débit minimal réservé et que le reste utilise la
bande passante restante. Visiblement, j'ai raté quelque chose
puisque cela ne fonctionne pas. Une requête sur le serveur apache
est capable de monopoliser toute la bande disponible au détriment
des autres protocoles.

Une idée ?

Cordialement,

JKB




--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: https://lists.debian.org/
Avatar
BERTRAND Joël
Samuel a écrit :
Bonjour,



Bonjour,

Plusieurs remarques (désolé si c'est à côté de la plaque) :

- Ne voyant pas le début des commandes, le marquage se fait-il bien dans
la table "mangle" ?



Naturellement. J'ai coupé un peu vite le début du script...

iptables -t mangle -A POSTROUTING -p icmp -o eth1 -j MARK --set-mark 10

- Je ne vois pas la restauration de l'état en début de script :
iptables -t mangle -A PREROUTING -j CONNMARK --restore-mark

- Je ne vois pas non plus la sauvegarde en sortie de chaine :
iptables -t mangle -A POSTROUTING -o $DEV_SORTIE -m state --state NEW -j
CONNMARK --save-mark



Je n'ai jamais utilisé --restore-mark ou --save-mark. Mes paquets sont
bien tagués mais la QoS n'est pas réellement active...

Cordialement,

JKB

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: https://lists.debian.org/
Avatar
Samuel
Samuel a écrit :
- Je ne vois pas la restauration de l'état en début de script :
iptables -t mangle -A PREROUTING -j CONNMARK --restore-mark

- Je ne vois pas non plus la sauvegarde en sortie de chaine :
iptables -t mangle -A POSTROUTING -o $DEV_SORTIE -m state --state NEW -j
CONNMARK --save-mark





En fait c'est plus lié à la sauvegarde des états pour la gestion des
doubles routes, mais qui sont gérées par ton proxy.

Pas d'autre idée.

Bonne recherche.

Samuel.

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: https://lists.debian.org/
Avatar
Samuel
As-tu trouvé la solution ?

Une piste :

tc qdisc add dev eth1 root handle 1: htb default 100

signifie que tout paquet non marqué ira dans la classe 1:100

Hors je ne vois pas de classe 1:100 dans ton script.

Samuel.


Le 09/01/2015 14:25, BERTRAND Joël a écrit :
Bonjour à tous,

Considérons un serveur connecté à deux interfaces WAN (eth1 et
eth2, le LAN est sur eth0).

Les adresses IP sont les suivantes :
eth1 : 192.168.254.1
eth1:1 : 192.168.254.81
...
eth1:6 : 192.168.254.86

eth2 : 192.168.253.1

Tourne sur cette machine un proxy qui tire au hasard une
adresse entre eth1:1 et eth1:6 pour se connecter sur les serveurs
distants. Ça fonctionne.

Je veux rajouter une QoS sur cette machine. Pour cela, j'ai
tagué les différents paquets comme suit :

[0:0] -A POSTROUTING -p icmp -o eth1 -j MARK --set-mark 10
[0:0] -A POSTROUTING -p icmp -o eth2 -j MARK --set-mark 10
[0:0] -A POSTROUTING -p udp --dport domain -o eth1 -j MARK --set-mark 20
[0:0] -A POSTROUTING -p udp --sport domain -o eth1 -j MARK --set-mark 20
[0:0] -A POSTROUTING -p udp --sport domain -o eth2 -j MARK --set-mark 20
[0:0] -A POSTROUTING -p udp --dport ntp -o eth1 -j MARK --set-mark 20
[0:0] -A POSTROUTING -p udp --sport ntp -o eth1 -j MARK --set-mark 20
[0:0] -A POSTROUTING -p udp --sport ntp -o eth2 -j MARK --set-mark 20
[0:0] -A POSTROUTING -p tcp --sport 3128 -o eth2 -j MARK --set-mark 30
[0:0] -A POSTROUTING -p tcp --sport ssh -o eth1 -j MARK --set-mark 40
[0:0] -A POSTROUTING -p tcp --sport ssh -o eth2 -j MARK --set-mark 40

tc qdisc add dev eth1 root handle 1: htb default 100
tc qdisc add dev eth2 root handle 2: htb default 100

tc class add dev eth1 parent 1:0 classid 1:1 htb
rate 1100kbit mtu 1500
tc class add dev eth2 parent 2:0 classid 2:1 htb
rate 3mbit mtu 1500

tc class add dev eth1 parent 1:1 classid 1:10 htb
rate 10kbit ceil 1100kbit prio 1
tc class add dev eth1 parent 1:1 classid 1:20 htb
rate 200kbit ceil 1100kbit prio 2
tc class add dev eth1 parent 1:1 classid 1:40 htb
rate 500kbit ceil 1100kbit prio 4
tc class add dev eth2 parent 2:1 classid 2:10 htb
rate 10kbit ceil 3mbit prio 1
tc class add dev eth2 parent 2:1 classid 2:20 htb
rate 200kbit ceil 3mbit prio 2
tc class add dev eth2 parent 2:1 classid 2:30 htb
rate 1mbit ceil 2mbit prio 3
tc class add dev eth2 parent 2:1 classid 2:40 htb rate
500kbit ceil 3mbit prio 4

tc filter add dev eth1 parent 1: protocol ip prio 1 handle 10
fw flowid 1:10
tc filter add dev eth1 parent 1: protocol ip prio 2 handle 20
fw flowid 1:20
tc filter add dev eth1 parent 1: protocol ip prio 4 handle 40
fw flowid 1:40
tc filter add dev eth2 parent 2: protocol ip prio 1 handle 10
fw flowid 2:10
tc filter add dev eth2 parent 2: protocol ip prio 2 handle 20
fw flowid 2:20
tc filter add dev eth2 parent 2: protocol ip prio 3 handle 30
fw flowid 2:30
tc filter add dev eth2 parent 2: protocol ip prio 4 handle 40
fw flowid 2:40

J'aimerais avec cela que les l'ICMP, le ssh et certains autres
protocoles aient un débit minimal réservé et que le reste utilise la
bande passante restante. Visiblement, j'ai raté quelque chose
puisque cela ne fonctionne pas. Une requête sur le serveur apache
est capable de monopoliser toute la bande disponible au détriment
des autres protocoles.

Une idée ?

Cordialement,

JKB




--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: https://lists.debian.org/
Avatar
BERTRAND Joël
Samuel a écrit :
As-tu trouvé la solution ?



Oui. Elle est en test mais à l'air de fonctionner correctement :


RATE_ETH100kbit
MAX_ETH100kbit
RATE_ETH2000kbit
MAX_ETH2500kbit

# Création de la racine sur eth1. La classe par défaut est 1:100.
tc qdisc add dev eth1 root handle 1:0 htb default 100

# Limitation du débit sur le lien eth1
tc class add dev eth1 parent 1:0 classid 1:1 htb
rate $RATE_ETH1 ceil $MAX_ETH1

# Création des différentes classes
tc class add dev eth1 parent 1:1 classid 1:10 htb
rate 10kbit ceil $RATE_ETH1
tc class add dev eth1 parent 1:1 classid 1:20 htb
rate 20kbit ceil $RATE_ETH1
tc class add dev eth1 parent 1:1 classid 1:40 htb
rate 50kbit ceil $RATE_ETH1
tc class add dev eth1 parent 1:1 classid 1:100 htb
rate 100kbit ceil $RATE_ETH1

# Discrimination des paquets
tc qdisc add dev eth1 parent 1:10 handle 1:110 pfifo limit 5
tc qdisc add dev eth1 parent 1:20 handle 1:120 pfifo limit 5
tc qdisc add dev eth1 parent 1:40 handle 1:140 pfifo limit 5
tc qdisc add dev eth1 parent 1:100 sfq perturb 10

tc filter add dev eth1 protocol ip parent 1:0 prio 1
handle 10 fw flowid 1:10
tc filter add dev eth1 protocol ip parent 1:0 prio 1
handle 20 fw flowid 1:20
tc filter add dev eth1 protocol ip parent 1:0 prio 1
handle 40 fw flowid 1:40

# Même chose sur eth2
tc qdisc add dev eth2 root handle 2:0 htb default 200
tc class add dev eth2 parent 2:0 classid 2:1 htb
rate $RATE_ETH2 ceil $MAX_ETH2

tc class add dev eth2 parent 2:1 classid 2:10 htb
rate 10kbit ceil $RATE_ETH2
tc class add dev eth2 parent 2:1 classid 2:20 htb
rate 20kbit ceil $RATE_ETH2
tc class add dev eth2 parent 2:1 classid 2:30 htb
rate 100kbit ceil 2mbit
tc class add dev eth2 parent 2:1 classid 2:40 htb
rate 50kbit ceil $RATE_ETH2
tc class add dev eth2 parent 2:1 classid 2:200 htb
rate 100kbit ceil $RATE_ETH2

# Discrimination des paquets
tc qdisc add dev eth2 parent 2:10 handle 2:210 pfifo limit 5
tc qdisc add dev eth2 parent 2:20 handle 2:220 pfifo limit 5
tc qdisc add dev eth2 parent 2:30 handle 2:230 pfifo limit 5
tc qdisc add dev eth2 parent 2:40 handle 2:240 pfifo limit 5
tc qdisc add dev eth2 parent 2:200 sfq perturb 10

# Pas de QoS sur IPv6 pour l'instant
tc filter add dev eth2 protocol ip parent 2:0 prio 1
handle 10 fw flowid 2:10
tc filter add dev eth2 protocol ip parent 2:0 prio 1
handle 20 fw flowid 2:20
tc filter add dev eth2 protocol ip parent 2:0 prio 1
handle 30 fw flowid 2:30
tc filter add dev eth2 protocol ip parent 2:0 prio 1
handle 40 fw flowid 2:40

Cordialement,

JKB

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: https://lists.debian.org/