Description : Nous allons parler de BGP sur Cisco ainsi que de son implémentation.
Introduction :
BGP (Border Gateway Protocol), différents cas d'utilisation :
Le client annonce ses réseaux publiques au(x) ISPs
L'ISP annonce à son client une route par défaut, tous les réseaux d'Internet ou une partie
Echange de routes entre deux AS
Quatre type d'utilisations :
Single homed
1 ISP
1 connection à l'ISP
Dual-homed
1 ISP
2 connctions à l'ISP
Multi-homed
plusieurs ISPs
1 connection par ISP
Dual-multi-homed
plusieurs ISPs
2 connections par ISP
Informations/Fiche sur BGP :
Protocol standard
C'est un EGP
Protocol Distance Vector (Path cector)
Administrative Distance : 20 pour eBGP et 200 pour iBGP
Métrique riche
Lettre qui identifie BGP dans la table de routage : B
AS : de 1 à 65535
EGP :
iBGP : relation BGP entre 2 routeurs de la même AS. eBGP : relation BGP entre 2 routeurs d'AS différentes.
Path Vector :
Mécanisme de prévention de boucle
BGP ignore les annonces contenant son AS dans l'AS PATH
en iBGP, il y a un split-horizon ibgp
exemple pour l'AS PATH :
La relation de voisinage :
Comme nous l'avons vu plus haut, il y a 2 types de relations BGP :
eBGP
iBGP
Pour différencier une relation eBGP/iBGP dans la configuration il faut regarder l'AS du routeur (router bgp XXX) et le comparé au remote-as des neighbor.
Lorsque les 2 sont identiques c'est qu'il y a une relation iBGP dans le cas contraire c'est eBGP.
Configuration :
eBGP
Configuration R1
Configuration R22
Vérification
Début des échanges
=> State/PfxRcd : Active
Relation de voisinage montée
Relation de voisinage montée mais l'apprentissage des routes n'est pas fait.
=> State/PfxRcd : 0
Apprentissage des routes fait :
=> State/PfxRcd : 3
Autre
Par défaut, BGP considère que son voisin eBGP est directement connecté (connection avec IP d'interconnexion).
Si ce n'est pas le cas il faut déclaré le neighbor en ebgp-multihop (cas de relation via la loopback).
iBGP
Configration R1
Il faut faire le pendant dans la configuration du voisin iBGP.
La commande neighbor A.B.C.D update-source Loopback0, permet de monter le voisinage BGP via la loopback0, l'avantage c'est que dans un réseau maillé si le lien directe tombe, on peut toujours passé par un autre chemin via le routage.
Vérification
Les échanges BGP :
Port TCP 179
BGP version 4
Hello, par défaut tous les 60 secondes
Holdtime, par défaut tous les 180 secondes
configurable avec un min à 0 sec et un max à 65535
BGP identifier
router-ID : qui est égal à l'adresse IP la plus grande des interfaces de loopback, s'il n'y a pas de loopback, c'est la plus grande IP des interfaces UP (au moment ou l'on passe la commande router BGP XX).
Etat de la relation de voisinage :
Idle : je ne sais pas joindre mon voisin
Active : je connais un chemin pour joindre mon voisin
Connect : la session TCP est établie (3-way handshake)
OpenSent : j'ai envoiyé un message OPEN (version BGP, mon AS, mon Holdtime, mon router-ID) et j'attends la réponse
OpenConfirm : j'ai reçu un message OPEN, je commence à scanner ma table pour décider des annonces à envoyer à mon voisin
Established : le scan est terminé, je commence à envoyer mes annonces au voisin
Injection de routes dans la table BGP locale :
2 méthodes :
Injection de route
Identifié par un i dans le champs "origin-code" de la table BGP (visible à côté du PATH dans le show ip bgp).
Redistribution de route
Identifié par un ? dans le champs "origin-code" de la table BGP.
Spécificité de la commande network
Dans un IGP (OSPF/EIGRP/RIP)
Indique les interfaces sur lequel activer l'IGP.
Dans l'EGP (BGP)
Indique le réseau à annoncer.
Sans masque
BGP annonce le chemin vers le réseau majeur
en mode auto-summary : si un sous-réseau du réseau majeur est présent dans la table de routage.
en mode no auto-summary : si le réseau majeur est présent dans la table de routage (mode par défaut).
- Avec masque (exact match)
- BGP annonce le chemin vers le réseau spécifique
- si ce réseau est présent dans la table de routage avec exactement le même masque.
La métrique
C'est une métrique riche, mais seulement 3 attributs sont obligatoires sur chaque annonce :
as-path
liste des AS à traverser pour joindre le réseau.
attribut vide tant que l'annonce n'est pas sortie de l'AS.
permet d'éviter les boucles.
next-hop
prochain saut
orign-code
i : réseau injecté via la commande network
e : non utilisé
? : réseau injecté par la commande redistribute
Note : une fois affectée, l'origin-code ne changera plus.
Modification de la métrique
Si l'annonce est envoyée à un voisin eBGP
as-path : rajout de l'AS local au début de la liste
next-hop : @IP source de la relation de voisinage
origin-code : pas de modification
Si l'annonce est envoyée à un voisin iBGP
Aucune modification des attributs
sauf si la route avait été injectée localement
next-hop : @IP de la source de la relation de voisinage
Quelles routes sont annoncées
Toutes les routes ne sont pas annoncées aux voisins.
Seule la meilleur route de chaque destination est annoncée :
identifiée par best
code : >
Pas de partage de charge possible
Critères de sélection de la 'best'
next-hop : doit être accessible
weight : le plus grand
local preference : la plus grande
injectée localement
as-path : le plus petit
origin-code : préférence du i au ?
MED : la plus petite
eBGP préféré à iBGP
iBGP : voisin IGP le plus proche
eBGP : chemin le plus ancien
router-ID : le plus petit
La fréquence des annonces
Les annonces sont regroupées et envoyées en batch :
iBGP : toutes les 5 secondes
eBGP : toutes les 30 secondes
Configuration :
min : 0 sec
max : 60 sec
A qui est annoncé la best
Si la best a été injectée localement : elle est annoncée à tous les voisins.
Si la best a été apprise grâce à un voisin eBGP : elle est annoncée à tous les voisins.
Si la best a été apprise grâce à un voisin iBGP : elle n'est annoncée qu'aux voisins eBGP.
Dans tous les cas : une annonce n'est pas envoyée à un voisin si ce voisin est mon next-hopi (split-horizon BGP).
Les annonces reçues par un voisin iBGP ne sont pas envoyées aux autres voisins iBGP car il n'existe pas de mécanisme de prévention de boucle.
En eBGP, la prévention de boucle se fait sur l'AS-PATH, suppression d'une annonce contenant mon propre AS.
full mesh iBGP
iBGP split horizon
Définition
Interdiction d'envoyer une annonce reçue d'un voisin iBGP à un autre voisin iBGP.
Conséquence
Tous les routeurs d'un AS doivent avoir une connexion iBGP entre eux (ne veut pas dire connection physique, il utilise l'IGP) => full mesh iBGP.
L'injection des routes BGP dans la table de routage
BGP scan la table BGP :
-Toutes les 60 secondes par défaut.
Modifiable :
min : 5 sec
max : 60 sec
-Si la route BGP best n'existe pas dans la table de routage, elle y est injectée :
eBGP : AD = 20
iBGP : AD = 200
Note : on préfére toujours une route eBGP, car le but du BGP est de router vers Internet, on va préférer faire router les routeurs d'un autre AS.
-Si la route existe déjà, elle est injectée si l'AD indiquée dans la table de routage est moins bonne que celle de BGP.
Critères de sélection de la 'best'
next-hop : doit être accessible
weight : le plus grand
local preference : la plus grande
injectée localement
as-path : le plus petit
origin-code : préférence du i au ?
MED : la plus petite
eBGP préféré à IGP
iBGP : voisin IGP le plus proche
eBGP : chemin le plus ancien
router-ID : le plus petit
Next-hop
Il doit être joignable (le connaître dans la table de routage locale).
Weight
On s'en sert pour influencer le taffic sortant du routeur.
Attribut propriétaire Cisco, sa portée est strirctement local au routeur (jamais envoyé au voisin).
Préférence pour la route ayant le weight la plus grande.
min : 0
max : 65535
Valeur par défaut :
32768 si la route est injectée localement
0 sinon
SCHEMA QUI SERA VALABLE POUR WEIGHT ET LOCAL PREF
Configuration
ou
Local préférence
C'est un attribut standard mais pas obligatoire.
On s'en sert pour influencer le taffic sortant de l'AS.
C'est uniquement envoyé aux voisins iBGP :
l'attribut est supprimé des annonces eBGP
l'attribut ne sort donc pas de l'AS
l'attribut influence l'ensemble des routeurs de l'AS
Préférence pour la route ayant le local preference la plus grande.
par défaut 100
min : 0
max : 4294967295
Sera appliqué à tous les forward d'annonces reçue de tout voisin eBGP.
Appliquée aux annonces générées localement (via network ou redistribute)
Sera vide en local pour tous les réseaux gérés localement (via network ou redistribute)
Configuration
Soit on augmente la local preference sur le lien qu'on privilégie ou on diminue sur un lien de backup/déprécié.
ou
Spécifique à un voisin.
Exemple pour filtrer un réseau spécifique d'un voisin
AS-Path
On s'en sert pour influencer le taffic entrant dans l'AS (influence le routeur distant).
Attribut standard et obligatoire.
Préférence pour la route ayant l'AS Path le plus petit.
Pas de règle précise pour calculer le nombre d'itérations nécessaires, il faut procéder par essais successifs.
Utiliser uniquement son AS, sinon le système de prévention de boucle BGP empêchera les routeurs d'un autre AS de tenir compte de vos annonces.
Permet d'influencer tous les AS.
Configuration par l'exemple :
On souhaite privilégier que les routeurs distant passent par R4-1 :
Il faut au besoin ajouter autant de fois l'AS local que d'AS traversées !
On peux aussi plomber une route pour sortir (dans un cas Multi-homed par exemple) :
Ajoute 3 fois le dernier AS (donc 4 fois en tout) dans l'AS-Path pour le voisin eBGP indiqué.
MED : Multi-Exit Discriminator
C'est la commande metric dans la configuration.
On s'en sert pour influencer le traffic entrant dans l'AS.
Attribut non standard, et non transmissible.
Si le voisin ne connait pas cet attribut, il n'est pas annoncé aux voisin iBGP, il ne sort pas de l'AS voisine.
Valeur par défaut :
routes redistribués depuis IGP :
configurable via default-metric (fonctionne pour toutes les routes sauf static et connected)
sinon c'est la metric de l'IGP
routes redistribuées static ou connected : 0
sinon 0
La MED reçu d'un AS n'est pas annoncée à un autre AS (remis à 0).
- permet d'influencer uniquement les AS voisins.
Configuration
Nous allons voir comment forcer le chemin par R4-1 :
Soft-reconfiguration
Le soft-reconfiguration permet d'avoir une copie en RAM des annonces d'un voisin sans filtre. En cas de modification/ajout/suppression de filtres, on peut récupérer les routes du voisin sans lui demander.
La contre partie, c'est la consommation mémoire.
Configuration
route-map avancées
Etude de cas :
On veut que le réseau 10.0.0.0/24 et 10.0.1.0/24 rentre par R1-1 et 10.0.2.0/24 et 10.0.3.0/24 par R1-2.
Configuration :
Les expressions régulières
AS Path
Regex
Nb Match
65001 3331 2233 11333
22
1
65001 3331 2233 11333
22|33
4
65001 3331 2233 11333
[1235]
15
65001 3331 2233 11333
[1-4]
14
65001 3331 2233 11333
[1-3].3
3
65001 3331 2233 11333
^65
1
65001 3331 2233 11333
^33
0
65001 3331 2233 11333
33$
1
65001 3331 2233 11333
33
0
65001 3331 2233 11333
_33
1
65001 3331 2233 11333
3+
3
Définitions
.
tout caractères
*
0 ou plusieurs fois
+
1 ou plusieurs fois
?
0 ou 1 fois
^
début de chaîne
$
fin de chaîne
_
tout délimiteur (virgule, espace, tabulation, début, fin)
\
protection du caractère suivant
[ ]
1 des caractères
|
fonction OU
( )
un groupe
{3}
quantifié 3 fois
{1,3}
quantifié de 1 à 3 fois
Exemple de cas
100
Prefix qui traverse l'AS 100
^100$
Prefix généré par l'AS 100 et qui est directement connectée à mon AS
^100
Prefix annoncé par mon voisin AS 100
100$
Prefix qui a été généré par l'AS 100
^[0-9]+$
Tout prefix ne contenant qu'un AS
^$
Prefix généré par mon AS
.*
Tout prfix
^([0-9]+)(_\1)*$
Tout prefix répété X ou X X ou X X X ...
On peut tester/utiliser une regex BGP avec la commande suivante :
AS-Path access-list
Cela va permettre de filtrer les annonces sur l'AS.
Access-list identifiée par un numéro de 1 à 500.
! Accepter tout ce qui se termine par l'AS 100 (réseau de l'AS 100)
ip as-path access-list 1 permit _100$
! Accepter tout ce qui vient de l'AS 200
ip as-path access-list 1 permit _200$
route-map ASFilter
match as-path 1
Etude de cas
Nous alons réutiliser le schéma précédent :
On veut privilégier R1-1 pour le traffic à destination de l'AS 3000 et 4000.
On veut privilégier R1-2 pour le traffic à destination de l'AS 5000 et 6000.
Configuration
! sur R1-1
ip as-path access-list 34 permit _3000$
ip as-path access-list 34 permit _4000$
route-map ASFilter34
match as-path 34
set local-preference 200
route-map ASFilter34 permit 20
set local-preference 50
route bgp 1000
neighbor 2.1.2.1 remote-as 2000
neighbor 2.1.2.1 route-map ASFilter34 in
! sur R1-2
ip as-path access-list 56 permit __5000$
ip as-path access-list 56 permit __6000$
route-map ASFilter56
match as-path 56
set local-preference 200
route-map ASFilter56 permit 20
set local-preference 50
route bgp 1000
neighbor 2.2.2.2 remote-as 2000
neighbor 2.2.2.2 route-map ASFilter56 in
Filtrage des annonces
Filtrer selon les numéros d'AS
ip as-path access-list 1 permit _REGEX_
ip as-path access-list 1 deny ...
router bgp 1000
! Filtrage des annonces reçues du voisin
neighbor <IP_du_voisin> filter-list 1 in
! Filtrage des annonces envoyées au voisin
neighbor <IP_du_voisin> filter-list 1 out
Filtrer en fonction des réseaux
ip prefix-list _NAME_ permit <network>/<length> [<ge|le> Minimum_prefix_length_1-32]
ip prefix-list _NAME_ deny ...
router bgp 1000
! Filtre les annonces reçues du voisin
neighbor <IP_du_voisin> prefix-list _NAME_ in
! Filtre les annonces envoyées au voisin
neighbor <IP_du_voisin> prefix-list _NAME_ out
Filtrer selon divers paramètres
route-map DIVERS permit 10
match ip-adress ...
route-map DIVERS deny 20
match ip address prefix-list ...
! Attention dans la prefix-list on a deny et un deny de la route-map, on ignore cette règle de route-map.
route-map DIVERS permit 30
match as-path ...
! il y a un implicit deny any
router bgp 1000
! Filtre les annonces reçues du voisin
neighbor <IP_du_voisin> route-map DIVERS in
! Filtre les annonces envoyées au voisin
neighbor <IP_du_voisin> route-map DIVERS out
Aggrégation de route
Par défaut, il y a no auto-summary de positionné.
Commande
Résumé de commandes de configurations :
Quelques commandes :
Affichage de la table BGP
Affichage d'informations BGP
Note :
V : version BGP
MsgRcvd : messages reçus
MsgSent : messages envoyés
TblVer : numéro de version de la table BGP local (permet de voir si les annonces ont étés faites au voisin)
InQ/OutQ : préfix en attente de traitement
Up/Down : temps de la relation de voisinage
State/PfxRcd : état de la relation de voisinage puis une fois montée le nombre de préfix
Informations des voisin
Afficher les routes que j'annonce à un voisin
Afficher les routes reçues d'un voisin (après filtrage s'il y a)
Affichers les routes d'un voisin (sans filtrage mais seulement si le soft-reconfiguration est configuré)
Afficher les routes best qui n'ont pas pu être ajouté dans la table de routage