BGP

La version supportée est BGP v4 pour IPv4 et IPv6.
Voici ci-dessous la configuration « BGP simple » :

La configuration « BGP_simple » est implémentée de la façon suivante :

sns_log off;   # default is "no extra log"

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
	ipv4 {
		export all;      # Default is export none
		preference 254;  # Protect kernel routes with high preference
	};
	learn;           # Learn all alien routes from the kernel
}

protocol  device {
	scan time 10;    # Scan interfaces every 10 seconds
}

protocol  direct {
	interface "em3";
}

protocol bgp MyBGP {
	description  "My 1st BGP uplink";
	local as 65065;
	neighbor 100.100.100.100 as 65001;
	multihop 5;
	hold time 180;
	keepalive time 60;
	ipv4 {
		import all;
		export where source = RTS_DEVICE;
	};
	default bgp_local_pref 100;
	source address  200.200.200.200;
}

# This pseudo-protocol is used to configure static routes.
protocol static MyStaticRoutes {
	ipv4;
}

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.

Autoriser le protocole BGP dans la politique de filtrage

Des règles de filtrage sont nécessaires pour autoriser les flux de routage BGP vers et depuis le firewall :

Vérifier le bon fonctionnement du routage dynamique BGP

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

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?]

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 IPv6). Vous devez également impérativement ajouter la directive "source address" et préciser l'adresse IP de l'interface utilisée pour réaliser cette authentification.

Par exemple :

protocol bgp MyBGP {
	description  "My 1st BGP uplink";
	local as 65065;
	neighbor 100.100.100.100 as 65001;
	password "very_secret";
	multihop 5;
	hold time 180;
	keepalive time 60;
	ipv4 {
		import all;
		export where source = RTS_DEVICE;
	};
	default bgp_local_pref 100;
	source address  200.200.200.200;
}

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

Cas d'une configuration en haute disponibilité (cluster)

En cas d'utilisation du protocole de routage dynamique BGP sur un cluster de firewalls SNS, et pour permettre au voisin BGP de fermer proprement une session BGP en cas de bascule au sein du cluster, il est utile de définir une instance BFD dans la configuration BIRD :

protocol bfd mybfdsession {
neighbor myneighborip;
}

Dans cet exemple :

protocol bfd mybfdsession {
neighbor 100.100.100.100;
}

Et d'appeler cette instance dans la configuration BGP de la manière suivante :

protocol bgp MyBGP {

bfd graceful;
connect retry time 5;

}