Phase 6 (bonus) : bird-lab, BGP+BFD entre namespaces (rtnetlink/Bird)

- Topologie en étoile : racine (AS 65000) en transit entre bird-a
  (AS 65010) et bird-b (AS 65011), namespaces créés par tripoli-netctl
  (Phase 4). Chaque feuille origine une route factice, jamais
  installée dans la table de routage réelle (export none partout) -
  labo pédagogique, ne pilote aucun trafic de production.
- Vérifié en conditions réelles : sessions BGP Established dans les
  deux sens, route de bird-b vue par bird-a avec next-hop = racine
  (transit confirmé, pas un peering direct), sessions BFD Up
  (200ms/200ms), coupure de lien détectée en < 5ms.
- Découverte : les namespaces n'ont aucun pare-feu propre, mais ufw
  côté racine bloquait le retour des paquets BFD (chaque bout envoie
  indépendamment, conntrack ne le reconnaît pas comme un flux BGP/TCP
  existant) - même schéma que Caddy -> tripoli-edge en Phase 2. Règle
  ufw ajoutée par run.sh, retirée par teardown.sh : rien de permanent.
- Pas de service systemd : labo lancé, vérifié, puis proprement démonté
  (processus Bird, namespaces et règle ufw temporaire tous supprimés).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Adam Belkacemi 2026-09-17 01:17:15 +02:00
parent db306433d5
commit 7802c59931
7 changed files with 269 additions and 1 deletions

View file

@ -0,0 +1,35 @@
router id 10.200.10.2;
log "/var/log/bird-lab/bird-a.log" all;
protocol device {
}
protocol kernel {
ipv4 {
export none;
};
}
# Réseau fictif "originé" par ce namespace, pour avoir quelque chose de
# concret à observer traverser le labo par BGP.
protocol static local_net {
ipv4;
route 10.99.10.0/24 blackhole;
}
protocol bfd {
interface "*" {
min rx interval 200ms;
min tx interval 200ms;
};
}
protocol bgp to_root {
local 10.200.10.2 as 65010;
neighbor 10.200.10.1 as 65000;
bfd on;
ipv4 {
import all;
export all;
};
}

View file

@ -0,0 +1,33 @@
router id 10.200.11.2;
log "/var/log/bird-lab/bird-b.log" all;
protocol device {
}
protocol kernel {
ipv4 {
export none;
};
}
protocol static local_net {
ipv4;
route 10.99.11.0/24 blackhole;
}
protocol bfd {
interface "*" {
min rx interval 200ms;
min tx interval 200ms;
};
}
protocol bgp to_root {
local 10.200.11.2 as 65011;
neighbor 10.200.11.1 as 65000;
bfd on;
ipv4 {
import all;
export all;
};
}

45
bird-lab/config/root.conf Normal file
View file

@ -0,0 +1,45 @@
router id 10.200.10.1;
log "/var/log/bird-lab/root.log" all;
protocol device {
}
protocol direct {
interface "*";
}
# Rien n'est installé dans la table de routage réelle du noyau : ce
# labo ne doit rien changer au routage effectif de la machine qui sert
# tripoli-edge/tripoli-api en production.
protocol kernel {
ipv4 {
export none;
};
}
protocol bfd {
interface "*" {
min rx interval 200ms;
min tx interval 200ms;
};
}
protocol bgp bird_a {
local 10.200.10.1 as 65000;
neighbor 10.200.10.2 as 65010;
bfd on;
ipv4 {
import all;
export all;
};
}
protocol bgp bird_b {
local 10.200.11.1 as 65000;
neighbor 10.200.11.2 as 65011;
bfd on;
ipv4 {
import all;
export all;
};
}