Configuration BGP avec BIRD2 sur un VPS Linux

16 min de lecture·Matthieu|

Installez BIRD2 sur Debian 12 ou Ubuntu 24.04 et configurez une session BGP pour annoncer vos propres prefixes IP. Dual-stack, filtres d'export, interfaces dummy persistantes, regles nftables et verification birdc.

BIRD est le daemon de routage maintenu par CZ.NIC. La version 2 a unifie IPv4 et IPv6 dans un seul daemon, remplace l'architecture separee BIRD/BIRD6 de la 1.x, et ajoute un langage de filtre puissant. Ce guide couvre l'installation de BIRD2 sur un VPS Linux, la configuration d'une session BGP avec votre fournisseur upstream, l'annonce de vos prefixes IP et la verification de l'ensemble.

Tous les exemples sont dual-stack (IPv4 + IPv6). Remplacez les ASN, adresses IP et prefixes d'exemple par vos propres valeurs tout au long du guide.

De quoi avez-vous besoin avant de configurer BIRD2 pour BGP ?

Avant de toucher a bird.conf, il vous faut un ASN, un espace IP alloue et un fournisseur qui propose des sessions BGP sur votre VPS. Sans ces trois elements, BIRD2 n'a rien a annoncer et personne avec qui etablir un peering.

Rassemblez ces informations aupres de votre fournisseur ou de votre allocation RIR :

Element Valeur d'exemple Ou l'obtenir
Votre ASN AS65400 RIPE NCC, ARIN ou votre LIR
Votre prefixe IPv4 203.0.113.0/24 Allocation RIR ou assignation PA du fournisseur
Votre prefixe IPv6 2001:db8:1000::/48 Allocation RIR ou assignation PA du fournisseur
ASN upstream AS64496 Details de la session BGP du fournisseur
IPv4 du peer upstream 198.51.100.1 Details de la session BGP du fournisseur
IPv6 du peer upstream 2001:db8::1 Details de la session BGP du fournisseur
Votre IPv4 de peering 198.51.100.2 Details de la session BGP du fournisseur
Votre IPv6 de peering 2001:db8::2 Details de la session BGP du fournisseur
Mot de passe MD5 (secret partage) Convenu avec le fournisseur

Vous devez aussi avoir publie des enregistrements ROA pour vos prefixes avant que vos routes ne passent la validation RPKI aupres des reseaux en aval. Voir pour cette configuration.

Assurez-vous que votre fournisseur a ajoute vos prefixes a ses filtres IRR. Sans cela, vos annonces seront filtrees meme si la session BGP s'etablit.

Un VPS avec au moins 1 Go de RAM suffit pour BIRD2 avec une table complete (plus d'un million de routes IPv4). Si vous n'acceptez qu'une route par defaut de votre upstream, l'utilisation memoire reste sous les 100 Mo.

Comment installer BIRD2 sur Debian 12 et Ubuntu 24.04 ?

BIRD2 est disponible dans les depots par defaut des deux distributions. Debian 12 fournit la version 2.0.12, Ubuntu 24.04 la version 2.14. Les deux fonctionnent pour du BGP de base, mais le depot officiel CZ.NIC propose BIRD 2.18 (publie en janvier 2026) avec le support BGP dynamic unnumbered, des ameliorations de performance et des correctifs recents. Utilisez le depot CZ.NIC pour les deployements en production.

Note : CZ.NIC publie les paquets BIRD2 sous le nom de projet bird2. Ne confondez pas avec le projet bird (qui ne couvre que Debian) ou bird3 (BIRD 3.x).

Installation depuis le depot CZ.NIC (recommande)

Ajoutez le depot officiel, puis installez :

sudo apt-get update
sudo apt-get -y install apt-transport-https ca-certificates wget

Importez la cle GPG de CZ.NIC :

sudo wget -O /usr/share/keyrings/cznic-labs-pkg.gpg https://pkg.labs.nic.cz/gpg

Ajoutez le depot. Sur Debian 12 :

echo "deb [signed-by=/usr/share/keyrings/cznic-labs-pkg.gpg] https://pkg.labs.nic.cz/bird2 bookworm main" | sudo tee /etc/apt/sources.list.d/cznic-labs-bird.list

Sur Ubuntu 24.04 :

echo "deb [signed-by=/usr/share/keyrings/cznic-labs-pkg.gpg] https://pkg.labs.nic.cz/bird2 noble main" | sudo tee /etc/apt/sources.list.d/cznic-labs-bird.list

Installez BIRD2 :

sudo apt-get update
sudo apt-get -y install bird2

Installation depuis les depots par defaut

Si vous preferez le paquet de la distribution :

sudo apt-get update
sudo apt-get -y install bird2

Verification de l'installation

bird --version

Sortie attendue (depot CZ.NIC) :

BIRD version 2.18

Verifiez que le service tourne :

sudo systemctl status bird

BIRD demarre automatiquement apres l'installation. La configuration par defaut dans /etc/bird/bird.conf est un squelette. Vous allez la remplacer entierement dans la section suivante.

Comment est structure bird.conf pour BGP ?

Un bird.conf pret pour BGP contient cinq blocs : les parametres globaux et quatre sections de protocole (device, direct, kernel, bgp). Chaque protocole fonctionne independamment et communique via les tables de routage.

Voici le bird.conf complet pour une configuration BGP dual-stack. Lisez-le d'abord, puis les sections suivantes expliquent chaque bloc.

sudo cp /etc/bird/bird.conf /etc/bird/bird.conf.bak
sudo tee /etc/bird/bird.conf > /dev/null << 'BIRDCONF'
# /etc/bird/bird.conf - BIRD2 BGP configuration
# Replace all placeholder values with your own

log syslog all;

router id 198.51.100.2;

# Watch interface state changes
protocol device {
    scan time 10;
}

# Import connected routes (needed for next-hop resolution)
protocol direct {
    ipv4;
    ipv6;
    interface "dummy0";
    interface "eth0";
}

# Sync BIRD routes to kernel routing table
protocol kernel {
    ipv4 {
        export all;
        import all;
    };
    learn;
    scan time 15;
    merge paths on;
}

protocol kernel {
    ipv6 {
        export all;
        import all;
    };
    learn;
    scan time 15;
    merge paths on;
}

# Define your prefixes
define OWN_V4_PREFIX = 203.0.113.0/24;
define OWN_V6_PREFIX = 2001:db8:1000::/48;

# Export filter: only announce your own prefixes
filter export_bgp_v4 {
    if net = OWN_V4_PREFIX then accept;
    reject;
}

filter export_bgp_v6 {
    if net = OWN_V6_PREFIX then accept;
    reject;
}

# Static routes for prefix origination (point to dummy0)
protocol static static_v4 {
    ipv4;
    route 203.0.113.0/24 via "dummy0";
}

protocol static static_v6 {
    ipv6;
    route 2001:db8:1000::/48 via "dummy0";
}

# BGP session with upstream provider
protocol bgp upstream1 {
    description "Upstream Provider";
    local 198.51.100.2 as 65400;
    neighbor 198.51.100.1 as 64496;
    source address 198.51.100.2;
    hold time 90;
    keepalive time 30;
    password "your-md5-secret";

    ipv4 {
        import all;
        export filter export_bgp_v4;
        next hop self;
    };

    ipv6 {
        import all;
        export filter export_bgp_v6;
        next hop self;
    };
}
BIRDCONF

Definissez les permissions sur le fichier de configuration. Seuls root et l'utilisateur bird ont besoin d'y acceder :

sudo chown root:bird /etc/bird/bird.conf
sudo chmod 640 /etc/bird/bird.conf

Verifiez les permissions :

ls -la /etc/bird/bird.conf

Sortie attendue :

-rw-r----- 1 root bird 1247 Mar 19 12:00 /etc/bird/bird.conf

Parametres globaux

log syslog all;
router id 198.51.100.2;

router id doit etre une adresse IPv4 globalement unique. Utilisez l'une de vos adresses IP assignees. BIRD peut la detecter automatiquement depuis les interfaces, mais une valeur explicite est preferable.

log syslog all envoie tous les messages de log au journal systeme. Consultez-les avec journalctl -u bird -f. Si vous avez besoin d'une sortie detaillee pendant le debogage d'un protocole specifique, ajoutez temporairement debug protocols all;. Retirez-le une fois la session fonctionnelle. La journalisation en mode debug genere un volume eleve et peut remplir votre stockage journal.

Protocol device

protocol device {
    scan time 10;
}

Surveille les changements d'etat des interfaces toutes les 10 secondes. Obligatoire. Sans lui, BIRD ne sait pas quand les interfaces montent ou descendent.

Protocol direct

protocol direct {
    ipv4;
    ipv6;
    interface "dummy0";
    interface "eth0";
}

Importe les routes connectees depuis les interfaces listees. BIRD en a besoin pour la resolution du next-hop. Listez uniquement les interfaces impliquees dans votre configuration BGP.

Protocol kernel

Deux blocs protocol kernel sont necessaires : un pour IPv4, un pour IPv6. Chacun synchronise sa famille d'adresses entre la table de routage de BIRD et la table du noyau Linux.

merge paths on active l'ECMP si vous avez plusieurs upstreams. learn importe les routes existantes du noyau dans BIRD.

Que fait le bloc protocol BGP ?

Le bloc protocol bgp definit une session de peering avec un voisin. Il specifie qui vous etes (local ... as), avec qui vous peerez (neighbor ... as), l'authentification (password) et quelles routes echanger (blocs channel).

Directives principales :

Directive Fonction
local <ip> as <ASN> Votre IP de peering et votre ASN
neighbor <ip> as <ASN> IP de peering et ASN de l'upstream
source address <ip> IP source pour la connexion TCP
hold time 90 Secondes avant de declarer le pair mort (3x keepalive)
keepalive time 30 Intervalle entre les messages keepalive
password "..." Authentification MD5 (RFC 2385)

L'authentification MD5 protege la session BGP contre les resets TCP usurpes et les attaques par injection. Les deux cotes doivent configurer le meme mot de passe. Demandez le secret partage a votre fournisseur.

Comment configurer les canaux dual-stack IPv4 et IPv6 ?

BIRD2 gere IPv4 et IPv6 comme des canaux (channels) separes au sein du meme bloc protocol. Chaque canal a sa propre politique d'import/export :

ipv4 {
    import all;
    export filter export_bgp_v4;
    next hop self;
};

ipv6 {
    import all;
    export filter export_bgp_v6;
    next hop self;
};

import all accepte toutes les routes de l'upstream. En production, vous devriez aussi filtrer les imports. Voir pour des exemples de filtres d'import.

next hop self reecrit l'attribut next-hop vers votre IP de peering. Necessaire quand l'upstream attend que le trafic transite par votre adresse, ce qui est la configuration standard sur un VPS.

Si votre fournisseur utilise des sessions BGP separees pour IPv4 et IPv6 (des IP de voisin differentes par famille d'adresses), divisez-les en deux blocs protocol bgp distincts.

Comment ecrire des filtres d'export pour annoncer uniquement vos prefixes ?

Les filtres d'export controlent quelles routes BIRD envoie a l'upstream. Un filtre d'export mal configure peut laisser passer des routes que vous ne possedez pas, ce qui entrainera la coupure de votre session et potentiellement un appel du NOC de votre upstream.

Le filtre dans la configuration ci-dessus utilise une correspondance de prefixe simple :

define OWN_V4_PREFIX = 203.0.113.0/24;

filter export_bgp_v4 {
    if net = OWN_V4_PREFIX then accept;
    reject;
}

Ceci accepte uniquement le /24 exact. Tout le reste est rejete. Le reject a la fin est le deny par defaut.

Pour plusieurs prefixes, utilisez un set :

define OWN_V4_PREFIXES = [ 203.0.113.0/24, 198.51.100.0/24 ];

filter export_bgp_v4 {
    if net ~ OWN_V4_PREFIXES then accept;
    reject;
}

L'operateur ~ effectue une correspondance dans un ensemble de prefixes (prefix set). Il supporte aussi la notation par plage :

define OWN_V4_PREFIXES = [ 203.0.113.0/24{24,24} ];

Le {24,24} restreint la correspondance a exactement /24. Utilisez {24,28} pour autoriser aussi la desagregation jusqu'a /28 si vous avez besoin d'annoncer des more-specifics pour du traffic engineering.

Pour IPv6, le meme schema s'applique :

define OWN_V6_PREFIXES = [ 2001:db8:1000::/48{48,48} ];

filter export_bgp_v6 {
    if net ~ OWN_V6_PREFIXES then accept;
    reject;
}

Gardez toujours vos filtres d'export aussi stricts que possible. N'annoncez que ce que vous possedez, aux longueurs de prefixe exactes que vous visez. Un reject manquant a la fin de votre filtre fera utiliser a BIRD l'action par defaut du canal, qui peut etre accept. Terminez toujours par un reject explicite.

Vous pouvez tester votre filtre sans l'appliquer :

sudo birdc eval '203.0.113.0/24 ~ [ 203.0.113.0/24 ]'

Ceci retourne TRUE ou FALSE et aide a debugger la logique du filtre avant un rechargement de configuration.

Comment creer une interface dummy persistante pour l'origination de prefixes ?

BGP annonce les prefixes qui existent dans la table de routage. Vous avez besoin d'une interface avec votre prefixe assigne pour que BIRD puisse originer la route. Une interface dummy remplit ce role : elle est toujours active, n'a pas de lien physique et survit aux redemarrages quand elle est configuree via systemd-networkd.

Les commandes ephemeres ip link add sont perdues au redemarrage. Utilisez plutot systemd-networkd.

Creer le fichier .netdev

sudo tee /etc/systemd/network/10-dummy0.netdev > /dev/null << 'EOF'
[NetDev]
Name=dummy0
Kind=dummy
EOF

Creer le fichier .network

sudo tee /etc/systemd/network/10-dummy0.network > /dev/null << 'EOF'
[Match]
Name=dummy0

[Network]
Address=203.0.113.1/32
Address=2001:db8:1000::1/128
EOF

Assignez un seul /32 (ou /128 pour IPv6) de votre prefixe alloue a l'interface dummy. Cette adresse n'a pas besoin d'etre joignable de l'exterieur. Elle existe uniquement pour que BIRD ait une route connectee pour le prefixe.

Appliquer et verifier

sudo systemctl restart systemd-networkd

Attendez quelques secondes, puis verifiez :

ip addr show dummy0

Sortie attendue :

3: dummy0: <BROADCAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000
    link/ether aa:bb:cc:dd:ee:ff brd ff:ff:ff:ff:ff:ff
    inet 203.0.113.1/32 scope global dummy0
       valid_lft forever preferred_lft forever
    inet6 2001:db8:1000::1/128 scope global
       valid_lft forever preferred_lft forever

Le state UNKNOWN pour une interface dummy est normal. Cela signifie que la couche liaison n'a pas de porteuse physique a suivre, mais l'interface est UP et transmet le trafic. L'adresse MAC est generee aleatoirement par systemd-networkd et sera differente sur votre systeme.

Si vous utilisez ifupdown au lieu de systemd-networkd (verifiez avec networkctl status), vous devrez peut-etre activer systemd-networkd d'abord :

sudo systemctl enable --now systemd-networkd

Verifiez que les fichiers sont en place pour le prochain redemarrage :

ls -la /etc/systemd/network/10-dummy0.*
-rw-r--r-- 1 root root  42 Mar 19 12:00 /etc/systemd/network/10-dummy0.netdev
-rw-r--r-- 1 root root  89 Mar 19 12:00 /etc/systemd/network/10-dummy0.network

Comment securiser BGP avec des regles de pare-feu nftables ?

BGP fonctionne sur le port TCP 179. Sans regles de pare-feu, n'importe quel hote sur Internet peut tenter d'ouvrir une session BGP avec votre routeur. Les scanners automatises trouvent un port 179 ouvert en quelques heures apres la mise en ligne d'un VPS. Restreignez le port 179 a vos IP de pairs uniquement.

nftables peut ne pas etre installe par defaut sur Ubuntu 24.04. Installez-le d'abord :

sudo apt-get -y install nftables

Creer le jeu de regles nftables

sudo tee /etc/nftables.d/bgp.conf > /dev/null << 'EOF'
table inet bgp_filter {
    set bgp_peers_v4 {
        type ipv4_addr
        elements = { 198.51.100.1 }
    }

    set bgp_peers_v6 {
        type ipv6_addr
        elements = { 2001:db8::1 }
    }

    chain input {
        type filter hook input priority 0; policy accept;

        # Allow BGP from known peers only
        tcp dport 179 ip saddr @bgp_peers_v4 accept
        tcp dport 179 ip6 saddr @bgp_peers_v6 accept

        # Drop BGP from everyone else
        tcp dport 179 drop
    }
}
EOF

Ajoutez d'autres IP de pairs aux sets au fur et a mesure que vous ajoutez des upstreams. Les sets nommes permettent de mettre a jour les listes de pairs sans reecrire les regles.

Integrer avec votre configuration nftables existante

Si vous avez deja /etc/nftables.conf, incluez les regles BGP :

echo 'include "/etc/nftables.d/bgp.conf"' | sudo tee -a /etc/nftables.conf

Si vous n'avez pas encore configure nftables, creez le repertoire et chargez la configuration :

sudo mkdir -p /etc/nftables.d
sudo systemctl enable --now nftables

enable --now demarre nftables immediatement et s'assure qu'il se charge a chaque demarrage.

Appliquez les regles :

sudo nft -f /etc/nftables.d/bgp.conf

Verifier les regles

sudo nft list table inet bgp_filter

Sortie attendue :

table inet bgp_filter {
	set bgp_peers_v4 {
		type ipv4_addr
		elements = { 198.51.100.1 }
	}

	set bgp_peers_v6 {
		type ipv6_addr
		elements = { 2001:db8::1 }
	}

	chain input {
		type filter hook input priority filter; policy accept;
		tcp dport 179 ip saddr @bgp_peers_v4 accept
		tcp dport 179 ip6 saddr @bgp_peers_v6 accept
		tcp dport 179 drop
	}
}

nft list normalise priority 0 en priority filter et supprime les commentaires. C'est le comportement attendu.

Testez que la regle fonctionne en verifiant l'etat des connexions. Depuis le VPS :

sudo nft list ruleset | grep -c "179"

Ceci devrait retourner un nombre correspondant au nombre de regles port 179 que vous avez creees.

Confirmez aussi que le trafic BGP n'est pas bloque entre vous et votre pair. Les regles ci-dessus n'affectent que les connexions entrantes. BIRD initie les connexions sortantes vers le pair, qui sont gerees par l'entree conntrack established/related. Si vous avez une politique sortante restrictive, ajoutez :

sudo nft add rule inet bgp_filter input ct state established,related accept

Cette regle devrait deja etre dans votre jeu de regles de pare-feu de base. Si ce n'est pas le cas, ajoutez-la avant les regles BGP.

Comment appliquer la configuration BIRD2 ?

Avant de charger une nouvelle configuration, validez-la :

sudo birdc configure check

Sortie attendue :

BIRD 2.18 ready.
Reading configuration from /etc/bird/bird.conf
Configuration OK

S'il y a des erreurs de syntaxe, BIRD indique le numero de ligne et le probleme. Corrigez et reverifiez.

Appliquez la configuration :

sudo birdc configure
BIRD 2.18 ready.
Reading configuration from /etc/bird/bird.conf
Reconfigured

Vous pouvez voir Reconfiguration in progress au lieu de Reconfigured si BIRD traite encore les changements de protocole (comme l'etablissement d'une nouvelle session BGP). Les deux messages sont normaux.

BIRD applique la nouvelle configuration sans redemarrage. Les sessions existantes effectuent une reconfiguration douce (soft reconfiguration) quand c'est possible. Si vous avez change l'IP du voisin ou l'AS local, BIRD redemarre automatiquement le protocole concerne.

Pour les changements de configuration qui ne doivent pas perturber les sessions en cours (modifications de filtres, ajouts de routes statiques), utilisez :

sudo birdc reload upstream1

Ceci reapplique les filtres d'import/export aux routes existantes sans couper la session TCP.

Comment verifier votre session BGP et les annonces de routes ?

Apres avoir applique la configuration, utilisez birdc pour verifier que la session est etablie et que les routes sont annoncees. Ces commandes sont vos outils principaux de debogage.

Commande Ce qu'elle affiche Quand l'utiliser
show protocols Resume de l'etat des protocoles (Established, Active, etc.) Premier controle apres un changement de config
show protocols all upstream1 Details complets de la session, compteurs, timers Debogage d'une session specifique
show route Toutes les routes dans la table de BIRD Verifier les routes recues et statiques
show route export upstream1 Routes envoyees a l'upstream Confirmer que vos prefixes sont annonces
show route for 203.0.113.0/24 Meilleure route pour un prefixe donne Tracer la selection de chemin
show route protocol static_v4 Routes d'un protocole specifique Verifier que les routes statiques sont chargees

Verifier l'etat de la session

sudo birdc show protocols

Sortie attendue quand tout fonctionne :

BIRD 2.18 ready.
Name       Proto      Table      State  Since         Info
device1    Device     ---        up     12:00:00.000
direct1    Direct     ---        up     12:00:00.000
kernel1    Kernel     master4    up     12:00:00.000
kernel2    Kernel     master6    up     12:00:00.000
static_v4  Static     master4    up     12:00:00.000
static_v6  Static     master6    up     12:00:00.000
upstream1  BGP        ---        up     12:00:05.000  Established

L'etat Established signifie que la session BGP est active et que les routes peuvent etre echangees. Tout autre etat indique un probleme.

Verifier les routes exportees

sudo birdc show route export upstream1
BIRD 2.18 ready.
Table master4:
203.0.113.0/24       unicast [static_v4 12:00:00.000] * (200)
	dev dummy0
Table master6:
2001:db8:1000::/48   unicast [static_v6 12:00:00.000] * (200)
	dev dummy0

Vos deux prefixes IPv4 et IPv6 doivent apparaitre ici. Si un prefixe manque, le filtre d'export le rejette.

Verifier les details complets de la session

sudo birdc show protocols all upstream1

Cherchez la ligne Routes: :

  Routes:         2 imported, 0 filtered, 2 exported, 0 preferred

Le nombre exported doit correspondre au nombre de prefixes que vous comptez annoncer.

Verifier depuis l'exterieur

Utilisez un looking glass public pour confirmer que votre prefixe est visible sur Internet. Le NLNOG Looking Glass ou PeeringDB peuvent aider. Recherchez votre prefixe et verifiez :

  • L'AS d'origine correspond au votre
  • Le chemin AS (AS path) passe par votre upstream
  • Aucun statut RPKI invalid n'apparait

Verifiez aussi depuis la table de routage du noyau :

ip route show | grep 203.0.113
ip -6 route show | grep 2001:db8:1000

Vous devriez voir des routes pointant vers l'interface dummy0.

Comment depanner les problemes BGP courants avec BIRD2 ?

La plupart des problemes BGP entrent dans quelques categories. Verifiez-les dans l'ordre.

Reference des etats de session BGP

Etat Signification Quoi verifier
Idle BIRD ne tente pas de se connecter Erreur de configuration, protocole desactive
Connect Connexion TCP en cours Pare-feu bloquant le port 179, mauvaise IP de voisin
Active Connexion TCP echouee, nouvelle tentative Pair injoignable, pare-feu, mauvaise adresse source
OpenSent TCP connecte, en attente de la reponse OPEN Discordance MD5, mauvais ASN cote distant
OpenConfirm OPEN recu, en attente du KEEPALIVE Rarement observe, transition generalement rapide
Established Session active, echange de routes Fonctionnel

Session bloquee en Connect ou Active

Cela signifie que TCP ne peut pas atteindre le port 179 du pair. Verifiez :

# Can you reach the peer at all?
ping -c 3 198.51.100.1

# Is port 179 open on the peer?
nc -zv 198.51.100.1 179

# Are your nftables rules blocking outbound?
sudo nft list ruleset | grep 179

# Check BIRD logs
journalctl -u bird --since "5 minutes ago" --no-pager

Causes frequentes : mauvaise source address dans le bloc BGP, le pair n'a pas encore configure son cote, ou votre pare-feu bloque les connexions sortantes.

Session bloquee en OpenSent

La connexion TCP fonctionne mais le message BGP OPEN est rejete. C'est presque toujours une discordance de mot de passe MD5. Verifiez :

  1. Votre password dans bird.conf correspond exactement a ce que le fournisseur vous a donne (sensible a la casse, attention aux espaces en fin de ligne)
  2. Les deux cotes s'accordent sur l'ASN

Consultez les logs pour les details :

journalctl -u bird | grep -i "error\|md5\|password"

Prefixe absent de show route export

Votre prefixe existe dans la table de BIRD mais le filtre d'export ne l'accepte pas. Deboguez le filtre :

sudo birdc show route 203.0.113.0/24 all

Verifiez la source de la route. Si elle indique [device1] ou [direct1] au lieu de [static_v4], la route statique n'est pas configuree correctement. Le filtre d'export fait la correspondance sur la route, elle doit donc provenir du bon protocole.

sudo birdc show route noexport upstream1

Ceci affiche les routes que le filtre a explicitement rejetees. Si votre prefixe apparait ici, la logique du filtre contient un bug.

Prefixe annonce mais non visible sur un looking glass

Votre export fonctionne mais la route ne se propage pas. Causes possibles :

  • Pas d'enregistrement ROA : votre upstream ou ses pairs filtrent les routes RPKI-invalid. Publiez d'abord les enregistrements ROA
  • Filtrage IRR : votre upstream filtre sur la base des objets IRR (RIPE DB, RADB). Creez ou mettez a jour vos objets route/route6
  • Limite max-prefix : votre upstream peut avoir une limite de prefixes configuree. Contactez-le si vous l'atteignez
  • Delai de propagation : la convergence BGP prend quelques minutes. Attendez 5 a 10 minutes et reverifiez

Lire les logs

BIRD ecrit dans le journal systeme. Pour le depannage en temps reel :

journalctl -u bird -f

Pour les evenements de la derniere heure :

journalctl -u bird --since "1 hour ago" --no-pager

Cherchez les lignes contenant Error, BGP, session ou Received. Elles indiquent exactement ce que BIRD fait et ce qui a mal tourne.

BIRD2 vs BIRD 1.x : notes de migration

Si vous migrez depuis BIRD 1.x, les differences principales sont :

  • Daemon unique : BIRD2 remplace bird et bird6 par un seul processus
  • Syntaxe des canaux : IPv4 et IPv6 sont configures comme des canaux (channels) a l'interieur des blocs protocol, pas comme des protocoles separes
  • Syntaxe des filtres : globalement compatible, mais certaines fonctions ont change de nom. Consultez la documentation BIRD2 pour la reference complete des filtres
  • Fichier de configuration : l'emplacement par defaut est passe de /etc/bird/bird.conf et /etc/bird/bird6.conf a un seul /etc/bird/bird.conf
  • Socket birdc : un seul socket a /run/bird/bird.ctl au lieu de sockets IPv4/IPv6 separes

Prochaines etapes

Avec votre session BGP etablie et vos prefixes annonces, plusieurs choses restent a configurer :

  • Validation RPKI : configurez RTR pour valider les routes entrantes contre les donnees ROA
  • Filtres d'import : filtrez les routes entrantes pour prevenir les fuites de routes et les hijacks
  • Upstreams multiples : ajoutez un second bloc protocol bgp pour la redondance. Utilisez preference pour definir primaire/secondaire
  • BFD : activez le Bidirectional Forwarding Detection pour un basculement en moins d'une seconde entre upstreams
  • Monitoring : exportez les metriques BIRD vers Prometheus avec bird_exporter

Pour le daemon de routage alternatif, voir . Pour le parcours BYOIP complet, commencez par le guide BYOIP.


Copyright 2026 Virtua.Cloud. Tous droits reserves. Ce contenu est une creation originale de l'equipe Virtua.Cloud. Toute reproduction, republication ou redistribution sans autorisation ecrite est interdite.

Prêt à essayer ?

Déployez votre serveur en quelques secondes. Linux, Windows ou FreeBSD.

Voir les offres VPS