diff --git a/tools/bird.md b/tools/bird.md new file mode 100644 index 0000000..442116f --- /dev/null +++ b/tools/bird.md @@ -0,0 +1,133 @@ +# Bird + +Bird est un daemon de routage. Il supporte de nombreux protocoles de routages +comme BGP and OSPF. Au crans on l'utilise pour faire de l'échange de route avec +notre FAI grace au protocole BGP. C'est donc le seul que je détaillerais ici +pour le moment. + +## Principe + +### L'IANA, le RIPE et le CRANS, les IPs et les numéros d'AS + +Après l'adoption du protocole IP, il a été décidé que ce serait à l'IANA +(Internet Assigned Number Authority) de se charger de l'allocation des +adresses IPs. Elle délègue cependant cette responsabilité à des entités +régionales appelées RIR pour Regional Internet Registry. En Europe, c'est le +RIPE (pour Réseaux IP Européens, cocorico) qui remplit cette office. Les gens à +qui un RIR alloue des ressources est appelée un LIR pour Local Internet +Registery. Et vous savez quoi, depuis 2017 le crans est un LIR à part entière +\o/. Et le RIPE (notre RIR) nous a assigné les ressources suivantes : + - 185.230.76.0/22 + - 2a0c:700::/32 + - 204515 + +Les deux premiers éléments de cette liste suivent assez logiquement ce que j'ai +dit plus haut. Le RIPE est censé assigné au LIR européen des ressources ip. Il +nous a donc délégué un `/22` d'IPv4 et un `/32` d'IPv6 (aussi appellée une +mole). Mais le troisième élément semble pour le moment plus absconts. En fait +l'IANA et les RIR ne se contente pas de fournir des adresses IP mais toutes les +ressources relatif à l'internet. En particulier, le dernier élément de notre +liste est un numéro d'AS pour autonomous system. Un AS est un réseaux +informatique qui opère sa propre politique de routage interne. C'est le cas au +crans. Un numéro d'AS est identifiant unique alloué par un RIR et est utilisé +dans certains protocoles internet entre AS comme le protocole BGP. + +### Le protocole BGP + +Le protocole BGP est un protocole de routage qui permet l'échange de route entre +deux AS. TODO + +### La bdd du RIPE + +TODO + +## Installation + +On tire bird des repository debian : `sudo apt install bird`. + +## Configuration + +Le logiciel n'inclut pas de page de manuel détaillant les différentes options de +configuration mais le [https://bird.network.cz/](site internet de bird) est très +bien fourni en explication. + +Comme le logiciel supporte plusieurs protocole sa configuration est ségmenté en +fonction des différents protocoles configurées en plus de quelques options de +configurations fournis générales. + +### Options de configurations générales +Les sockets sont définis au niveau de la configuration générale du logiciel avec +la directive `listen bgp [address ADDRESS] [port PORT]` où le comportement par +défaut est d'écouter sur toutes les adresses et sur le port 179 qui est le port +prévue par l'IANA pour le protocole BGP. Il est aussi nécessaire de définir +l'identifiant du routeur sur le lien. Cet identifiant en ipv6 comme en ipv4 doit +être une adresse ipv4 qui pointe vers le routeur pour assurer son unicité. + +### Le protocole kernel +Le protocole kernel permet de définir la politique que bird va utiliser pour +inserer des routes dans le kernel. Les options import et export permettent de +définir quels routes bird va importer de la table de routage et exporter vers la +table de routage. Au crans, on choisit assez simplement d'insérer toutes les +routes que bird connait dans le noyau et de ne rien importer du noyau. L'option +scan time permet de régler la fréquence à laquelle bird lira le contenu de la +table de routage du kernel. + +``` +protocol kernel { + scan time 60; + import none; + export all; +} +``` + +### Le protocole device +C'est pas vraiment un protocole, il permet simplement à bird de lister les +interfaces du routeur. L'option `scan time` permet de régler la fréquence entre +deux listings des interfaces disponibles. + +``` +protocole device { + scan time 60; +} +``` + +### Le protocole static +Le protocole static permet de définir des routes manuellement. Il est possible +de définir plusieurs types de routes mais au crans on n'en définit que d'un seul +type : les routes reject. Le comportement de ces routes est différent selon s'il +est inséré dans le kernel où s'il est partagé via un protocole de partage de +routes. Dans le premier cas, il dit au kernel assez litteralement de jetter tous +les paquets vers cette route, comme le kernel choisi la route de plus long +préfixe qui correspond à la destination cela revient à dire au routeur de jetter +les paquets que le routeur ne sait pas joindre dans le bloc d'ips. Cependant +dans un protocole d'échange de routes, il signifie que le routeur connait une +route vers les éléments de ce bloc d'ips. Par exemple, + +``` +protocol static { + route 185.230.76.0/22 reject; +} +``` + +### Le protocol BGP +Comme expliqué au dessus, le protocole BGP permet de faire de l'échange de +routes entre différents AS. Il faut spécifier notre numéro d'AS, le numéro d'AS +du paire et l'adresse sur laquelle on souhaite le contacter. Il est possible de +préciser avec quelle adresse on peut le contacter et régler le nombre de fois +qu'on autorise notre numéro d'AS à apparaitre dans un AS path. On peut là aussi +définir des filtres d'import et d'exports de routes. Par exemple, + +``` +protocol bgp zayo { + # Définit le numéro d'AS local et l'ip avec laquelle on souhaite contacter + # notre pair (optionel) + local 185.230.79.253 as 204515; + # Permet à notre numéro d'AS d'apparaitre au plus une fois dans l'AS path + allow local as 1; + # Définit l'adresse et le numero d'AS du pair avec qui on souhaite échanger + # des routes + neighbor 158.255.113.72 as 8218; + import all; + export all; +} +```