tripoli.cloud/bird-lab/run.sh

48 lines
2.3 KiB
Bash
Raw Normal View History

#!/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