Professional Documents
Culture Documents
switch
3
En este post analizaremos bpduguard como contramedida a un loop o bucle en un
switch.
Esta contramedida nos permite tambin evitar que alguien conecte un switch que
hable Spanning Tree Protocol a nuestra red.
Un loop en un switch puede provocar una tormenta de broadcast en la red.
Spanning-Tree Protocol, STP, permite tener una topologa redundada en una red de
capa2 libre de bucles lgicos.
Vamos a provocar un loop entre dos puertos para verificar que el switch est
protegiendo a la red de loops.
Vamos a analizar diferentes configuraciones para comparar el efecto del loop sobre
nuestra red.
Caso 1: El switch tiene activo portfast bpduguard a nivel global y los puertos
de acceso estn en portfast.
spanning-tree
spanning-tree
spanning-tree
spanning-tree
mode rapid-pvst
logging
portfast bpduguard default
extend system-id
Si conectamos el cable entre los puertos 13 y 14, veremos que no llega a levantar, se
enciende el led de link pero se apaga inmediatamente.
En los logs no aparece que ha levantado el puerto y aparece el evento que nos muestra
la proteccin del switch al loop.
Jan 11 12:02:44 MET: %SPANTREE-2-BLOCK_BPDUGUARD: Received BPDU on
port
FastEthernet0/14 with BPDU Guard enabled. Disabling port.
Jan 11 12:02:44 MET: %PM-4-ERR_DISABLE: bpduguard error detected on
Fa0/14
, putting Fa0/14 in err-disable state
Si miramos el estado de los puertos, veremos que los puertos no tienen link. El puerto
14 se ha puerto en error disable.
Dejando pings continuos entre equipos del mismo switch, veremos que no hemos
perdido ni un solo paquete.
Acciones a tomar:
Debemos tener configurados los switches para enviar syslog a un servidor y que ste
nos enve un correo cuando detecte los eventos que nos interesan.
Debemos tambin deshacer el loop o bucle. Una vez deshecho el bucle del cable, habr
que recuperar el error disable con un shutdown, no shutdown. Existe la posibilidad de
realizar un error-disable recovery automtico, pero para este caso, es mejor realizarlo a
mano, pues previamente deberemos deshacer el bucle del cable.
Es recomendable tener desactivados los puertos de los switches que no estn en uso en
un entorno de produccin.
En un entorno de oficinas, donde los puertos de los usuarios estn activos con
estaciones y telfonos ip, es habitual que involuntariamente los usuarios hagan loops al
reconectar cables y por tanto deben existir medidas de proteccin como bpduguard para
evitar desastres.
El error ms habitual de los usuarios es que conecten dos cables del switch ( dos
rosetas ) a los telfonos ip, uno en el puerto de switch del telfono y otro en el puerto de
pc. Esto provocaria un loop.
Caso 2: El switch tiene activo portfast bpduguard a nivel global y los puertos
de acceso no tienen activo portfast.
Atencin !
Aqu estamos sin la proteccin de portfast bpduguard sobre los puertos
En este caso, si provocamos un loop, Spanning Tree por si slo no hace magia !
Cuidado con esta prueba, se producir un reclculo de STP y dependiendo de nuestra
topologa, de la configuracin total de los switches, de la velocidad de los enlaces y de
si el loop es local o entre switches puede darse el caso de interrupcin en la red.
Veamos que sucede provocando un loop local:
FastEthernet0/13,
FastEthernet0/14,
protocol on Interface
protocol on Interface
Partimos de la configuracin del caso 1. Aqu sucede lo mismo, pero en este caso
aislar al hub/switch enemigo, tanto si tenemos portfast y globalmente spanningtree portfast bpduguard default ( caso 1 ) o si tenemos bpduguard activo a nivel de
puerto con spanning-tree bpduguard enable ( caso 3 )
por qu ? Es sencillo, al provocar un bucle en el hub/switch que nos han conectado,
provocar una retransmisin de las bpdus y la recibiremos sobre el puerto de nuestro
switch, detectar el problema y mover el uplink con el hub/switch a err-disable.
==============================================
===============================
BPDUGuard vs BPDUFilter
by drodriguez | 15 Nov, 2012 | Switch | 0 comments
Dos caractersticas de seguridad para los BPDUs de Spanning-Tree con nombres
similares pero resultados muy diferentes.
Contexto
Para intercambiar informacin entre puentes, Spanning-Tree utiliza una trama especial
llamada Bridge Protocol Data Unit (BPDU), esta tiene la informacin con la que
Spanning-Tree puede crear una topologa libre de bucles. Si tenemos un dispositivo
renegado el clsico ejemplo siendo esos pequeos switches de 8 puertos que los
usuarios les encanta colocar en las salas de conferencia enviando BPDUs a la red, esto
puede tener un efecto negativo (imagina la raz (root) de Spanning-Tree cambiando de
tu 6509-E a un pequeo switch Linksys)
Para mitigar estos riesgos, Cisco cre BPDUGuard y BPDUFilter. Vamos a ver una
tabla con los efectos de estos comandos:
BPDUGuard
BPDUFilter
Esta es la topologa que vamos a utilizar, nada complejo, un Cisco 3560 con una laptop
conectada en el puerto Fa0/1 y un Switch renegado conectado en Fa0/2 y luego en
Fa0/3.
Priority
Address
Hello Time
Aging Time
Interface
Role Sts Cost
Prio.Nbr Type
------------------- ---- --- --------- --------------------------------------Fa0/1
Desg FWD 19
128.3
P2p Edge
SW1#show spanning-tree interface fa0/1 detail | include BPDU
BPDU: sent 71, received 0
Si solo conectamos SW2 en Fa0/2, obtenemos que la raz de spanning tree root para la
Vlan1 cambio; esto es por que el switch renegado tiene un BID mas bajo:
SW1#show spanning-tree vlan 1
VLAN0001
Spanning tree enabled protocol ieee
Root ID
Priority 8193 Address 0011.924a.7500 Cost 19 Port 4
(FastEthernet0/2)
Hello Time
2 sec Max Age 20 sec Forward Delay 15 sec
Bridge ID
Priority
Address
Hello Time
Aging Time
Interface
Role Sts Cost
------------------- ---- --- ---------------------------------------Fa0/1
Desg FWD 19
Fa0/2
Root FWD 19
Prio.Nbr Type
-------128.3
128.4
P2p Edge
P2p
Esto es, por supuesto, indeseable, nadie quisiera que esto sucediera en un ambiente de
produccin. Probemos BPDUGuard y BPDUFilter.
Portfast se encuentra activo globalmente y las interfaces se encuentran en modo de
acceso con DTP apagado. Ahora voy a activar BPDUGuard globalmente (SW2 esta
todava conectado en Fa0/2):
SW1(config)#spanning-tree portfast bpduguard default
%SPANTREE-2-BLOCK_BPDUGUARD: Received BPDU on port FastEthernet0/2
with BPDU Guard enabled. Disabling port.
SW1(config)#
%PM-4-ERR_DISABLE: bpduguard error detected on Fa0/2, putting Fa0/2 in
err-disable state
SW1#show interface status err-disabled
Port
Name
Status
Vlans
Fa0/2 err-disabled bpduguard
Reason
Err-disabled
El puerto esta err-disabled y, a no ser que err-disabled recovery este configurada, tiene
que ser manualmente habilitado va shut/no shut.
Intentemos la version con BPDUGuard en la interfaz (Fa0/2 esta shutdown):
SW1(config-if)#spanning-tree bpduguard enable
SW1(config-if)#no shut
SW1(config-if)#
%LINK-3-UPDOWN: Interface FastEthernet0/2, changed state to up
%LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/2,
changed state to up
%SPANTREE-2-BLOCK_BPDUGUARD: Received BPDU on port Fa0/2 with BPDU
Guard enabled. Disabling port. %PM-4-ERR_DISABLE: bpduguard error
detected on Fa0/2, putting Fa0/2 in err-disable state
%LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/2,
changed state to down
SW1(config-if)#
%LINK-3-UPDOWN: Interface FastEthernet0/2, changed state to down
SW1(config-if)#do show interface status err-disabled
Port
Name
Status
Reason
Err-disabled
Vlans
Fa0/2 err-disabled bpduguard
Reason
Err-disabled
exclude down
Status Protocol
up
up
up
up
up up
Priority
Address
Hello Time
Aging Time
Interface
Role Sts Cost
Prio.Nbr Type
------------------- ---- --- --------- -----------------------------Fa0/1
Desg FWD 19
128.3
P2p Edge
Priority
Address
Hello Time
Aging Time
Interface
Role Sts Cost
------------------- ---- --- ---------------------------------------Fa0/1
Desg FWD 19
Fa0/2
Desg FWD 19
Prio.Nbr Type
-------128.3
128.4
P2p Edge
P2p Edge
Ahora la interfaz levanta, port fast se mantiene, los BPDUs no son enviados y los que
recibimos son ignorados. Esto basicamente ha desactivado Spanning tree en Fa0/2.
Veamos que fcil es formar un bucle en esta configuracin, todo lo que tenemos que
hacer es conectar Fa0/2 y Fa0/3, generar algo de trafico aleatorio (en nuestro caso una
peticin ARP):
SW1#show run | begin 0/2
interface FastEthernet0/2
switchport mode access
switchport nonegotiate
spanning-tree bpdufilter enable
!
interface FastEthernet0/3
switchport mode access
switchport nonegotiate
spanning-tree bpdufilter enable
!
SW1#ping 1.1.1.2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 1.1.1.2, timeout is 2 seconds:
...
Success rate is 0 percent (0/3)
SW1#sh controllers utilization
Port
Receive Utilization
Fa0/1
0
Fa0/2
93
Fa0/3
0
Fa0/4
0
Fa0/5
0
Fa0/6
0
Fa0/7
0
Fa0/8
0
Fa0/9
0
Fa0/10
0
Fa0/11
0
Fa0/12
0
Fa0/13
0
Fa0/14
0
Fa0/15
0
Fa0/16
0
Fa0/17
0
Fa0/18
0
Fa0/19
0
Fa0/20
0
Fa0/21
0
Fa0/22
0
Fa0/23
0
Fa0/24
0
Gi0/1
0
Gi0/2
0
Transmit Utilization
0
0
93
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
Total Ports : 26
Switch Receive Bandwidth Percentage Utilization : 2
Switch Transmit Bandwidth Percentage Utilization : 2
Switch Fabric Percentage Utilization : 2
SW1#sh processes cpu
| exclude 0.00
CPU utilization for five seconds: 70%/28%; one minute: 54%; five
minutes: 60%
PID Runtime(ms) Invoked uSecs
5Sec
1Min
5Min TTY Process
9 493329 371228 1328
35.94% 25.19% 26.60%
0 ARP Input
54 1726
199080 8
0.15% 0.11% 0.11%
0 Fifo Error Detec
23119743
9401
2100
1.11% 0.63% 0.71%
0 Marvell wk-a Pow
En unos cuantos segundos, podemos observar como la utilizacin en Fa0/2-3 salta hasta
niveles mximos y el CPU del switch sube hasta 70%, todo con unas inocentes tramas
de ARP, imaginar lo que sucedera en un ambiente real.
Conclusiones
Para ver que puertos estn es estado root-inconsistent podemos usar este comando:
Switch# show spanning-tree inconsistentports
BPDU Guard
Protege la integridad de los puertos que tiene activado PortFast. Si se recibe una BPDU
en un puerto donde est configurado con BPDU Guard ese puerto se pone
inmediatamente en estado errdisable. Si se deja de recibir las BPDUs el puerto sigue en
el estado errdisable. El puerto se pone en shutdown y DEBE ser activado manualmente
o automticamente usando el comando errdisable recovery.
Podemos configurarlo de forma global que solo afectar a los puertos que estn con
PortFast:
Switch(config)# spanning-tree portfast bpduguard default
Tambin se puede activar o desactivar (en caso de que est globalmente activado) en
cada puerto con el comando:
Switch(config-if)# [no] spanning-tree bpduguard enable
Aunque Loop Guard se activa en un puerto solo bloquea la Vlan por donde se dejan de
recibir BPDU no el puerto completo.
UDLD
UDLD puede configurarse de forma global (aunque solo afecta a los puertos de fibra):
Switch(config)# udld {enable | aggressive | message time seconds}
Para modo normal usaremos enable y para modo agresivo aggressive. y podemos
indicar el intervalo de los mensajes.
Usando el filtro de BPDUs para desactivar STP en un puerto.
Siempre se debe usar STP para evitar bucles, pero en ciertos casos se puede necesitar
evitar el envo o proceso de BPDUs en uno o varios puertos para ello podemos usar el
filtro de BPDUs que deshabilita el STP en dichos puertos. Por defecto, evidentemente,
est desactivado este filtro, pero podemos activarlo tanto globalmente como a nivel de
interface.
Para activarlo globalmente aunque SOLO afectar a los puertos configurados como
PortFast:
Switch(config)# spanning-tree portfast bpdufilter default
Con esto configura TODOS los puerto sPortFast con el filtro de BPDUs. Si se ven
BPDUs el puerto pierde su estado de PortFast, BPDU filtering se deshabilita y STP
toma el control por defecto. Cuando el puerto se levanta (UP) enva 10 BPDUs, si
escucha cualquier BPDU durante ese periodo, PortFast y el filtro BPDU se deshabilitan.
Para activar o desactivar ciertos puertos concretos:
Switch(config-if)# spanning-tree bpdufilter {enable | disable}
Para ver informacin detallada de las razones del estado inconsistente de un puerto:
Switch# show spanning-tree interface type mod/num [detail]
Muestra los estados globales de BPDU Guard, BPDU filter y Loop Guard
Vuelve a habilitar los puertos que UDLD en modo agresivo puso en errdisable:
Switch# udld reset