Profil de l'attribut
Type Code BGP2
CatégorieWell-known Mandatory
Critère Best Path#4 — shortest wins
Propagation iBGP✅ Oui
Propagation eBGP✅ Oui (+ own AS ajouté)
Loop Prevention✅ Own AS → route rejetée
Modifiable✅ set as-path prepend
Well-known Mandatory
Type code 2
Shortest wins
Loop prevention
Critère #4
Définition et rôle
L'attribut AS-PATH contient la liste ordonnée des numéros d'AS traversés pour atteindre un préfixe. Chaque routeur eBGP qui reannonce une route ajoute son propre numéro d'AS en tête du path.
BGP préfère le chemin avec le nombre d'AS le plus court (critère #4). C'est aussi le mécanisme principal de loop prevention : si un routeur reçoit une route contenant son propre AS dans le path, il la rejette silencieusement.
! Route annoncée par AS65003 vers Internet :
! AS65003 → AS65002 → AS65001 (vous)
!
! Ce que vous voyez dans show ip bgp :
Network Next Hop Metric LocPrf Weight Path
*> 10.0.0.0/8 192.0.2.1 0 65001 65002 65003 i
↑ votre AS ↑ AS final
! Longueur AS-PATH = 3 AS (compte les AS, pas les octets)
Les 4 types de segments AS-PATH
Type 2 — AS_SEQUENCE
Liste ordonnée
65001 65002 65003
Format normal. Chaque AS traversé. Compte 1 par AS dans la longueur.
Type 1 — AS_SET
Ensemble non ordonné
{65001 65002 65003}
Créé par agrégation avec as-set. Compte pour 1 dans la longueur, quel que soit le nombre d'AS.
Type 3 — AS_CONFED_SEQUENCE
Confederation — séquence
(65001 65002)
AS internes à la confédération. Non comptés dans la longueur externe.
Type 4 — AS_CONFED_SET
Confederation — ensemble
(65001 65002) {65003}
AS confédération non ordonnés. Non comptés dans la longueur externe.
Loop Prevention — mécanisme automatique
Quand un routeur BGP reçoit une UPDATE contenant son propre numéro d'AS dans le AS-PATH, il rejette silencieusement la route. Ce mécanisme est actif par défaut et ne peut pas être désactivé globalement.
! AS65001 annonce 10.0.0.0/8 vers AS65002
! AS65002 reannonce vers AS65001 avec path "65002 65001"
! AS65001 reçoit la route → voit son propre AS 65001 → REJET
! Vérification :
R1# show ip bgp 10.0.0.0/8
! Route absente ou marquée invalid si loop détectée
! Contournement (cas MPLS/VPN uniquement) :
router bgp 65001
neighbor 10.0.0.1 allow-as-in 3 ! accepte jusqu'à 3 occurrences de own-AS
Position dans le Best Path Algorithm
1 Weight
2 LOCAL_PREF
3 Locally Originated
4 ★ AS-PATH length
5 Origin
6 MED
7 eBGP/iBGP
8 IGP metric
9 AIGP
10 Oldest
11 Router-ID
12 Cluster-list
13 Neighbor IP
C'est le premier critère réellement configurable sur la route reçue (via prepending). Contrairement à Weight et LOCAL_PREF qui sont modifiés localement, AS-PATH prepending agit sur la sélection chez les autres AS.
L'AS-PATH prepending consiste à répéter son propre numéro d'AS plusieurs fois dans le path pour allonger artificiellement la longueur et rendre le chemin moins attractif. C'est la technique principale pour influencer le trafic entrant (inbound).
Topologie de référence — Dual ISP
┌──────────────────────────────────┐
│ AS 65001 │
│ │
eBGP │ ┌──────────┐ ┌──────────┐ │
ISP1 ─────────────┼──│ R1 │───│ R2 │ │
(AS 100) │ │ 10.0.0.1 │ │ 10.0.0.2 │ │
│ └──────────┘ └──────────┘ │
ISP2 ─────────────┼──│ R3 │ │
(AS 200) eBGP │ │ 10.0.0.3 │ │
│ └──────────┘ │
└──────────────────────────────────┘
Objectif : ISP1 = chemin principal, ISP2 = backup
Action : allonger AS-PATH annoncé à ISP2 → ISP2 préfère envoyer via ISP1
Configuration — set as-path prepend
! Sur R3 (connecté à ISP2) — allonger le path annoncé à ISP2
route-map PREPEND-ISP2 permit 10
set as-path prepend 65001 65001 65001 ! répète 3 fois l'AS local
!
router bgp 65001
neighbor 10.0.0.3 route-map PREPEND-ISP2 out ! appliqué OUTBOUND vers ISP2
Résultat — ce que chaque ISP voit
| ISP | Préfixe | AS-PATH reçu | Longueur | Préférence |
| ISP1 (AS100) |
192.0.2.0/24 |
65001 |
1 |
★ Préféré — chemin court |
| ISP2 (AS200) |
192.0.2.0/24 |
65001 65001 65001 65001 |
4 |
Backup — chemin allongé |
ISP2 reçoit un path de longueur 4 → préfère envoyer le trafic via ISP1. En cas de panne d'ISP1, ISP2 devient le seul chemin disponible.
Prepending sur un sous-ensemble de préfixes
! Allonger uniquement pour certains préfixes via prefix-list
ip prefix-list PFX-BACKUP permit 192.0.2.0/24
!
route-map PREPEND-SELECTIVE permit 10
match ip address prefix-list PFX-BACKUP
set as-path prepend 65001 65001
!
route-map PREPEND-SELECTIVE permit 20 ! laisser passer le reste sans modification
!
router bgp 65001
neighbor 10.0.0.3 route-map PREPEND-SELECTIVE out
Prepending inbound — influencer le choix local
! Un peer peut vous envoyer des routes avec un path déjà allongé
! Vous pouvez aussi allonger EN ENTRÉE pour réduire la préférence locale
route-map DEPREFER-ISP2 permit 10
set as-path prepend last-as 3 ! répète le DERNIER AS du path reçu (IOS XE)
!
router bgp 65001
neighbor 10.0.0.3 route-map DEPREFER-ISP2 in
! last-as = pratique car on n'a pas besoin de connaître l'AS du peer
Le filtrage AS-PATH utilise des expressions régulières (regex) Cisco pour matcher des patterns dans le chemin. La commande ip as-path access-list définit les patterns, appliqués avec neighbor filter-list.
Syntaxe de base
! Définition d'un AS-PATH access-list
ip as-path access-list 1 permit ^$ ! locally originated
ip as-path access-list 2 permit ^65001$ ! direct peer uniquement
ip as-path access-list 3 deny _65002_ ! bloquer si AS65002 anywhere
ip as-path access-list 3 permit .* ! laisser passer le reste
!
! Application sur un voisin
router bgp 65001
neighbor 10.0.0.1 filter-list 1 out ! annonce uniquement routes locales
neighbor 10.0.0.2 filter-list 3 in ! filtre routes passant par AS65002
Patterns Regex — référence CCIE
| Pattern | Signification | Exemple de match |
| ^$ |
Path vide — locally originated |
Route injectée en local (network/aggregate) |
| .* |
N'importe quoi (tout) |
Toutes les routes |
| ^65001$ |
Exactement AS65001, rien d'autre |
65001 |
| _65001_ |
AS65001 n'importe où dans le path |
100 65001 200 ou 65001 |
| ^65001 |
Path commence par AS65001 |
65001 65002 65003 |
| 65001$ |
Path se termine par AS65001 |
65003 65002 65001 |
| ^65001_ |
Premier AS = 65001 (direct peer) |
65001 ou 65001 65002 |
| _65001$ |
Dernier AS = 65001 (originator) |
65003 65002 65001 |
| ^(65001|65002)$ |
Direct peer = AS65001 OU AS65002 |
65001 ou 65002 |
| ^[0-9]+$ |
Un seul AS (longueur = 1) |
65001 |
⚠ Le caractère _ (underscore) est un métacaractère Cisco qui matche : espace, virgule, début de string, fin de string, { ou }. Il permet de matcher un AS en tant que mot entier.
Vérification — show ip bgp regexp
! Tester un regex directement sur la table BGP
R1# show ip bgp regexp ^$
! → affiche toutes les routes locally originated
R1# show ip bgp regexp _65002_
! → affiche toutes les routes passant par AS65002
R1# show ip bgp regexp ^65001$
! → affiche les routes annoncées directement par AS65001
! Vérifier qu'un AS-PATH access-list fonctionne :
R1# show ip bgp filter-list 1
! → affiche les routes matchées par l'access-list 1
Cas pratique — ne publier que vos propres préfixes vers un peer
! Empêcher le transit : n'annoncer que les routes locales vers ISP
ip as-path access-list 10 permit ^$ ! uniquement locally originated
!
router bgp 65001
neighbor 203.0.113.1 filter-list 10 out
!
! Sans cette config, vous pourriez propager des routes apprises
! d'autres AS → trafic transit non désiré
AS-PATH access-list nommé (IOS XE)
! IOS XE supporte les listes nommées (plus lisible)
ip as-path access-list LOCAL-ONLY permit ^$
ip as-path access-list BLOCK-AS65002 deny _65002_
ip as-path access-list BLOCK-AS65002 permit .*
!
router bgp 65001
neighbor 10.0.0.1 filter-list LOCAL-ONLY out
neighbor 10.0.0.2 filter-list BLOCK-AS65002 in
La colonne Path dans show ip bgp affiche l'AS-PATH complet. La longueur est calculée automatiquement pour le best path selection au critère #4.
show ip bgp — même préfixe, 3 chemins différents
R1# show ip bgp
BGP table version is 12, local router ID is 1.1.1.1
Status codes: s suppressed, d damped, h history, * valid, > best, i internal
Origin codes: i - IGP, e - EGP, ? - incomplete
Network Next Hop Metric LocPrf Weight Path
*> 10.0.0.0/8 203.0.113.1 0 65002 i
* 203.0.113.2 0 65003 65002 i
* 203.0.113.3 0 65004 65005 65002 i
! Critère #4 : longueurs AS-PATH :
! Via ISP1 : 65002 → longueur 1 ← BEST ★
! Via ISP2 : 65003 65002 → longueur 2
! Via ISP3 : 65004 65005 65002 → longueur 3
Comparaison best path — critère #4
| Status | Network | Next Hop | AS-PATH | Longueur | Résultat |
| *> |
10.0.0.0/8 |
203.0.113.1 |
65002 |
1 |
★ BEST |
| * |
10.0.0.0/8 |
203.0.113.2 |
65003 65002 |
2 |
— |
| * |
10.0.0.0/8 |
203.0.113.3 |
65004 65005 65002 |
3 |
— |
Impact du prepending — avant/après
! AVANT prepending sur R3 (connecté ISP2)
Network Next Hop Path
*> 10.0.0.0/8 203.0.113.1 65002 i ← longueur 1 via ISP1
* 203.0.113.2 65002 i ← longueur 1 via ISP2 → TIE → critère #5+
! APRÈS prepending (set as-path prepend 65001 65001 65001) sur ISP2 outbound
Network Next Hop Path
*> 10.0.0.0/8 203.0.113.1 65002 i ← longueur 1 via ISP1 ← BEST ★
* 203.0.113.2 65001 65001 65001 65002 i ← longueur 4 via ISP2
show ip bgp — détail d'une route
R1# show ip bgp 10.0.0.0/8
BGP routing table entry for 10.0.0.0/8, version 5
Paths: (2 available, best #1, table default)
65002
203.0.113.1 from 203.0.113.1 (203.0.113.1)
Origin IGP, valid, external, best
AS-path length: 1
Last update: 00:02:14 ago
65003 65002
203.0.113.2 from 203.0.113.2 (203.0.113.2)
Origin IGP, valid, external
AS-path length: 2
Last update: 00:08:33 ago
allow-as-in — bypass de la loop prevention
Utilisé dans les topologies MPLS/VPN où le même AS client est connecté à plusieurs PE. Sans cette commande, le CE refuserait les routes contenant son propre AS retournées par le PE.
! Topologie MPLS VPN : CE1 (AS65001) et CE2 (AS65001) connectés au même PE
! CE2 reçoit la route de CE1 avec path "65001" → REJET par défaut
!
router bgp 65001 ! sur le routeur CE
neighbor 10.1.1.1 allow-as-in 1 ! accepte 1 occurrence de own-AS (max 10)
! ⚠ Attention : bypass complet de la loop prevention
! Ne pas utiliser dans un réseau internet sans contrôle supplémentaire
as-override — provider remplace l'AS client
Alternative à allow-as-in. Configuré sur le PE. Le PE remplace l'AS du customer dans le path par son propre AS avant d'envoyer au CE. Transparent pour le CE.
! Sur le PE (côté provider) :
router bgp 65000 ! AS du provider
neighbor 10.1.1.2 as-override
!
! CE1 annonce 10.0.0.0/8 → path "65001"
! PE reçoit, remplace 65001 par 65000 → path "65000"
! CE2 reçoit path "65000" → pas de loop detection → accepte
remove-private-as — nettoyage avant internet
Supprime les numéros d'AS privés (64512–65534 et 4200000000–4294967294) du path avant d'annoncer vers un peer public. Utilisé sur les routers de bordure ISP.
! Plages AS privées :
! 2 octets : 64512 – 65534
! 4 octets : 4200000000 – 4294967294
!
router bgp 65000
neighbor 203.0.113.1 remove-private-as
!
! Path reçu : 64512 65001 (64512 = AS privé client)
! Path envoyé: 65001 (64512 supprimé)
!
! Option all : supprimer TOUS les AS privés même si public AS présent
neighbor 203.0.113.1 remove-private-as all
AS 4 octets — RFC 6793 (anciennement 4893)
Les AS numbers 4 octets (32-bit) permettent d'aller au-delà des 65535 AS 2-octets. La transition utilise AS_TRANS = 23456 pour la compatibilité avec les vieux équipements.
! Plage AS 4 octets : 1 – 4294967295
! AS_TRANS (23456) : utilisé dans les messages BGP vers peers 2-octets
!
router bgp 131072 ! AS 4 octets (notation décimale)
! ou notation dotted :
router bgp 2.0 ! = 131072 en notation X.Y
!
! Peer 2-octets reçoit AS_TRANS=23456 à la place du vrai AS
! Attribut NEW_AS_PATH (optionnel transitive) transporte le vrai AS 4-octets
Confederation — AS_CONFED_SEQ non comptés
Dans une confédération BGP, les AS membres internes sont affichés entre parenthèses dans l'AS-PATH. Ils ne sont pas comptés dans la longueur AS-PATH visible depuis l'extérieur.
! Path visible en interne à la confédération :
! (65001 65002) 65003 i
! ↑ sous-AS confédération (non comptés externellement)
!
! Path visible par un peer externe :
! 65010 65003 i (65010 = AS public de la confédération)
! Longueur externe = 2 (pas 4)
⚡ Piège #1 — AS_SET compte pour 1 dans la longueur
Un AS_SET créé par aggregate-address ... as-set ne compte que pour 1 dans la longueur AS-PATH, peu importe le nombre d'AS dans l'ensemble. Exemple : 65001 {65002 65003 65004} = longueur 2, pas 4. Piège classique CCIE sur les questions de best path après une agrégation.
! aggregate-address 10.0.0.0/8 as-set
! Composantes : 10.1/16 (path: 65001), 10.2/16 (path: 65002), 10.3/16 (path: 65003)
! Path agrégat : {65001 65002 65003} → longueur = 1 !
⚡ Piège #2 — Prepending n'affecte que le trafic ENTRANT
L'AS-PATH prepending est configuré out sur le routeur local, mais son effet est de rendre le chemin moins attractif pour les AS distants qui reçoivent l'annonce. Il n'affecte pas le trafic sortant de votre AS. Pour influencer le trafic sortant, utiliser LOCAL_PREF ou Weight.
⚡ Piège #3 — allow-as-in bypass total de la loop prevention
allow-as-in supprime la protection contre les boucles BGP. Configuré sans précaution dans un réseau multi-homed public, il peut créer des boucles de routage. Réserver strictement aux topologies MPLS/VPN où le comportement est attendu et contrôlé.
⚡ Piège #4 — remove-private-as échoue si AS public mélangé
La commande remove-private-as ne supprime les AS privés que si le path ne contient que des AS privés avant le premier AS public. Si un AS public apparaît avant un AS privé dans le path, le privé n'est pas supprimé. Utiliser remove-private-as all pour forcer la suppression dans tous les cas.
! Path : 65001 64512 65002
! remove-private-as normal → 65001 64512 65002 (64512 conservé car AS public avant)
! remove-private-as all → 65001 65002 (64512 supprimé)
⚡ Piège #5 — Confederation AS non comptés, mais visibles en interne
Les AS de confédération (affichés entre parenthèses) ne sont pas comptés dans la longueur externe, mais sont comptés dans la longueur interne au sein de la confédération. Un path (65001 65002) 100 i a une longueur interne de 3 et externe de 2. Attention lors du troubleshooting de best path dans un environnement confederation.
⚡ Piège #6 — underscore _ dans les regex : comportement spécial
Le caractère _ dans les AS-PATH regex Cisco n'est PAS un underscore littéral. Il matche : espace, virgule, début de ligne, fin de ligne, { ou }. C'est pourquoi _65001_ matche AS65001 en tant que mot entier (pas comme sous-chaîne). Utiliser \65001\ (avec backslash) si vous voulez vraiment un underscore littéral.
✓ Bonne pratique — tester les regex avant déploiement
Toujours valider un regex avec show ip bgp regexp <pattern> avant d'appliquer un filter-list sur un voisin. Un regex incorrect peut filtrer trop de routes ou pas assez, avec impact immédiat sur le routage.
R1# show ip bgp regexp ^65001_ ! voir ce qui serait matché
R1# show ip bgp filter-list 10 ! voir les routes matchées par la liste
Cliquer sur une carte pour révéler la réponse.
Quel est le type code BGP de l'attribut AS-PATH ?
Type code 2 — Well-known Mandatory. Présent dans tous les messages UPDATE.
Cliquer pour révéler
Un AS_SET de 5 AS — quelle longueur compte dans le best path ?
1 — un AS_SET compte toujours pour 1 dans la longueur, peu importe le nombre d'AS dans l'ensemble.
Cliquer pour révéler
Quel regex matche uniquement les routes locally originated ?
^$ — path vide = route injectée localement via network ou aggregate.
Cliquer pour révéler
Sur quel sens agit le prepending : entrant ou sortant ?
Configuré out sur le routeur local, il influence le trafic entrant en rendant le chemin moins attractif pour les AS distants.
Cliquer pour révéler
Quelle commande permet d'accepter une route contenant son propre AS ?
neighbor X allow-as-in [nombre] — bypass la loop prevention. Usage principal : topologies MPLS/VPN site-to-site même AS.
Cliquer pour révéler
Que signifie le caractère _ dans une regex AS-PATH Cisco ?
Métacaractère qui matche : espace, virgule, début de ligne, fin de ligne, { ou }. Permet de matcher un AS en tant que mot entier.
Cliquer pour révéler
Les AS de confédération sont-ils comptés dans la longueur externe ?
Non — AS_CONFED_SEQUENCE et AS_CONFED_SET ne sont pas comptés dans la longueur AS-PATH vue par les peers externes à la confédération.
Cliquer pour révéler
Quelle est la valeur AS_TRANS utilisée pour la compatibilité 4-octets / 2-octets ?
23456 — RFC 6793. Les anciens équipements 2-octets voient 23456 à la place du vrai AS 4-octets. Le vrai AS est transporté dans l'attribut optionnel NEW_AS_PATH.
Cliquer pour révéler