[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

QoS sur VPN



	Bonjour à tous,

	Je sèche sur un problème de QoS sur un VPN (tap1/udp OpenVPN).

Avant d'écrire ici, j'ai naturellement vérifié que tous mes paquets étaient bien taggués par mes règles iptables. Pour information, les règles en question sont :

[0:0] -A POSTROUTING -p icmp -j MARK --set-mark 10
[0:0] -A POSTROUTING -p udp --sport domain -j MARK --set-mark 20
[0:0] -A POSTROUTING -p udp --dport domain -j MARK --set-mark 20
[0:0] -A POSTROUTING -p tcp --sport domain -j MARK --set-mark 20
[0:0] -A POSTROUTING -p tcp --dport domain -j MARK --set-mark 20
[0:0] -A POSTROUTING -p udp --sport ntp -j MARK --set-mark 20
[0:0] -A POSTROUTING -p udp --dport ntp -j MARK --set-mark 20
[0:0] -A POSTROUTING -p tcp --sport ntp -j MARK --set-mark 20
[0:0] -A POSTROUTING -p tcp --dport ntp -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
[0:0] -A POSTROUTING -p udp -d legendre.public.systella.fr --sport openvpn -o eth2 -j MARK --set-mark 50
[0:0] -A POSTROUTING -d gwvoip.ext.nerim.net -j MARK --set-mark 60
[0:0] -A POSTROUTING -s gwvoip.ext.nerim.net -j MARK --set-mark 60
[0:0] -A POSTROUTING -d 79.170.216.8 -j MARK --set-mark 60
[0:0] -A POSTROUTING -s 79.170.216.8 -j MARK --set-mark 60
[0:0] -A POSTROUTING -d 79.170.216.14 -j MARK --set-mark 60
[0:0] -A POSTROUTING -s 79.170.216.14 -j MARK --set-mark 60

(lignes issuez de mon fichier /var/lib/iptables/active)

	Je taggue donc les paquets comme suit :
- 10 : ICMP
- 20 : requêtes DNS
- 30 : proxy squid
- 40 : ssh
- 50 : openvpn vers la machine qui s'appelle legendre.public
- 60 : QoS pour de la voix sur IP.

	Le serveur en question possède plusieurs interfaces réseaux :
- eth0 (LAN)
- eth1 (WAN0)
- eth1:[1:6] (WAN0/29)
- eth2 (WAN1)
- tap0 (VPN/TCP)
- tap1 (VPN/UDP) <- pour la VoIP
- tun0

J'ai réussi à écrire sans problème des règles pour établir des priorités de trafic sur les interfaces réelles, mais j'ai un gros problème pour installer de la QoS sur tap1. tap1 sort sur Internet par eth2. J'ai donc commencé par écrire :

RATE_ETH2=3000kbit
MAX_ETH2=3500kbit
RATE_TAP1=3000kbit

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 512kbit
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:50 htb \
                rate 128kbit ceil $RATE_ETH2
tc class add dev eth2 parent 2:1 classid 2:200 htb \
                rate 100kbit ceil $RATE_ETH2

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:50 handle 2:250 pfifo limit 5
tc qdisc add dev eth2 parent 2:200 sfq perturb 10

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
tc filter add dev eth2 protocol ip parent 2:0 prio 1 \
                handle 50 fw flowid 2:50

	J'ai testé les différents trafic et débits, ça semble fonctionner.

Je me suis donc dit que cela fonctionnera de la même façon pour tap1. Sur eth2, j'ai réservé 128 kbps pour le VPN, celui-ci ayant la possibilité d'aller jusqu'à 3000 kbps.

	Sur le VPN, j'ai donc indiqué :
tc qdisc add dev tap1 root handle 3:0 htb default 300
tc class add dev tap1 parent 3:0 classid 3:1 htb \
		rate 128kbit ceil $RATE_TAP1
tc class add dev tap1 parent 3:1 classid 3:60 htb \
		rate 64kbit ceil 128kbit
tc class add dev tap1 parent 3:1 classid 3:300 htb \
		rate 100kbit ceil $RATE_TAP1

tc qdisc add dev tap1 parent 3:60 handle 3:360 pfifo limit 5
tc qdisc add dev tap1 parent 3:300 sfq perturb 10

tc filter add dev tap1 protocol ip parent 3:0 prio 1 \
		handle 60 fw flowid 3:60

Je pensais naïvement qu'avec cette configuration, je réservais 64 kbps (128 kbps au maximum) pour la VoIP et que le reste pourrait croître jusqu'à $RATE_TAP1.

Or lorsque je fais un sftp au travers du VPN, il semble limité à 128 kbps comme si la règle tc class add dev eth2 parent 2:1 classid 2:50 htb rate 128kbit ceil $RATE_ETH2 ne tenait pas compte de la clause ceil. Si je vire la QoS installée sur tap1, tout fonctionne normalement.

Si je remplace la règle tc class add dev tap1 parent 3:0 classid 3:1 htb rate 128kbit ceil $RATE_TAP1 par tc class add dev tap1 parent 3:0 classid 3:1 htb rate $RATE_TAP1, cela fonctionne.

	J'avoue que je ne comprends pas trop pourquoi.

	Une idée ?

	JKB
	

		


Reply to: