Ce document décrit les applets EEM (Embedded Event Manager) qui sont utilisées dans les réseaux où le routage de performance (PfR) optimise le trafic via plusieurs relais de frontière (BR). Certaines boucles de transfert sont également observées. Les applets sont utilisées afin de collecter des données lorsqu'une boucle est observée et d'atténuer l'impact d'une boucle de transfert.
Aucune exigence spécifique n'est associée à ce document.
Les informations contenues dans ce document sont basées sur le logiciel Cisco IOS® qui prend en charge la version 4.0 d'EEM.
Afin de vérifier la version EEM prise en charge par votre version de Cisco IOS, utilisez cette commande :
Router#sh event manager version | i Embedded
Embedded Event Manager Version 4.00
Router#
The information in this document was created from the devices in a specific lab environment. All of the devices used in this document started with a cleared (default) configuration. If your network is live, make sure that you understand the potential impact of any command.
Lorsque PfR contrôle une classe de trafic (TC), il crée une carte de route dynamique/liste de contrôle d'accès (ACL) sur les routeurs BR. Le mappage de route sur un routeur désigné avec une sortie sélectionnée pointe vers une sortie sélectionnée, tandis qu'un mappage de route sur d'autres routeurs désignés pointe vers une interface interne (tronçon suivant = routeur désigné sélectionné).
Un problème se produit lorsque les ACL dynamiques ne sont pas synchronisées correctement entre les différents BR (en raison de bogues, par exemple).
Dans cette image, l'accent est mis sur le fait que TC met en correspondance tous les paquets IP destinés à 172.16.1.0/24 avec DSCP EF. Dans ce scénario, l'entrée de liste de contrôle d'accès associée est supprimée du routeur BR sélectionné (BR-2), mais pas du routeur BR-1. Les paquets de ce TC atteignent BR-2 avec l'entrée de préfixe qui correspond à tous les paquets IP destinés à 172.16.1.0/24. La sortie sélectionnée pour l'entrée de préfixe est Exit-1, de sorte que la route-map/ACL associée sur BR-2 pointe vers BR-1.
Les paquets de ce TC tournent maintenant en boucle entre les BR jusqu'à ce que la durée de vie (TTL) atteigne 0.
Ce document fournit les applets EEM nécessaires pour :
Les applets utilisées dans le cas d'un combo Master Controller (MC)/BR sont beaucoup plus faciles (quand MC s'exécute sur l'un des BR). Le scénario avec des MC dédiés est également traité.
Cette section décrit les listes de contrôle d'accès utilisées pour ce processus, ainsi que les fichiers journaux des applets.
Afin de détecter les boucles de transfert, l'applet s'appuie sur une liste de contrôle d'accès pour faire correspondre les paquets avec une durée de vie faible.
Il est recommandé d'utiliser la mise en correspondance ACE sur deux valeurs TTL consécutives relativement faibles (20 et 21) afin d'obtenir un (et un seul) résultat pour chaque paquet qui effectue une boucle entre les routeurs de périphérie. La valeur de durée de vie utilisée ne doit pas être trop faible pour éviter les occurrences fréquentes des paquets traceroute.
interface gig0/0 (internal interface)
ip access-group LOOP in
!
ip access-list extended LOOP
permit ip 10.116.48.0 0.0.31.255 any ttl range 20 21
permit ip any any
La liste de contrôle d'accès doit être placée sur l'interface interne signalée dans le résultat de la commande show pfr master border topology.
La plage IP source (ici 10.116.48.0/20) doit correspondre au(x) réseau(s) interne(s) (préfixes accessibles via des interfaces internes).
Afin d'identifier quel site distant/TC est affecté par la boucle, vous pouvez ajouter une seconde ACL sortante sur l'interface, avec des ACE plus spécifiques pour chaque site distant/TC.
interface gig0/0 (internal interface)
ip access-group LOOP-DETAIL out
!
ip access-list extended LOOP-DETAIL
permit ip 10.116.48.0 0.0.31.255 10.116.132.0 0.0.0.255 ttl range 20 21
permit ip 10.116.48.0 0.0.31.255 10.116.128.0 0.0.0.255 ttl range 20 21
.... (add here one line per remote site)
permit ip any an
L’adresse IP de destination correspond au sous-réseau des différents sites distants :
10.116.132.0/24 -> site-1
10.116.128.0/24 -> site-2
Vous pouvez également ajouter plusieurs lignes par site distant si vous devez identifier le TC exact affecté par la boucle.
L'applet vérifie le nombre d'occurrences de la correspondance ACE sur la durée de vie dans la boucle ACL toutes les trente secondes. En fonction du résultat de ces vérifications, l'applet peut effectuer les tâches suivantes :
L'applet conserve un fichier journal qui conserve une trace du nombre d'occurrences (lorsque le nombre est supérieur à 0), et de toutes les occurrences de boucles temporaires (lorsque THRESHOLD_1 est dépassé mais pas THRESHOLD_2) ou d'une boucle réelle (lorsque THRESHOLD_1 et THRESHOLD_2 sont dépassés).
Ce sont les scénarios les plus simples décrits dans ce document. La détection de boucle et l'effacement PfR sont effectués sur le même périphérique, il n'est donc pas nécessaire d'entrer la communication de l'applet EEM du périphérique. Une applet distincte s'exécute sur un combo MC/BR et d'autres BR.
Cette sortie affiche des informations importantes pour l'applet utilisée sur la combinaison MC/BR. Voici quelques remarques importantes pour ce résultat spécifique :
event manager environment THRESHOLD_1 1000
event manager environment THRESHOLD_2 500
event manager environment DISK bootflash
!
event manager applet LOOP-MON authorization bypass
event timer watchdog name LOOP time 30
action 100 cli command "enable"
action 110 cli command "show ip access-list LOOP"
action 120 set regexp_substr 0
action 130 regexp "range 20 21 \(([0-9]+) matches\)"
$_cli_result _regexp_result regexp_substr
action 140 cli command "clear ip access-list counters LOOP"
action 150 if $regexp_substr gt 0
action 200 set MATCHES $regexp_substr
action 210 file open LOGS $DISK:script-logs.txt a
action 220 cli command "enable"
action 230 cli command "show clock"
action 240 regexp "[0-9]+:[0-9]+:[0-9]+.[0-9]+ est [A-Za-z]+
[A-Za-z]+ [0-9]+ 201[0-9]" $_cli_result _regexp_result
action 250 set TIME $_regexp_result
action 260 if $MATCHES gt $THRESHOLD_1
action 270 wait 15
action 280 cli command "show ip access-list LOOP"
action 290 set regexp_substr 0
action 300 regexp "range 20 21 \(([0-9]+) matches\)"
$_cli_result _regexp_result regexp_substr
action 310 if $regexp_substr gt $THRESHOLD_2
action 320 cli command "enable"
action 330 cli command "show ip access-list LOOP-DETAIL
| tee /append $DISK:script-output-$_event_pub_sec.txt"
action 340 cli command "show pfr master traffic-class perf det
| tee /append $DISK:script-output-$_event_pub_sec.txt"
action 350 cli command "show route-map dynamic detail
| tee /append $DISK:script-output-$_event_pub_sec.txt"
action 360 cli command "show ip route
| tee /append $DISK:script-output-$_event_pub_sec.txt"
action 370 cli command "clear pfr master *"
action 380 cli command "clear ip access-list counters LOOP-DETAIL"
action 390 file puts LOGS "$TIME - LOOP DETECTED - PfR CLEARED -
matches $MATCHES > $THRESHOLD_1 and $regexp_substr
> $THRESHOLD_2 - see $DISK:script-output-$_event_pub_sec.txt"
action 400 syslog priority emergencies msg "LOOP DETECTED -
PfR CLEARED - see $DISK:script-output-$_event_pub_sec.txt !"
action 410 else
action 420 file puts LOGS "$TIME - TEMPORARY LOOP : matches
$MATCHES > $THRESHOLD_1 and $regexp_substr < or = $THRESHOLD_2"
action 430 cli command "clear ip access-list counters LOOP-DETAIL"
action 440 end
action 450 else
action 460 cli command "en"
action 470 cli command "clear ip access-list counters LOOP-DETAIL"
action 480 file puts LOGS "$TIME - number of matches =
$MATCHES < $THRESHOLD_1"
action 490 end
action 500 else
action 510 cli command "clear ip access-list counters LOOP-DETAIL"
action 520 end
Cette section décrit l'applet utilisée pour les autres BR. Voici quelques remarques importantes pour ce résultat spécifique :
event manager environment THRESHOLD 700
event manager environment DISK flash 0
!
event manager applet LOOP-BR authorization bypass
event timer watchdog name LOOP time 20
action 100 cli command "enable"
action 110 cli command "show ip access-list LOOP"
action 120 set regexp_substr 0
action 130 regexp "range 20 21 \(([0-9]+) matches\)"
$_cli_result _regexp_result regexp_substr
action 140 cli command "clear ip access-list counters LOOP"
action 150 if $regexp_substr gt 0
action 160 set MATCHES $regexp_substr
action 170 file open LOGS $DISK:script-logs.txt a
action 180 cli command "show clock"
action 190 regexp "[0-9]+:[0-9]+:[0-9]+.[0-9]+
est [A-Za-z]+ [A-Za-z]+ [0-9]+ 201[0-9]" $_cli_result _regexp_result
action 200 set TIME $_regexp_result
action 210 if $MATCHES gt $THRESHOLD
action 220 cli command "enable"
action 230 cli command "show route-map dynamic detail | tee /append
$DISK:script-output-$_event_pub_sec.txt"
action 240 cli command "show ip route | tee /append
$DISK:script-output-$_event_pub_sec.txt"
action 250 file puts LOGS "$TIME : matches = $MATCHES >
$THRESHOLD - see $DISK:script-output-$_event_pub_sec.txt"
action 260 syslog priority emergencies msg "LOOP DETECTED -
Outputs captured - see $DISK:script-output-$_event_pub_sec.txt !"
action 270 else
action 280 file puts LOGS "$TIME : matches = $MATCHES < or = $THRESHOLD"
action 290 end
action 300 end
La détection de boucle et la suppression/collecte des statistiques PfR sont effectuées sur différents périphériques qui doivent avoir une communication entre les applets EEM. La communication entre les périphériques s'effectue de différentes manières. Ce document décrit la communication de périphérique via des objets suivis afin de vérifier l'accessibilité des boucles dédiées annoncées dans IGP. Lorsqu'un événement est détecté, le bouclage est arrêté, ce qui permet aux applets sur les périphériques distants de se lancer lorsque l'objet suivi passe hors connexion. Vous pouvez utiliser des boucles différentes si des informations différentes doivent être échangées.
Ces applets et méthodes de communication sont utilisées :
Nom Applet | Where? | Quoi ? | Déclencheur ? | Communication ? |
BARRE DE BOUCLE | BRs | Vérifier le nombre d’occurrences ACL afin de détecter les boucles |
Périodique | fermer la boucle100 |
MC EN BOUCLE | MC | - Collecter les infos PfR - Efface PfR |
Suivre la boucle d'accessibilité100 | fermeture de Loop200 |
COLLECTEUR-BARRE | BRs | Collecter des informations | Suivre la boucle d'accessibilité200 | none |
Voici une image qui illustre ceci :
Il s'agit du processus utilisé par les applets :
Cette section décrit comment créer des boucles (assurez-vous que les adresses IP sont annoncées sur l'IGP) et suivre les objets.
Voici quelques points importants à garder à l'esprit lorsque vous créez des objets de piste :
BR-1
interface Loopback100
ip address 10.100.100.1 255.255.255.255
!
track timer ip route 1
track 1 ip route 10.100.100.200 255.255.255.255 reachability
BR-2
interface Loopback100
ip address 10.100.100.2 255.255.255.255
!
track timer ip route 1
track 1 ip route 10.100.100.200 255.255.255.255 reachability
MC
interface Loopback200
ip address 10.100.100.200 255.255.255.255
!
track timer ip route 1
track 1 ip route 10.100.100.1 255.255.255.255 reachability
track 2 ip route 10.100.100.2 255.255.255.255 reachability
track 11 ip route 10.116.100.1 255.255.255.255 reachability
track 12 ip route 10.116.100.2 255.255.255.255 reachability
track 20 list boolean and
object 11
object 12
BARRE DE BOUCLE
Cette section décrit comment créer des boucles sur les routeurs BR. Voici quelques remarques importantes à garder à l'esprit :
event manager environment THRESHOLD_1 100event manager environment
THRESHOLD_2 500event manager environment DISK bootflash
!event manager applet LOOP-BR authorization bypass
event timer watchdog name LOOP time 30 maxrun 27
action 100 cli command "enable"
action 110 cli command "show ip access-list LOOP"
action 120 set regexp_substr 0
action 130 regexp "range 20 21 \(([0-9]+) matches\)"
$_cli_result _regexp_result regexp_substr
action 140 cli command "clear ip access-list counters LOOP"
action 150 if $regexp_substr gt 0
action 200 set MATCHES $regexp_substr
action 210 file open LOGS $DISK:script-detect-logs.txt a
action 220 cli command "enable"
action 230 cli command "show clock"
action 240 regexp "[0-9]+:[0-9]+:[0-9]+.[0-9]+
est [A-Za-z]+ [A-Za-z]+ [0-9]+ 201[0-9]"
$_cli_result _regexp_result
action 250 set TIME $_regexp_result
action 260 if $MATCHES gt $THRESHOLD_1
action 270 wait 15
action 280 cli command "show ip access-list LOOP"
action 290 set regexp_substr 0
action 300 regexp "range 20 21 \(([0-9]+) matches\)"
$_cli_result _regexp_result regexp_substr
action 310 if $regexp_substr gt $THRESHOLD_2
action 320 cli command "enable"
action 330 cli command "conf t"
action 340 cli command "interface loop100"
action 350 cli command "shut"
action 360 file puts LOGS "$TIME - LOOP DETECTED - Message sent to MC -
matches $MATCHES > $THRESHOLD_1 and $regexp_substr > $THRESHOLD_2"
action 370 wait 5
action 375 cli command "enable"
action 380 cli command "conf t"
action 390 cli command "interface loop100"
action 400 cli command "no shut"
action 410 else
action 420 file puts LOGS "$TIME - TEMPORARY LOOP : matches $MATCHES >
$THRESHOLD_1 and $regexp_substr < or = $THRESHOLD_2"
action 430 cli command "clear ip access-list counters LOOP-DETAIL"
action 440 end
action 450 else
action 460 cli command "en"
action 470 cli command "clear ip access-list counters LOOP-DETAIL"
action 480 file puts LOGS "$TIME - number of matches =
$MATCHES < $THRESHOLD_1"
action 490 end
action 500 else
action 510 cli command "clear ip access-list counters LOOP-DETAIL"
action 520 end
MC EN BOUCLE
Cette section décrit comment créer des boucles sur le MC. Voici quelques remarques importantes à garder à l'esprit :
event manage environment DISK bootflash
event manager applet LOOP-MC authorization bypass
event syslog pattern "10.100.100.[0-9]/32 reachability Up->Dow" ratelimit 60
action 100 file open LOGS $DISK:script-logs.txt a
action 110 regexp "10.100.100.[0-9]" "$_syslog_msg" _regexp_result
action 120 set BR $_regexp_result
action 130 wait 2
action 140 track read 20
action 150 if $_track_state eq "up"
action 160 cli command "enable"
action 170 cli command "show clock"
action 180 regexp "[0-9]+:[0-9]+:[0-9]+.[0-9]+
est [A-Za-z]+ [A-Za-z]+ [0-9]+ 201[0-9]"
"$_cli_result" _regexp_result
action 190 set TIME "$_regexp_result"
action 200 cli command "show pfr master traffic-class perf det
| tee /append $DISK:script-output-$_event_pub_sec.txt"
action 210 cli command "conf t"
action 220 cli command "interface loop200"
action 230 cli command "shut"
action 240 wait 10
action 250 cli command "conf t"
action 260 cli command "interface loop200"
action 270 cli command "no shut"
action 280 cli command "end"
action 290 cli command "clear pfr master *"
action 300 file puts LOGS "$TIME - LOOP DETECTED by $BR -
PfR CLEARED - see $DISK:script-output-$_event_pub_sec.txt"
action 310 syslog priority emergencies msg "LOOP DETECTED by $BR -
PfR CLEARED - see $DISK:script-output-$_event_pub_sec.txt !"
action 320 else
action 330 file puts LOGS "$TIME - REACHABILITY LOST with
$BR - REACHABILITY TO ALL BRs NOT OK - NO ACTION"
action 340 end
COLLECTEUR-BARRE
Cette section décrit comment collecter le BR. L'applet se lance dans quand un routeur BR perd l'accessibilité à Loopback200 (10.100.100.200) sur MC. Les commandes utilisées pour collecter sont répertoriées dans les actions 120, 130 et 140.
event manager environment DISK bootflash
event manager applet COLLECT-BR authorization bypass
event syslog pattern "10.100.100.200/32 reachability Up->Dow" ratelimit 45
action 100 file open LOGS $DISK:script-collect-logs.txt a
action 110 cli command "enable"
action 120 cli command "sh ip access-list LOOP-DETAIL |
tee /append $DISK:script-output-$_event_pub_sec.txt"
action 130 cli command "show route-map dynamic detail
| tee /append $DISK:script-output-$_event_pub_sec.txt"
action 140 cli command "show ip route | tee /append
$DISK:script-output-$_event_pub_sec.txt"
action 150 cli command "show clock"
action 160 regexp "[0-9]+:[0-9]+:[0-9]+.[0-9]+ CET [A-Za-z]+ [A-Za-z]+
[0-9]+ 201[0-9]" "$_cli_result" _regexp_result
action 170 set TIME "$_regexp_result"
action 180 file puts LOGS "$TIME - OUTPUTs COLLECTED -
see $DISK:script-output-$_event_pub_sec.txt"
SYSLOG-MC
Voici le syslog sur MC lorsqu'une boucle est détectée :
MC#
*Mar 8 08:52:12.529: %TRACKING-5-STATE: 1 ip route 10.100.100.1/32
reachability Up->Down
MC#
*Mar 8 08:52:16.683: %LINEPROTO-5-UPDOWN:
Line protocol on Interface Loopback200, changed state to down
*Mar 8 08:52:16.683: %LINK-5-CHANGED: Interface Loopback200,
changed state to administratively down
MC#
*Mar 8 08:52:19.531: %TRACKING-5-STATE: 1
ip route 10.100.100.1/32 reachability Down->Up
MC#
*Mar 8 08:52:24.727: %SYS-5-CONFIG_I: Configured from console by
on vty0 (EEM:LOOP-MC)
*Mar 8 08:52:24.744: %PFR_MC-1-ALERT: MC is inactive due to PfR
minimum requirements not met;
Less than two external interfaces are operational
MC#
*Mar 8 08:52:24.757: %HA_EM-0-LOG: LOOP-MC:
LOOP DETECTED by 10.100.100.1 - PfR CLEARED
- see unix:script-output-1362732732.txt !
MC#
*Mar 8 08:52:26.723: %LINEPROTO-5-UPDOWN:
Line protocol on Interface Loopback200, changed state to up
MC#
*Mar 8 08:52:26.723: %LINK-3-UPDOWN: Interface Loopback200,
changed state to up
MC#
*Mar 8 08:52:29.840: %PFR_MC-5-MC_STATUS_CHANGE: MC is UP
*Mar 8 08:52:30.549: %TRACKING-5-STATE: 2
ip route 10.100.100.2/32 reachability Up->Down
MC#
*Mar 8 08:52:37.549: %TRACKING-5-STATE: 2
ip route 10.100.100.2/32 reachability Down->Up
MC#
Révision | Date de publication | Commentaires |
---|---|---|
1.0 |
27-May-2013 |
Première publication |