======BGP======
===== Configuration minimale =====
//le minimum pour que ça marche//
On suppose que notre Forti est connecté sur son port1 à un routeur, avec qui il doit monter une session BGP. Pour les besoins de notre test on va créer une interface de loopback ''lo0'' (IP=10.0.0.1/32) que l'on annoncera dans le BGP et qui nous servira de router-id.
Paramètres :
* AS local = 65000
* IP interco local = 192.168.0.1/24
* AS distant = 65001
* IP interco distante (peer) = 192.168.0.2/24
# création des interfaces
config system interface
edit "port1"
set vdom "root"
set ip 192.168.0.1 255.255.255.0
set allowaccess ping
set type physical
set alias "vers routeur BGP"
next
edit "lo0"
set vdom "root"
set ip 10.0.0.1 255.255.255.255
set allowaccess ping
set type loopback
end
end
On suppose que le routeur d'en face est correctement configuré avec la bonne IP, qu'il est UP et qu'on le PING (''execute ping 192.168.0.2'').
Configuration BGP à proprement parlé :
config router bgp
set as 65000
config neighbor
edit "192.168.0.2"
set remote-as 65001
next
end
# on déclare ici les réseaux qu'on annonce dans le BGP
config network
edit 1
set prefix 10.0.0.1 255.255.255.255
next
end
set router-id 10.0.0.1
end
Le router-id est un identifiant qui prend la même forme d'une adresse IP sans en être une, qu'il est conseillé de configurer sur l'équipement afin d'être sûr de ne pas avoir de doublon. C'est pour cela qu'on utilise l'IP de notre loopback.
=====Mot de passe MD5=====
Sécurité minimalisme, ça ne mange pas de pain de l'utiliser (à configurer sur les 2 peers pour que le BGP monte) ; ici on mettra le mot de passe "secreT" :
config router bgp
set as 2200
config neighbor
edit "192.168.0.2"
set password "secreT"
end
=====Redistribution de routes=====
Actuellement on redistribue déjà notre loopback lo0 (10.0.0.1/32) dans le BGP, via la directive ''config network'' dans la section BGP. On peut également redistribuer automatiquement les routes présentent dans notre table de routage, en fonction de leur origine : connected, statique, ospf, etc
config router bgp
set as 2200
# redistribuer toutes nos routes connected
config redistribute "connected"
set status enable
end
# redistribuer également toutes nos routes statiques
config redistribute "static"
set status enable
end
=====Contrôler les préfixes in/out=====
Par sécurité on peut filtrer les annonces entrantes/sortantes du BGP avec des **route-map**. Par exemple pour être sûr que notre peer 192.168.0.2 ne nous annonce que des préfixes dans la plage 192.168.0.0/16 :
# on créer une liste de préfixes (~ACL)
config router prefix-list
edit "pref_BGP-in"
config rule
edit 1
set prefix 192.168.0.0 255.255.0.0
unset ge
unset le
end
edit 2
set action deny
set prefix any
unset ge
unset le
end
end
# on l'applique sur notre voisin
config router bgp
set as 65000
config neighbor
edit "192.168.0.2"
set remote-as 65001
set prefix-list-in "pref_BGP-in"
end
Les options ''ge'' et ''le'' servent à préciser le masque minimum et maximum pour que la liste matche. Par défaut le masque doit être strictement égal à celui spécifié pour matcher, ici un /16. Cela signifie que si le voisin nous annonce 192.168.0.0**/24**, notre routeur refusera la route.
On peut faire de même pour contrôler nos annonces vers ce voisin, en définissant de la même façon une ''prefix-list-out''.
Ce résultat aurait pu être identique avec l'utilisation d'une ''access-list'' de filtrage + ''distribute-list-in/out'' ou ''route-map-in/out'' ; mais cette solution consomme plus de ressources et ne devrait être réservée que pour des actions plus spécifiques (voir "[[informatique:fortinet:bgp#Contrôle avancé des annonces|Contrôle avancé des annonces]]" dans la suite).
=====Contrôle avancé des annonces=====
Pour contrôler le routage quand on a 2 liens WANs, on s'appuie sur les spécificités du BGP : on va utiliser les **community strings** (communautés étendues) pour tagguer les préfixes que l'on annoncent, que nos voisins utiliseront pour prioriser certains préfixes ; et utiliser l'attribut **weight** (poids) pour contrôler la préférence des routes apprises depuis ces derniers :
* envoi de la communauté 65001:100 à notre voisin "backup", et 65001:200 à notre voisin "nominal" (les tags 100 et 200 sont arbitraires, et une //policy// doit être configurée explicitement sur chaque voisin, pour appliquer une action de priorisation -ou non- du préfixe (via une **local pref** par exemple).
* affectation du poids (weight) 100 aux routes apprises par le voisin backup, et 200 par le nominal.
NB: nos 2 voisins sont dans le même AS, 65001.
# Création d'une ACL qui matche tout le trafic:
config router access-list
edit "acl_all-traf"
set comments "Match all traffic"
config rule
edit 1
set prefix 0.0.0.0 0.0.0.0
set exact-match disable
next
end
# Création des 4 routemap ("in" et "out" pour chaque voisin)
config router route-map
edit "rm_BGP-bck-out"
set comments "Commu lien backup"
config rule
edit 1
set match-ip-address "acl_all-traf"
set set-community "65001:100"
next
end
next
edit "rm_BGP-nom-out"
set comments "Commu lien nominal"
config rule
edit 1
set match-ip-address "acl_all-traf"
set set-community "65001:200"
next
end
next
edit "rm_BGP-bck-in"
set comments "Gestion BGP lien backup"
config rule
edit 1
set match-ip-address "acl_all-traf"
set set-weight 100
next
end
next
edit "rm_BGP-nom-in"
set comments "Gestion BGP lien nominal"
config rule
edit 1
set match-ip-address "acl_all-traf"
set set-weight 200
next
end
end
# On place ces routemap sur chaque voisin, en "in" pour le weight et en "out" pour le tag de commu :
config router bgp
set as 65000
config neighbor
edit "192.168.0.2"
set remote-as 65001
set description "voisin lien backup"
set route-map-in "rm_BGP-bck-in"
set route-map-out "rm_BGP-bck-out"
end
edit "192.168.0.3"
set remote-as 65001
set description "voisin lien nominal"
set route-map-in "rm_BGP-nom-in"
set route-map-out "rm_BGP-nom-out"
end
end
end
Pour prendre en compte ces modifications, il faut faire un ''execute router restart'' qui va relancer tout le routage (**attention, ça va couper !**).
A chaque modification de la configuration BGP, il faut également la reprendre en compte avec :
# recharger toute la configuration BGP (relancer le process BGP)
execute router clear bgp all
# soft reset (limite la portée de l'update aux annonces in)
execute router clear bgp ip soft in
# MAJ uniquement les annonces d'un peer
execute router clear bgp ip in 192.168.0.3
====Vérifications====
Pour chaque voisin, contrôler ce qu'on lui envoie et ce qu'on reçoit (NB : ces commandes ne sont accessibles qu'en passant la commande ''set soft-reconfiguration enable'' sur chaque peer) :
config router bgp
config neighbor
edit "192.168.0.2"
set soft-reconfiguration enable
next
edit "192.168.0.3"
set soft-reconfiguration enable
end
end
end
!
get router info bgp neighbors 192.168.0.3 adv
get router info bgp neighbors 192.168.0.3 received-routes
get router info bgp community-info
Address Refcnt Community
[0x404237b8ff] (12) 65001:100
[0x40423788af] (3) 65001:200
get router info bgp community 65001:100
get router info bgp route-map "rm_BGP-nom-out"
=====Vérifications=====
Diagnostique et configuration du process BGP
get router bgp
get router info bgp summary
Voir le status des protocoles de routage dynamiques
get router info protocols
# [..] résultat de la commande limité au BGP
Routing Protocol is "bgp 65425"
IGP synchronization is disabled
Automatic route summarization is disabled
Default local-preference applied to incoming route is 100
Redistributing:
Neighbor(s):
Address AddressFamily FiltIn FiltOut DistIn DistOut RouteMapIn RouteMapOut Weight
10.55.200.94 unicast
Afficher les réseaux BGP annoncés et reçus par le routeur :
get router info bgp network
BGP table version is 8, local router ID is 10.204.255.2
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete
Network Next Hop Metric LocPrf Weight Path
*> 10.31.0.24/29 10.55.200.94 0 0 64200 65041 i
*> 10.55.200.92/31 10.55.200.94 0 0 64200 ?
*> 10.55.200.94/31 0.0.0.0 100 32768 i
*> 10.55.200.254/31 10.55.200.94 0 0 64200 ?
*> 10.143.0.24/29 10.55.200.94 0 0 64200 65041 i
*> 10.143.6.8/29 10.55.200.94 0 0 64200 65547 i
*> 10.143.8.8/29 0.0.0.0 100 32768 i
*> 10.204.241.1/32 10.55.200.94 0 0 64200 65041 i
*> 10.204.255.1/32 10.55.200.94 0 0 64200 65041 i
*> 10.204.255.2/32 0.0.0.0 100 32768 i
*> 10.204.255.3/32 10.55.200.94 0 0 64200 65547 i
Afficher les routes BGP présentes dans la table de routage
get router info routing-table bgp
B 10.31.0.24/29 [20/0] via 10.55.200.94, port23, 6d23h40m
B 10.55.200.92/31 [20/0] via 10.55.200.94, port23, 6d23h40m
B 10.55.200.254/31 [20/0] via 10.55.200.94, port23, 1d22h05m
B 10.143.6.8/29 [20/0] via 10.55.200.94, port23, 1d01h14m
B 10.204.241.1/32 [20/0] via 10.55.200.94, port23, 6d23h40m
B 10.204.255.1/32 [20/0] via 10.55.200.94, port23, 6d23h40m
B 10.204.255.3/32 [20/0] via 10.55.200.94, port23, 1d22h05m
# Afficher les peers BGP
get router info bgp neighbors
# sniffer les packets BGP sur une interface
diagnose sniffer packet any "tcp and port 179" 4 0 l
====Debug====
# mettre en place un debug du processus BGP
diagnose ip router bgp all enable
# voir les update sortantes
diagnose ip router bgp updates out en
# (activer le debug)
diagnose debug enable
=====Tips=====
====Remove private AS====
Pour supprimer les numéros d'AS privés du champs AS-path :
config router bgp
config neighbor
edit "10.0.1.2"
set remove-private-as enable
set remove-private-as6 enable
end
====soft-reconfiguration====
Si le routeur n'est pas surchargé en terme de mémoire, on peut activer l'option ''soft-reconfiguration'' par neighbor, qui apporte plus d'informations pour les diagnostiques :
config router bgp
config neighbor
edit 10.55.202.92
set soft-reconfiguration enable
end
On a ensuite accès à des commandes plus fines, comme les routes reçues ou envoyées à un voisin spécifique :
# afficher les routes annoncées par un voisin
get router info bgp neighbors 10.55.202.92 received-route
# afficher les routes apprises (en tenant compte des éventuels filtrages) d'un voisin
get router info bgp neighbors 10.55.202.92 routes
!
# afficher les routes annoncées à un voisin
get router info bgp neighbors 10.55.202.92 advertised-routes