From 83667eefb4f83f5372e8572a9cc20669e24c1178 Mon Sep 17 00:00:00 2001 From: shirenn Date: Wed, 3 Aug 2022 17:05:08 +0200 Subject: [PATCH] critical] Ajout de borg.md --- critical/networking/bird.md | 187 +++++++++++++++++++----------------- 1 file changed, 101 insertions(+), 86 deletions(-) diff --git a/critical/networking/bird.md b/critical/networking/bird.md index 442116f..712403a 100644 --- a/critical/networking/bird.md +++ b/critical/networking/bird.md @@ -1,133 +1,148 @@ # 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 +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 : +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é +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 +Le protocole BGP est un protocole de routage qui permet l'échange de route entre +deux AS. J'avoue avoir un peu la flemme de rentrer dans les détails de comment +marche le protocole (si ça vous intéresse aller lire la RFC). Mais l'idée +générale est que deux AS pairs dans le réseaux vont s'échanger des routes qui +décrivent ce qu'ils sont capables d'atteindre. Si un AS recoit deux chemins +différents pour la même route, il choisira celle qui a l'AS path le plus court, +c'est à dire celle qui passe par le moins d'AS différent avant d'arriver à bon +port. ## Installation - -On tire bird des repository debian : `sudo apt install bird`. +On tire bird2 des repository debian : `sudo apt install bird2`. ## 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 +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 +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é. +Il est 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. +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. Il est possible d'être plus précis⋅e sur les routes +importé et exporté du protocol en utilisant des filtres. ``` protocol kernel { - scan time 60; - import none; - export all; + ipv4 { + import none; + export all; + }; +} + +protocol kernel { + ipv6 { + 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. +C'est pas vraiment un protocole, il permet simplement à bird de lister les +interfaces du routeur. ``` -protocole device { - scan time 60; -} +protocole device {} ``` ### 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 +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; + ipv4; + route 185.230.76.0/22 reject; +} + +protocol static { + ipv6; + route 2a0c:700::/32 unreachable; } ``` ### 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, +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 pair et l'adresse sur laquelle on souhaite le contacter. Il est possible de +préciser avec quelle adresse on veut le contacter. 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; +protocol bgp aurore4 { + description "BGP4 session with example"; + local 203.0.113.1 as crans_asn; + neighbor 203.0.113.2 as example_asn; + strict bind; + + ipv4 { + import all; + export where source ~ [ RTS_STATIC ]; + }; +} + +protocol bgp aurore6 { + description "BGP6 session with example"; + local 2001:db8:28::1 as crans_asn; + neighbor 2001:db8::28::2 as example_asn; + strict bind; + + ipv6 { + import all; + export where source ~ [ RTS_STATIC ]; + }; } ```