BPG setting for a VPN between FTD and Strongswan
NOTICE : THIS ARTICLE IS NOT FULLY TRANSLATED TO ENGLISH YET
Cet article fait suite au poste : Site to Site VPN between Cisco FTD and Strongswan.
Dans la partie précédente, nous avons configuré une VPN route-based entre un Cisco FTD et le service Strongswan tournant sur un linux. Nous allons maintenant implémenter BGP pour que nos deux endpoints puissent échanger leurs routes en passant par le VPN déjà établie.
Dans notre exemple:
- Le FTD aura comme AS 65509
- Le serveur linux aura comme AS 65551
- Les tunnels (VTI) des endpoints seront utilisés pour comme neighbor BGP.
Voici le schéma de l’article précédent mis à jour avec les numéros d’AS.
Configuration de BGP sur FTD
Note : To configure BGP AS, go on the left pane and click on “BGP” just above “IPv4”. From there you will be able to set the AS.
Cette configuration va génerer la configuration suivante visible sur le firewall en CLI:
router bgp 65509
bgp log-neighbor-changes
bgp router-id vrf auto-assign
address-family ipv4 unicast
neighbor 169.254.51.1 remote-as 65551
neighbor 169.254.51.1 description Fabien BGP over VPN test
neighbor 169.254.51.1 transport path-mtu-discovery disable
neighbor 169.254.51.1 activate
no auto-summary
no synchronization
exit-address-family
Rien d’autre à faire coté FTD, on peut attaquer la partie sous linux.
Configuration de BGP sur Linux (avec FRR)
J’utiliserai ici FRR, mais il existe bien d’autre implémentation de daemon BGP sur linux.
Commençons par installer FRR (https://frrouting.org/). Puis modifions le fichier /etc/frr/daemon pour activer le daemon bgpd.
/etc/frr/daemons
[...]
bgpd=yes
[...]
[centos@linuxserver ~]$ sudo vtysh
Permet d’ouvrir un invite de commande dont la synthaxe est très inspirée de celle de Cisco. On peut donc commencer par un “conf t” et faire la configuration bgp en ligne de commande.
linuxserver# show running-config
Building configuration...
Current configuration:
!
frr version 8.3-dev-MyOwnFRRVersion
frr defaults traditional
hostname linuxserver
!
ip route 192.168.1.156/31 192.168.251.5
!
router bgp 65551
neighbor 169.254.51.2 remote-as 65509
!
address-family ipv4 unicast
network 192.168.1.156/31
neighbor 169.254.51.2 soft-reconfiguration inbound
neighbor 169.254.51.2 prefix-list ALLOW-ALL in
neighbor 169.254.51.2 prefix-list ALLOW-ALL-OUT out
exit-address-family
exit
!
ip prefix-list ALLOW-ALL seq 5 permit 10.15.0.0/16 le 32
ip prefix-list ALLOW-ALL-OUT seq 5 permit 192.168.1.156/31 le 32
!
end
Note : A la place de “network 192.168.1.156 /31”, un “redistribute static” aurait fait l’affaire également.
Attention : Contrairement aux équippements Cisco, sur Strongswan il faut préciser une prefix-list pour authoriser d’envoyer ou d’enregister des routes via BGP. Par défaut toutes les routes reçues ne seront pas prises en compte et aucune route ne sera envoyée.
Tests
FTD received routes :
ftdfirewall# show bgp neighbors 169.254.51.1 routes
BGP table version is 7124, local router ID is 194.206.146.89
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale, m multipath
Origin codes: i - IGP, e - EGP, ? - incomplete
Network Next Hop Metric LocPrf Weight Path
*> 192.168.1.156/31
169.254.51.1 0 0 65551 ?
FTD route sent :
ftdfirewall# show bgp neighbors 169.254.51.1 advertised-routes | i 10.15.0
*> 10.15.0.1/32 10.15.15.179 0 65112 65328 i
*> 10.15.0.2/32 10.15.15.179 0 65112 65328 i
*> 10.15.0.3/32 10.15.15.179 0 65112 65328 i
*> 10.15.0.4/32 10.15.15.179 0 65112 65328 i
*> 10.15.0.5/32 10.15.15.179 0 65112 65328 i
*> 10.15.0.6/32 10.15.15.179 0 65112 65328 i
*> 10.15.0.15/32 10.15.15.179 0 65112 65328 i
ftdfirewall#
Strongswan received routes :
linuxserver# show ip bgp neighbors 169.254.51.2 routes
BGP table version is 74214, local router ID is 192.168.251.1, vrf id 0
Default local pref 100, local AS 65051
Status codes: s suppressed, d damped, h history, * valid, > best, = multipath,
i internal, r RIB-failure, S Stale, R Removed
Nexthop codes: @NNN nexthop's vrf id, < announce-nh-self
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found
Network Next Hop Metric LocPrf Weight Path
*> 10.15.0.1/32 169.254.51.2 0 65509 65112 65328 i
*> 10.15.0.2/32 169.254.51.2 0 65509 65112 65328 i
*> 10.15.0.3/32 169.254.51.2 0 65509 65112 65328 i
*> 10.15.0.4/32 169.254.51.2 0 65509 65112 65328 i
*> 10.15.0.5/32 169.254.51.2 0 65509 65112 65328 i
*> 10.15.0.6/32 169.254.51.2 0 65509 65112 65328 i
*> 10.15.0.15/32 169.254.51.2 0 65509 65112 65328 i
[...]
Strongswan sent routes :
linuxserver# show ip bgp neighbors 169.254.51.2 advertised-routes
BGP table version is 74214, local router ID is 192.168.251.1, vrf id 0
Default local pref 100, local AS 65051
Status codes: s suppressed, d damped, h history, * valid, > best, = multipath,
i internal, r RIB-failure, S Stale, R Removed
Nexthop codes: @NNN nexthop's vrf id, < announce-nh-self
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found
Network Next Hop Metric LocPrf Weight Path
*> 192.168.1.156/31
0.0.0.0 0 32768 ?
Total number of prefixes 1
linuxserver#