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 ASN192.0.2.1→ IP du neighbor OuiHeberg208226→ 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 ASN2001:db8::1→ IP IPv6 du neighbor OuiHeberg208226→ 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 :
| Colonne | Valeur attendue |
|---|---|
| State/PfxRcd | Established / nombre de routes reçues |
| Up/Down | durée de la session (ex: 00:05:32) |
| MsgRcvd/Sent | compteurs 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é
| Mesure | Commande FRR | Effet |
|---|---|---|
| MD5 Authentication | neighbor X password <secret> | Authentifie les paquets BGP TCP |
| GTSM (TTL Security) | neighbor X ttl-security hops 1 | Bloque les paquets hors-segment réseau |
| Maximum-prefix | neighbor X maximum-prefix 100 | Protège contre les route leaks massifs |
| Prefix-list sortant | neighbor X prefix-list ALLOW-OUT out | Empêche l'annonce de préfixes non autorisés |
| Firewall port 179 | iptables | Bloque 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 :
| Fournisseur | Hôte | Port |
|---|---|---|
| Cloudflare | rpki.cloudflare.com | 8282 |
| RIPE NCC | rtr.rpki.cloudflare.com | 8282 |
| NTT | rtr.rpki.ntt.net | 8282 |
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ôme | Cause probable | Diagnostic | Solution |
|---|---|---|---|
Session en Active | Neighbor injoignable ou port 179 bloqué | telnet 192.0.2.1 179 | Vérifier firewall, routing, IP neighbor |
Session en Connect | TCP SYN envoyé mais pas de réponse | tcpdump -i eth0 port 179 | Vérifier ASN distant, IP source, MD5 |
Session Established mais 0 préfixes reçus | Prefix-list trop restrictive côté peer | show bgp neighbors X received-routes | Ajuster BOGON-IN ou contacter OuiHeberg |
| Préfixe non visible sur bgp.tools | network absent ou route kernel manquante | show ip bgp 203.0.113.0/24 | Vérifier que l'IP existe sur l'interface (ip route) |
| FRR ne démarre pas | bgpd=yes non activé dans daemons | journalctl -u frr | Éditer /etc/frr/daemons, redémarrer |
| Session flapping | Timer BGP trop court ou lien instable | show bgp neighbors X → Hold time | Augmenter 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).
