[tools] Ajout de bird.md

ceph
_shirenn 2021-07-20 23:54:30 +02:00
parent c61e0604b5
commit 330bc2c12c
1 changed files with 133 additions and 0 deletions

133
tools/bird.md 100644
View File

@ -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;
}
```