#!/usr/bin/env bash # Labo BGP/BFD un-seul-poste : deux namespaces (bird-a, bird-b) créés par # tripoli-netctl, chacun relié au namespace racine, trois instances Bird # qui échangent des routes par BGP avec BFD pour la détection rapide de # panne. Racine = AS 65000, transit entre bird-a (AS 65010) et bird-b # (AS 65011) - une topologie en étoile, pas un maillage complet. # # À exécuter en root. Ne touche à AUCUN service de production : les # routes échangées ici ne sont jamais installées dans la table de # routage réelle du noyau (voir `export none;` dans chaque config). set -euo pipefail NETCTL=/opt/tripoli-src/target/debug/tripoli-netctl CONFIG_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/config" && pwd)" mkdir -p /var/log/bird-lab /run/bird-lab /etc/bird-lab cp "$CONFIG_DIR"/*.conf /etc/bird-lab/ echo "--- création des namespaces (tripoli-netctl) ---" "$NETCTL" create bird-a --subnet-id 10 "$NETCTL" create bird-b --subnet-id 11 # Les namespaces bird-a/bird-b n'ont aucun pare-feu (netfilter y est # vierge - seul le namespace racine a une politique ufw), mais leurs # paquets BFD, une fois arrivés côté racine, ne sont PAS reconnus comme # le retour d'une connexion existante par conntrack (chaque bout envoie # sur son propre port éphémère, ce n'est pas un flux TCP bidirectionnel # comme BGP) : ufw les bloque par défaut, exactement comme il avait # fallu une règle dédiée pour laisser Caddy joindre tripoli-edge en # Phase 2. Règle temporaire, retirée par teardown.sh. ufw allow from 10.200.0.0/16 to any port 3784 proto udp comment 'bird-lab : BFD (labo, temporaire)' echo "--- démarrage des instances Bird ---" bird -c /etc/bird-lab/root.conf -s /run/bird-lab/root.ctl ip netns exec bird-a bird -c /etc/bird-lab/bird-a.conf -s /run/bird-lab/bird-a.ctl ip netns exec bird-b bird -c /etc/bird-lab/bird-b.conf -s /run/bird-lab/bird-b.ctl sleep 3 echo "--- sessions BGP (racine) ---" birdc -s /run/bird-lab/root.ctl show protocols all bird_a birdc -s /run/bird-lab/root.ctl show protocols all bird_b echo "--- routes vues par bird-a (doit inclure 10.99.11.0/24, apprise via la racine) ---" birdc -s /run/bird-lab/bird-a.ctl show route echo "--- routes vues par bird-b (doit inclure 10.99.10.0/24, apprise via la racine) ---" birdc -s /run/bird-lab/bird-b.ctl show route