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 :

Exemple de configuration avec une route statique

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 :

Affichage des interfaces virtuelles 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" :

Déclaration de route statique vers la loopback distante

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 (‘=’).