De la théorie à la pratique : comment construire une QoS cohérente bout-en-bout dans une entreprise. NBAR, marquage, trust boundary, policy-map — chaque étape avec la CLI qui correspond. Un scénario complet, une config prête à déployer.
| Méthode | Ce qu'elle inspecte | Précision | Problème |
|---|---|---|---|
| Port TCP/UDP | Port 22 = SSH, 5060 = SIP… | Moyen | Teams, Zoom, Webex utilisent tous 443 — indiscernable |
| ACL (src/dst IP) | IP source, destination, port | Bon pour serveurs connus | Cloud apps = IP variables — ACL impossible à maintenir |
| VLAN | VLAN voix séparé du VLAN data | Segmentation physique | Ne résout pas Teams vs YouTube dans le même VLAN |
| DSCP existant | Lit le DSCP déjà dans le paquet | Excellent si bien marqué | Requiert que le endpoint marque — pas toujours le cas |
| NBAR (L7) | Signature applicative profonde | Excellent | Coût CPU — à placer sur les bons équipements |
! Activer NBAR sur l'interface LAN (ingress) interface GigabitEthernet0/0 ip nbar protocol-discovery ! Vérifier ce que NBAR détecte show ip nbar protocol-discovery interface GigabitEthernet0/0 top-n 10
Teams = AF41.
C'est la politique d'entreprise qui décide du marquage.
! class-maps de classification NBAR class-map match-any CM-VOIP-RTP match protocol rtp audio ! RTP avec payload audio — G.711/G.729 class-map match-any CM-SIGNALISATION match protocol sip ! Signalisation SIP match protocol h323 ! Signalisation H.323 (legacy) class-map match-any CM-TEAMS match protocol ms-teams ! Microsoft Teams (audio+vidéo+partage) match protocol webex ! Cisco Webex match protocol rtp video ! RTP vidéo générique class-map match-any CM-SSH match protocol ssh class-map match-any CM-BACKUP match access-group name ACL-BACKUP ! ACL : IP des serveurs backup ! ACL serveurs backup ip access-list extended ACL-BACKUP permit ip 10.1.10.0 0.0.0.255 any ! Sous-réseau backup
| Application | Flux | DSCP cible | Valeur | Justification |
|---|---|---|---|---|
| Téléphonie IP | RTP audio G.711/G.729 | EF | 46 | Latence <150ms, jitter <30ms — priorité absolue |
| Signalisation voix | SIP, H.323 | CS3 | 24 | Signalisation — prioritaire mais pas temps réel |
| Microsoft Teams | Audio/Vidéo/Partage | AF41 | 34 | Vidéo interactive — bonne qualité, pas stricte |
| SSH | Gestion réseau | AF21 | 18 | Interactif — réactivité importante |
| Web HTTP/HTTPS | Navigation standard | BE | 0 | Best Effort — élastique, tolère la latence |
| Backup / Transfert | Bulk data | CS1 | 8 | Scavenger — volontairement limité, n'affecte pas le reste |
! Routeur WAN — interface LAN en entrée ! Chaque application reconnue reçoit son DSCP policy-map PM-INGRESS-MARK class CM-VOIP-RTP set dscp ef ! RTP audio → EF (46) class CM-SIGNALISATION set dscp cs3 ! SIP/H.323 → CS3 (24) class CM-TEAMS set dscp af41 ! Teams vidéo → AF41 (34) class CM-SSH set dscp af21 ! SSH → AF21 (18) class CM-BACKUP set dscp cs1 ! Backup → CS1 (8) Scavenger class class-default set dscp default ! Tout le reste → BE (0)
! Routeur WAN — interface LAN Gi0/0 interface GigabitEthernet0/0 description LAN-ACCESS ip address 10.1.1.1 255.255.255.0 ip nbar protocol-discovery ! Activer NBAR service-policy input PM-INGRESS-MARK ! Marquer en entrée ! Vérifier que le marquage fonctionne show policy-map interface GigabitEthernet0/0 ! → Regarder "packets matched" dans chaque classe ! → Si CM-VOIP-RTP = 0 paquets : NBAR non actif ou téléphone ne génère pas RTP
DSCP EF — voix prioritaire pour son téléchargement YouTube.
Sans trust boundary, le réseau lui fait confiance aveuglément.
! Switch accès Cisco Catalyst mls qos ! Activer QoS globalement ! Port connecté au Téléphone IP interface FastEthernet0/1 description PHONE-VOIP switchport mode access switchport access vlan 10 ! VLAN data switchport voice vlan 20 ! VLAN voix mls qos trust cos ! Faire confiance au CoS du phone spanning-tree portfast ! Port connecté au PC (pas confiance) interface FastEthernet0/2 description PC-USER switchport mode access switchport access vlan 10 mls qos cos 0 ! Forcer CoS = 0 — ignorer marquage PC spanning-tree portfast ! Uplink vers switch distribution interface GigabitEthernet0/1 description UPLINK-DISTRIB switchport mode trunk mls qos trust dscp ! Faire confiance au DSCP sur trunk
! Sur le routeur LAN — ingress depuis le PC (DSCP pas fiable) ! Le PC a marqué tout son trafic EF — on réécrit class-map match-all CM-TOUT-PC match access-group name ACL-PC-RANGE ! tous les PCs du VLAN ip access-list extended ACL-PC-RANGE permit ip 10.1.10.0 0.0.0.255 any policy-map PM-INGRESS-UNTRUST class CM-TOUT-PC set dscp default ! Reset à 0 — on reclassifie ensuite via NBAR ! Alternative : police + remark (contrat de débit) policy-map PM-INGRESS-SLA class CM-TOUT-PC police rate 5000000 bps conform-action transmit exceed-action set-dscp-transmit cs1 ! Surplus → Scavenger violate-action drop
! Interface WAN — trafic entrant depuis l'ISP ! L'ISP peut avoir altéré le DSCP — on re-classifie class-map match-any CM-TRUSTED-DSCP match dscp ef cs3 af41 af21 ! DSCP qu'on accepte tels quels policy-map PM-WAN-INGRESS class CM-TRUSTED-DSCP set dscp dscp table dscp-mutation ! Table de mutation optionnelle class class-default set dscp default ! Tout DSCP inconnu → BE interface GigabitEthernet0/1 ! Interface WAN service-policy input PM-WAN-INGRESS
! class-maps de lecture DSCP (simples — pas de NBAR nécessaire ici) class-map match-all CM-EF match dscp ef class-map match-all CM-CS3 match dscp cs3 class-map match-any CM-AF41 match dscp af41 af42 af43 class-map match-any CM-AF21 match dscp af21 af22 af23 class-map match-all CM-CS1 match dscp cs1 ! Policy enfant — scheduler de files policy-map PM-CHILD-WAN class CM-EF priority 2000 ! 2 Mbps LLQ — voix class CM-CS3 bandwidth 500 ! 500 kbps — signalisation class CM-AF41 bandwidth 4000 ! 4 Mbps — Teams vidéo random-detect dscp-based ! WRED pour TCP Teams class CM-AF21 bandwidth 1000 ! 1 Mbps — SSH interactif class CM-CS1 bandwidth 500 ! 500 kbps minimum Scavenger random-detect dscp-based class class-default fair-queue ! Web BE — WFQ résiduel queue-limit 64 ! Policy parent — shaper 10 Mbps policy-map PM-PARENT-WAN class class-default shape average 10000000 ! CIR 10 Mbps — active le scheduler service-policy PM-CHILD-WAN ! Application sur interface WAN interface GigabitEthernet0/1 description WAN-ISP bandwidth 10000 ! Déclare CIR pour calculs % service-policy output PM-PARENT-WAN
!======================================== ! SWITCH ACCÈS — trust boundary !======================================== mls qos ! Activer QoS globalement ! VLAN voice et data vlan 10 name DATA vlan 20 name VOICE ! Port Téléphone IP (trust CoS du phone) interface FastEthernet0/1 description VOIP-PHONE-01 switchport mode access switchport access vlan 10 switchport voice vlan 20 mls qos trust cos ! Téléphone Cisco — marquage légitime spanning-tree portfast ! Ports PC utilisateurs (pas confiance) interface range FastEthernet0/2 - 20 description PC-USERS switchport mode access switchport access vlan 10 mls qos cos 0 ! Forcer CoS=0 — ignorer marquage PC spanning-tree portfast ! Port PC Backup (pas confiance, même traitement) interface FastEthernet0/21 description PC-BACKUP switchport mode access switchport access vlan 10 mls qos cos 0 spanning-tree portfast ! Uplink vers Switch Distribution interface GigabitEthernet0/1 description UPLINK-DISTRIB switchport mode trunk mls qos trust dscp ! Faire confiance au DSCP sur trunk
!======================================== ! SWITCH DISTRIBUTION — transit trusté !======================================== mls qos ! Downlink vers switch accès interface GigabitEthernet1/0/1 description DOWNLINK-ACCES switchport mode trunk mls qos trust dscp ! DSCP déjà marqué en amont ! Uplink vers routeur WAN interface GigabitEthernet1/0/24 description UPLINK-ROUTER-WAN switchport mode trunk mls qos trust dscp
!======================================== ! ROUTEUR WAN — partie 1 : NBAR + marquage !======================================== ! ACL serveurs backup ip access-list extended ACL-BACKUP permit ip 10.1.10.0 0.0.0.255 any ! CLASS-MAPS de reconnaissance class-map match-any CM-VOIP-RTP match protocol rtp audio class-map match-any CM-SIGNALISATION match protocol sip match protocol h323 class-map match-any CM-TEAMS match protocol ms-teams match protocol webex match protocol rtp video class-map match-any CM-SSH match protocol ssh class-map match-any CM-BACKUP match access-group name ACL-BACKUP ! POLICY-MAP de marquage ingress LAN policy-map PM-INGRESS-MARK class CM-VOIP-RTP set dscp ef class CM-SIGNALISATION set dscp cs3 class CM-TEAMS set dscp af41 class CM-SSH set dscp af21 class CM-BACKUP set dscp cs1 class class-default set dscp default ! Interface LAN interface GigabitEthernet0/0 description LAN ip address 10.1.1.1 255.255.0.0 ip nbar protocol-discovery service-policy input PM-INGRESS-MARK
!======================================== ! ROUTEUR WAN — partie 2 : queuing + shaping !======================================== ! CLASS-MAPS de lecture DSCP (simples) class-map match-all CM-EF match dscp ef class-map match-all CM-CS3 match dscp cs3 class-map match-any CM-AF41 match dscp af41 af42 af43 class-map match-any CM-AF21 match dscp af21 af22 af23 class-map match-all CM-CS1 match dscp cs1 ! POLICY-MAP enfant — scheduler policy-map PM-CHILD-WAN class CM-EF priority 2000 ! LLQ 2 Mbps — voix EF class CM-CS3 bandwidth 500 ! 500 kbps — signalisation SIP class CM-AF41 bandwidth 4000 ! 4 Mbps — Teams vidéo random-detect dscp-based ! WRED pour éviter TCP sync class CM-AF21 bandwidth 1000 ! 1 Mbps — SSH interactif class CM-CS1 bandwidth 500 ! 500 kbps minimum — backup random-detect dscp-based class class-default fair-queue ! Web BE — bande résiduelle ~2 Mbps queue-limit 64 ! POLICY-MAP parent — shaper 10 Mbps policy-map PM-PARENT-WAN class class-default shape average 10000000 ! CIR 10 Mbps — Tc=125ms, Bc=1250000 bits service-policy PM-CHILD-WAN ! Interface WAN interface GigabitEthernet0/1 description WAN-ISP ip address 203.0.113.1 255.255.255.252 bandwidth 10000 ! Déclare CIR pour calculs % QoS service-policy output PM-PARENT-WAN
! 1. NBAR détecte-t-il les protocoles ? show ip nbar protocol-discovery interface GigabitEthernet0/0 top-n 10 ! Résultat attendu : ms-teams, rtp, sip, ssh, http visibles avec compteurs croissants ! Si ms-teams = 0 et trafic Teams actif → NBAR non actif ou protocol-discovery manquant ! 2. Les class-maps matchent-elles ? show policy-map interface GigabitEthernet0/0 ! Regarder "packets matched" par classe : ! CM-VOIP-RTP : X packets ← doit être > 0 si appels actifs ! CM-TEAMS : X packets ← doit augmenter pendant une réunion Teams ! CM-BACKUP : X packets ← doit augmenter pendant le backup ! class-default: X packets ← tout le reste (web)
! Vérifier que les paquets sortent avec le bon DSCP ! Sur le routeur, capturer sur l'interface WAN : debug ip packet detail ! Attention : très verbeux en prod ! ! Chercher "TOS=0xB8" = EF (46 << 2 = 184 = 0xB8) ! TOS=0x88 = AF41 (34 << 2 = 136 = 0x88) ! Alternative non-intrusive : show interface + counters show ip nbar protocol-discovery interface GigabitEthernet0/1 stats byte-count
show policy-map interface GigabitEthernet0/1 ! Output typique attendu — tout va bien : ! Class-map: CM-EF ! (total drops/bytes drops): 0/0 ← CRITIQUE : 0 drops voix ! offered rate 1800000 bps ← sous le seuil 2Mbps = ok ! ! Class-map: CM-AF41 ! drop rate 0 bps ← ok si Teams < 4Mbps ! ! Class-map: CM-CS1 ! drop rate 800000 bps ← Normal ! Backup limité volontairement ! ⚠ Si drop rate > 0 sur CM-EF → problème voix critique ! Causes possibles : ! - Trop d'appels simultanés (dépasse priority 2000k) ! - Un flux non-voix se marque EF frauduleusement ! - Mauvaise config : priority trop bas
show policy-map interface GigabitEthernet0/1 ! Service-policy output: PM-PARENT-WAN ! Class-map: class-default ! Traffic Shaping ! Bc: 1250000 bits ← 10Mbps × 125ms = correct ! Queue Depth/Total Drops: 12/0 ← quelques paquets en attente = normal ! Delayed Pkts: 1234 ← paquets retardés = normal (shaping)
| Symptôme | Cause probable | Commande diagnostic | Fix |
|---|---|---|---|
| CM-VOIP-RTP = 0 paquets | ip nbar protocol-discovery manquant, ou téléphone ne génère pas de RTP | show ip nbar protocol-discovery | Ajouter ip nbar protocol-discovery sur interface LAN |
| Drops sur CM-EF | Trop d'appels (> 2 Mbps), ou trafic non-voix marqué EF | show policy-map int Gi0/1 | Augmenter priority ou contrôler les appels (CAC) |
| CM-TEAMS = 0, Teams dans class-default | NBAR ne reconnaît pas ms-teams (version IOS) | show ip nbar version | Update NBAR PDL ou utiliser ACL + ports Teams |
| Backup sature toujours le lien | CM-BACKUP ne matche pas (ACL incorrecte) | show ip access-lists ACL-BACKUP | Corriger les plages IP de l'ACL backup |
| Voix hachée malgré EF et 0 drops | Latence inter-site élevée, ou jitter lié au Tc du shaper | ping voip-destination repeat 100 | Vérifier que Tc = 125ms (Cisco défaut) — réduire Bc si besoin |
| drops sur CM-CS1 = 0 (backup non limité) | PM-CHILD pas attaché au parent, ou shape not active | show policy-map int Gi0/1 detail | Vérifier que PM-PARENT est appliqué en output |
| Application | Protocole / Méthode détection | DSCP | Valeur | CoS 802.1p | Queue IOS | Commande set |
|---|---|---|---|---|---|---|
| Téléphonie IP (voix) | match protocol rtp audio |
EF | 46 | 5 | priority 2000 (LLQ) |
set dscp ef |
| Signalisation SIP/H.323 | match protocol sip |
CS3 | 24 | 3 | bandwidth 500 |
set dscp cs3 |
| Teams / Webex / vidéoconf | match protocol ms-teams |
AF41 | 34 | 4 | bandwidth 4000 + WRED |
set dscp af41 |
| SSH / gestion réseau | match protocol ssh |
AF21 | 18 | 2 | bandwidth 1000 |
set dscp af21 |
| Web HTTP/HTTPS | class-default | BE / DF | 0 | 0 | fair-queue (résiduel) |
set dscp default |
| Backup / transferts bulk | match access-group ACL-BACKUP |
CS1 | 8 | 1 | bandwidth 500 + WRED |
set dscp cs1 |
| Équipement | Rôle QoS | Commandes clés |
|---|---|---|
| Switch accès | Trust boundary — téléphone trusté (CoS), PC non trusté (CoS=0) | mls qos, mls qos trust cos, mls qos cos 0 |
| Switch distribution | Transit — propager le DSCP sans le modifier | mls qos trust dscp sur tous les ports trunk |
| Routeur LAN ingress | Classification NBAR + Marquage DSCP — le seul endroit où NBAR tourne | ip nbar protocol-discovery, service-policy input PM-INGRESS-MARK |
| Routeur WAN egress | Queuing + Shaping — appliquer les PHBs sur le lien WAN | service-policy output PM-PARENT-WAN |
NBAR tourne uniquement sur l'interface LAN du routeur d'accès (ingress). Tous les équipements en aval lisent le DSCP — ils n'ont pas besoin de NBAR. Pas de NBAR sur chaque équipement = performances et cohérence.
Le premier équipement réseau contrôlé par l'IT (switch accès) est la trust boundary. Les endpoints (PCs) ne sont pas de confiance. Les téléphones IP Cisco peuvent l'être (CoS 5 légitime).
Ne jamais allouer plus de 33% du lien WAN en priority (LLQ). Au-delà, les autres classes sont affamées. Règle empirique pour la voix : 1 appel G.711 = ~85 kbps. 10 appels = 850 kbps sur un lien 10M = 8.5% — bien en deçà du seuil.
Sur un lien GigabitEthernet vers un WAN 10M, sans shape parent, le scheduler LLQ n'est jamais actif (la file se vide à 1 Gbps, jamais congestionnée). Le shape average 10000000 crée le sas qui active PM-CHILD.
Marquer EF ne suffit pas. Il faut une policy-map avec priority qui traite EF en LLQ. Sans policy-map, EF est juste un label — Best Effort en pratique.