User Tools

Site Tools


informatique:fortinet:bgp

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
informatique:fortinet:bgp [2019/10/10 09:26] – [Vérifications] pteuinformatique:fortinet:bgp [2021/11/17 09:11] (current) – prendre en compte les modifications BGP pteu
Line 85: Line 85:
  
  
-=====Route-map=====+=====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 ne nous annonce que des préfixes dans la plage 192.168.0.0/16 :+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 :
 <code bash> <code bash>
-# on créer une liste de préfixe (sorte d'ACL)+# on créer une liste de préfixes (~ACL)
 config router prefix-list config router prefix-list
     edit "pref_BGP-in"     edit "pref_BGP-in"
Line 98: Line 98:
                     unset le                     unset le
                 end                 end
 +                edit 2
 +                    set action deny
 +                    set prefix any
 +                    unset ge
 +                    unset le
 +                end
 +            end
  
-# on inclut cette liste dans une route-map+# 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 
 +</code> 
 +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. 
 + 
 +<code bash> 
 +# 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 config router route-map
-    edit "rmap_BGP-in+    edit "rm_BGP-bck-out" 
-            config rule +        set comments "Commu lien backup" 
-                edit 1 +        config rule 
-                    set match-ip-address "pref_BGP-in" +            edit 1 
-                end+                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 l'ajoute dans notre configuration BGP pour filtrer les annonces reçues par notre peer+On place ces routemap sur chaque voisin, en "in" pour le weight et en "out" pour le tag de commu :
 config router bgp config router bgp
     set as 65000     set as 65000
Line 113: Line 186:
             edit "192.168.0.2"             edit "192.168.0.2"
                 set remote-as 65001                 set remote-as 65001
-                set route-map-in "rmap_BGP-in"+                set description "voisin lien backup" 
 +                set route-map-in "rm_BGP-bck-in
 +                set route-map-out "rm_BGP-bck-out"
             end             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
 </code> </code>
  
-Les route-map sont utilisables également pour filtrer les annonces sortantes (''set route-map-out'') ou les redistributions de routes (dans le paragraphe ''config redistribute xxx'').+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 :
 +<code bash>
 +# 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
 +</code>
 +
 +
 +====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) :
 +<code bash>
 +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
 +</code>
 +
 +<code bash>
 +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"
 +</code>
 =====Vérifications===== =====Vérifications=====
  
-Diagnotique et configuration du process BGP+Diagnostique et configuration du process BGP
 <code bash> <code bash>
 get router bgp get router bgp
Line 177: Line 301:
  
 <code bash> <code bash>
-afficher les peers BGP+Afficher les peers BGP
 get router info bgp neighbors get router info bgp neighbors
  
 # sniffer les packets BGP sur une interface # sniffer les packets BGP sur une interface
 diagnose sniffer packet any "tcp and port 179" 4 0 l diagnose sniffer packet any "tcp and port 179" 4 0 l
 +</code>
  
 +====Debug====
 +
 +<code bash>
 # mettre en place un debug du processus BGP # mettre en place un debug du processus BGP
 diagnose ip router bgp all enable diagnose ip router bgp all enable
 +
 +# voir les update sortantes
 +diagnose ip router bgp updates out en
 +
 +# (activer le debug)
 +diagnose debug enable
 </code> </code>
  
-=====Best-practices=====+ 
 +=====Tips=====
  
 ====Remove private AS==== ====Remove private AS====
Line 200: Line 335:
     end     end
 </code> </code>
 +
 +====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 :
 +<code bash>
 +config router bgp
 +  config neighbor
 +    edit 10.55.202.92
 +      set soft-reconfiguration enable
 +      end
 +</code>
 +
 +On a ensuite accès à des commandes plus fines, comme les routes reçues ou envoyées à un voisin spécifique :
 +<code bash>
 +get router info bgp neighbors 10.55.200.94 received-route
 +get router info bgp neighbors 10.55.200.94 advertised-routes
 +</code>
 +
informatique/fortinet/bgp.1570699613.txt.gz · Last modified: 2019/10/10 09:26 by pteu