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 [2017/04/12 10:06] – BGP sur un VR 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=====
  
 +Diagnostique et configuration du process BGP
 <code bash> <code bash>
 get router bgp get router bgp
 +get router info bgp summary
 </code> </code>
  
 +Voir le status des protocoles de routage dynamiques
 +<code bash>
 +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>
  
-=====BGP sur un VR=====+Afficher les réseaux BGP annoncés et reçus par le routeur : 
 +<code bash> 
 +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
  
-Pour utiliser BGP sur un virtual router, il faut le créer, activer le BGP dessus, puis rentrer dans le contexte du VR pour passer les commandes (sauf pour le VR-Default qui est déjà activé et sur lequel les commandes BGP sont appliquées par défaut).+   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>
  
-Exemple de configuration+Afficher les routes BGP présentes dans la table de routage
 <code bash> <code bash>
-# création du VR-BGP avec le vlan BGP et le port 17 (interco) +get router info routing-table bgp 
-create vr "VR-BGP"  +B       10.31.0.24/29 [20/0] via 10.55.200.94, port23, 6d23h40m 
-configure vlan Default delete ports 17 +B       10.55.200.92/31 [20/0] via 10.55.200.94, port23, 6d23h40m 
-configure vr VR-Default delete ports 17 +B       10.55.200.254/31 [20/0] via 10.55.200.94, port23, 1d22h05m 
-configure vr VR-BGP add ports 17 +B       10.143.6.8/29 [20/0] via 10.55.200.94, port23, 1d01h14m 
-create vlan 600 vr VR-BGP +B       10.204.241.1/32 [20/0] via 10.55.200.94, port23, 6d23h40m 
-configure vlan 600 name "BGP" +B       10.204.255.1/32 [20/0] via 10.55.200.94, port23, 6d23h40m 
-configure vlan 600 add ports 17+B       10.204.255.3/32 [20/0] via 10.55.200.94, port23, 1d22h05m 
 +</code>
  
-activation du BGP sur le VR-BGP +<code bash> 
-configure vr VR-BGP add protocol bgp+Afficher les peers BGP 
 +get router info bgp neighbors
  
-on entre dans le context du VR pour la conf BGP +sniffer les packets BGP sur une interface 
-vr VR-BGP +diagnose sniffer packet any "tcp and port 179" 4 0 l
-(configuration BGP)+
 </code> </code>
  
-Vérifications :+====Debug==== 
 <code bash> <code bash>
-show vr +# mettre en place un debug du processus BGP 
-Virtual                               Number of    Number of    Flags        +diagnose ip router bgp all enable 
-Router                                VLANs        Ports                     + 
--------------------------------------------------------------------------------- +# voir les update sortantes 
-VR-Default                                    4           32    bopri-ORS46  +diagnose ip router bgp updates out en 
-VR-BGP                                        3            3    b-------U46 + 
 +# (activer le debug) 
 +diagnose debug enable
 </code> </code>
  
-Le BGP (flag "b") est bien activé sur notre VR-BGP 
  
 +=====Tips=====
  
-=====Suppression de la configuration BGP=====+====Remove private AS==== 
 + 
 +Pour supprimer les numéros d'AS privés du champs AS-path : 
 +<code bash> 
 +config router bgp 
 +  config neighbor 
 +    edit "10.0.1.2" 
 +      set remove-private-as enable 
 +      set remove-private-as6 enable 
 +    end 
 +</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> <code bash>
-configure bgp delete network 144.204.255.3/32 +get router info bgp neighbors 10.55.200.94 received-route 
-delete bgp neighbor X.X.X.+get router info bgp neighbors 10.55.200.94 advertised-routes
-# mais surtout : +
-configure bgp router-id 0.0.0.0 +
-configure bgp AS-number 0+
 </code> </code>
  
informatique/fortinet/bgp.1491991583.txt.gz · Last modified: 2017/04/12 10:06 by pteu