VoIP Configuration · 5 min read · Jan 22, 2026

QoS et mise en forme du trafic pour les utilisateurs VoIP utilisant iproute2 et Asterisk

QoS et mise en forme du trafic pour les utilisateurs VoIP utilisant iproute2 et Asterisk

La qualité de mes appels téléphoniques VoIP souffrait chaque fois que je téléchargeais ou téléversais quoi que ce soit. C’était irritant, surtout pour ceux qui m’appelaient (je les entendais mieux qu’ils ne m’entendaient). J’ai donc exploré Iproute2 et d’autres tutoriels, en particulier en ce qui concerne le trafic VoIP, mais je n’ai rien trouvé qui fonctionnait bien. Après quelques essais, j’ai trouvé des paramètres qui me convenaient : une qualité VoIP constante, indépendamment des activités sur le réseau.

Une note concernant mon système VoIP : j’utilise Asterisk sur un ordinateur portable de secours (IBM T20), et mon fournisseur VoIP est l’excellent Unlimitel, au Canada. Puisque j’héberge ma propre box Asterisk, je peux la configurer comme je le souhaite. J’ai également acheté un téléphone dur IAX qui se trouve sur mon intranet.

Configuration

Je suppose que vous avez déjà mis en place votre pare-feu Linux. Les paquets VoIP traversent votre pare-feu et votre NAT est déjà configuré et fonctionne. Nous ne toucherons même pas à votre pare-feu avec cette configuration. Tout ce que vous devez faire est de créer le bon qdisc, classes et filtres pour prioriser vos paquets VoIP. La commande tc d’Iproute2 est là pour ça.

Imaginons que votre réseau soit comme suit :

Internet <------> Modem câble <-------> Pare-feu Linux <-----> Intranet <-----> Téléphone VoIP

Puisque j’utilise Asterisk avec IAX, le port d’intérêt est le port 4569. Si vous utilisez SIP, adaptez le port dans les lignes suivantes.

Quelques informations de base

Les paquets IP ont une zone où vous pouvez préconfigurer QoS (qualité de service). Bien que votre FAI les ignore probablement, vous pouvez les utiliser dans votre réseau local pour une certaine mise en forme du trafic. Les 4 bits QoS sont :

0x02 : Minimiser le coût monétaire

0x04 : Maximiser la fiabilité

0x08 : Maximiser le débit

0x10 : Minimiser le délai

Officiellement, vous êtes autorisé à activer au maximum un de ces bits. Votre pare-feu peut alors examiner les paquets à leur arrivée et déterminer lesquels transmettre en premier, généralement Minimiser le délai.

De manière non officielle, vous pouvez activer n’importe quel de ces bits en même temps. Ainsi, vous pourriez avoir un paquet avec à la fois Minimiser le délai et Maximiser le débit. Cela dit, examinons certaines des fonctionnalités d’Iproute2.

Iproute2 et tc

Par défaut, les paquets sont envoyés selon le principe du premier entré, premier sorti. Avec tc, vous pouvez modifier cela de manière significative. Utilisons un système de mise en file d’attente très simple : avons 3 “tuyaux” (ou files d’attente) et attribuons-leur une priorité. C’est-à-dire que tant qu’il y a quelque chose dans la file 1, nous ne vidons pas (ou ne défilons pas) la file 2, et tant qu’il y a quelque chose dans la file 2, nous ne défilons pas la file 3.

Cela se fait avec la commande suivante (note : eth1 est l’interface externe) :

tc qdisc add dev eth1 root handle 1: prio priomap 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 0

Les 16 valeurs pour priomap sont importantes. Cela signifie essentiellement que la plupart des paquets se retrouvent dans la 3ème file (puisque nous commençons à zéro, elle est appelée “2”), sauf les paquets avec QoS Minimiser-Délai, qui sont placés dans la 2ème file, sauf les paquets avec tous les bits QoS activés, qui sont placés dans la 1ère file. (la discipline de mise en file d’attente prio définit 3 files par défaut)

Les 16 valeurs sont dans l’ordre pour les QoS suivants :

1 : 0x00 : aucune QoS n’est définie -> vers la 3ème file (2)

2 : 0x02 : Minimiser le coût monétaire (MMC) (2)

3 : 0x04 : Maximiser la fiabilité (MR) (2)

4 : 0x06 : MMC + MR (2)

5 : 0x08 : Maximiser le débit (MT) (2)

6 : 0x0a : MT + MMC (2)

7 : 0x0c : MT + MR (2)

8 : 0x0e : MT + MR + MMC (2)

9 : 0x10 : Minimiser le délai (MD) (1)

10 : 0x12 : MD + MMC (1)

11 : 0x14 : MD + MR (1)

12 : 0x16 : MD + MMC + MR (1)

13 : 0x18 : MD + MT (1)

14 : 0x1a : MD + MT + MMC (1)

15 : 0x1c : MD + MT + MR (1)

16 : 0x1e : MD + MT + MR + MMC (0)

C’était notre première étape.

Ensuite, nous allons ajuster chaque file afin qu’elles aient elles-mêmes une discipline de mise en file d’attente :

tc qdisc add dev eth1 parent 1:1 handle 10: sfq limit 3000
tc qdisc add dev eth1 parent 1:2 handle 20: sfq
tc qdisc add dev eth1 parent 1:3 handle 30: sfq

Cela donne à la première file une capacité supposée de 3000 paquets. En réalité, la taille sera de 128 paquets car elle est codée en dur dans le programme tc comme étant la taille maximale possible.

À ce stade, la plupart des paquets passeront par la 3ème file, sauf ceux avec le bit QoS Minimiser-Délai activé.

Si vous ajustez votre iax.conf sur votre box Asterisk pour dire ce qui suit, certains paquets peuvent se retrouver dans la première file :

tos=0x1e

Cependant, comme ce n’est pas une garantie, nous allons les forcer à passer par la file 1 en utilisant un autre truc dans la manche de tc, les filtres.

Rappelez-vous, IAX utilise le port 4569, donc nous allons forcer tout paquet vers et depuis ce port à passer par la première file :

tc filter add dev eth1 protocol ip parent 1: prio 1 u32 match ip dport 4569 0xffff flowid 1:1
tc filter add dev eth1 protocol ip parent 1: prio 1 u32 match ip sport 4569 0xffff flowid 1:1
tc filter add dev eth1 protocol ip parent 1: prio 1 u32 match ip tos 0x10 0xff flowid 1:2

Techniquement, la dernière ligne n’est pas nécessaire mais cela ne fait pas de mal de la laisser.

Et maintenant, vous avez terminé ! Tous vos paquets VoIP sont défilés en premier. Même pendant un téléchargement ou un téléversement lourd, vous ne perdrez pas d’interactivité pour vos appels téléphoniques.

Pour voir quelques statistiques, exécutez la commande suivante :

tc -s qdisc ls dev eth1

Pour supprimer vos files et revenir à l’état normal, exécutez :

tc qdisc del dev eth1 root

Il vous revient maintenant d’exécuter automatiquement les commandes appropriées au démarrage.

Share: X/Twitter LinkedIn

Recevez de nouveaux articles dans votre boîte de réception.

Aucun spam. Désabonnez-vous à tout moment.