EEM and Tcl Lab.

Objetivo: Detectar el inicio y finalización determinados tráficos mediante ACLs y scripts EEM, y generar cambios de configuración que desvíen esos tráficos por enlaces secundarios, mediante el uso de scripts TCL.

Topología:

Esta topología tiene como objetivos:

– El tráfico de S1 y S2 hacia el Branch 1 y el retorno pase a través del Main link.
– El tráfico de S1 y S2 hacia el Branch 2 y el retorno pase a través del Backup link.

Este laboratorio tiene los siguientes objetivos:
– Detectar que se inicio una comunicación específica hacia el servidor S2 (en este caso una conexión ssh)
– Eliminar el PBR inicial en RA y RB.
– Cambiar en RB el PBR de manera que solo el tráfico de Branch 1 y 2 hacia el servidor S2 se vaya por el Backup link.
– Cambiar en RA el PBR de manera que solo el tráfico del servidor S2 hacia Branch1 y 2 se vaya por el Backup link.
– Detectar el fin de la comunicación específica hacia el servidor S2 y deshacer los cambios anteriores y restablecer el PBR inicial en RA y RB.

Solución en RB:
– Hacer un estudio de tráfico para ver que tipos de pkts y parámetros señalan el inicio y fin de la conexión ssh.
– Contruir una ACL que aplicada en un lugar determinado pueda detectar el inicio y fin de la conexión.
– Crear un sript EEM que chequee la ACL y cuando esta detecte el inicio de la conexión, generar cambios en la configuración y llamar a un script tcl (en este lab el script tcl solo tiene comandos de configuración del cli que hacen el cambio hacia el PBR que debe estar activo cuando inicia la comunicación específica). Este script también tiene que activar al script que chequea el fin de la conexión, desactivarse el mismo y tumbar una intefaz loopback que solo sirve de señalización a RA para saber que tiene que cambiar su PBR.
– Crear un sript EEM que chequee la ACL y cuando esta detecte el fin de la conexión, generar cambios en la configuración y llamar a un script tcl (en este lab el script tcl solo tiene comandos de configuración del cli que hacen el cambio hacia el PBR que debe estar activo cuando no hay comunicación específica ).  Este script también debe que activar al script que chequea el inicio de la conexión, desactivarse el mismo, reiniciar los contadores de la ACL y levantar la interfaz loopback que le dice a RA que cambie su PBR hacia la configuración original.

Solución en RA:
– Crear un sla y un track que sigan el estado de la dirección ip de la loopback 0 de RB.
– Crear un script EEM que se active cuando el track cambie a down y que haga el cambio al PBR que debe estar activo cuando inicia la comunicación específica.
– Crear un script EEM que se active cuando el track cambie a up y que haga el cambio al PBR que debe estar activo cuando no hay comunicación específica.

Configuraciones:

RA
!
hostname RA
!
track 1 ip sla 1 reachability
!
interface Loopback0
description Loopback0
ip address 10.1.27.1 255.255.255.255
!
interface FastEthernet0/0
ip address 10.1.1.254 255.255.255.0
ip policy route-map PBR
!
interface FastEthernet0/2
description Main
ip address 10.1.18.1 255.255.255.252
!
interface FastEthernet0/3
description Backup
bandwidth 1000
ip address 10.1.18.5 255.255.255.252
!
router eigrp 1
network 10.0.0.0
!
ip access-list extended Branch1
permit ip any 10.1.136.0 0.0.0.255
ip access-list extended Branch2
permit ip any 10.1.137.0 0.0.0.255
ip access-list extended S2
permit ip host 10.1.1.2 any
!
ip sla 1
icmp-echo 10.1.27.2
frequency 10
ip sla schedule 1 life forever start-time now
!
route-map PBR permit 10
match ip address Branch2
set ip next-hop 10.1.18.6
!
event manager applet connect-init
event track 1 state down
action 100 cli command “enable”
action 101 cli command “tclsh nvram:cora.tcl”
action 102 cli command “end”
event manager applet connect-fin
event track 1 state up
action 100 cli command “enable”
action 101 cli command “tclsh nvram:disra.tcl”
action 102 cli command “end”
!

RB
!
hostname RB
!
/Interface que sirve para alertar a RA del inicio y final de la comunicación específica.
interface Loopback0
description Loopback0
ip address 10.1.27.2 255.255.255.255
!
interface FastEthernet0/0
description Main
/Enlace principal con RA
ip address 10.1.18.2 255.255.255.252
/ACL que sirve para detectar el inicio y fin de la comunicacion específica.
ip access-group DETECT in
!
interface FastEthernet0/1
description Backup
/Enlace backup con RA
bandwidth 1000
ip address 10.1.18.6 255.255.255.252
/ACL que sirve para detectar el inicio y fin de la comunicacion específica.
ip access-group DETECT in
!
interface FastEthernet0/2
description Branch1
ip address 10.1.136.254 255.255.255.0
/PBR que cumple con los objetivos iniciales y que debe estar activo siempre y cuando no haya comunicación específica.
ip policy route-map PBR
!
interface FastEthernet0/3
description Branch2
ip address 10.1.137.254 255.255.255.0
/PBR que cumple con los objetivos iniciales y que debe estar activo siempre y cuando no haya comunicación específica.
ip policy route-map PBR
!
router eigrp 1
network 10.0.0.0
!
ip access-list extended Branch1
permit ip 10.1.136.0 0.0.0.255 any
ip access-list extended Branch2
deny   ip 10.1.137.0 0.0.0.255 10.1.136.0 0.0.0.255
permit ip 10.1.137.0 0.0.0.255 any
/ACL para detectar el inicio y final de la comunicación específico.
ip access-list extended DETECT
permit tcp host 10.1.1.2 eq 22 10.1.136.0 0.0.1.255 match-all +ack +syn log
permit tcp host 10.1.1.2 eq 22 10.1.136.0 0.0.1.255 match-all +ack +fin log
permit ip any any
ip access-list extended SSH
permit ip 10.1.136.0 0.0.1.255 host 10.1.1.2
!
/PBR que cumple con los objetivos iniciales y que debe estar activo siempre y cuando no haya comunicación específica.
route-map PBR permit 10
match ip address Branch2
set ip next-hop 10.1.18.5
!
/EEM Script para detectar el inicio de la conexión específica.
event manager applet ACL-CHECK-syn
/Cada 10 segundos se ejecuta el script.
event timer watchdog time 10
action 100 cli command “en”
/Obtener el resultado y los hits de la ACL que detecta el inicio y fin de la conexión específica.
action 101 cli command “show ip access-list DETECT”
action 102 set value “0”
/Buscar dentro del resultado del comando una expresión que se corresponda con “syn log X match” y guardar el número de hits en la variable value.
action 103 regexp “syn log \(([0-9]+) match\)” “$_cli_result” junk value
/Si existe un resultado en la busqueda de la expresión regular continua.
action 104 if $_regexp_result eq “1”
/Si los hits son mayores que cero continua.
action 105  if $value gt “0”
action 106   puts “inicio de la conexion”
action 107   cli command “conf t”
/Activa el script que detecta el fin de la comunicación específica.
action 108   cli command “event manager applet ACL-CHECK-fin”
action 109   cli command “event timer watchdog time 10”
/Desactivar la ejecución periódica de este script.
action 110   cli command “event manager applet ACL-CHECK-syn”
action 111   cli command “event none”
action 112   cli command “end”
/Ejecutar el script Tcl que cambia el PBR.
action 113   cli command “tclsh nvram:connect.tcl”
action 114  else
action 115   cli command “clear access-list counters DETECT”
action 116  end
action 117 else
action 118  puts “nada aun”
action 119 end
event manager applet ACL-CHECK-fin
/EEM Script para detectar el final de la conexión específica.
event none
action 100 cli command “en”
/Obtener el resultado y los hits de la ACL que detecta el inicio y fin de la conexión específica.
action 101 cli command “show ip access-list DETECT”
action 102 set value2 “0”
/Buscar dentro del resultado del comando una expresión que se corresponda con “fin log X match” y guardar el número de hits en la variable value2.
action 103 regexp “fin log \(([0-9]+) match\)” “$_cli_result” junk2 value2
/Si existe un resultado en la busqueda de la expresión regular continua.
action 104 if $_regexp_result eq “1”
/Si los hits son mayores que cero continua.
action 105  if $value2 gt “0”
action 106   puts “fin de la conexion”
action 107   cli command “conf t”
/Activar el script que detecta el inicia de la comunicación específica.
action 108   cli command “event manager applet ACL-CHECK-syn”
action 109   cli command “event timer watchdog time 10”
/Desactivar la ejecución periódica de este script.
action 110   cli command “event manager applet ACL-CHECK-fin”
action 111   cli command “event none”
action 112   cli command “end”
/Limpiar los hits de la ACL y resetearla.
action 113   cli command “clear access-list counters DETECT”
/Ejecutar el script Tcl que cambia el PBR.
action 114   cli command “tclsh nvram:disconnect.tcl”
action 115  else
action 116   cli command “clear access-list counters DETECT”
action 117  end
action 118 else
action 119  puts “todavia conectado”
action 120 end
!

Connect.tcl
typeahead “y”
ios_config “interface loopback 0” “shutdown”
ios_config “route-map PBR permit 10” “match ip address SSH” “no match ip address Branch2”
puts [exec “sh route-map”]
puts “script ends”

Disconnect.tcl
typeahead “y”
ios_config “interface loopback 0” “no shutdown”
ios_config “route-map PBR permit 10” “match ip address Branch2” “no match ip address SSH”
puts [exec “sh route-map”]
puts “script ends”

Cora.tcl
typeahead “y”
ios_config “route-map PBR permit 10” “match ip address S2” “no match ip address Branch2”
puts [exec “sh route-map”]
puts “script ends”

Disra.tcl
typeahead “y”
ios_config “route-map PBR permit 10” “match ip address Branch2” “no match ip address S2”
puts [exec “sh route-map”]
puts “script ends”
Comprobación.
Antes del inicio de la conexión ssh entre PC2 y S2:

*Jun 14 08:18:53.779: %HA_EM-6-LOG: ACL-CHECK-syn: nada aun

RB#
RB#sh route-map
route-map PBR, permit, sequence 10
Match clauses:
ip address (access-lists): Branch2
Set clauses:
ip next-hop 10.1.18.5
Policy routing matches: 734 packets, 61396 bytes
RB#
*Jun 14 08:19:04.194: %HA_EM-6-LOG: ACL-CHECK-syn: nada aun

Branch1#traceroute 10.1.1.2
Type escape sequence to abort.
Tracing the route to 10.1.1.2
VRF info: (vrf in name/id, vrf out name/id)
1 10.1.136.254 1 msec 1 msec 0 msec
2 10.1.18.1 1 msec 1 msec 1 msec
3 10.1.1.2 1 msec *  2 msec

S2#traceroute 10.1.136.1
Type escape sequence to abort.
Tracing the route to 10.1.136.1
VRF info: (vrf in name/id, vrf out name/id)
1 10.1.1.254 1 msec 0 msec 1 msec
2 10.1.18.2 1 msec 1 msec 12 msec
3 10.1.136.1 6 msec *  1 msec

RB#
*Jun 14 08:21:24.016: %HA_EM-6-LOG: ACL-CHECK-syn: nada aún
RB#
*Jun 14 08:21:29.804: %SEC-6-IPACCESSLOGP: list DETECT permitted tcp 10.1.1.2(22) -> 10.1.137.1(24739), 1 packet
RB#
*Jun 14 08:21:34.221: %HA_EM-6-LOG: ACL-CHECK-syn: inicio de la conexión
RB#
*Jun 14 08:21:35.389: %SYS-5-CONFIG_I: Configured from console by  on vty0 (EEM:ACL-CHECK-syn)
*Jun 14 08:21:35.597: %SYS-5-CONFIG_I: Configured from console by  on vty1
*Jun 14 08:21:35.598: %SYS-5-CONFIG_I: Configured from console by  on vty1
RB#
*Jun 14 08:21:37.626: %LINK-5-CHANGED: Interface Loopback0, changed state to administratively down
*Jun 14 08:21:38.633: %LINEPROTO-5-UPDOWN: Line protocol on Interface Loopback0, changed state to down
RB#sh route-map
route-map PBR, permit, sequence 10
Match clauses:
ip address (access-lists): SSH
Set clauses:
ip next-hop 10.1.18.5
Policy routing matches: 766 packets, 64346 bytes
RB#
*Jun 14 08:21:45.455: %HA_EM-6-LOG: ACL-CHECK-fin: todavia conectado
Branch1#traceroute 10.1.1.2
Type escape sequence to abort.
Tracing the route to 10.1.1.2
VRF info: (vrf in name/id, vrf out name/id)
1 10.1.136.254 1 msec 1 msec 0 msec
2 10.1.18.5 1 msec 0 msec 2 msec
3 10.1.1.2 1 msec *  1 msec

S2#traceroute 10.1.136.1
Type escape sequence to abort.
Tracing the route to 10.1.136.1
VRF info: (vrf in name/id, vrf out name/id)
1 10.1.1.254 1 msec 1 msec 0 msec
2 10.1.18.6 2 msec 1 msec 1 msec
3 10.1.136.1 1 msec *  118 msec

Advertisements
Posted in EEM

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s