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
Last revisionBoth sides next revision
informatique:fortinet:bgp [2019/03/27 08:53] – [Vérifications] pteuinformatique:fortinet:bgp [2021/11/17 09:03] – [Contrôle avancé des annonces] 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 : ''execute router clear bgp all'' qui aura pour effet de relancer le process BGP. On peut limiter la portée de l'update (et donc de la convergence) en spécifant, l'AS ou le sens ; par ex pour reset 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) :
 +<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=====
  
 +Diagnostique et configuration du process BGP
 <code bash> <code bash>
-# diag conf et process BGP 
 get router bgp get router bgp
 get router info bgp summary get router info bgp summary
 +</code>
  
-# voir le status des protocoles de routages+Voir le status des protocoles de routage dynamiques 
 +<code bash>
 get router info protocols 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
 +</code>
  
-# voir les routes apprises en BGP +Afficher les réseaux BGP annoncés et reçus par le routeur 
-get router info routing-table bgp +<code bash>
-# afficher les réseaux annoncés par le routeur+
 get router info bgp network 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
  
-afficher les peers BGP+   Network          Next Hop            Metric LocPrf Weight Path 
 +*> 10.31.0.24/29    10.55.200.94            0              64200 65041 i 
 +*> 10.55.200.92/31  10.55.200.94            0              64200 ? 
 +*> 10.55.200.94/31  0.0.0.0                      100  32768  i 
 +*> 10.55.200.254/31 10.55.200.94            0              64200 ? 
 +*> 10.143.0.24/29   10.55.200.94            0              64200 65041 i 
 +*> 10.143.6.8/29    10.55.200.94            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              64200 65041 i 
 +*> 10.204.255.1/32  10.55.200.94            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              64200 65547 i 
 +</code> 
 + 
 +Afficher les routes BGP présentes dans la table de routage 
 +<code bash> 
 +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 
 +</code> 
 + 
 +<code bash> 
 +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 158: Line 324:
     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.txt · Last modified: 2021/11/17 09:11 by pteu