Configurations simples
RIP
La version supportée est RIPv2.
Voici ci-dessous la configuration « RIP_simple ».
On configure une route par défaut et une route statique vers 100.100.100.100/32 :
On configure RIPv2 en spécifiant « multicast » comme mode RIP associé à l’interface « em0 ». Les requêtes d’envoi des tables demandées par les voisins sont honorées.
router id 192.168.97.219; |
||
protocol kernel { | ||
persist; | # Don't remove routes on bird shutdown | |
scan time 20; | # Scan kernel routing table every 20 seconds | |
export all; | # Default is export none | |
learn; | # Learn all alien routes from the kernel | |
preference 254; | # Protect kernel routes with a high preference | |
} | ||
protocol device { | ||
scan time 10; | # Scan interfaces every 10 seconds | |
} | ||
filter ripexport { | ||
if (net = 0.0.0.0/0) || (net = 100.100.100.100/32) | ||
then accept; | ||
else reject; | ||
} | ||
protocol rip MyRIP { | ||
debug all; | ||
interface "em0" { | ||
mode multicast; | ||
authentication none; | ||
}; | ||
honor always; | ||
authentication none; | ||
import all; | ||
export filter ripexport; | ||
} |
Affichage de l’état de l’instance de protocole :
bird> show protocols all MyRIP |
|||||
name | proto | table | state | since | info |
MyRIP | RIP | master | up | 10:08:56 | |
Preference: 120 | |||||
Input filter: ACCEPT | |||||
Output filter: ripexport | |||||
Routes: 4 imported, 5 exported, 3 preferred | |||||
Route change stats: | received | rejected | filtered | ignored | accepted |
Import updates: | 147 | 0 | 0 | 140 | 7 |
Import withdraws: | 0 | 0 | --- | 0 | 0 |
Export updates: | 11 | 0 | 3 | --- | 8 |
Export withdraws: | 0 | --- | --- | --- | 0 |
bird> |
Affichage des routes apprises :
bird> show route primary protocol MyRIP |
||||||
192.168.97.0/24 | via 10.200.45.250 on eth0 [MyRIP 10:29:19] ! (120/2) | |||||
1.1.9.0/24 | via 10.200.45.250 on eth0 [MyRIP 10:29:19] * (120/2) | |||||
1.1.8.0/24 | via 10.200.45.250 on eth0 [MyRIP 10:29:19] * (120/2) |
Voici ci-dessous les routes reçues par le voisin. Notez que la route par défaut est reçue. L’export de cette route est en effet normalement rejeté par les routeurs du marché. Ici, il est nécessaire de le filtrer explicitement.
bird> show route primary protocol MyRIP
0.0.0.0/0 via 192.168.97.219 on eth0 [MyRIP 10:36] * (120/2)
100.100.100.100/32 via 192.168.97.101 on eth0 [MyRIP 10:36 from 192.168.97.219] * (120/2)
OSPF
Les versions supportées sont OSPFv2 pour IPv4 et OSPFv3 pour IPv6.
Voici ci-dessous la configuration « OSPF_simple » :
Elle consiste à déployer une aire 0 sur un LAN où l’on désigne explicitement un voisin éventuel. Toutes les routes sont importées d’OSPF. On redistribue dans OSPF la route du sous-réseau directement relié à l'interface em3 (172.16.0.0/24), ainsi que la route par défaut.
router id 192.168.97.219; |
||
protocol kernel { | ||
persist; | # Don't remove routes on bird shutdown | |
scan time 20; | # Scan kernel routing table every 20 seconds | |
export all; | # Default is export none | |
learn; | # Learn all alien routes from the kernel | |
preference 254; | # Protect kernel routes with a high preference | |
} | ||
protocol device { | ||
scan time 10; | # Scan interfaces every 10 seconds | |
} | ||
protocol direct { | ||
interface "em3"; | ||
} | ||
filter ospfexport { | ||
if (source = RTS_DEVICE) || (net = 0.0.0.0/0) | ||
then accept; | ||
else reject; | ||
} | ||
protocol ospf MyOSPF { | ||
export filter ospfexport; | ||
import all; | ||
area 0.0.0.0 { | ||
stub no; | ||
interface "em4" { | ||
type broadcast; | ||
neighbors { | ||
192.168.97.103 eligible; | ||
}; | ||
}; | ||
}; | ||
} |
NOTE
Il est conseillé de positionner le paramètre "priority 0" dans la section interface de la configuration du noeud OSPF afin de désactiver la participation du firewall aux élections pour les rôles de Designated Router / Backup Designated Router.
La commande suivante indique que le voisinage est bien établi (indiqué par l’état « full »).
Le voisin est déclaré comme « Designated Router » (indiqué par l’état « dr ») :
bird> show ospf neighbors |
|||||
MyOSPF: | |||||
Router ID | Pri | State | DTime | Interface |
Router IP |
192.168.97.103 | 1 | full/dr | 00:34 | em4 | 192.168.97.103 |
bird> |
Routes reçues:
bird> show route protocol MyOSPF
3.3.3.3/32 via 192.168.97.103 on em4 [MyOSPF 16:17:38] * E2 (150/10/10000) [192.168.97.103]
192.168.97.0/24 dev em4 [MyOSPF 16:15:43] * I (150/10) [192.168.97.219]
bird>
On peut afficher la topologie OSPF :
bird> show ospf topology |
||||
area 0.0.0.0 | ||||
router 192.168.97.103 | ||||
distance 10 | ||||
network 192.168.97.0/24 metric 10 | ||||
router 192.168.97.219 | ||||
distance 0 | ||||
network 192.168.97.0/24 metric 10 | ||||
network 192.168.97.0/24 | ||||
dr 192.168.97.103 | ||||
distance 10 | ||||
router 192.168.97.103 | ||||
router 192.168.97.219 | ||||
bird> |
Ainsi que la base de données LSA :
bird> show ospf lsadb |
|||||
Global | |||||
Type | LS ID | Router | Age | Sequence | Checksum |
0005 | 3.3.3.3 | 192.168.97.103 | 501 | 8000000a | ec8a |
0005 | 172.16.0.255 | 192.168.97.219 | 1150 | 80000001 | 81b6 |
0005 | 0.0.0.0 | 192.168.97.219 | 1150 | 80000001 | 37f1 |
Area |
0.0.0.0 |
||||
Type | LS ID | Router | Age | Sequence | Checksum |
0001 | 192.168.97.103 | 192.168.97.103 | 455 | 8000000a | 2254 |
0002 | 192.168.97.103 | 192.168.97.103 | 456 | 80000006 | 9384 |
0001 | 192.168.97.219 | 192.168.97.219 | 1144 | 8000041b | 0bf8 |
bird> |
NOTE
Notez que le type de LSA est présenté à gauche alors qu’il sert généralement de délimiteur horizontal dans les conventions d’affichage traditionnelles.
BGP
Configuration « BGP_simple »
La version supportée est BGPv4 pour IPv4 et IPv6.
Voici ci-dessous la configuration « BGP simple » :
La configuration « BGP_simple » est implémentée de la façon suivante :
router id 192.168.97.219; |
||
protocol kernel { | ||
persist; | # Don't remove routes on bird shutdown | |
scan time 20; | # Scan kernel routing table every 20 seconds | |
export all; | # Default is export none | |
learn; | # Learn all alien routes from the kernel | |
preference 254; | # Protect kernel routes with a high preference | |
} | ||
protocol device { | ||
scan time 10; | # Scan interfaces every 10 seconds | |
} | ||
protocol direct { | ||
interface "em3"; | ||
} | ||
protocol | bgp router1 { | |
description "My 1st BGP uplink"; | ||
local as 65065; | ||
neighbor 100.100.100.100 as 65001; | ||
multihop 5; | ||
hold time 180; | ||
keepalive time 60; | ||
export where source = RTS_DEVICE; | ||
import all; | ||
default bgp_local_pref 100; | ||
source address 200.200.200.200; | ||
} |
Explications
Contrairement à la majorité des routeurs du marché, il est nécessaire de spécifier l’AS local pour chaque instance BGP.
Selon les bonnes pratiques, on monte cette session eBGP entre des interfaces loopbacks et non pas les interfaces physiques. Il est donc nécessaire de configurer l’IP de la loopback locale en question (200.200.200.200/32), de spécifier cette adresse comme source et une route statique vers la loopback du voisin.
Interfaces virtuelles Loopback
L’interface d’administration web permet de configurer les interfaces de type loopback via le module Configuration > Réseau > Interfaces virtuelles, onglet Loopback :
Il est conseillé de déclarer la route statique vers la loopback distante sur le firewall en dehors de la configuration BIRD, via le module Configuration > Réseau > Routage, onglets Routes statiques, afin d'éviter que le trafic BGP soit bloqué par des alarmes "Usurpation d'adresse IP" :
A nouveau, on sélectionne seulement le sous-réseau 172.16.0.0/24 relié directement à l'interface em3 comme route à annoncer à nos voisins.
Ici on a défini un filtre d'export anonyme, directement dans l'instruction "export", grâce au mot-clé "where". Ce filtre d'export sélectionne les routes dont la source est RTS_DEVICE, c'est-à-dire les routes obtenues par le pseudo-protocole direct.
La valeur du hold-time est spécifiée à 180s, valeur habituelle du marché. BIRD implémente par défaut 240s. Il n’est pas nécessaire de spécifier la valeur du délai de keepalive (calculé à 1/3 du hold-time) mais nous le mentionnons explicitement pour plus de lisibilité. De même pour la local-preference par défaut.
La commande « show protocols » ci-dessous confirme que la session est bien fonctionnelle.
bird> show protocols router1 |
|||||
name | proto | table | state | since | info |
router1 | BGP | master | up | 12:47 | Established |
bird> |
Les routes sont bien reçues du voisin :
bird> show route protocol router1 |
||||
100.100.100.100/32 | via | 192.168.97.101 | on em0 | [router1 13:09 from 100.100.100.100] |
(100/?) [AS65001?] | ||||
2.2.2.0/24 | via | 192.168.97.101 | on em0 | [router1 13:09 from 100.100.100.100] |
*(100/?)[AS65001?] | ||||
2.2.4.0/24 | via | 192.168.97.101 | on em0 | [router1 13:09 from 100.100.100.100] |
*(100/?)[AS65001?] | ||||
bird> |
Sur le voisin BGP on reçoit bien la route annoncée et libérée par le filtre. La route 1.1.1.1/32 est pour sa part, effectivement bloquée.
Authentification
Il est possible de mettre en œuvre une authentification TCP-MD5 entre routeurs BGP au sein de BIRD.
Cette méthode permet ainsi la protection des sessions BGP par authentification des trames dans l’entête TCP conformément à la RFC2385.
Cela se traduit par l’ajout de la directive "password" dans la configuration du routeur BGP au sein des fichiers /usr/Firewall/ConfigFiles/Bird/bird.conf (routage dynamique des paquets IPv4) et /usr/Firewall/ConfigFiles/Bird/bird6.conf (routage dynamique des paquets IPv6). Par exemple :
protocol bgp |
|
{ | |
local as 65065; | |
neighbor 100.100.100.100 as 65001; | |
export where source = RTS_DEVICE; | |
import all; | |
source address 200.200.200.200 ; | |
password "very_secret"; | |
} |
NOTE
Les mots de passe ne doivent pas contenir d’espace ni de signe égal (‘=’).