BGP — Border Gateway Protocol

Couche OSI : L3 — Réseau
Port : 179 (TCP)
Version actuelle : BGP-4 (RFC 4271)

BGP est le protocole de routage d’Internet. Il permet aux différents réseaux autonomes (AS — Autonomous Systems) qui composent Internet d’échanger leurs tables de routage. Sans BGP, les paquets ne sauraient pas comment voyager d’un opérateur à l’autre.


Le concept d’AS — Autonomous System

Internet n’est pas un seul réseau — c’est une interconnexion de milliers de réseaux indépendants, chacun géré par une organisation différente.

AS 15169 (Google)          AS 16509 (Amazon AWS)
┌──────────────────┐       ┌──────────────────────┐
│  8.8.8.8/32      │       │  52.0.0.0/11          │
│  172.217.0.0/16  │◄─────►│  54.0.0.0/8           │
│  ...             │       │  ...                  │
└──────────────────┘       └──────────────────────┘
         │                           │
         └───────────────────────────┘
                      │
              AS 3356 (Lumen / Level3)
              [opérateur backbone transit]

Chaque AS possède :

  • Un numéro d’AS (ASN) unique : ex. AS15169, AS16509
  • Une ou plusieurs plages d’IP (prefixes) qu’il annonce

eBGP vs iBGP

eBGP (External BGP)iBGP (Internal BGP)
EntreAS différentsRouteurs du même AS
RôleÉchange de routes entre opérateursDistribution interne des routes apprises
TTL1 (voisins directs)255 (multi-hop autorisé)
Next-hopModifié à chaque sautConservé

Fonctionnement : échange de routes

Routeur A (AS 15169 - Google)       Routeur B (AS 3356 - Level3)
  │                                       │
  │── TCP:179 ────────────────────────►  │  établissement session BGP
  │◄── TCP:179 ──────────────────────── │
  │                                       │
  │── OPEN (ASN, BGP version, hold time) ►│
  │◄── OPEN ─────────────────────────── │
  │── KEEPALIVE ──────────────────────► │
  │◄── KEEPALIVE ────────────────────── │
  │                                       │
  │── UPDATE ──────────────────────────► │
  │   "J'annonce : 8.8.8.8/32"          │
  │   "J'annonce : 172.217.0.0/16"      │
  │◄── UPDATE ─────────────────────────  │
  │   "J'annonce : 1.2.3.0/24"          │
  │   "Je retire : 5.6.7.0/24"          │

Messages BGP

TypeRôle
OPENÉtablissement de session (ASN, version BGP, hold time)
KEEPALIVEMaintien de la session (envoyé régulièrement)
UPDATEAnnonce ou retrait de routes
NOTIFICATIONSignalement d’une erreur → fermeture de session

Attributs BGP — comment choisir le meilleur chemin

BGP ne choisit pas forcément le chemin le plus court (nombre de sauts) — il choisit selon des attributs configurables :

AttributRôleExemple
AS_PATHListe des AS traversés15169 3356 1299 (le plus court est préféré)
NEXT_HOPProchain routeur à atteindre203.0.113.1
LOCAL_PREFPréférence locale (iBGP) — plus haut = préféré100 vs 200
MEDMulti-Exit Discriminator — hint pour l’AS voisin50 vs 100
COMMUNITYTags pour la politique de routage65000:100
WEIGHTPropriétaire Cisco, local au routeur32768

BGP dans le cloud et Kubernetes

AWS Direct Connect / VPN

Réseau entreprise ──BGP──► AWS Direct Connect ──► VPC AWS
  AS 65000                  AS 7224 (Amazon)
  "j'annonce 10.0.0.0/8"

Kubernetes avec MetalLB ou Cilium BGP

# Cilium BGP — le cluster Kubernetes annonce les IPs de services en BGP
# → les routeurs du datacenter apprennent les routes vers les pods
 
# Exemple CiliumBGPPeeringPolicy
apiVersion: cilium.io/v2alpha1
kind: CiliumBGPPeeringPolicy
spec:
  virtualRouters:
  - localASN: 65001
    neighbors:
    - peerAddress: 10.0.0.1/32
      peerASN: 65000
    serviceSelector:
      matchLabels:
        expose-bgp: "true"

En relation avec

  • Protocoles OSI - Index — tous les protocoles par couche
  • OSPF — protocole de routage interne (même AS), complémentaire de BGP
  • Table de Routage — BGP alimente les tables de routage des routeurs
  • Paquets IP et TCP — BGP utilise TCP port 179
  • cilium — Cilium peut faire du BGP pour annoncer les IPs de services Kubernetes