Route-maps, RPL et prefix-lists : cours CCNP SP Core (350-501 SPCOR), politiques de routage IOS XE / IOS XR et lab complet

Filtrer, marquer, préférer, redistribuer : route-maps, prefix-lists et community-lists sur IOS XE, RPL (prefix-set, as-path-set, community-set, politiques imbriquées et paramétrées) sur IOS XR. Avec les pièges d’examen et un lab PNETLab de 6 routeurs en 10 parties.

CCNP SPCOR 350-501 · Chapitre 4 : politiques de routage avec les route-maps, RPL et les prefix-lists

Filtrer, marquer, préférer, redistribuer : tout ce qu’un ingénieur opérateur fait avec ses politiques de routage, sur IOS XE (route-maps, prefix-lists, community-lists) et sur IOS XR (RPL, prefix-sets, as-path-sets, community-sets). Avec la logique exacte de chaque outil, les pièges qui tombent à l’examen et un lab PNETLab complet de 6 routeurs.

CCNP Service Provider350-501 SPCORDomaine 2 · Networking (30 %)Objectif 2.5Lecture ≈ 50 min + lab 4 à 5 h
Ce que tu sauras faire à la fin de ce chapitre
  • Lire et prévoir le résultat de n’importe quelle route-map : ordre des séquences, deny implicite, logique OU / ET, continue.
  • Calculer de tête ce qu’une prefix-list ou un prefix-set laisse passer (ge, le, eq).
  • Écrire des politiques RPL propres : actions pass / set / done / drop, conditions, ensembles, politiques imbriquées et paramétrées.
  • Appliquer ces politiques aux bons endroits : voisins BGP, redistribution, IS-IS, OSPF.
  • Dépanner une politique qui ne fait pas ce que tu crois (et il y en aura).
Mode « express » si tu pratiques déjà au quotidien Commence par le test d’entrée (section 1). Si tu as 8/10 ou plus sans hésiter, lis seulement les encadrés « Piège d’examen » et passe directement au lab (section 7), en particulier aux parties avancées et au break/fix. Les sujets que le terrain pratique peu mais que l’examen adore : continue, les ACL dans une route-map, les prefix-lists en binaire, done contre pass, la redistribution OSPF → BGP et le filtrage du RIB par distribute-list.
Sommaire
  1. Test d’entrée
  2. Pourquoi des politiques de routage, et où les applique-t-on ?
  3. Les prefix-lists (IOS XE et IOS XR)
  4. Les route-maps (IOS / IOS XE)
  5. RPL, le langage de politiques d’IOS XR
  6. Route-map ou RPL : tableau de correspondance
  7. Lab PNETLab : « SP Policy Lab » en 10 parties
  8. Fiche de révision, quiz, glossaire et sources

1. Test d’entrée (10 minutes, sans notes)

  1. Une route-map a deux séquences : permit 10 (match prefix-list A) et deny 20 (match prefix-list B). Que devient une route qui ne figure ni dans A ni dans B ?
  2. Dans match ip address prefix-list A B, la route doit-elle être dans A et B, ou dans A ou B ?
  3. La prefix-list 10.0.0.0/8 ge 24 laisse-t-elle passer 10.1.2.0/23 ? Et 10.1.2.0/24 ?
  4. La prefix-list 172.16.0.0/16 (sans ge ni le) laisse-t-elle passer 172.16.5.0/24 ?
  5. Dans une route-map permit, que se passe-t-il pour une route qui correspond à une ligne deny de l’ACL référencée ?
  6. Sur IOS XR, une session eBGP est établie mais aucune route n’est échangée. Cause la plus probable ?
  7. En RPL, quelle est la différence entre pass et done ?
  8. Une politique RPL contient seulement if destination in (10.0.0.0/8 le 32) then set local-preference 200 endif. Que devient une route 192.168.1.0/24 ?
  9. Sur IOS XE, redistribute ospf 1 dans BGP, sans autre option : les routes externes OSPF (E1/E2) sont-elles redistribuées ?
  10. Un distribute-list … in dans OSPF retire-t-il la LSA de la base de données OSPF ?
Voir les réponses
1. Rejetée (deny implicite en fin de route-map). · 2. A ou B (même type de match sur une ligne = OU). · 3. /23 non (trop court), /24 oui. · 4. Non : sans ge/le, seule la longueur /16 exacte correspond. · 5. Elle « ne correspond pas » à cette séquence : on passe à la suivante (ce n’est pas un rejet direct). · 6. Pas de route-policy in/out sur le voisin eBGP (comportement RFC 8212). · 7. pass accepte et continue la politique ; done accepte et arrête tout. · 8. Rejetée : elle n’a reçu aucun « ticket », le drop implicite final s’applique. · 9. Non : par défaut, seules les routes OSPF internes (intra et inter-zone) sont redistribuées dans BGP. · 10. Non : il filtre seulement ce qui est installé dans la table de routage (RIB), la LSA reste dans la LSDB.

2. Pourquoi des politiques de routage, et où les applique-t-on ?

Un protocole de routage, laissé à lui-même, annonce tout ce qu’il connaît et choisit ses chemins selon ses règles « naturelles » (plus court chemin pour un IGP, algorithme de sélection pour BGP). Chez un opérateur, ce comportement par défaut est insuffisant et parfois dangereux : un client qui annonce par erreur une route par défaut ou les préfixes d’un autre, un transitaire qui envoie des préfixes privés, une redistribution qui crée une boucle… Les politiques de routage servent à quatre choses :

ObjectifExemples concrets
FiltrerN’accepter d’un client que ses préfixes alloués ; refuser les bogons et les préfixes plus longs que /24 venant d’Internet ; n’annoncer à un pair que ses propres préfixes.
MarquerPoser une communauté « route client » ou « route peering », un tag lors d’une redistribution, pour décider plus loin dans le réseau.
Influencer le cheminLocal-preference pour choisir la sortie, MED et AS-path prepend pour influencer le trafic entrant, métrique IGP lors d’une redistribution.
Contrôler la redistributionChoisir quelles routes passent d’un protocole à l’autre, avec quelle métrique, et éviter les boucles de redistribution grâce aux tags.

2.1 Les points d’application

Une politique ne fait rien tant qu’elle n’est pas attachée quelque part. C’est la source d’erreur numéro un en lab : une route-map parfaite… jamais appliquée.

OùIOS XE (route-map)IOS XR (RPL)
Voisin BGP, entrée / sortieneighbor X route-map NOM in|outneighbor X / address-family … / route-policy NOM in|out
Redistributionredistribute ospf 1 route-map NOMredistribute ospf 1 route-policy NOM
Annonce par networknetwork … route-map NOMnetwork … route-policy NOM
Agrégation BGPaggregate-address … attribute-map / suppress-mapaggregate-address … route-policy NOM
Route par défautneighbor X default-originate route-map, default-information originate route-mapdefault-originate route-policy NOM
Filtrage de l’installation dans le RIB par un IGPdistribute-list route-map NOM in (OSPF, IS-IS)distribute-list route-policy NOM in (OSPF)
Fuite de routes IS-IS L2 → L1redistribute isis ip level-2 into level-1 route-map NOMpropagate level 2 into level 1 route-policy NOM
Import / export de VRFimport map / export mapimport route-policy / export route-policy
Policy-Based Routing (trafic, pas routes)ip policy route-map NOM sur l’interfacePas de RPL : PBR via ACL + policy-map type pbr
Le défaut qui piège tout le monde sur IOS XR Sur IOS XR, une session eBGP sans route-policy en entrée et en sortie s’établit… mais n’échange aucune route (comportement « deny par défaut » normalisé par la RFC 8212). Il faut attacher une politique, au minimum un PASS-ALL. Sur IOS XE, l’équivalent est optionnel : la commande bgp safe-ebgp-policy (à partir de la version 17.2.1) active ce même comportement.

3. Les prefix-lists

Une prefix-list est une liste de règles qui compare un préfixe (réseau + longueur de masque). C’est l’outil standard pour sélectionner des routes : plus lisible et plus précis qu’une ACL, puisqu’il tient compte de la longueur du masque.

3.1 Les quatre éléments d’une entrée

ip prefix-list NOM [seq N] permit|deny RÉSEAU/LONGUEUR [ge MIN] [le MAX]

  1. Le réseau (motif de bits de poids fort).
  2. La longueur : combien de bits de ce motif doivent être identiques.
  3. ge (greater or equal) : longueur de masque minimale acceptée.
  4. le (less or equal) : longueur de masque maximale acceptée.
ip prefix-list EX permit 10.48.0.0/14 ge 24 le 28 00001010.001100 xx.xxxxxxxx.xxxxxxxx 14 premiers bits : identiques à 10.48.0.0 bits libres /0/8/14/24/28/32 longueur de masque acceptée : 24 à 28 Une route correspond si ses 14 premiers bits sont bons ET si son masque est entre /24 et /28.
Figure 1 : les deux tests d’une entrée de prefix-list.

3.2 Les règles à connaître par cœur

ÉcritureMasques acceptésExemple
10.0.0.0/8Exactement /8Seule la route 10.0.0.0/8 elle-même
10.0.0.0/8 le 24/8 à /2410.0.0.0/8, 10.1.0.0/16, 10.1.2.0/24…
10.0.0.0/8 ge 24/24 à /3210.1.2.0/24, 10.1.2.128/25, 10.1.2.1/32…
10.0.0.0/8 ge 16 le 24/16 à /2410.1.0.0/16, 10.1.2.0/24 (mais pas /8 ni /25)
0.0.0.0/0Exactement /0Uniquement la route par défaut
0.0.0.0/0 le 32ToutN’importe quelle route (« permit any »)
0.0.0.0/0 ge 25/25 à /32Toute route plus spécifique qu’un /24

Contrainte de cohérence : longueur < ge ≤ le ≤ 32 (128 en IPv6). Sinon la commande est refusée.

  • Les entrées sont évaluées de haut en bas, la première qui correspond décide (permit ou deny).
  • Il y a un deny implicite à la fin.
  • Sans seq, IOS numérote automatiquement par pas de 5. On peut ajouter ou supprimer une entrée par son numéro.
  • Syntaxe : ip prefix-list / ipv6 prefix-list sur IOS XE ; ipv4 prefix-list / ipv6 prefix-list sur IOS XR (où l’on utilise plutôt des prefix-sets dans RPL).

3.3 S’entraîner en binaire

La méthode qui ne trompe jamais : écrire en binaire uniquement l’octet où se trouve la frontière du masque.

Exercice 1 : permit 10.48.0.0/14 ge 24. 48 = 0011 0000 ; avec /14, les 6 premiers bits du deuxième octet comptent : 001100. Le deuxième octet d’une route doit donc valoir entre 48 (00110000) et 51 (00110011).

Route2e octet en binaireMotif OK ?Masque OK (≥ 24) ?Résultat
10.48.0.0/140011 0000ouinon (/14)Non
10.50.6.0/240011 0010ouiouiOui
10.51.0.0/260011 0011ouiouiOui
10.52.0.0/240011 0100non (6e bit)ouiNon

Exercice 2 (à faire seul, réponses dans le quiz) : permit 192.168.32.0/19 ge 22 le 24. Que donnent 192.168.40.0/22, 192.168.64.0/24, 192.168.33.0/24, 192.168.32.0/19 et 192.168.63.128/25 ?

3.4 Prefix-list contre ACL

Une ACL standard utilisée dans une route-map ne regarde que l’adresse réseau, pas la longueur du masque : access-list 10 permit 10.1.0.0 0.0.255.255 laisse passer 10.1.0.0/16, 10.1.5.0/24 et 10.1.5.1/32 sans distinction. Une ACL étendue peut tester le masque (le champ « destination » de l’ACL sert alors à comparer le masque), mais c’est illisible. La prefix-list est faite pour ça : utilise-la systématiquement pour sélectionner des routes.

Piège d’examen ip prefix-list X permit 172.16.0.0/16 ne laisse pas passer 172.16.5.0/24. Sans ge ni le, la longueur doit être exactement /16. Pour « 172.16.0.0/16 et tout ce qu’il contient », il faut 172.16.0.0/16 le 32.
! Vérifications utiles (IOS XE)
PE2# show ip prefix-list detail BOGONS       ! entrées + compteurs de correspondances (hit count)
PE2# show ip bgp prefix-list BOGONS          ! routes BGP qui correspondent à la liste
PE2# clear ip prefix-list BOGONS            ! remise à zéro des compteurs

4. Les route-maps (IOS / IOS XE)

Une route-map est une suite d’instructions numérotées, appelées séquences. Chaque séquence a une action (permit ou deny), des conditions (match) et éventuellement des modifications (set). On la retrouve sur IOS, IOS XE et NX-OS ; IOS XR la remplace par RPL.

4.1 L’algorithme de lecture

Route à évaluer Séquence suivante(plus petit numéro d’abord) Tous les matchsont vrais ? permit : applique les set,route acceptée, FIN deny : route rejetée, FIN(les set sont ignorés) Encore une séquence ?non → deny implicite ouinonoui Exception : « continue » (BGP uniquement) fait sauter à une autre séquence au lieu de s’arrêter après un permit.
Figure 2 : comment IOS évalue une route-map.

4.2 Les dix règles qui font la différence

  1. Ordre : les séquences sont lues par numéro croissant. Prévois des trous (10, 20, 30…) pour insérer plus tard.
  2. Première correspondance : dès qu’une séquence correspond, la décision est prise et la lecture s’arrête.
  3. Deny implicite : une route qui ne correspond à aucune séquence est rejetée. Pour « tout le reste passe », termine par une séquence permit sans match.
  4. Séquence sans match : elle correspond à toutes les routes.
  5. Séquence sans numéro : route-map X permit crée ou réécrit la séquence 10. Taper deux fois la commande sans numéro écrase la séquence 10.
  6. Suppression : no route-map X efface toute la route-map ; no route-map X permit 20 n’efface que la séquence 20.
  7. OU dans une ligne : plusieurs valeurs du même type sur la même ligne (match ip address prefix-list A B) = A ou B.
  8. ET entre les lignes : plusieurs lignes match de types différents (match ip address … + match community …) = toutes doivent être vraies.
  9. Deny dans une ACL ou une prefix-list : une route refusée par la liste référencée « ne correspond pas » à la séquence. Dans une séquence permit, elle n’est pas rejetée : elle passe à la séquence suivante. C’est l’action de la route-map qui rejette, pas celle de la liste.
  10. continue (BGP uniquement) : après une séquence permit qui correspond, au lieu de s’arrêter, on saute à la séquence indiquée (ou à la suivante) pour cumuler d’autres set. Une séquence deny qui correspond termine tout, même après un continue.
! Lis cette route-map et prédis le sort de chaque route avant de regarder les commentaires
route-map DEMO permit 10
 match ip address prefix-list CLIENT-A CLIENT-B     ! A OU B
 match community GOLD                                ! ET communauté GOLD
 set local-preference 300
!
route-map DEMO deny 20
 match ip address prefix-list BOGONS                 ! bogons : rejetés
!
route-map DEMO permit 30
 match as-path 10
 set local-preference 150
 continue 50                                         ! on ne s'arrête pas : direction séquence 50
!
route-map DEMO permit 40
 set local-preference 120                            ! jamais lue pour une route qui a matché 30
!
route-map DEMO permit 50
 set community 65000:999 additive                    ! s'ajoute aux communautés existantes

4.3 Les match et set les plus utiles

matchSert àsetSert à
ip address prefix-listSélectionner des préfixeslocal-preferenceChoisir la sortie (iBGP, plus haut = préféré)
ip next-hopFiltrer selon le next-hopmetricMED en BGP, métrique de redistribution
ip route-sourceFiltrer selon le routeur qui annoncemetric-type type-1 | type-2Type externe OSPF (E1 / E2)
as-pathExpressions régulières sur l’AS-pathas-path prependAllonger l’AS-path (trafic entrant)
community / extcommunitySélectionner par communautécommunity … [additive]Poser des communautés (sans additive = remplace tout)
route-type internal | external type-1 …Type de route OSPF / IS-IStagMarquer une route redistribuée
tagRetrouver un marquage (anti-boucle)origin igp | incompleteAttribut origin BGP
source-protocolProtocole d’origineweightPréférence locale au routeur (Cisco)
interfaceInterface de sortie de la route (redistribution de connected)level level-1 | level-2Niveau IS-IS cible
rpki valid | invalid | not-foundÉtat de validation d’origineip next-hopNext-hop (PBR ou BGP)

4.4 Les objets associés : as-path et community-lists

! Expressions régulières d'AS-path (IOS)
ip as-path access-list 10 permit ^$            ! routes locales (AS-path vide)
ip as-path access-list 20 permit ^65101_       ! reçues directement de l'AS 65101
ip as-path access-list 30 permit _65300$       ! créées (originées) par l'AS 65300
ip as-path access-list 40 permit _65300_       ! qui traversent l'AS 65300
ip as-path access-list 50 permit ^65101(_65101)*$   ! 65101 seul, avec ou sans prepend
! _ = séparateur (espace, début, fin) · ^ = début · $ = fin · . = un caractère · * = 0 ou plus · + = 1 ou plus

! Community-lists
ip bgp-community new-format                    ! affiche les communautés en ASN:valeur
ip community-list standard CLIENT permit 65000:1001
ip community-list expanded CLIENT-ALL permit ^65101:[0-9]+$

Rappel des communautés « bien connues » : no-export (ne pas annoncer hors de l’AS ou de la confédération), no-advertise (n’annoncer à aucun voisin), local-as (ne pas sortir du sous-AS de confédération), internet. Sur IOS XE, les communautés ne sont envoyées à un voisin que s’il y a neighbor X send-community (y compris en iBGP).

4.5 Trois pièges classiques, illustrés

Piège 1 : le distribute-list qui « efface » tout

router isis CORE
 distribute-list route-map PREFERER-P1 in
!
route-map PREFERER-P1 permit 10
 match ip address prefix-list LOOPBACK-PE2
 match ip next-hop prefix-list VIA-P1

Objectif : n’installer la loopback de PE2 que via P1. Résultat : c’est bien le cas… mais toutes les autres routes IS-IS ont disparu de la table de routage. Le deny implicite rejette tout ce qui ne correspond pas à la séquence 10. Correction : ajouter une séquence qui rejette la loopback de PE2 par les autres chemins, puis un permit final sans match.

route-map PREFERER-P1 permit 10
 match ip address prefix-list LOOPBACK-PE2
 match ip next-hop prefix-list VIA-P1
route-map PREFERER-P1 deny 20
 match ip address prefix-list LOOPBACK-PE2            ! les autres chemins vers PE2
route-map PREFERER-P1 permit 30                       ! tout le reste passe

Piège 2 : le OU au lieu du ET

match ip address prefix-list LOOPBACK-PE2 VIA-P1 sur une seule ligne veut dire « dans LOOPBACK-PE2 ou dans VIA-P1 » : ce n’est pas ce qu’on veut. Pour combiner un préfixe et un next-hop, il faut deux lignes de types différents (match ip address et match ip next-hop).

Piège 3 : le filtre qui ne filtre que le RIB

Un distribute-list … in sous OSPF ou IS-IS n’empêche pas les LSA/LSP d’exister ni d’être propagées : il empêche seulement l’installation des routes dans la table de routage du routeur où il est configuré. Les voisins, eux, calculent toujours avec la base complète. Pour réellement filtrer en OSPF, il faut agir aux frontières (filtrage de LSA de type 3 sur un ABR avec area X filter-list, ou à la redistribution).

À retenir pour l’examen Route-map = première correspondance gagnante + deny implicite. Même type de match sur une ligne = OU, lignes de types différents = ET. continue = BGP uniquement. Un deny dans l’ACL ou la prefix-list = « pas de correspondance », pas un rejet. Après une modification de politique BGP sur IOS XE : clear ip bgp X soft in|out pour qu’elle s’applique aux routes déjà reçues ou envoyées.

5. RPL, le langage de politiques d’IOS XR

Sur IOS XR, les route-maps sont remplacées par RPL (Routing Policy Language). Au lieu d’une liste de séquences, on écrit un petit programme avec des conditions if / elseif / else, des opérateurs logiques, des ensembles nommés réutilisables, et des politiques qui en appellent d’autres, éventuellement avec des paramètres. Les politiques sont compilées, ce qui permet d’en exécuter un très grand nombre rapidement.

5.1 Le modèle du « ticket »

Chaque route qui entre dans une politique RPL commence sans ticket. À la fin de la politique, une route sans ticket est rejetée : c’est le drop implicite. Pour passer, une route doit avoir reçu un ticket en chemin.

ActionTicket ?Suite de l’évaluation
passOuiContinue à lire la politique
set …Oui (une modification vaut ticket)Continue à lire la politique
doneOuiArrêt immédiat : la route est acceptée telle quelle
drop—Arrêt immédiat : la route est rejetée, même si elle avait déjà un ticket
(fin de politique)—Acceptée si elle a un ticket, sinon rejetée
Routesans ticket route-policy … end-policy if … then pass → ticket, on continueif … then set … → ticket, on continueif … then done → ticket, on sortif … then drop → rejet, on sort ticket → acceptée pas de ticket → drop
Figure 3 : une route doit gagner un ticket pour échapper au drop implicite final.

5.2 Syntaxe de base

! Les deux politiques que tout le monde écrit en premier
route-policy PASS-ALL
  pass
end-policy
!
route-policy DROP-ALL
  drop                      ! inutile techniquement (drop implicite), mais lisible
end-policy
!
! Conditions et branches
route-policy FROM-PEER
  if destination in (203.0.113.0/24) then
    pass
  elseif destination in (198.51.100.0/24 le 24) then
    set local-preference 200
  elseif as-path originates-from '65300' then
    drop
  else
    set med 50
  endif
end-policy
  • Opérateurs logiques : not, and, or ; utilise des parenthèses pour lever toute ambiguïté (not est prioritaire sur and, lui-même prioritaire sur or).
  • Comparaisons : in (appartenance à un ensemble), is, eq, ge, le (par exemple med eq 0, as-path length ge 5, local-preference le 100).
  • Une politique se termine par end-policy, un ensemble par end-set.

5.3 Les ensembles (sets)

EnsembleContenuExemple d’utilisation
prefix-setPréfixes IPv4/IPv6 avec ge / le / eqif destination in CLIENT-A then
as-path-setios-regex, originates-from, passes-through, neighbor-is, lengthif as-path in TRANSIT-INTERDIT then
community-setCommunautés, plages [100..199], jokers *, private-as, bien connuesif community matches-any GOLD then
extcommunity-set rt | sooRoute targets, Site of Originif extcommunity rt matches-any RT-CLIENT then
large-community-setCommunautés larges (ASN:valeur:valeur)if large-community matches-any LC then
prefix-set CLIENT-A
  172.16.0.0/16 le 24,          ! virgule entre les entrées
  2001:db8:100::/40 le 48
end-set
!
as-path-set ORIGINE-CLIENT
  originates-from '65101',
  ios-regex '^65101(_65101)*$'
end-set
!
community-set GOLD
  65101:100,
  65101:[100..149]               ! plage de valeurs
end-set
!
! Ensembles « en ligne » : pratique pour un cas unique
if destination in (10.0.0.0/8 le 32, 192.168.0.0/16 le 32) then
  drop
endif

Les prefix-sets acceptent aussi eq : 10.0.6.0/24 eq 27 = tous les /27 contenus dans 10.0.6.0/24. Une adresse sans longueur (10.0.1.1) vaut /32. Si tu écris une entrée incohérente (par exemple 10.0.1.1/24), le parseur l’ignore avec un message d’avertissement : relis toujours ton ensemble après commit.

5.4 Modifier des attributs

Commande RPLEffet
set local-preference 200Local-preference
set med 50 · set med igp-costMED fixe ou égal au coût IGP vers le next-hop
prepend as-path 65000 2 · prepend as-path most-recent 3Ajouter son AS (ou le dernier AS) N fois
set community (65000:100) additiveAjouter une communauté (sans additive : remplace toutes les communautés)
delete community in (65101:*) · delete community allRetirer des communautés
set next-hop 10.0.0.1 · set next-hop selfNext-hop
set origin igpAttribut origin
set tag 100 · set level level-2 · set isis-metric 20 · set metric-type externalRedistribution vers IS-IS (tag, niveau, métrique, type)
set ospf-metric 20 · set metric-type type-1Redistribution vers OSPF

Les attributs disponibles dépendent du point d’attache : un set local-preference n’a pas de sens dans une redistribution vers IS-IS, et le commit est refusé si la politique attachée contient un attribut incompatible. Dans le doute, utilise ? après set.

5.5 Politiques imbriquées et paramétrées

C’est là que RPL dépasse vraiment les route-maps : on écrit des briques réutilisables et on les assemble.

! Une brique commune à toutes les sessions clients
route-policy DROP-BOGONS
  if destination in BOGONS then
    drop                       ! drop dans une politique appelée = rejet définitif
  endif
end-policy
!
! Une brique paramétrée
route-policy SET-LP($lp)
  set local-preference $lp
end-policy
!
! La politique attachée au voisin assemble les briques
route-policy CLIENT-IN
  apply DROP-BOGONS
  if destination in CLIENT-A and as-path in ORIGINE-CLIENT then
    if community matches-any GOLD then
      apply SET-LP(200)
    endif
    set community (65000:1001) additive
  else
    drop
  endif
end-policy
  • apply exécute la politique appelée comme si son contenu était inséré à cet endroit. Un drop ou un done dans la politique appelée termine toute l’évaluation, y compris celle de la politique appelante.
  • Les paramètres commencent par $. Un même modèle (par exemple CLIENT-IN($prefixes, $asn)) peut servir à des centaines de clients avec des valeurs différentes.
  • Avantage d’exploitation : on corrige une brique une seule fois et toutes les politiques qui l’appellent en profitent.

5.6 Éditer, vérifier, appliquer

! Éditer une politique existante sans tout retaper (mode EXEC)
RP/0/RP0/CPU0:PE1# edit route-policy CLIENT-IN          ! éditeur (vim ou nano selon la version)
! À la sortie de l'éditeur, XR vérifie la syntaxe et propose le commit.

! Attention : en mode config, redéfinir une politique la REMPLACE entièrement
RP/0/RP0/CPU0:PE1(config)# route-policy CLIENT-IN
% WARNING: Policy object route-policy CLIENT-IN' exists! Reconfiguring it via CLI will replace current definition. Use 'abort' to cancel.

! Vérifications
show rpl                                         ! toutes les politiques et tous les ensembles
show rpl route-policy CLIENT-IN detail           ! la politique + les ensembles et politiques qu'elle utilise
show rpl route-policy CLIENT-IN attachpoints     ! où elle est attachée (voisin, AF, sens)
show rpl route-policy states                     ! ACTIVE / INACTIVE / UNUSED
show rpl prefix-set BOGONS
show bgp ipv4 unicast neighbors 10.11.1.2 routes            ! routes acceptées après politique
show bgp ipv4 unicast neighbors 10.11.1.2 advertised-routes
Bon à savoir Sur IOS XR, modifier une politique déjà attachée à BGP déclenche automatiquement la réévaluation des routes concernées : pas besoin de clear bgp … soft. Pour voir les routes avant politique d’entrée, active soft-reconfiguration inbound always sur le voisin, puis utilise show bgp ipv4 unicast neighbors X received routes.
À retenir pour l’examen RPL = drop implicite si la route n’a pas de ticket. pass et set donnent un ticket et continuent ; done accepte et arrête ; drop rejette et arrête. Conditions en if / elseif / else / endif. Ensembles : prefix-set, as-path-set, community-set, extcommunity-set. Réutilisation : apply et paramètres $.

6. Route-map ou RPL : tableau de correspondance

BesoinIOS XEIOS XR (RPL)
Tout laisser passerroute-map ALL permit 10route-policy PASS-ALL / pass / end-policy
Liste de préfixesip prefix-list X permit 10.0.0.0/8 le 24prefix-set X / 10.0.0.0/8 le 24 / end-set
Tester un préfixematch ip address prefix-list Xif destination in X then
Tester l’AS d’origineip as-path access-list 1 permit _65300$ + match as-path 1if as-path originates-from '65300' then
Tester une communautéip community-list standard C permit 65000:1 + match community Cif community matches-any (65000:1) then
Rejeterséquence denydrop
Accepter et arrêterséquence permit qui corresponddone (ou fin de politique avec ticket)
Accepter et continuercontinue (BGP uniquement)pass / set (partout)
Tout le reste passedernière séquence permit sans matchelse pass ou pass en fin de politique
Réutiliser une logiqueCopier-collerapply AUTRE-POLITIQUE, paramètres $x
Appliquer à un voisin BGPneighbor X route-map NOM inroute-policy NOM in sous l’AF du voisin
Prise en compte d’un changementclear ip bgp X soft in|outAutomatique

Le même besoin écrit deux fois

Besoin : depuis l’ISP, rejeter les bogons et les préfixes plus longs que /24, rejeter ce qui est originé par l’AS 65300, mettre la local-preference à 80 et marquer le reste avec 65000:3000.

! IOS XE
route-map ISP-IN deny 10
 match ip address prefix-list BOGONS
route-map ISP-IN deny 20
 match ip address prefix-list TOO-SPECIFIC
route-map ISP-IN deny 30
 match as-path 30
route-map ISP-IN permit 40
 set local-preference 80
 set community 65000:3000 additive
! IOS XR
prefix-set TOO-SPECIFIC
  0.0.0.0/0 ge 25
end-set
!
route-policy ISP-IN
  if destination in BOGONS or destination in TOO-SPECIFIC or as-path originates-from '65300' then
    drop
  endif
  set local-preference 80
  set community (65000:3000) additive
end-policy

7. Lab PNETLab : « SP Policy Lab »

Un lab de 6 routeurs qui reproduit les situations réelles d’un opérateur : un client BGP qui envoie un peu n’importe quoi, un transitaire Internet qui envoie des bogons et des préfixes trop spécifiques, un client OSPF à redistribuer, et un cœur IS-IS. Tu vas tout traiter avec des route-maps sur IOS XE et du RPL sur IOS XR. Compte 4 à 5 heures, découpables en sessions (les parties sont indépendantes une fois la partie 1 faite).

7.1 Topologie

AS 65000 · cœur IS-IS niveau 2 · iBGP PE1 ↔ PE2 (loopbacks) iBGP CE1AS 65101 · IOL PE1IOS XR P1IOS XR PE2IOS XE ISPAS 65200 · IOL CE2OSPF area 0 · IOL 10.11.1.0/30.2.1 10.12.0.0/30.1.2 10.23.0.0/30.1.2 10.200.0.0/30.1.2 10.22.1.0/30.1.2 Lo1 172.16.0.0/24 · Lo2 172.16.1.0/24Lo3 172.16.2.0/24 · Lo4 172.16.10.0/25Lo5 192.168.50.0/24 · Lo6 10.99.99.99/32 Lo 8.8.8.0/24 · 1.1.1.0/24203.0.113.0/24198.51.100.128/2510.66.0.0/16 · 192.168.77.0/24+ route par défaut Lo 172.20.0.0/24 · 172.20.1.0/24statiques 172.21.0.0/16 (E1)et 172.22.0.0/16 (E2) Loopbacks : PE1 10.0.0.1 · P1 10.0.0.2 · PE2 10.0.0.3 · PE1 Lo100 10.100.1.0/24 · Lo101 10.100.2.0/24
Figure 4 : topologie du SP Policy Lab.
NœudImageInterfaces utilisées
CE1IOL (ou vIOS)E0/0 → PE1
PE1IOS XRv / XRv 9000Gi0/0/0/0 → CE1 · Gi0/0/0/1 → P1
P1IOS XRvGi0/0/0/0 → PE1 · Gi0/0/0/1 → PE2
PE2CSR 1000v / Catalyst 8000vGi1 → P1 · Gi2 → ISP · Gi3 → CE2
ISPIOLE0/0 → PE2
CE2IOLE0/0 → PE2

Adapte les noms d’interfaces à tes images. Les configurations ci-dessous sont un point de départ : elles montent l’adressage, IS-IS, OSPF et les sessions BGP, sans aucune politique.

7.2 Configurations initiales

PE1 (IOS XR)
hostname PE1
interface Loopback0
 ipv4 address 10.0.0.1 255.255.255.255
interface Loopback100
 ipv4 address 10.100.1.1 255.255.255.0
interface Loopback101
 ipv4 address 10.100.2.1 255.255.255.0
interface GigabitEthernet0/0/0/0
 description vers-CE1
 ipv4 address 10.11.1.1 255.255.255.252
 no shutdown
interface GigabitEthernet0/0/0/1
 description vers-P1
 ipv4 address 10.12.0.1 255.255.255.252
 no shutdown
!
router isis CORE
 is-type level-2-only
 net 49.0000.0000.0000.0001.00
 address-family ipv4 unicast
  metric-style wide
 interface Loopback0
  passive
  address-family ipv4 unicast
 interface GigabitEthernet0/0/0/1
  point-to-point
  address-family ipv4 unicast
!
router bgp 65000
 bgp router-id 10.0.0.1
 address-family ipv4 unicast
 neighbor 10.0.0.3
  remote-as 65000
  update-source Loopback0
  address-family ipv4 unicast
   next-hop-self
 neighbor 10.11.1.2
  remote-as 65101
  description CE1
  address-family ipv4 unicast
   send-community-ebgp
   soft-reconfiguration inbound always
!
commit
P1 (IOS XR)
hostname P1
interface Loopback0
 ipv4 address 10.0.0.2 255.255.255.255
interface GigabitEthernet0/0/0/0
 ipv4 address 10.12.0.2 255.255.255.252
 no shutdown
interface GigabitEthernet0/0/0/1
 ipv4 address 10.23.0.1 255.255.255.252
 no shutdown
!
router isis CORE
 is-type level-2-only
 net 49.0000.0000.0000.0002.00
 address-family ipv4 unicast
  metric-style wide
 interface Loopback0
  passive
  address-family ipv4 unicast
 interface GigabitEthernet0/0/0/0
  point-to-point
  address-family ipv4 unicast
 interface GigabitEthernet0/0/0/1
  point-to-point
  address-family ipv4 unicast
!
commit
PE2 (IOS XE)
hostname PE2
ip bgp-community new-format
!
interface Loopback0
 ip address 10.0.0.3 255.255.255.255
 ip router isis CORE
interface GigabitEthernet1
 description vers-P1
 ip address 10.23.0.2 255.255.255.252
 ip router isis CORE
 isis network point-to-point
 no shutdown
interface GigabitEthernet2
 description vers-ISP
 ip address 10.200.0.1 255.255.255.252
 no shutdown
interface GigabitEthernet3
 description vers-CE2
 ip address 10.22.1.1 255.255.255.252
 no shutdown
!
router isis CORE
 net 49.0000.0000.0000.0003.00
 is-type level-2-only
 metric-style wide
 passive-interface Loopback0
!
router ospf 1
 router-id 10.0.0.3
 network 10.22.1.0 0.0.0.3 area 0
!
router bgp 65000
 bgp router-id 10.0.0.3
 bgp log-neighbor-changes
 neighbor 10.0.0.1 remote-as 65000
 neighbor 10.0.0.1 update-source Loopback0
 neighbor 10.0.0.1 next-hop-self
 neighbor 10.0.0.1 send-community both
 neighbor 10.200.0.2 remote-as 65200
 neighbor 10.200.0.2 description ISP
 neighbor 10.200.0.2 soft-reconfiguration inbound
 neighbor 10.200.0.2 send-community
CE1 (IOS XE / IOL)
hostname CE1
ip bgp-community new-format
!
interface Ethernet0/0
 ip address 10.11.1.2 255.255.255.252
 no shutdown
interface Loopback1
 ip address 172.16.0.1 255.255.255.0
interface Loopback2
 ip address 172.16.1.1 255.255.255.0
interface Loopback3
 ip address 172.16.2.1 255.255.255.0
interface Loopback4
 ip address 172.16.10.1 255.255.255.128
interface Loopback5
 ip address 192.168.50.1 255.255.255.0
interface Loopback6
 ip address 10.99.99.99 255.255.255.255
!
router bgp 65101
 bgp router-id 172.16.0.1
 neighbor 10.11.1.1 remote-as 65000
 neighbor 10.11.1.1 send-community
 network 172.16.0.0 mask 255.255.255.0
 network 172.16.1.0 mask 255.255.255.0
 network 172.16.2.0 mask 255.255.255.0
 network 172.16.10.0 mask 255.255.255.128
 network 192.168.50.0 mask 255.255.255.0
 network 10.99.99.99 mask 255.255.255.255
ISP (IOS XE / IOL)
hostname ISP
!
interface Ethernet0/0
 ip address 10.200.0.2 255.255.255.252
 no shutdown
interface Loopback1
 ip address 8.8.8.1 255.255.255.0
interface Loopback2
 ip address 1.1.1.1 255.255.255.0
interface Loopback3
 ip address 203.0.113.1 255.255.255.0
interface Loopback4
 ip address 198.51.100.129 255.255.255.128
interface Loopback5
 ip address 10.66.0.1 255.255.0.0
interface Loopback6
 ip address 192.168.77.1 255.255.255.0
!
ip prefix-list P-1111 seq 5 permit 1.1.1.0/24
route-map TO-SP permit 10
 match ip address prefix-list P-1111
 set as-path prepend 65300          ! simule un préfixe originé par l'AS 65300
route-map TO-SP permit 20
!
router bgp 65200
 bgp router-id 8.8.8.1
 neighbor 10.200.0.1 remote-as 65000
 neighbor 10.200.0.1 default-originate
 neighbor 10.200.0.1 route-map TO-SP out
 network 8.8.8.0 mask 255.255.255.0
 network 1.1.1.0 mask 255.255.255.0
 network 203.0.113.0 mask 255.255.255.0
 network 198.51.100.128 mask 255.255.255.128
 network 10.66.0.0 mask 255.255.0.0
 network 192.168.77.0 mask 255.255.255.0
CE2 (IOS XE / IOL)
hostname CE2
!
interface Ethernet0/0
 ip address 10.22.1.2 255.255.255.252
 no shutdown
interface Loopback1
 ip address 172.20.0.1 255.255.255.0
 ip ospf network point-to-point
interface Loopback2
 ip address 172.20.1.1 255.255.255.0
 ip ospf network point-to-point
!
ip route 172.21.0.0 255.255.0.0 Null0
ip route 172.22.0.0 255.255.0.0 Null0
ip prefix-list S-E1 seq 5 permit 172.21.0.0/16
route-map STATIC-TO-OSPF permit 10
 match ip address prefix-list S-E1
 set metric-type type-1
route-map STATIC-TO-OSPF permit 20
 set metric-type type-2
!
router ospf 1
 router-id 10.0.0.12
 network 10.22.1.0 0.0.0.3 area 0
 network 172.20.0.0 0.0.1.255 area 0
 redistribute static subnets route-map STATIC-TO-OSPF

7.3 Partie 1 : état des lieux (20 min)

  1. Vérifie le cœur : show isis adjacency (PE1, P1), show isis neighbors (PE2), puis un ping 10.0.0.3 source 10.0.0.1 depuis PE1.
  2. Vérifie les sessions BGP : show bgp ipv4 unicast summary sur PE1, show ip bgp summary sur PE2.
  3. Observe la différence XR / XE : sur PE2, la session avec l’ISP reçoit tout (6 préfixes + la route par défaut), bogons compris. Sur PE1, la session avec CE1 est établie mais aucun préfixe n’est accepté. Compare show bgp ipv4 unicast neighbors 10.11.1.2 received routes (avant politique, grâce à la soft-reconfiguration) et show bgp ipv4 unicast neighbors 10.11.1.2 routes (après politique).

7.4 Partie 2 : prefix-lists et marquage côté client (30 min)

Sur papier d’abord. Parmi les six préfixes de CE1, lesquels correspondent à : (a) 172.16.0.0/16 le 24 ; (b) 172.16.0.0/16 ge 24 ; (c) 172.16.0.0/22 le 24 ; (d) 0.0.0.0/0 ge 25 ?

Réponses
(a) 172.16.0.0/24, 172.16.1.0/24, 172.16.2.0/24 et… 172.16.10.0/25 non (/25 > 24). (b) les trois /24 et 172.16.10.0/25. (c) 172.16.0.0/24, 172.16.1.0/24, 172.16.2.0/24 (172.16.10.0 est hors de 172.16.0.0/22). (d) 172.16.10.0/25 et 10.99.99.99/32.

Sur CE1, crée une route-map TO-SP appliquée en sortie vers PE1 qui :

  • pose la communauté 65101:100 sur 172.16.0.0/24 (lien principal) ;
  • pose 65101:200 sur 172.16.1.0/24 (lien de secours) ;
  • pose no-export sur 172.16.2.0/24 (service interne, ne doit jamais sortir sur Internet) ;
  • laisse passer tout le reste sans modification (pour tester les filtres de PE1).

Vérifie avec show ip bgp neighbors 10.11.1.1 advertised-routes puis show route-map TO-SP (compteurs). N’oublie pas clear ip bgp 10.11.1.1 soft out.

7.5 Partie 3 : RPL d’entrée client sur PE1 (45 min)

Écris sur PE1 la politique CE1-IN, construite avec des briques réutilisables :

  1. Un prefix-set BOGONS (0.0.0.0/8, 10.0.0.0/8, 100.64.0.0/10, 127.0.0.0/8, 169.254.0.0/16, 172.16.0.0/12, 192.168.0.0/16, 224.0.0.0/3, tous en le 32). Attention : les préfixes de CE1 sont dans 172.16.0.0/12. Que faire ? (Indice : un client utilisant de l’adressage privé est courant dans un VPN ; ici, considère que 172.16.0.0/16 est son allocation et teste d’abord ses préfixes autorisés.)
  2. Un prefix-set CLIENT-CE1 : 172.16.0.0/16 le 24.
  3. Un as-path-set ORIGINE-CE1 : routes originées par 65101, prepends de 65101 autorisés.
  4. Deux community-set : CE1-PRIMARY (65101:100) et CE1-BACKUP (65101:200).
  5. Une politique paramétrée SET-LP($lp).
  6. CE1-IN : n’accepte que les préfixes de CLIENT-CE1 originés par CE1 ; local-preference 200 pour PRIMARY, 50 pour BACKUP ; ajoute la communauté 65000:1001 (« route client ») sans effacer les autres ; rejette tout le reste. Les bogons hors allocation client sont rejetés.

Résultat attendu sur PE1 (show bgp ipv4 unicast et show bgp ipv4 unicast 172.16.2.0/24) :

PréfixeAccepté ?Local-prefCommunautés
172.16.0.0/24Oui20065101:100, 65000:1001
172.16.1.0/24Oui5065101:200, 65000:1001
172.16.2.0/24Oui100no-export, 65000:1001
172.16.10.0/25Non (trop spécifique)——
192.168.50.0/24Non (bogon, hors allocation)——
10.99.99.99/32Non (bogon, hors allocation)——

7.6 Partie 4 : RPL de sortie vers CE1 (15 min)

CE1 ne doit recevoir que la route par défaut. Écris CE1-OUT et attache-la. Vérifie sur CE1 : show ip bgp ne doit contenir que 0.0.0.0/0 en plus de ses propres préfixes. Bonus : transforme-la en politique paramétrée réutilisable DEFAULT-ONLY.

7.7 Partie 5 : route-map d’entrée Internet sur PE2 (45 min)

Sur PE2, écris ISP-IN avec des prefix-lists et une as-path access-list :

  • rejette les bogons (même liste que BOGONS) ;
  • rejette tout préfixe plus spécifique que /24 ;
  • rejette les routes originées par l’AS 65300 ;
  • accepte le reste (route par défaut comprise) avec local-preference 80 et la communauté 65000:3000 ajoutée.

Applique, puis clear ip bgp 10.200.0.2 soft in. Compare show ip bgp neighbors 10.200.0.2 received-routes et show ip bgp neighbors 10.200.0.2 routes. Lis les compteurs avec show route-map ISP-IN.

Préfixe reçu de l’ISPRésultat attenduSéquence responsable
0.0.0.0/0Accepté, LP 80permit final
8.8.8.0/24Accepté, LP 80permit final
203.0.113.0/24Accepté, LP 80permit final
1.1.1.0/24 (AS-path 65200 65300)Rejetéas-path _65300$
198.51.100.128/25Rejetétrop spécifique
10.66.0.0/16 · 192.168.77.0/24Rejetésbogons

7.8 Partie 6 : route-map de sortie Internet sur PE2 (30 min)

Écris ISP-OUT : n’annonce à l’ISP que les routes portant la communauté 65000:1001 (routes clients) ; pour 172.16.1.0/24 (secours), ajoute deux prepends de 65000. Tout le reste est filtré (ne jamais réannoncer un transitaire à un autre !).

Résultat attendu sur l’ISP (show ip bgp) :

PréfixeAS-path vu par l’ISPPourquoi
172.16.0.0/2465000 65101route client
172.16.1.0/2465000 65000 65000 65101route client + 2 prepends
172.16.2.0/24absentecommunauté no-export respectée automatiquement par PE2
Routes de CE2, de l’ISP, infrastructureabsentespas de communauté 65000:1001

7.9 Partie 7 : IGP et redistribution (45 min)

7a. Filtrer le RIB OSPF sur PE2

  1. Sur PE2, observe show ip route ospf : routes O (172.20.x), O E1 172.21.0.0/16 et O E2 172.22.0.0/16.
  2. Crée la route-map NO-E1 (rejette route-type external type-1, laisse passer le reste) et applique-la avec distribute-list route-map NO-E1 in sous router ospf 1.
  3. Constate que 172.21.0.0/16 a disparu de show ip route mais est toujours présente dans show ip ospf database external 172.21.0.0. Tu viens de vérifier que le distribute-list filtre le RIB, pas la LSDB.

7b. Redistribuer OSPF dans BGP

  1. Sous router bgp 65000 de PE2, ajoute simplement redistribute ospf 1. Regarde ce qui arrive sur PE1 : seules les routes OSPF internes sont redistribuées (172.20.0.0/24, 172.20.1.0/24…), pas 172.22.0.0/16.
  2. Remplace par redistribute ospf 1 match internal external 2 route-map OSPF-TO-BGP, avec une route-map qui pose la communauté 65000:2002 et origin igp.
  3. Question : pourquoi 172.21.0.0/16 (E1) n’apparaît-elle jamais dans BGP, même avec external 1 ? (Réponse : la redistribution prend ses routes dans le RIB, et le distribute-list de l’étape 7a l’en a retirée.)

7c. Redistribuer des connected dans IS-IS avec RPL (PE1)

  1. Écris CONN-TO-ISIS : 10.100.1.0/24 avec métrique IS-IS 11 et tag 100 ; 10.100.2.0/24 avec métrique 22 et tag 200 ; tout le reste rejeté (les loopbacks et liens déjà dans IS-IS ne doivent pas être redistribués).
  2. Applique : router isis CORE / address-family ipv4 unicast / redistribute connected route-policy CONN-TO-ISIS.
  3. Sur PE2, show ip route 10.100.1.0 : métrique attendue 31 (11 + 10 + 10) et « Route tag 100 » ; pour 10.100.2.0/24, métrique 42 et tag 200.

7.10 Partie 8 : RPL avancé (45 min)

8a. pass contre done

Attache temporairement à CE1 (en entrée) la politique suivante, puis remplace le premier pass par done. Note la local-preference de 172.16.0.0/24 dans les deux cas.

route-policy EXP-1
  if destination in (172.16.0.0/24) then
    pass
  endif
  if destination in (172.16.0.0/16 le 24) then
    set local-preference 10
  endif
end-policy
Résultat attendu
Avec pass : 172.16.0.0/24 continue et reçoit LP 10 comme les autres /24. Avec done : l’évaluation s’arrête, 172.16.0.0/24 garde LP 100 (valeur par défaut). Dans les deux cas, 172.16.10.0/25, 192.168.50.0/24 et 10.99.99.99/32 n’ont reçu aucun ticket : drop implicite. Remets CE1-IN à la fin.

8b. Longueur d’AS-path

Sur CE1, ajoute 5 prepends (65101) sur 172.16.1.0/24. Modifie CE1-IN avec edit route-policy CE1-IN pour rejeter toute route dont l’AS-path est plus long que 4 (as-path length ge 5). Vérifie que XR réévalue la route sans clear. Retire ensuite les prepends sur CE1.

8c. Outils de vérification

Passe en revue show rpl route-policy states, show rpl route-policy CE1-IN detail, show rpl route-policy SET-LP attachpoints (rien : elle n’est attachée qu’indirectement) et show rpl route-policy CE1-IN attachpoints. Supprime EXP-1 : elle doit apparaître en UNUSED avant.

7.11 Partie 9 : break / fix (45 min)

Provoque chaque panne, observe le symptôme, explique la cause, répare. Fais-les dans l’ordre que tu veux.

#Panne à provoquerSymptôme
1PE2 : supprime la dernière séquence permit de ISP-INPlus aucune route de l’ISP, même la route par défaut
2PE2 : remplace la prefix-list BOGONS de la séquence deny par une ACL standard avec deny 10.0.0.0 0.255.255.255 puis permit any, dans une séquence permit qui met la LP à 1010.66.0.0/16 est accepté (avec LP 80), alors que « l’ACL le refuse »
3PE2 : modifie ISP-OUT (par exemple, retire le prepend) sans faire clear ip bgp 10.200.0.2 soft outL’ISP ne voit pas le changement
4PE1 : retire route-policy CE1-IN in du voisin CE1Plus aucune route de CE1 sur PE1
5CE1 : retire neighbor 10.11.1.1 send-communityToutes les routes de CE1 à LP 100, et 172.16.2.0/24 part sur Internet
6PE1 : dans CE1-IN, retire le mot additive172.16.2.0/24 part sur Internet et les communautés du client (65101:x) disparaissent en aval
7PE1 : dans CE1-IN, supprime la ligne donePlus aucune route de CE1 acceptée, alors que les set sont bien appliqués
8PE2 : écris match ip address prefix-list CE1-BACKUP et match community CUST-ROUTES dans deux séquences différentes au lieu d’une seuleToutes les routes clients sont prependées, ou aucune, selon l’ordre
Explications des pannes
1. Deny implicite : sans permit final, tout ce qui n’a pas correspondu est rejeté. · 2. Une ligne deny dans l’ACL veut dire « ne correspond pas à cette séquence » : la route passe à la séquence suivante et finit acceptée par le permit final. · 3. Sur IOS XE, une politique modifiée ne s’applique aux routes déjà annoncées qu’après un soft clear (ou un route refresh). · 4. IOS XR n’échange aucune route eBGP sans politique. · 5. Sans send-community, IOS XE n’envoie pas les communautés : PE1 ne voit ni 65101:100/200 ni no-export. · 6. Sans additive, set community remplace toutes les communautés existantes, no-export compris. · 7. Sans done, les préfixes clients continuent jusqu’à apply DROP-BOGONS ; comme 172.16.0.0/16 est dans 172.16.0.0/12, ils sont rejetés : un drop l’emporte sur un ticket obtenu plus tôt. · 8. Les deux conditions doivent être dans la même séquence pour un ET ; dans deux séquences, la première qui correspond décide seule.

7.12 Partie 10 : grille de validation finale

OùCommandeCe que tu dois voir
PE1show bgp ipv4 unicast3 préfixes de CE1 (LP 200 / 50 / 100), les routes ISP filtrées (LP 80), les routes de CE2 (communauté 65000:2002)
PE1show rpl route-policy statesCE1-IN, CE1-OUT, CONN-TO-ISIS actives ; plus de politique UNUSED oubliée
CE1show ip bgpUniquement 0.0.0.0/0 reçue de PE1
PE2show ip bgp neighbors 10.200.0.2 routes0.0.0.0/0, 8.8.8.0/24, 203.0.113.0/24
ISPshow ip bgp172.16.0.0/24 et 172.16.1.0/24 (prependée), rien d’autre de l’AS 65000
PE2show ip route 10.100.1.0Métrique 31, tag 100
PE2show ip route ospf / show ip ospf database externalPas de 172.21.0.0/16 dans le RIB, mais LSA présente

7.13 Solutions

Solution CE1 (partie 2)
ip prefix-list C-PRIMARY seq 5 permit 172.16.0.0/24
ip prefix-list C-BACKUP seq 5 permit 172.16.1.0/24
ip prefix-list C-LOCAL seq 5 permit 172.16.2.0/24
!
route-map TO-SP permit 10
 match ip address prefix-list C-PRIMARY
 set community 65101:100
route-map TO-SP permit 20
 match ip address prefix-list C-BACKUP
 set community 65101:200
route-map TO-SP permit 30
 match ip address prefix-list C-LOCAL
 set community no-export
route-map TO-SP permit 40
!
router bgp 65101
 neighbor 10.11.1.1 route-map TO-SP out
!
! puis : clear ip bgp 10.11.1.1 soft out
Solution PE1 (parties 3, 4 et 7c, IOS XR)
prefix-set BOGONS
  0.0.0.0/8 le 32,
  10.0.0.0/8 le 32,
  100.64.0.0/10 le 32,
  127.0.0.0/8 le 32,
  169.254.0.0/16 le 32,
  172.16.0.0/12 le 32,
  192.168.0.0/16 le 32,
  224.0.0.0/3 le 32
end-set
!
prefix-set CLIENT-CE1
  172.16.0.0/16 le 24
end-set
!
as-path-set ORIGINE-CE1
  ios-regex '^65101(_65101)*$'
end-set
!
community-set CE1-PRIMARY
  65101:100
end-set
!
community-set CE1-BACKUP
  65101:200
end-set
!
route-policy SET-LP($lp)
  set local-preference $lp
end-policy
!
route-policy DROP-BOGONS
  if destination in BOGONS then
    drop
  endif
end-policy
!
route-policy CE1-IN
  if destination in CLIENT-CE1 and as-path in ORIGINE-CE1 then
    if community matches-any CE1-PRIMARY then
      apply SET-LP(200)
    elseif community matches-any CE1-BACKUP then
      apply SET-LP(50)
    endif
    set community (65000:1001) additive
    done                                  ! préfixe client valide : accepté, on s'arrête là
  endif
  apply DROP-BOGONS                       ! le reste : bogons rejetés…
  drop                                    ! …et tout ce qui n'est pas un préfixe client aussi
end-policy
!
route-policy CE1-OUT
  if destination in (0.0.0.0/0) then
    pass
  else
    drop
  endif
end-policy
!
route-policy CONN-TO-ISIS
  if destination in (10.100.1.0/24) then
    set isis-metric 11
    set tag 100
  elseif destination in (10.100.2.0/24) then
    set isis-metric 22
    set tag 200
  else
    drop
  endif
end-policy
!
router bgp 65000
 neighbor 10.11.1.2
  address-family ipv4 unicast
   route-policy CE1-IN in
   route-policy CE1-OUT out
!
router isis CORE
 address-family ipv4 unicast
  redistribute connected route-policy CONN-TO-ISIS
!
commit

Pourquoi tester d’abord l’allocation client puis les bogons ? Parce que l’allocation de CE1 (172.16.0.0/16) est elle-même dans un bloc « bogon » (172.16.0.0/12). L’ordre des tests est une décision de conception : ici, ce qui est explicitement autorisé pour ce client passe avant la règle générale. Le drop final rend l’intention explicite, même si le drop implicite aurait suffi.

Solution PE2 (parties 5, 6 et 7, IOS XE)
ip prefix-list BOGONS seq 5 permit 0.0.0.0/8 le 32
ip prefix-list BOGONS seq 10 permit 10.0.0.0/8 le 32
ip prefix-list BOGONS seq 15 permit 100.64.0.0/10 le 32
ip prefix-list BOGONS seq 20 permit 127.0.0.0/8 le 32
ip prefix-list BOGONS seq 25 permit 169.254.0.0/16 le 32
ip prefix-list BOGONS seq 30 permit 172.16.0.0/12 le 32
ip prefix-list BOGONS seq 35 permit 192.168.0.0/16 le 32
ip prefix-list BOGONS seq 40 permit 224.0.0.0/3 le 32
ip prefix-list TOO-SPECIFIC seq 5 permit 0.0.0.0/0 ge 25
ip prefix-list CE1-BACKUP seq 5 permit 172.16.1.0/24
ip as-path access-list 30 permit _65300$
ip community-list standard CUST-ROUTES permit 65000:1001
!
route-map ISP-IN deny 10
 match ip address prefix-list BOGONS
route-map ISP-IN deny 20
 match ip address prefix-list TOO-SPECIFIC
route-map ISP-IN deny 30
 match as-path 30
route-map ISP-IN permit 40
 set local-preference 80
 set community 65000:3000 additive
!
route-map ISP-OUT permit 10
 match community CUST-ROUTES
 match ip address prefix-list CE1-BACKUP       ! ET : route client ET préfixe de secours
 set as-path prepend 65000 65000
route-map ISP-OUT permit 20
 match community CUST-ROUTES
! (deny implicite pour tout le reste)
!
route-map NO-E1 deny 10
 match route-type external type-1
route-map NO-E1 permit 20
!
route-map OSPF-TO-BGP permit 10
 set community 65000:2002 additive
 set origin igp
!
router ospf 1
 distribute-list route-map NO-E1 in
!
router bgp 65000
 redistribute ospf 1 match internal external 2 route-map OSPF-TO-BGP
 neighbor 10.200.0.2 route-map ISP-IN in
 neighbor 10.200.0.2 route-map ISP-OUT out
!
! puis : clear ip bgp 10.200.0.2 soft

8. Fiche de révision

Prefix-lists et route-maps
  • Prefix-list : motif sur N bits + longueur entre ge et le ; sans ge/le = longueur exacte ; deny implicite.
  • 0.0.0.0/0 = défaut seul · 0.0.0.0/0 le 32 = tout · 0.0.0.0/0 ge 25 = plus spécifique que /24.
  • Route-map : séquences croissantes, première correspondance, deny implicite.
  • Même ligne = OU · lignes de types différents = ET · pas de match = tout.
  • Deny dans l’ACL / prefix-list = pas de correspondance (séquence suivante).
  • continue : BGP uniquement.
  • set community … additive, sinon remplacement.
  • IOS XE : send-community obligatoire ; clear ip bgp X soft après modification.
  • OSPF → BGP : internes seulement par défaut (match internal external …).
  • distribute-list in (OSPF / IS-IS) = filtre du RIB, pas de la base.
RPL (IOS XR)
  • eBGP sans route-policy in/out = aucune route échangée.
  • Drop implicite sans ticket ; pass / set = ticket et on continue ; done = accepté, stop ; drop = rejeté, stop.
  • if … then … elseif … else … endif ; not, and, or.
  • Ensembles : prefix-set, as-path-set, community-set, extcommunity-set.
  • apply pour imbriquer, $param pour paramétrer.
  • Config mode = remplacement complet ; edit route-policy pour modifier.
  • show rpl … detail | attachpoints | states.
  • Changement de politique = réévaluation automatique.

9. Quiz

1. Exercice 2 de la section 3.3 : 192.168.32.0/19 ge 22 le 24
192.168.40.0/22 : oui · 192.168.64.0/24 : non (hors du /19, troisième octet entre 32 et 63 seulement) · 192.168.33.0/24 : oui · 192.168.32.0/19 : non (/19 hors de 22–24) · 192.168.63.128/25 : non (/25 > 24).
2. Écris la prefix-list qui correspond uniquement à la route par défaut.
ip prefix-list DEFAUT permit 0.0.0.0/0
3. Quelle expression régulière sélectionne les routes reçues directement de l’AS 65101 ?
^65101_
4. Une route-map n’a qu’une séquence : deny 10 avec match ip address prefix-list BOGONS. Quel est l’effet ?
Tout est rejeté : les bogons par la séquence 10, le reste par le deny implicite. Il manque un permit 20 sans match.
5. Quelle est la différence entre set community 65000:1 et set community 65000:1 additive ?
Sans additive, la liste des communautés est remplacée ; avec additive, la valeur est ajoutée aux communautés existantes.
6. Dans quel cas utiliser continue ?
Dans une route-map BGP, pour appliquer les set de plusieurs séquences à une même route au lieu de s’arrêter à la première séquence permit qui correspond.
7. Quelles sont les quatre actions principales de RPL ?
pass, set (modification qui vaut ticket), done, drop.
8. Une politique RPL appelle apply CHILD, et CHILD exécute drop pour une route. La politique parente continue-t-elle à évaluer cette route ?
Non : drop (comme done) termine toute l’évaluation, y compris celle de la politique parente.
9. Sur IOS XR, comment modifier une politique existante sans la retaper entièrement ?
Avec edit route-policy NOM en mode EXEC (éditeur intégré), car la redéfinir en mode configuration la remplace complètement.
10. Quel type de logique utilise RPL ?
Des instructions conditionnelles de type if / then / elseif / else / endif, avec des opérateurs booléens.

10. Glossaire

TermeDéfinition courte
Route-mapPolitique IOS/IOS XE en séquences permit/deny avec match et set.
Prefix-listListe de sélection de préfixes selon le motif et la longueur de masque (ge / le).
RPLRouting Policy Language, le langage de politiques d’IOS XR.
Prefix-set / as-path-set / community-setEnsembles nommés réutilisables dans RPL.
TicketImage pédagogique : une route doit être « acceptée » (pass, set, done) pour échapper au drop implicite de RPL.
Point d’attacheEndroit où une politique est appliquée (voisin BGP, redistribution…).
BogonPréfixe qui ne devrait jamais apparaître sur Internet (privé, réservé, non alloué).
no-exportCommunauté bien connue : ne pas annoncer la route à des voisins eBGP.
TagMarque numérique posée sur une route redistribuée, souvent pour éviter les boucles.
Soft reconfigurationConservation des routes reçues avant politique, pour les afficher ou les réévaluer.

11. Sources et pour aller plus loin

  • Programme officiel de l’examen Cisco 350-501 SPCOR (objectif 2.5).
  • CCNP SPCOR 350-501 Official Cert Guide, Cisco Press, chapitre 4 (référence de révision ; article et lab rédigés indépendamment).
  • Cisco : « Implementing Routing Policy » (guides de configuration IOS XR) ; documentation des route-maps et prefix-lists IOS XE.
  • RFC 8212 (comportement par défaut de l’eBGP sans politique), RFC 1997 (communautés BGP), RFC 6996 et RFC 5398 (ASN privés et de documentation), RFC 5737 (préfixes de documentation utilisés dans le lab).
  • IP Routing on Cisco IOS, IOS XE, and IOS XR, Cisco Press, pour approfondir la logique des prefix-lists.

Article rédigé pour Les Z’héros du Réseau dans le cadre de la série de préparation au CCNP Service Provider (350-501 SPCOR). Chapitres liés : IS-IS, OSPF et BGP.

Leave a Reply 0

Your email address will not be published. Required fields are marked *