BGP avec Windows Server

Dans cet article, nous allons voir la configuration du protocole BGP avec la version Windows Server 2016 (également disponible sur Windows Server 2019) de Microsoft.

Ainsi, il est possible de configurer du routage BGP sur votre serveur et de partager des routes par le protocole de routage dynamique Border Gateway Protocol 4 (BGP4).

Ceci permet notamment de faire du routage sur l’hôte « routing on the host », ou sur les machines virtuelles installées sur votre hyperviseur Windows. Ceci permet d’ouvrir des horizons très intéressants pour vos topologies réseau.

À noter enfin que, selon mes recherches, Windows ne supporte pas le MD5 sur les sessions BGP.

Installation

Pour commencer, il faut installer les fonctionnalitées Remote Access, RSAT Remote Access Powershell et Routing en Powershell. Faites une élévation de privilège puis passez la commande Powershell suivante

Install-WindowsFeature RemoteAccess,RSAT-RemoteAccess-PowerShell,Routing

Activez le routage sur le serveur avec la commande suivante :

Install-RemoteAccess -VpnType RoutingOnly
Votre routeur BGP est prêt !

Configuration

Puis on créer un routeur BGP avec la commande suclivante

Add-BgpRouter -BgpIdentifier 172.16.30.11 -LocalASN 65534

Puis on ajoute un peer iBGP avec la commande suivante

Add-BgpPeer -LocalIPAddress 172.16.30.10 -PeerIPAddress 172.16.30.11 -PeerASN 65534 -Name SRV02
L’état est « Connecting » car l’autre serveur n’est pas encore configuré

Lorsque l’on configure le routeur et on ajoute la session BGP sur l’autre serveur la connexion s’établie

Add-BgpRouter -BgpIdentifier 172.16.30.11 -LocalASN 65534

Add-BgpPeer -LocalIPAddress 172.16.30.11 -PeerIPAddress 172.16.30.10 -PeerASN 65534 -Name SRV01
Connexion établie (depuis SRV02)
Connexion établie (depuis SRV01)

On peut ensuite ajouter des routes à annoncer. Contrairement à ce que vous connaissez certainement du BGP, il n’y a pas besoin de créer de null route dummy route pour que Windows annonce une route. Il annonce toutes les routes souhaitées sans même que celles-ci ne soient présentent dans sa table de routage.

Depuis SRV01, nous allons ajouter 8 routes /24, de 192.168.96.0 à 192.168.103.0/24

Add-BgpCustomRoute -Network 192.168.96.0/24
Add-BgpCustomRoute -Network 192.168.97.0/24
Add-BgpCustomRoute -Network 192.168.98.0/24
Add-BgpCustomRoute -Network 192.168.99.0/24
Add-BgpCustomRoute -Network 192.168.100.0/24
Add-BgpCustomRoute -Network 192.168.101.0/24
Add-BgpCustomRoute -Network 192.168.102.0/24
Add-BgpCustomRoute -Network 192.168.103.0/24

Nous allons vérifier depuis SRV02 si celles-ci sont bien reçues

Vérifications des routes depuis SRV02

Nous pouvons également résumer les routes ci-dessous avec cette commande et annoncer 192.168.96.0/21 plutôt que d’annoncer les 8 routes en /24 pour alléger la table de routage

Add-BgpRouteAggregate -Prefix 192.168.96.0/21 -SummaryOnly Enabled
SRV01 demande une confirmation

Vérifications de l’aggrégation de nos routes depuis SRV02

Vérifications de l’aggrégation depuis SRV02

Pour obtenir des informations sur votre routeur

Get-BgpRouter

Pour affichier vos peers BGP

Get-BgpPeer

Pour afficher les routes BGP

Get-BgpRouteInformation

Vous pouvez également créer des policy que vous pouvez appliquer sur des peers en ingress ou en egress en deux étapes selon l’exemple.

Pour illustrer cette policy, nous allons d’abord ajouter une route BGP, vérifier la table de routage BGP sur SRV02, puis ajouter un filtre de sortie sur la session BGP du côté SRV01 et vérifier à nouveau la table de routage côté SRV02

Ajout d’une route sur SRV01

Add-BgpCustomRoute -Network 10.10.10.10/32
Ajout d’une route sur SRV01

Vérification de la table de routage sur SRV02

Vérification de la table de routage sur SRV02

Ajout d’une policy (règle) de filtrage pour n’autoriser que le préfixe 192.168.96.0/21 à être communiqué

Add-BgpRoutingPolicy -Name SRV01_IP -MatchPrefix 192.168.96.0/21 -PolicyType Allow

Et appliquation de cette policy (règle) au peer SRV02

Add-BgpRoutingPolicyForPeer -PeerName SRV02 -PolicyName SRV01_IP -Direction Egress
Ajout de la policy (règle) et appliquation de la règle sur le peer

Vérification avant et après appliquations de la policy

Avant / après appliquations la policy

Exemple

Imaginons que nous ajoutons l’adresse IP 192.168.96.5/32 sur notre serveur SRV01 et que nous essayons de le joindre par le serveur SRV02.

Adresse IP 192.168.96.5/32 ajoutée
Vérification de la table de routage et de connectivité

Conclusion

Pouvoir faire du routage directement sur votre serveur, ou sur un serveur virtuel permet de complètement repenser votre réseau et vous affranchir d’un domaine de broadcast, risqué et contraignant à maintenir.

Imaginez un réseau ou votre serveur peer et échange ses routes directement avec votre firewall ou un routeur, sans passer par une configuration contraignante de switchs. C’est sans doute, une grande avancée pour le réseau avec Windows Server, Hyper-V et pour vos futurs utilisations dans le Cloud.

La flexibilité de pouvoir annoncer des routes en /32 vous permet une mobilité quasi infinie de votre infrastructure. Vous pouvez, par exemple, mettre en place un système de anycast BGP pour vos DNS ou pour d’autres services assurant de la haute disponibilité.

Toutes les commandes

Pour aller plus loin, voici toutes les commandes BGP existantes sur Windows Server

Add-BgpCustomRoute
Add-BgpPeer
Add-BgpRouteAggregate
Add-BgpRouter
Add-BgpRoutingPolicy
Add-BgpRoutingPolicyForPeer
Clear-BgpRouteFlapDampening
Disable-BgpRouteFlapDampening
Enable-BgpRouteFlapDampening
Get-BgpCustomRoute
Get-BgpPeer
Get-BgpRouteAggregate
Get-BgpRouteFlapDampening
Get-BgpRouteInformation
Get-BgpRouter
Get-BgpRoutingPolicy
Get-BgpStatistics
Remove-BgpCustomRoute
Remove-BgpPeer
Remove-BgpRouteAggregate
Remove-BgpRouter
Remove-BgpRoutingPolicy
Remove-BgpRoutingPolicyForPeer
Set-BgpPeer
Set-BgpRouteAggregate
Set-BgpRouteFlapDampening
Set-BgpRouter
Set-BgpRoutingPolicy
Set-BgpRoutingPolicyForPeer
Start-BgpPeer
Stop-BgpPeer

Photo d’illustration par serzhile