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; };
 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: 00---00
Export updates:1103---8
Export withdraws:0---------0
bird>
 

Affichage des routes apprises :


bird> show route primary protocol MyRIP
192.168.97.0/24via 10.200.45.250 on eth0 [MyRIP 10:29:19] ! (120/2)
1.1.9.0/24via 10.200.45.250 on eth0 [MyRIP 10:29:19] * (120/2)
1.1.8.0/24via 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 IDPri State DTime Interface

Router IP

192.168.97.1031full/dr00:34em4 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.103501 8000000a ec8a
0005 172.16.0.255 192.168.97.2191150 80000001 81b6
0005 0.0.0.0 192.168.97.2191150 80000001 37f1
Area

0.0.0.0

    
Type LS ID Router Age Sequence Checksum
0001 192.168.97.103192.168.97.103455 8000000a 2254
0002 192.168.97.103 192.168.97.103456 80000006 9384
0001 192.168.97.219192.168.97.2191144 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

En version2, l’interface d’administration web permet de configurer les interfaces de type loopback via le module 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 Routage, onglet 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
router1BGP master up 12:47Established

bird>

 

Les routes sont bien reçues du voisin :


bird> show route protocol router1
100.100.100.100/32via 192.168.97.101 on em0 [router1 13:09 from 100.100.100.100]
(100/?) [AS65001?]    
2.2.2.0/24via 192.168.97.101on em0 [router1 13:09 from 100.100.100.100]
*(100/?)[AS65001?]    
2.2.4.0/24via 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.


@router1:~$ show ip bgp
BGP table version is 0, local router ID is 2.2.2.2
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
 r RIB-failure,S Stale,R Removed
Origin codes: i - IGP, e - EGP, ? - incomplete
 
Network Next Hop Metric LocPrf Weight Path
*> 2.2.2.0/240.0.0.0132768?
*> 2.2.4.0/24 0.0.0.0132768?
*> 100.100.100.100/320.0.0.0 132768?
*> 172.16.0.0/24200.200.200.200 065065 i
*> 192.168.97.0 0.0.0.0132768?
Total number of prefixes 5
@router1:~$
 

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 d’une directivedes directives"password" et "setkey no" 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";
  setkey no;

}

 

 

Il est ensuite nécessaire de déclarer cette association de sécurité (SA : Security Association) dans le fichier ConfigFiles/Bird/global au sein de la section [BGPAuth]. Cette section unique regroupe les associations de sécurité IPv4 et IPv6. Chaque SA y est décrite sous la forme d’une ligne structurée comme suit (séparation des champs par des virgules et sans espace):


[BGPAuth]
IP_routeur_local,IP_routeur_distant1,mot_de_passe_1
IP_routeur_local,IP_routeur_distant2,mot_de_passe_2

 

Dans notre exemple :


[BGPAuth]
100.100.100.100,200.200.200.200,very_secret

NOTE
Les mots de passe ne doivent pas contenir d’espace ni de signe égal (‘=’).

 

La commande showSAD permet de visualiser les SA de BGP (mais aussi du protocole IPSec). Le champ « tcp mode=any » indique une SA relative à l’authentification BGP ; le champ « A : tcp-md5 » indique pour sa part le type d’authentification utilisée.


showSAD
200.200.200.200 100.100.100.100
 tcp mode=any spi=4096(0x00001000) reqid=0(0x00000000)
 A: tcp-md5 32383738 35
 seq=0x00000000 replay=0 flags=0x00000040 state=mature
 created: Apr 22 12:59:49 2014 current: Apr 22 12:59:53 2014
 diff: 4(s) hard: 0(s) soft: 0(s)
 last: Apr 22 12:59:52 2014 hard: 0(s) soft: 0(s)
 current: 0(bytes) hard: 0(bytes) soft: 0(bytes)
 allocated: 1 hard: 0 soft: 0
 sadb_seq=1 pid=6330 refcnt=1
100.100.100.100 200.200.200.200
 tcp mode=any spi=4096(0x00001000) reqid=0(0x00000000)
 A: tcp-md5 32383738 35
 seq=0x00000000 replay=0 flags=0x00000040 state=mature
 created: Apr 22 12:59:49 2014 current: Apr 22 12:59:53 2014
 diff: 4(s) hard: 0(s) soft: 0(s)
 last: hard: 0(s) soft: 0(s)
 current: 0(bytes) hard: 0(bytes) soft: 0(bytes)
 

allocated: 0 hard: 0 soft: 0

 sadb_seq=0 pid=6330 refcnt=1