Langues

Introduction au Traffic Shapping avec pfSense 2.0

 

Qu'est-ce que le Traffic Shapping ? 

 

Introduction au traffic shapping / QoS sous pfSense : 

 
Comme le dit si bien la page de Wikipédia consacrée à ce sujet, la qualité de service (QoS) est la capacité à véhiculer dans de bonnes conditions un type de trafic donné, en termes de disponibilité, débit, délais de transmission, gigue, taux de perte de paquets… 

Autrement dit, la qualité de service est un concept qui a pour but d'optimiser les ressources d'un réseau en permettant la définition d'une politique appliqué aux flux de données réseau. 

La mise au point de ce type de mécanismes est nécessaire pour permettre d'offrir aux clients du réseau un accès fluide à certaines applications qui le nécessitent (Voix sur IP, visioconférence, jeux interactifs, …). 

Le tableau présenté ci-dessous permet de mieux comprendre les besoins de chaque type d'application. 

Application Perte de données Bande passante Sensibilité au temps
FTP Pas de perte Flexible Non
E-mail Pas de perte Flexible Non
Documents web Pas de perte Flexible (quelques Kbps) Non
Visioconférence / VoIP Tolérant à la perte Audio : 1Kbps à 1Mbps
Vidéo : 10kbps à 5Mbps
Oui : 100s of msec
Audio Vidéo hébergé Tolérant à la perte
Audio : 1Kbps à 1Mbps
Vidéo : 10kbps à 5Mbps
Oui : quelques secondes
Jeux interactifs Tolérant à la perte Quelques Kbps à 10 Kbps Oui : 100s of msec
Messagerie instantannée Pas de perte Flexible Oui et non 
 
De nombreuses raisons prévalent à la mise au point d'une politique de QoS sur un réseau : 
  • Nécessité pour l'accès à un type de flux avec une garantie de qualité (VoIP, Vidéo, …). 
  • Volonté politique de privilégier un certain type de flux par rapport à un autre. 
  • Volonté politique de privilégier certains utilisateurs par rapport à d'autres. 
  • Volonté politique de privilégier certains flux applicatifs par rapport à d'autres.  

 

Sur quoi sont basés les mécanismes de queues de pfSense 2.0 ? 

Sur les framework pf / AltQ et Dummynet. 
 
AltQ est utilisé afin de fournir un système de queue et d’autres mécanismes de QoS afin d’assurer le partage des ressources et le contrôle de la QoS. Les scheduler utilisés sont : CBQ, PRIQ, HFSC. 
 
Dummynet pour sa part fournit un système de queue basé sur WFQ2+
 
Le principe directeur de la qualité de service sous pf / AltQ est le principe de queue. 
Les queues sont une forme de tampon pour les paquets réseaux. Les paquets sont retenus dans une queue jusqu'à ce qu'ils soient supprimés ou transmis suivant les critères qui s'appliqueront à la queue en question. 
 
Les queues sont rattachées à une interface spécifiques et la bande passante disponible est elle aussi gérée par interface et ensuite répartie au sein des différentes queues créé pour chaque interface. 
 
Les queues sont définies avec : 
  • une quantité de bande passante 
  • une portion de la bande passante disponible
  • ou parfois en fonction d'une priorité hiérarchique (dans le contexte, cela correspond à définir quelle sera la queue servie prioritairement). 
 
Une fois que la la définition de vos queues est en place vous appliquez le traffic shapping en vous servant de vos règles de firewalling pour incorporer un trafic dans une queue donnée. 
 
Le traffic shapping dans pfSense peut désormais être conduit au niveau 3 et 4 du modèle OSI : à partir des champs d’entête IP ou des ports TCP/UDP… Depuis peu il est aussi possible d’opérer ce filtrage au niveau 7 (niveau applicatif) grâce à l’intégration d’ipfw-classifyd. Pour des informations très précise sur ce qu’il est possible de faire au niveau 7 avec pfSense je vous recommande la lecture du document synthétique réalisé par André Ribeiro et Helder Pereira : L7 Classification and Policing in the pfSense Platform

 

Quels sont les différents mécanismes de gestion des queues implémentés dans pfSense ? 

Il existe quatre principaux mécanismes de gestion des queues dans pf  / AltQ qui sont aussi disponibles dans pfSense :

 

PRIQ (Priority based queue) 

On ne se sert pour ce type de queue que de la priorité par rapport à la bande passante totale disponible. En fonction du niveau de priorité (défini de 0 à 15 ou la valeur la plus haute bénéficie du meilleur traitement), un paquet ayant une priorité meilleure bénéficiera systématiquement d'un meilleur traitement.

 

CBQ (Class-based queue)

Permet de définir des queues en attribuant une quantité fixe de bande passante par rapport à la bande passante totale disponible (sous forme de pourcentage, ou en Kb/s, Mb/s, Gb/s).  Une queue CBQ peut être divisée en sous-queue qui vont aussi bénéficier de niveau de queue (de 0 à 7). Les paquets sont conservés dans la queue jusqu'à ce que la bande passante soit disponible. 

 

FAIRQ (Fair Queue)

Peu d’information semblent disponibles sur ce mécanisme de queue. Nous n’en dirons pas plus. 

 

HFSC (Hierarchical Fair Service Curve) 

Cet algorithme permet une attribution plus "juste" des ressources entre les queues. Il permet de créer des queues avec un "minimum garantie" ou une "limite haute". Il est aussi possible d'avoir des variations à l'intérieur des queues. Il y a de nombreux paramètres qui permettent de faire varier ces queues. La complexité d'HFSC en fait un objet complexe et difficile à maîtriser. 

Prenez donc bien soin de comprendre vos besoins et le cas échéant utilisez un mécanisme de queue simple et facile à maîtriser plutôt qu'HFSC… Les résultats n'en seront que meilleurs.  

 

Déterminer votre bande passante disponible  

Vous pouvez déterminer la vitesse de votre lien en utilisant SpeedTest 
Il est conseillé de n’utiliser que 97% de votre bande passante totale afin de vous garantir de ne jamais pousser votre lien à 100% - après tout la mise en œuvre de la QoS relève d’une gestion responsable de votre bande passante. 
 
 
 
Si cet article vous a plu et que vous souhaitez approfondir le sujet, vous pouvez consulter QoS avec pfSense 2.0 : HFSC dans le détail qui est la suite logique de ce premier article.  
 
 
 
Si cet article vous a plu, n'oubliez pas d'acheter vos firewall OpenSource auprès de notre site marchand. Muchas gracias ! 
 
 

Merci pour ces informations sur la Qos utilisée par Pfsense.
Est-ce qu'il serait possible de détailler la configuration manuelle d'une règle de Qos pour deux interfaces (Lan/wan) pour un service tel que la voip par exemple ?

Il serait effectivement intéressant de pouvoir avoir des exemples pour la VoIP. J'essaierais de faire cela dans un prochain post.
En attendant vous pouvez utiliser le Wizzard qui offre une approche simplifiée pour gérer la problématique…