Linux8 juin 2026 10 vues

Configurer une session BGP avec FRRouting sur un VPS Linux

Configurer une session BGP avec FRRouting sur un VPS Linux

Prérequis

Avant de commencer, vous devez disposer de :

  • Un VPS Linux (Debian 12 ou Ubuntu 22.04/24.04 recommandé) avec accès root
  • Votre propre ASN (numéro de système autonome) : privé (64512–65534) ou public (RIPE NCC)
  • Votre propre bloc IP (/24 IPv4 minimum, ou /48 IPv6)
  • Les informations de session BGP fournies par OuiHeberg : IP du neighbor, ASN distant, mot de passe MD5 (optionnel)
  • Sur un VPS OuiHeberg, l'IP et le bloc routé sont assignés automatiquement par cloud-init au provisioning (aucune configuration réseau manuelle requise)

Note : Pour obtenir un ASN public et un bloc IP portable, vous devez adhérer au RIPE NCC ou passer par un LIR (Local Internet Registry). Pour un usage privé ou lab, un ASN privé (64512–65534) suffit.


1. Installer FRRouting (FRR)

Ne pas utiliser les paquets distro : la version dans les dépôts Debian/Ubuntu est souvent obsolète (FRR 8.x vs 10.x actuel).

Utiliser le dépôt officiel FRRouting :

# Ajouter la clé GPG officielle FRR
curl -s https://deb.frrouting.org/frr/keys.gpg | sudo tee /usr/share/keyrings/frrouting.gpg > /dev/null

# Définir la version cible (frr-stable = dernière stable)
FRRVER="frr-stable"

# Ajouter le dépôt APT
echo "deb [signed-by=/usr/share/keyrings/frrouting.gpg] https://deb.frrouting.org/frr $(lsb_release -s -c) $FRRVER" | \
  sudo tee /etc/apt/sources.list.d/frr.list

# Installer FRR et les outils Python
sudo apt install -y curl lsb-release ca-certificates gnupg sudo apt update && sudo apt install -y frr frr-pythontools

Vérifier l'installation :

vtysh --version
# Attendu : frr version 10.x.x

2. Activer le daemon BGP

Par défaut, tous les daemons FRR sont désactivés. Activer uniquement bgpd :

sudo nano /etc/frr/daemons

Modifier la ligne :

bgpd=yes

Activer et démarrer FRR :

sudo systemctl enable frr
sudo systemctl restart frr
sudo systemctl status frr   # Vérifier : active (running)

3. Configurer la session BGP dans vtysh

vtysh est le shell de configuration unifié de FRRouting. Il fonctionne comme un CLI Cisco/Juniper.

Entrer dans vtysh :

sudo vtysh

Configuration complète

! Entrer en mode configuration
configure terminal

! Déclarer votre ASN
router bgp 65001

  ! Router-ID = IP principale de votre VPS (assignée par cloud-init)
  bgp router-id 203.0.113.1

  ! Désactiver l'échange de routes par défaut (sécurité)
  no bgp default ipv4-unicast

  ! Déclarer le neighbor OuiHeberg (AS208226)
  neighbor 192.0.2.1 remote-as 208226
  neighbor 192.0.2.1 description OuiHeberg-upstream

  ! GTSM : TTL Security, protège contre les attaques hors-segment
  neighbor 192.0.2.1 ttl-security hops 1

  ! Authentification MD5 (si fournie par OuiHeberg)
  neighbor 192.0.2.1 password VotreMotDePasseMD5

  ! Address-family IPv4
  address-family ipv4 unicast

    ! Activer le neighbor en IPv4
    neighbor 192.0.2.1 activate

    ! Annoncer votre bloc
    network 203.0.113.0/24

    ! Appliquer les filtres (définis ci-dessous)
    neighbor 192.0.2.1 prefix-list ALLOW-OUT out
    neighbor 192.0.2.1 prefix-list BOGON-IN in

    ! Limiter les routes reçues (protection contre route leaks)
    neighbor 192.0.2.1 maximum-prefix 100

  exit-address-family

exit

! Prefix-list sortant : n'annoncer QUE votre propre bloc
ip prefix-list ALLOW-OUT seq 10 permit 203.0.113.0/24

! Prefix-list entrant : rejeter les bogons et RFC1918
ip prefix-list BOGON-IN seq 5  deny 0.0.0.0/0
ip prefix-list BOGON-IN seq 10 deny 10.0.0.0/8 le 32
ip prefix-list BOGON-IN seq 20 deny 172.16.0.0/12 le 32
ip prefix-list BOGON-IN seq 30 deny 192.168.0.0/16 le 32
ip prefix-list BOGON-IN seq 40 deny 127.0.0.0/8 le 32
ip prefix-list BOGON-IN seq 50 deny 169.254.0.0/16 le 32
ip prefix-list BOGON-IN seq 100 permit 0.0.0.0/0 le 32

! Sauvegarder
write memory
end

Remplacer :

  • 65001 → votre ASN
  • 192.0.2.1 → IP du neighbor OuiHeberg
  • 208226 → ASN OuiHeberg (AS208226), déjà renseigné
  • 203.0.113.0/24 → votre bloc IP réel

4. Configuration IPv6 (optionnel)

Si vous disposez d'un bloc IPv6 (/48 ou /56) :

configure terminal

router bgp 65001

  neighbor 2001:db8::1 remote-as 208226
  neighbor 2001:db8::1 description OuiHeberg-upstream-v6
  neighbor 2001:db8::1 ttl-security hops 1

  address-family ipv6 unicast
    neighbor 2001:db8::1 activate
    network 2001:db8:1::/48
    neighbor 2001:db8::1 prefix-list ALLOW-OUT-V6 out
    neighbor 2001:db8::1 maximum-prefix 50
  exit-address-family

exit

ipv6 prefix-list ALLOW-OUT-V6 seq 10 permit 2001:db8:1::/48

write memory
end

Remplacer :

  • 65001 → votre ASN
  • 2001:db8::1 → IP IPv6 du neighbor OuiHeberg
  • 208226 → ASN OuiHeberg (AS208226), déjà renseigné
  • 2001:db8:1::/48 → votre bloc IPv6 réel

5. Vérifier la session BGP

Commandes vtysh essentielles

! Vue d'ensemble de toutes les sessions
show bgp summary

! Détail d'un peer spécifique
show bgp neighbors 192.0.2.1

! Routes annoncées
show ip bgp

! Routes reçues du peer
show ip bgp neighbors 192.0.2.1 received-routes

État cible dans show bgp summary :

ColonneValeur attendue
State/PfxRcdEstablished / nombre de routes reçues
Up/Downdurée de la session (ex: 00:05:32)
MsgRcvd/Sentcompteurs croissants

Si l'état affiche Active ou Connect → voir section Dépannage.

Vérification externe

Utiliser un looking glass pour confirmer que votre préfixe est visible sur l'Internet public :

  • bgp.tools : rechercher votre préfixe ou ASN, vue temps réel des annonces BGP

6. Sécuriser la session BGP

Firewall iptables : restreindre le port BGP

Autoriser le port 179 (BGP) uniquement depuis l'IP du neighbor OuiHeberg :

# Autoriser loopback
sudo iptables -A INPUT -i lo -j ACCEPT

# Autoriser les sessions établies
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

# BGP : uniquement depuis le neighbor OuiHeberg
sudo iptables -A INPUT -p tcp -s 192.0.2.1 --dport 179 -j ACCEPT

# SSH (adapter le port si nécessaire)
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# Politique par défaut : bloquer tout le reste (à poser en dernier)
sudo iptables -P INPUT DROP

Persister les règles :

sudo apt install iptables-persistent
sudo netfilter-persistent save

Récapitulatif des mesures de sécurité

MesureCommande FRREffet
MD5 Authenticationneighbor X password <secret>Authentifie les paquets BGP TCP
GTSM (TTL Security)neighbor X ttl-security hops 1Bloque les paquets hors-segment réseau
Maximum-prefixneighbor X maximum-prefix 100Protège contre les route leaks massifs
Prefix-list sortantneighbor X prefix-list ALLOW-OUT outEmpêche l'annonce de préfixes non autorisés
Firewall port 179iptablesBloque les connexions BGP non légitimes

7. RPKI / ROA : validation d'origine des routes

RPKI (Resource Public Key Infrastructure) permet de valider que les préfixes BGP reçus sont bien annoncés par leur propriétaire légitime. Sans RPKI, votre VPS accepte des routes potentiellement hijackées.

En 2026, ne pas activer RPKI sur une session BGP publique, c'est laisser une porte ouverte aux hijacks de routes. L'excuse "c'est complexe" ne tient plus avec un serveur RTR public gratuit.

Configurer le serveur RTR Cloudflare

configure terminal

! Ajouter le cache RTR Cloudflare (gratuit, public)
rpki
  rpki add cache rpki.cloudflare.com 8282
  rpki start
exit

! Activer la validation dans BGP
router bgp 65001
  address-family ipv4 unicast
    bgp bestpath prefix-validate allow-invalid
  exit-address-family
exit

write memory
end

Vérifier la connexion RTR :

show rpki cache-connection
show rpki prefix-table

Serveurs RTR publics alternatifs :

FournisseurHôtePort
Cloudflarerpki.cloudflare.com8282
RIPE NCCrtr.rpki.cloudflare.com8282
NTTrtr.rpki.ntt.net8282

8. Configuration complète : frr.conf annoté

Après write memory, votre configuration est sauvegardée dans /etc/frr/frr.conf. Exemple complet :

frr version 10.1.1
frr defaults traditional
hostname mon-vps-ouiheberg
log syslog informational
no ipv6 forwarding

!
ip prefix-list ALLOW-OUT seq 10 permit 203.0.113.0/24

ip prefix-list BOGON-IN seq 5  deny 0.0.0.0/0
ip prefix-list BOGON-IN seq 10 deny 10.0.0.0/8 le 32
ip prefix-list BOGON-IN seq 20 deny 172.16.0.0/12 le 32
ip prefix-list BOGON-IN seq 30 deny 192.168.0.0/16 le 32
ip prefix-list BOGON-IN seq 40 deny 127.0.0.0/8 le 32
ip prefix-list BOGON-IN seq 50 deny 169.254.0.0/16 le 32
ip prefix-list BOGON-IN seq 100 permit 0.0.0.0/0 le 32

!
router bgp 65001
 bgp router-id 203.0.113.1
 no bgp default ipv4-unicast
 neighbor 192.0.2.1 remote-as 208226
 neighbor 192.0.2.1 description OuiHeberg-upstream
 neighbor 192.0.2.1 ttl-security hops 1
 neighbor 192.0.2.1 password VotreMotDePasseMD5
 !
 address-family ipv4 unicast
  neighbor 192.0.2.1 activate
  neighbor 192.0.2.1 prefix-list ALLOW-OUT out
  neighbor 192.0.2.1 prefix-list BOGON-IN in
  neighbor 192.0.2.1 maximum-prefix 100
  network 203.0.113.0/24
 exit-address-family
!

9. Dépannage

SymptômeCause probableDiagnosticSolution
Session en ActiveNeighbor injoignable ou port 179 bloquételnet 192.0.2.1 179Vérifier firewall, routing, IP neighbor
Session en ConnectTCP SYN envoyé mais pas de réponsetcpdump -i eth0 port 179Vérifier ASN distant, IP source, MD5
Session Established mais 0 préfixes reçusPrefix-list trop restrictive côté peershow bgp neighbors X received-routesAjuster BOGON-IN ou contacter OuiHeberg
Préfixe non visible sur bgp.toolsnetwork absent ou route kernel manquanteshow ip bgp 203.0.113.0/24Vérifier que l'IP existe sur l'interface (ip route)
FRR ne démarre pasbgpd=yes non activé dans daemonsjournalctl -u frrÉditer /etc/frr/daemons, redémarrer
Session flappingTimer BGP trop court ou lien instableshow bgp neighbors X → Hold timeAugmenter timers bgp 30 90 dans vtysh

FAQ

Quelle est la différence entre FRRouting et BIRD2 pour BGP ?

FRR utilise une CLI style Cisco/Juniper (vtysh), familière pour les admins réseau. BIRD2 utilise un langage de configuration déclaratif plus puissant pour les setups complexes (route reflectors, multi-table). Pour une session BGP simple sur VPS, FRR est plus rapide à prendre en main.

Puis-je utiliser FRR sans mon propre ASN ?

Non pour une session BGP publique. Pour un lab privé, un ASN privé (64512–65534) suffit. Pour annoncer vos propres préfixes sur Internet, un ASN public RIPE est obligatoire.

FRR consomme-t-il beaucoup de ressources sur un VPS ?

Pour une session BGP recevant uniquement une route par défaut (default) : environ 30–80 Mo de RAM et moins de 1 % de CPU en régime stable. Pour une full table BGP (environ 900 000 routes) : prévoir 2–4 Go de RAM minimum. Un VPS 2 Go de RAM suffit pour la plupart des cas d'usage (annonce de préfixes, réception d'une route par défaut, failover).

Puis-je configurer BGP sur un VPS sans adresse IP publique dédiée ?

Non. BGP nécessite une connectivité TCP directe (port 179) entre les deux peers. Votre VPS doit avoir une IP publique routable et un accès réseau direct au neighbor OuiHeberg.

Comment mettre à jour FRRouting sans interrompre les sessions BGP ?

FRR supporte le Graceful Restart (RFC 4724). Activer avec bgp graceful-restart dans la config BGP. Lors d'un apt upgrade frr, les sessions sont maintenues pendant le redémarrage du daemon (environ 30–60 secondes de convergence).


Sources utiles