Routage
Interfaces
Configuration détaillée du fichier /etc/network/interfaces de la machine de routage.
Boucle locale :
# Boucle locale auto lo iface lo inet loopback
Les adresses de la machine (issues des blocs du FAI) sont définies sur une interface dummy pour que la machine puisse sortir avec d'autres IP que celles d'interco (même si certains semblent considérer qu'on devrait les utiliser pour sortir, WideVOIP les filtre en sortie) :
# Adresses de la machine de routage auto dummy0 iface dummy0 inet6 static address 2a00:5881:8100::1 netmask 128 iface dummy0 inet static address 89.234.141.1 netmask 255.255.255.255
Le VLAN 801 a été proposé par WideVOIP pour accueillir les annonces BGP de ARN et récupérer le transit ARN. Les IP d'interco que WideVOIP a fournies sont utilisées ici :
# VLAN transit de ARN auto eth0.801 iface eth0.801 inet6 static address 2a00:1bf8:600:2:632:6:630:1 netmask 80 iface eth0.801 inet static address 92.43.131.197 netmask 255.255.255.248
Le second port ethernet est relié directement à la machine de services (l'IPv6 de lien local suffit, et le réseau privé IPv4 disparaîtera probablement par la suite) :
# Interco avec la machine de services auto eth1 iface eth1 inet6 auto iface eth1 inet static address 10.0.0.254 netmask 255.255.255.0
Annonces BGP
Après une hésitation entre Quagga et Bird, nous avons tranché pour ce second principalement sur la base de témoignages concernant des problèmes rencontrés avec ce premier.
IPv6
Installer bird6 (version 1.3.7-1 sur wheezy) sur la machine de routage :
# apt-get install bird6
Configuration détaillée du fichier /etc/bird6.conf.
Le router id est utilisé en tant qu'identifiant pour résoudre les conflits des sessions BGP. Il sera utilisé comme un simple entier, mais la convention impose d'utiliser une adresse IP (de son propre bloc) pour en assurer l'unicité. La documentation de bird6 stipule que ça doit être une adresse IPv4 (même pour le BGP IPv6) et qu'il vaut mieux utiliser la plus petite :
router id 92.43.131.197;
Définition des constantes qui serviront par la suite (ici les numéros d'AS) :
define asarn = 60630;
Possibilité d'avoir des journaux en temps réel pour débugguer :
# log "/tmp/bird6.log" all; # debug protocols whichwan;
Définition du range à annoncer :
protocol static static_arn_subnet { # debug all; route 2a00:5881:8100::/40 reject; }
Un filtre est créé par sous-réseau du FAI pour avoir l'assurance qu'il n'y a aucune autre destination de la table de routage qui soit annoncée :
filter arn_subnet { if (net ~ [2a00:5881:8100::/40]) then accept; else reject; }
Le filtre anonyme qui a été utilisé à la place du export all permet de fixer la valeur de l'option krt_prefsrc, destinée à demander à ce que la table de routage soit construite en forçant les sorties directement depuis le routeur (par exemple les mises à jour du système) avec une adresse des blocs du FAI plutôt que l'IP d'interco (conséquence du filtrage en sortie des IP d'interco par WideVOIP) :
protocol kernel { # persist; # Don't remove routes on bird shutdown scan time 20; # Scan kernel routing table every 20 seconds # export all; export filter { krt_prefsrc = 2a00:5881:8100::1; accept; }; } protocol device { scan time 10; # Scan interfaces every 10 seconds }
Configuration BGP, avec le neighbor qui est l'adresse fournie par WideVOIP, correspondant à l'autre bout de l'interco, et l'AS de ce dernier. On retrouve le filtre avec krt_prefsrc malgré que la documentation de Bird ne liste pas cet attribut dans ceux correspondant au protocole bgp (mystère à élucider). Les filtres pour les annonces sont utilisés ici pour conditionner les exports de la table de routage vers le protocole bgp :
protocol bgp whichwan { # debug all; description "upstream whichwan"; local as asarn; neighbor 2a00:1bf8:600:2:632:6:630:61 as 42456; # import all; import filter { krt_prefsrc = 2a00:5881:8100::1; accept; }; export filter arn_subnet; }
IPv4
Installer bird (version 1.3.7-1 sur wheezy) sur la machine de routage :
# apt-get install bird
Configuration du fichier /etc/bird.conf (similaire à la configuration pour IPv6) :
router id 92.43.131.197; define asarn = 60630; # log "/tmp/bird.log" all; # debug protocols whichwan; filter arn_subnet { if (net ~ [89.234.141.0/24]) then accept; else reject; } protocol static static_arn_subnet { # debug all;
route 89.234.141.0/24 reject;
} protocol kernel { # persist; # Don't remove routes on bird shutdown scan time 20; # Scan kernel routing table every 20 seconds # export all; export filter { krt_prefsrc = 89.234.141.1; accept; }; } protocol device { scan time 10; # Scan interfaces every 10 seconds } protocol bgp whichwan { debug all; description "upstream whichwan"; local as asarn; neighbor 92.43.131.193 as 42456; # import all; import filter { krt_prefsrc = 89.234.141.1; accept; }; export filter arn_subnet; }
Validation et tests
Relancer les interfaces :
# service networking restart
Pour vérifier la syntaxe et appliquer les changements de l'un des deux fichiers de configuration (inutile de relancer le service ensuite, sauf s'il y a des modifications sur les filtres, pour refiltrer la table actuelle) de Bird :
# birdc6 BIRD 1.3.7 ready. bird> conf Reading configuration from /etc/bird6.conf Reconfiguration in progress.
# birdc BIRD 1.3.7 ready. bird> conf Reading configuration from /etc/bird.conf Reconfiguration in progress.
Les tables de routage devraient se remplir petit à petit jusqu'à atteindre ces ordres de grandeur :
# ip -6 r | wc -l 13349
# ip -4 r | wc -l 453861
Dans l'autre sens, une visite dans un looking glass devrait faire apparaître petit à petit les AS du FAI aux quatre coins du monde.
Mode routeur
S'assurer que le fichier /etc/sysctl.conf contient bien :
net.ipv6.conf.all.forwarding=1 net.ipv4.ip_forward=1
Activer :
# sysctl -p /etc/sysctl.conf
À faire
Il reste :
- plein de vérifs à ajouter (préfixes réservés, etc.) ;
l'AS et les blocs LDN (dès qu'on les aura) ;le peering EuroGIX (dès qu'on aura les IP d'interco) ;- what else?