critical] Ajout de borg.md
parent
611e83e4f5
commit
83667eefb4
|
@ -1,133 +1,148 @@
|
||||||
# Bird
|
# Bird
|
||||||
|
Bird est un daemon de routage. Il supporte de nombreux protocoles de routages
|
||||||
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
|
||||||
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
|
||||||
notre FAI grace au protocole BGP. C'est donc le seul que je détaillerais ici
|
|
||||||
pour le moment.
|
pour le moment.
|
||||||
|
|
||||||
## Principe
|
## Principe
|
||||||
|
|
||||||
### L'IANA, le RIPE et le CRANS, les IPs et les numéros d'AS
|
### 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
|
||||||
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
|
||||||
(Internet Assigned Number Authority) de se charger de l'allocation des
|
IPs. Elle délègue cependant cette responsabilité à des entités régionales
|
||||||
adresses IPs. Elle délègue cependant cette responsabilité à des entités
|
appelées RIR pour Regional Internet Registry. En Europe, c'est le RIPE (pour
|
||||||
régionales appelées RIR pour Regional Internet Registry. En Europe, c'est le
|
Réseaux IP Européens, cocorico) qui remplit cette office. Les gens à qui un RIR
|
||||||
RIPE (pour Réseaux IP Européens, cocorico) qui remplit cette office. Les gens à
|
alloue des ressources est appelée un LIR pour Local Internet Registery. Et vous
|
||||||
qui un RIR alloue des ressources est appelée un LIR pour Local Internet
|
savez quoi, depuis 2017 le crans est un LIR à part entière \o/. Et le RIPE
|
||||||
Registery. Et vous savez quoi, depuis 2017 le crans est un LIR à part entière
|
(notre RIR) nous a assigné les ressources suivantes :
|
||||||
\o/. Et le RIPE (notre RIR) nous a assigné les ressources suivantes :
|
|
||||||
- 185.230.76.0/22
|
- 185.230.76.0/22
|
||||||
- 2a0c:700::/32
|
- 2a0c:700::/32
|
||||||
- 204515
|
- 204515
|
||||||
|
|
||||||
Les deux premiers éléments de cette liste suivent assez logiquement ce que j'ai
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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é
|
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.
|
dans certains protocoles internet entre AS comme le protocole BGP.
|
||||||
|
|
||||||
### Le protocole BGP
|
### Le protocole BGP
|
||||||
|
Le protocole BGP est un protocole de routage qui permet l'échange de route entre
|
||||||
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
|
||||||
deux AS. TODO
|
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
|
||||||
### La bdd du RIPE
|
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,
|
||||||
TODO
|
c'est à dire celle qui passe par le moins d'AS différent avant d'arriver à bon
|
||||||
|
port.
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
On tire bird2 des repository debian : `sudo apt install bird2`.
|
||||||
On tire bird des repository debian : `sudo apt install bird`.
|
|
||||||
|
|
||||||
## Configuration
|
## Configuration
|
||||||
|
Le logiciel n'inclut pas de page de manuel détaillant les différentes options de
|
||||||
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
|
||||||
configuration mais le [https://bird.network.cz/](site internet de bird) est très
|
|
||||||
bien fourni en explication.
|
bien fourni en explication.
|
||||||
|
|
||||||
Comme le logiciel supporte plusieurs protocole sa configuration est ségmenté en
|
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
|
fonction des différents protocoles configurées en plus de quelques options de
|
||||||
configurations fournis générales.
|
configurations fournis générales.
|
||||||
|
|
||||||
### Options de configurations 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
|
Il est nécessaire de définir l'identifiant du routeur sur le lien. Cet
|
||||||
la directive `listen bgp [address ADDRESS] [port PORT]` où le comportement par
|
identifiant en ipv6 comme en ipv4 doit être une adresse ipv4 qui pointe vers le
|
||||||
défaut est d'écouter sur toutes les adresses et sur le port 179 qui est le port
|
routeur pour assurer son unicité.
|
||||||
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
|
||||||
Le protocole kernel permet de définir la politique que bird va utiliser pour
|
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
|
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
|
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
|
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
|
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
|
scan time permet de régler la fréquence à laquelle bird lira le contenu de la
|
||||||
table de routage du kernel.
|
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 {
|
protocol kernel {
|
||||||
scan time 60;
|
ipv4 {
|
||||||
import none;
|
import none;
|
||||||
export all;
|
export all;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
protocol kernel {
|
||||||
|
ipv6 {
|
||||||
|
import none;
|
||||||
|
export all;
|
||||||
|
};
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### Le protocole device
|
### Le protocole device
|
||||||
C'est pas vraiment un protocole, il permet simplement à bird de lister les
|
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
|
interfaces du routeur.
|
||||||
deux listings des interfaces disponibles.
|
|
||||||
|
|
||||||
```
|
```
|
||||||
protocole device {
|
protocole device {}
|
||||||
scan time 60;
|
|
||||||
}
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### Le protocole static
|
### Le protocole static
|
||||||
Le protocole static permet de définir des routes manuellement. Il est possible
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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,
|
route vers les éléments de ce bloc d'ips. Par exemple,
|
||||||
|
|
||||||
```
|
```
|
||||||
protocol static {
|
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
|
### Le protocol BGP
|
||||||
Comme expliqué au dessus, le protocole BGP permet de faire de l'échange de
|
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
|
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
|
du pair 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
|
préciser avec quelle adresse on veut le contacter. On peut là aussi définir des
|
||||||
qu'on autorise notre numéro d'AS à apparaitre dans un AS path. On peut là aussi
|
filtres d'import et d'exports de routes. Par exemple,
|
||||||
définir des filtres d'import et d'exports de routes. Par exemple,
|
|
||||||
|
|
||||||
```
|
```
|
||||||
protocol bgp zayo {
|
protocol bgp aurore4 {
|
||||||
# Définit le numéro d'AS local et l'ip avec laquelle on souhaite contacter
|
description "BGP4 session with example";
|
||||||
# notre pair (optionel)
|
local 203.0.113.1 as crans_asn;
|
||||||
local 185.230.79.253 as 204515;
|
neighbor 203.0.113.2 as example_asn;
|
||||||
# Permet à notre numéro d'AS d'apparaitre au plus une fois dans l'AS path
|
strict bind;
|
||||||
allow local as 1;
|
|
||||||
# Définit l'adresse et le numero d'AS du pair avec qui on souhaite échanger
|
ipv4 {
|
||||||
# des routes
|
import all;
|
||||||
neighbor 158.255.113.72 as 8218;
|
export where source ~ [ RTS_STATIC ];
|
||||||
import all;
|
};
|
||||||
export all;
|
}
|
||||||
|
|
||||||
|
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 ];
|
||||||
|
};
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
Loading…
Reference in New Issue